@@ -3,36 +3,85 @@ namespace :gitlab do
3
3
task enable_namespaces : :environment do
4
4
warn_user_is_not_gitlab
5
5
6
- print "Generate usernames for users without one: "
6
+ migrate_user_namespaces
7
+ migrate_groups
8
+ migrate_projects
7
9
10
+ puts "Rebuild Gitolite ... "
11
+ gitolite = Gitlab ::Gitolite . new
12
+ gitolite . update_repositories ( Project . where ( 'namespace_id IS NOT NULL' ) )
13
+ puts "... #{ "done" . green } "
14
+ end
15
+
16
+ def migrate_user_namespaces
17
+ puts "\n Generate usernames for users without one: " . blue
8
18
User . find_each ( batch_size : 500 ) do |user |
9
- next if user . namespace
19
+ if user . namespace
20
+ print '-' . cyan
21
+ next
22
+ end
10
23
11
- User . transaction do
12
- username = user . email . match ( /^[^@]*/ ) [ 0 ]
13
- if user . update_attributes! ( username : username )
24
+ username = if user . username . present?
25
+ # if user already has username filled
26
+ user . username
27
+ else
28
+ build_username ( user )
29
+ end
30
+
31
+ begin
32
+ User . transaction do
33
+ user . update_attributes! ( username : username )
14
34
print '.' . green
15
- else
16
- print 'F' . red
17
35
end
36
+ rescue
37
+ print 'F' . red
18
38
end
19
39
end
40
+ puts "\n Done"
41
+ end
42
+
43
+ def build_username ( user )
44
+ username = nil
45
+
46
+ # generate username
47
+ username = user . email . match ( /^[^@]*/ ) [ 0 ]
48
+ username . gsub! ( "+" , "." )
49
+
50
+ # return username if no mathes
51
+ return username unless User . find_by_username ( username )
52
+
53
+ # look for same username
54
+ ( 1 ..10 ) . each do |i |
55
+ suffixed_username = "#{ username } #{ i } "
56
+
57
+ return suffixed_username unless User . find_by_username ( suffixed_username )
58
+ end
59
+ end
20
60
21
- puts ""
22
- print "Create directories for groups: "
61
+ def migrate_groups
62
+ puts " \n Create directories for groups: ". blue
23
63
24
64
Group . find_each ( batch_size : 500 ) do |group |
25
- if group . ensure_dir_exist
26
- print '.' . green
27
- else
65
+ begin
66
+ if group . dir_exists?
67
+ print '-' . cyan
68
+ else
69
+ if group . ensure_dir_exist
70
+ print '.' . green
71
+ else
72
+ print 'F' . red
73
+ end
74
+ end
75
+ rescue
28
76
print 'F' . red
29
77
end
30
78
end
31
- puts ""
79
+ puts "\n Done"
80
+ end
32
81
82
+ def migrate_projects
33
83
git_path = Gitlab . config . gitolite . repos_path
34
- puts ""
35
- puts "Move projects in groups into respective directories ... "
84
+ puts "\n Move projects in groups into respective directories ... " . blue
36
85
Project . where ( 'namespace_id IS NOT NULL' ) . find_each ( batch_size : 500 ) do |project |
37
86
next unless project . group
38
87
@@ -62,10 +111,6 @@ namespace :gitlab do
62
111
end
63
112
end
64
113
65
- puts ""
66
- puts "Rebuild Gitolite ... "
67
- gitolite = Gitlab ::Gitolite . new
68
- gitolite . update_repositories ( Project . where ( 'namespace_id IS NOT NULL' ) )
69
- puts "... #{ "done" . green } "
114
+ puts "\n Done"
70
115
end
71
116
end
0 commit comments