Skip to content

Commit 97fb85f

Browse files
committed
Ensure submissions are compared in chronological order
Fixes #1497
1 parent 5cd4b60 commit 97fb85f

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

exercise/views.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -591,12 +591,23 @@ def get(self, request, *args, **kwargs):
591591
# Compare to another submission.
592592
compare_to = request.GET.get("compare_to", None)
593593
if compare_to and self.exercise.course_instance.is_course_staff(request.user):
594-
compared_data = (
595-
self.get_model_answer_file_data()
596-
if compare_to == "model"
597-
else self.get_compared_submission_file_data(compare_to)
598-
)
599-
submitted_data = bytedata.decode('utf-8', 'ignore')
594+
if compare_to == "model":
595+
compared_data = self.get_model_answer_file_data()
596+
submitted_data = bytedata.decode('utf-8', 'ignore')
597+
else:
598+
compared_submission_id = int(compare_to)
599+
compared_submission = get_object_or_404(
600+
Submission,
601+
id=compared_submission_id,
602+
exercise=self.exercise
603+
)
604+
compared_data = self.get_compared_submission_file_data(compare_to)
605+
submitted_data = bytedata.decode('utf-8', 'ignore')
606+
607+
# Ensure chronological order: earlier submission first, later submission second
608+
if compared_submission.submission_time > self.submission.submission_time:
609+
# Swap if compared submission is newer than current submission
610+
compared_data, submitted_data = submitted_data, compared_data
600611

601612
if request.GET.get('ignore_trailing_whitespace', 'no') == 'yes':
602613
compared_data = self.strip_trailing_whitespace(compared_data)

0 commit comments

Comments
 (0)