From d7a8440e11ed41d658470e5e5201a02b53c80257 Mon Sep 17 00:00:00 2001 From: Tim Schubert Date: Wed, 15 Aug 2018 12:13:01 +0200 Subject: [PATCH] Rewrite plagiates and deadlines functions to use fork relationship instead of groups. This should be more reliable if another group structure is desired later. (e.g. student projects in the user namespace of the each student) --- abgabesystem.py | 71 +++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/abgabesystem.py b/abgabesystem.py index dbcd30d..2480878 100644 --- a/abgabesystem.py +++ b/abgabesystem.py @@ -194,48 +194,42 @@ def deadline(gl, args): """Checks deadlines for course and triggers deadline if it is reached""" deadline_name = args.tag_name - course = args.course - group = None - for g in gl.groups.list(search=course.name): - if g.name == args.course: - group = g - group = gl.groups.get(group.id) - for project in course.group.projects.list(all=True): - project = gl.projects.get(project.id) - print(project.name) - try: - create_tag(project, deadline_name, 'master') - except gitlab.exceptions.GitlabCreateError as e: - print(e) + try: + reference = gl.projects.get(args.reference, lazy=True) + + for fork in reference.forks.list(): + project = gl.projects.get(fork.id, lazy=True) + try: + create_tag(project, deadline_name, 'master') + except gitlab.exceptions.GitlabCreateError as e: + print(e.error_message) + + except gitlab.exceptions.GitlabGetError as e: + print(e.error_message) def plagiates(gl, args): - """Runs the plagiarism checker (JPlag) for the solutions and a given tag - name + """Runs the plagiarism checker (JPlag) for the solutions with a certain tag """ - groups = gl.groups.list(search=args.course) tag = args.tag_name - print(groups) - if len(groups) == 0: - pass - for g in groups: - if g.name == args.course: - try: - os.mkdir('repos') - except os.FileExistsError as e: - print(e) - os.chdir('repos') - for project in g.projects.list(all=True): - project = gl.projects.get(project.id, lazy=True) - try: - subprocess.run( - ['git', 'clone', '--branch', tag, project.ssh_url_to_repo]) - print(e) + try: + reference = gl.projects.get(args.reference, lazy=True) + try: + os.mkdir('solutions') + except os.FileExistsError as e: + print(e) + os.chdir('solutions') - os.chdir('..') - subprocess.run( - ['java', '-jar', '/app/jplag.jar', '-s', 'repos', '-p', 'java', '-r', 'results', '-bc', args.reference, '-l', 'java17']) + for fork in reference.forks.list(): + project = gl.projects.get(fork.id, lazy=True) + try: + subprocess.run( + ['git', 'clone', '--branch', tag, project.ssh_url_to_repo, project.path_with_namespace]) + os.chdir('..') + + subprocess.run( + ['java', '-jar', args.jplag_jar, '-s', 'solutions', '-p', 'java', '-r', 'results', '-bc', args.reference, '-l', 'java17']) def course(gl, args): @@ -284,13 +278,16 @@ if __name__ == '__main__': 'deadline', description='set tags at deadline') deadline_parser.set_defaults(func=deadline) - deadline_parser.add_argument('tag_name') + deadline_parser.add_argument('-t', '--tag-name', dest='tag_name') + deadline_parser.add_argument('-r', '--reference', dest='reference') plagiates_parser = subparsers.add_parser( 'plagiates', description='set tags at plagiates') plagiates_parser.set_defaults(func=plagiates) - plagiates_parser.add_argument('tag_name') + plagiates_parser.add_argument('-t', '--tag-name', dest='tag_name') + plagiates_parser.add_argument('-r', '--reference', dest='reference') + plagiates_parser.add_argument('-j', '--jplag-jar', dest='jplag_jar') args = parser.parse_args()