Skip to content

Commit 0843a50

Browse files
committed
[branch-bender] Update verify
1 parent dc4ad47 commit 0843a50

File tree

1 file changed

+26
-35
lines changed

1 file changed

+26
-35
lines changed

branch_bender/verify.py

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@
1212
)
1313
DETACHED_HEAD = "You should not be in a detached HEAD state! Use git checkout main to get back to main"
1414
MISSING_MERGES = "You are missing some merges"
15-
WRONG_MERGE_ORDER = "You should have merged {branch_name} first. The expected order is feature/login, feature/dashboard, feature/payments"
15+
NO_MERGES = "You need to start merging the feature branches."
16+
WRONG_MERGE_ORDER = "You should have merged {branch_name} first. The expected order is feature/login, then feature/dashboard, and last feature/payments"
17+
FEATURE_LOGIN_MERGE_MISSING = "You should have merged feature/login first."
18+
FEATURE_DASHBOARD_MERGE_MISSING = "You should have merged feature/dashboard next."
19+
FEATURE_PAYMENTS_MERGE_MISSING = "You should have merged feature/payments last."
20+
RESET_MESSAGE = 'Reset the repository using "gitmastery progress reset" and start again'
1621

1722

1823
def verify(exercise: GitAutograderExercise) -> GitAutograderOutput:
@@ -27,37 +32,23 @@ def verify(exercise: GitAutograderExercise) -> GitAutograderOutput:
2732
raise exercise.wrong_answer([DETACHED_HEAD])
2833

2934
main_reflog = main_branch.reflog
30-
print(exercise.repo.repo.git.reflog("show", "main").splitlines())
31-
print(main_reflog)
32-
33-
try:
34-
# Merge commits exhibit the behavior of having 2 parents (from/to)
35-
expected_order = ["feature/payments", "feature/dashboard", "feature/login"][
36-
::-1
37-
]
38-
i = 0
39-
for entry in main_reflog:
40-
print(entry)
41-
if not entry.action.startswith("merge") or i >= len(expected_order):
42-
continue
43-
merged_branch = entry.action[len("merge ") :]
44-
if merged_branch != expected_order[i]:
45-
raise exercise.wrong_answer(
46-
[WRONG_MERGE_ORDER.format(branch_name=expected_order[i])]
47-
)
48-
else:
49-
i += 1
50-
51-
if i < len(expected_order):
52-
raise exercise.wrong_answer([MISSING_MERGES])
53-
54-
return exercise.to_output(
55-
["Great work with using git merge fix the bugs!"],
56-
GitAutograderStatus.SUCCESSFUL,
57-
)
58-
except (GitAutograderWrongAnswerException, GitAutograderInvalidStateException):
59-
raise
60-
except Exception:
61-
raise exercise.wrong_answer(["Something bad happened"])
62-
finally:
63-
main_branch.checkout()
35+
merge_logs = [entry for entry in main_reflog if entry.action.startswith("merge")]
36+
merge_order = [entry.action[len("merge ") :] for entry in merge_logs][::-1]
37+
if len(merge_order) == 0:
38+
raise exercise.wrong_answer([NO_MERGES])
39+
40+
if merge_order[0] != "feature/login":
41+
raise exercise.wrong_answer([FEATURE_LOGIN_MERGE_MISSING, RESET_MESSAGE])
42+
43+
if merge_order[1] != "feature/dashboard":
44+
raise exercise.wrong_answer([FEATURE_DASHBOARD_MERGE_MISSING, RESET_MESSAGE])
45+
46+
if merge_order[2] != "feature/payments":
47+
raise exercise.wrong_answer([FEATURE_PAYMENTS_MERGE_MISSING, RESET_MESSAGE])
48+
49+
return exercise.to_output(
50+
[
51+
"Great work with merging the branches in order! Try running the HTML files locally!"
52+
],
53+
GitAutograderStatus.SUCCESSFUL,
54+
)

0 commit comments

Comments
 (0)