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)
This commit is contained in:
Tim Schubert 2018-08-15 12:13:01 +02:00
parent 48b4e00286
commit d7a8440e11

View file

@ -194,48 +194,42 @@ def deadline(gl, args):
"""Checks deadlines for course and triggers deadline if it is reached""" """Checks deadlines for course and triggers deadline if it is reached"""
deadline_name = args.tag_name deadline_name = args.tag_name
course = args.course try:
group = None reference = gl.projects.get(args.reference, lazy=True)
for g in gl.groups.list(search=course.name):
if g.name == args.course: for fork in reference.forks.list():
group = g project = gl.projects.get(fork.id, lazy=True)
group = gl.groups.get(group.id) try:
for project in course.group.projects.list(all=True): create_tag(project, deadline_name, 'master')
project = gl.projects.get(project.id) except gitlab.exceptions.GitlabCreateError as e:
print(project.name) print(e.error_message)
try:
create_tag(project, deadline_name, 'master') except gitlab.exceptions.GitlabGetError as e:
except gitlab.exceptions.GitlabCreateError as e: print(e.error_message)
print(e)
def plagiates(gl, args): def plagiates(gl, args):
"""Runs the plagiarism checker (JPlag) for the solutions and a given tag """Runs the plagiarism checker (JPlag) for the solutions with a certain tag
name
""" """
groups = gl.groups.list(search=args.course)
tag = args.tag_name tag = args.tag_name
print(groups) try:
if len(groups) == 0: reference = gl.projects.get(args.reference, lazy=True)
pass try:
for g in groups: os.mkdir('solutions')
if g.name == args.course: except os.FileExistsError as e:
try: print(e)
os.mkdir('repos') os.chdir('solutions')
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)
os.chdir('..') for fork in reference.forks.list():
subprocess.run( project = gl.projects.get(fork.id, lazy=True)
['java', '-jar', '/app/jplag.jar', '-s', 'repos', '-p', 'java', '-r', 'results', '-bc', args.reference, '-l', 'java17']) 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): def course(gl, args):
@ -284,13 +278,16 @@ if __name__ == '__main__':
'deadline', 'deadline',
description='set tags at deadline') description='set tags at deadline')
deadline_parser.set_defaults(func=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_parser = subparsers.add_parser(
'plagiates', 'plagiates',
description='set tags at plagiates') description='set tags at plagiates')
plagiates_parser.set_defaults(func=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() args = parser.parse_args()