@@ -58,8 +58,11 @@ def __init__(self, args):
58
58
59
59
if not self .args .gitlab_repo :
60
60
self .args .gitlab_repo = self .args .github_repo
61
- (self .args .gitlab_namespace ,
62
- self .args .gitlab_name ) = self .args .gitlab_repo .split ('/' )
61
+
62
+ repo_parts = self .args .gitlab_repo .split ('/' )
63
+ self .args .gitlab_name = repo_parts .pop ()
64
+ self .args .gitlab_namespace = '/' .join (repo_parts )
65
+
63
66
self .args .gitlab_repo = parse .quote_plus (self .args .gitlab_repo )
64
67
65
68
self .github = {
@@ -75,6 +78,7 @@ def __init__(self, args):
75
78
'host' : self .args .gitlab_url ,
76
79
'name' : self .args .gitlab_name ,
77
80
'namespace' : self .args .gitlab_namespace ,
81
+ 'group' : None ,
78
82
'url' : self .args .gitlab_url + "/api/v4" ,
79
83
'repo' : self .args .gitlab_repo ,
80
84
'token' : self .args .gitlab_token ,
@@ -89,6 +93,14 @@ def __init__(self, args):
89
93
logging .getLogger ("urllib3" ).setLevel (level )
90
94
logging .getLogger ('github2gitlab' ).setLevel (level )
91
95
96
+ g = self .gitlab
97
+ url = g ['url' ] + "/groups"
98
+ query = {'private_token' : g ['token' ], 'all_available' : 'true' , 'per_page' : 10000 }
99
+ groups = requests .get (url , params = query ).json ()
100
+ matches = list (filter (lambda group : group ['full_path' ] == g ['namespace' ].lower (), groups ))
101
+ if any (matches ):
102
+ g ['group_id' ] = matches [0 ]['id' ]
103
+
92
104
self .tmpdir = "/tmp"
93
105
94
106
@staticmethod
@@ -130,6 +142,9 @@ def get_parser():
130
142
parser .add_argument ('--clean' , action = 'store_const' ,
131
143
const = True ,
132
144
help = 'Remove the repo after sync' )
145
+ parser .add_argument ('--visibility' ,
146
+ help = 'Visbility of created repos (public, internal, private)' ,
147
+ default = 'public' )
133
148
return parser
134
149
135
150
@staticmethod
@@ -288,15 +303,21 @@ def add_project(self):
288
303
g = self .gitlab
289
304
url = g ['url' ] + "/projects/" + g ['repo' ]
290
305
query = {'private_token' : g ['token' ]}
306
+ if g ['group_id' ]:
307
+ query ['group_id' ] = g ['group_id' ]
308
+
291
309
if (requests .get (url , params = query ).status_code == requests .codes .ok ):
292
310
log .debug ("project " + url + " already exists" )
293
311
return None
294
312
else :
295
- log .info ("add project " + g ['repo' ])
296
313
url = g ['url' ] + "/projects"
297
- query ['public' ] = 'true'
298
- query ['namespace' ] = g ['namespace' ]
314
+ query ['visibility' ] = self .args .visibility
299
315
query ['name' ] = g ['name' ]
316
+ if g ['group_id' ]:
317
+ query ['namespace_id' ] = g ['group_id' ]
318
+ else :
319
+ query ['namespace' ] = g ['namespace' ]
320
+ log .info ("add project " + g ['repo' ])
300
321
result = requests .post (url , params = query )
301
322
if result .status_code != requests .codes .created :
302
323
raise ValueError (result .text )
0 commit comments