diff --git a/script_git_for_groups.py b/script_git_for_groups.py new file mode 100755 index 0000000000000000000000000000000000000000..e34eb23969417d38e2812bfb5025914b31632649 --- /dev/null +++ b/script_git_for_groups.py @@ -0,0 +1,122 @@ +#!/usr/bin/python3 + +import requests as r +import json as j +import sys as s + +SECRET_KEY = None # Supply in arguments +BASE_URL = 'https://gitlab.cs.umd.edu/' + +GROUP_ID = 4092 #FILL IN + +DEFAULT_HEADERS = { + 'user-agent': 'bulk-repo-create', + 'Content-Type': 'application/json', + 'Private-Token' : SECRET_KEY +} + +def id_from_name (name): + rq = r.get ( + BASE_URL + "api/v4/users/", + headers = DEFAULT_HEADERS, + params = { + 'username' : name + } + ) + res = j.loads(rq.text) + if type(res) == list: + if len(res) == 0: + return None + else: + return res[0]['id'] + else: + raise TypeError + +# Returns project id, or none if project cannot be created +def create_project (proj_name): + rq = r.post ( + BASE_URL + "api/v4/projects/", + headers = DEFAULT_HEADERS, + data = j.dumps( + { + 'name' : proj_name, + 'visibility' : 'private' + } + ) + ) + res = j.loads(rq.text) + try: + return res['id'] + except KeyError: + return None + +# adds user with user_id to project with project_id with permission permission +# 30 for developer 40 for maintainer +# return true if successful false if not +def add_to_project(project_id, user_id, permission): + rq = r.post ( + BASE_URL + "api/v4/projects/" + str(project_id) + "/members", + headers = DEFAULT_HEADERS, + data = j.dumps( + { + 'id' : project_id, + 'user_id' : user_id, + 'access_level': permission #Developer + } + ) + ) + res = j.loads(rq.text) + try: + return res['id'] == user_id + except KeyError: + return False + +def transfer_to_group(project_id, group_id): + rq = r.put ( + BASE_URL + "api/v4/projects/" + str(project_id) + "/transfer", + headers = DEFAULT_HEADERS, + data = j.dumps( + { + 'namespace' : group_id + } + ) + ) + res = j.loads(rq.text) + try: + return res['id'] == project_id + except KeyError: + return False + +if __name__ == "__main__": + if len(s.argv) != 4: + print("Usage: <input list> <output list> <secret key>") + else: + SECRET_KEY = s.argv[3] + DEFAULT_HEADERS['Private-Token'] = SECRET_KEY + f = open(s.argv[1], 'r') + groups = f.readlines() + f.close() + + f = open(s.argv[2], 'w') + + group_num = 1 + + for group in groups: + names = group.split(",") + # create project + proj_id = create_project("cmsc417-s2020-group" + str(group_num)) + # transfer project to group + transfer_to_group(proj_id, GROUP_ID) + print(names) + for name in names: + # add name to project + correct_name = name.strip() + print(correct_name) + name_id = id_from_name(correct_name) + if (name_id == None): + f.write(correct_name + "\n") + else: + if not add_to_project(proj_id, name_id, 30): + f.write(correct_name + "\n") + group_num += 1 + f.close()