@@ -58,8 +58,11 @@ def __init__(self, args):
5858
5959 if not self .args .gitlab_repo :
6060 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+
6366 self .args .gitlab_repo = parse .quote_plus (self .args .gitlab_repo )
6467
6568 self .github = {
@@ -75,6 +78,7 @@ def __init__(self, args):
7578 'host' : self .args .gitlab_url ,
7679 'name' : self .args .gitlab_name ,
7780 'namespace' : self .args .gitlab_namespace ,
81+ 'group' : None ,
7882 'url' : self .args .gitlab_url + "/api/v4" ,
7983 'repo' : self .args .gitlab_repo ,
8084 'token' : self .args .gitlab_token ,
@@ -89,6 +93,14 @@ def __init__(self, args):
8993 logging .getLogger ("urllib3" ).setLevel (level )
9094 logging .getLogger ('github2gitlab' ).setLevel (level )
9195
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+
92104 self .tmpdir = "/tmp"
93105
94106 @staticmethod
@@ -130,6 +142,9 @@ def get_parser():
130142 parser .add_argument ('--clean' , action = 'store_const' ,
131143 const = True ,
132144 help = 'Remove the repo after sync' )
145+ parser .add_argument ('--visibility' ,
146+ help = 'Visbility of created repos (public, internal, private)' ,
147+ default = 'public' )
133148 return parser
134149
135150 @staticmethod
@@ -288,15 +303,21 @@ def add_project(self):
288303 g = self .gitlab
289304 url = g ['url' ] + "/projects/" + g ['repo' ]
290305 query = {'private_token' : g ['token' ]}
306+ if g ['group_id' ]:
307+ query ['group_id' ] = g ['group_id' ]
308+
291309 if (requests .get (url , params = query ).status_code == requests .codes .ok ):
292310 log .debug ("project " + url + " already exists" )
293311 return None
294312 else :
295- log .info ("add project " + g ['repo' ])
296313 url = g ['url' ] + "/projects"
297- query ['public' ] = 'true'
298- query ['namespace' ] = g ['namespace' ]
314+ query ['visibility' ] = self .args .visibility
299315 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' ])
300321 result = requests .post (url , params = query )
301322 if result .status_code != requests .codes .created :
302323 raise ValueError (result .text )
0 commit comments