Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
9302fbd0
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9302fbd0
编写于
1月 16, 2017
作者:
J
James Lopez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cope with namespace duplicated paths in any storage
上级
a9402708
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
14 deletion
+18
-14
db/migrate/20161226122833_remove_dot_git_from_usernames.rb
db/migrate/20161226122833_remove_dot_git_from_usernames.rb
+18
-14
未找到文件。
db/migrate/20161226122833_remove_dot_git_from_usernames.rb
浏览文件 @
9302fbd0
...
...
@@ -14,10 +14,9 @@ class RemoveDotGitFromUsernames < ActiveRecord::Migration
namespace_id
=
user
[
'namespace_id'
]
path_was
=
user
[
'username'
]
path_was_wildcard
=
quote_string
(
"
#{
path_was
}
/%"
)
path
=
quote_string
(
new_path
(
path_was
))
# It's possible for `move_namespace` to return nil if the given namespace
# has nothing on storage (i.e., they never made a project).
path
=
move_namespace
(
namespace_id
,
path_was
)
||
new_path
(
path_was
)
move_namespace
(
namespace_id
,
path_was
,
path
)
begin
execute
"UPDATE routes SET path = '
#{
path
}
' WHERE source_type = 'Namespace' AND source_id =
#{
namespace_id
}
"
...
...
@@ -30,6 +29,8 @@ class RemoveDotGitFromUsernames < ActiveRecord::Migration
end
rescue
=>
e
say
(
"Couldn't update routes for path
#{
path_was
}
to
#{
path
}
"
)
# Move namespace back
move_namespace
(
namespace_id
,
path
,
path_was
)
raise
e
end
...
...
@@ -58,36 +59,39 @@ class RemoveDotGitFromUsernames < ActiveRecord::Migration
# Accepts invalid path like test.git and returns test_git or
# test_git1 if test_git already taken
def
new_path
(
path
,
repository_storage_path
=
nil
)
def
new_path
(
path
)
# To stay closer with original name and reduce risk of duplicates
# we rename suffix instead of removing it
path
=
path
.
sub
(
/\.git\z/
,
'_git'
)
counter
=
0
base
=
path
check_routes
(
path
.
dup
,
0
,
path
)
end
def
check_routes
(
base
,
counter
,
path
)
Gitlab
.
config
.
repositories
.
storages
.
each_with_index
do
|
(
_key
,
storage
),
index
|
if
route_exists?
(
path
)
||
path_exists?
(
path
,
storage
)
counter
+=
1
path
=
"
#{
base
}#{
counter
}
"
while
route_exists?
(
path
)
||
path_exists?
(
path
,
repository_storage_path
)
counter
+=
1
path
=
"
#{
base
}#{
counter
}
"
# Start again unless this is the first storage,
# to make sure no other storages contain the new path already.
return
check_route
(
base
,
counter
,
path
)
unless
index
.
zero?
end
end
path
end
def
move_namespace
(
namespace_id
,
path_was
)
def
move_namespace
(
namespace_id
,
path_was
,
path
)
repository_storage_paths
=
select_all
(
"SELECT distinct(repository_storage) FROM projects WHERE namespace_id =
#{
namespace_id
}
"
).
map
do
|
row
|
Gitlab
.
config
.
repositories
.
storages
[
row
[
'repository_storage'
]]
end
.
compact
path
=
nil
# Move the namespace directory in all storages paths used by member projects
repository_storage_paths
.
each
do
|
repository_storage_path
|
# Ensure old directory exists before moving it
gitlab_shell
.
add_namespace
(
repository_storage_path
,
path_was
)
path
=
quote_string
(
new_path
(
path_was
,
repository_storage_path
))
unless
gitlab_shell
.
mv_namespace
(
repository_storage_path
,
path_was
,
path
)
Rails
.
logger
.
error
"Exception moving path
#{
repository_storage_path
}
from
#{
path_was
}
to
#{
path
}
"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录