feat(L07): add Git rebase and conflicts card
This commit is contained in:
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
repo="$(mktemp -d)"; trap 'rm -rf -- "$repo"' EXIT
|
||||
git -C "$repo" init -q -b main; git -C "$repo" config user.name Student; git -C "$repo" config user.email student@example.invalid
|
||||
printf 'base\n' >"$repo/base.txt"; git -C "$repo" add .; git -C "$repo" commit -q -m base
|
||||
git -C "$repo" switch -q -c feature; printf 'feature\n' >"$repo/feature.txt"; git -C "$repo" add .; git -C "$repo" commit -q -m feature; old_feature="$(git -C "$repo" rev-parse HEAD)"
|
||||
git -C "$repo" switch -q main; printf 'main\n' >"$repo/main.txt"; git -C "$repo" add .; git -C "$repo" commit -q -m main; main_tip="$(git -C "$repo" rev-parse HEAD)"
|
||||
git -C "$repo" switch -q feature; git -C "$repo" rebase -q main; new_feature="$(git -C "$repo" rev-parse HEAD)"; parent="$(git -C "$repo" rev-parse HEAD^)"
|
||||
[[ "$old_feature" != "$new_feature" && "$parent" == "$main_tip" && "$(git -C "$repo" rev-list --count main..feature)" -eq 1 ]]
|
||||
printf 'PASS task01 rewritten=1 parent_is_main=1 feature_ahead=1 linear=1\n'
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
repo="$(mktemp -d)"; trap 'rm -rf -- "$repo"' EXIT
|
||||
git -C "$repo" init -q -b main; git -C "$repo" config user.name Student; git -C "$repo" config user.email student@example.invalid
|
||||
printf 'color=blue\n' >"$repo/settings.txt"; git -C "$repo" add .; git -C "$repo" commit -q -m base
|
||||
git -C "$repo" switch -q -c feature; printf 'color=green\n' >"$repo/settings.txt"; git -C "$repo" commit -qam 'feature green'
|
||||
git -C "$repo" switch -q main; printf 'color=red\n' >"$repo/settings.txt"; git -C "$repo" commit -qam 'main red'; main_tip="$(git -C "$repo" rev-parse HEAD)"
|
||||
git -C "$repo" switch -q feature; set +e; git -C "$repo" rebase main >/dev/null 2>&1; rebase_status=$?; set -e
|
||||
conflict_status="$(git -C "$repo" status --short)"; [[ "$rebase_status" -ne 0 && "$conflict_status" == 'UU settings.txt' ]]
|
||||
printf 'color=purple\n' >"$repo/settings.txt"; git -C "$repo" add settings.txt; GIT_EDITOR=true git -C "$repo" rebase --continue >/dev/null 2>&1
|
||||
[[ "$(cat "$repo/settings.txt")" == 'color=purple' && "$(git -C "$repo" rev-parse HEAD^)" == "$main_tip" ]]
|
||||
printf 'PASS task02 conflict_detected=1 status=UU resolved=purple rebase_finished=1 parent_is_main=1\n'
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
repo="$(mktemp -d)"; trap 'rm -rf -- "$repo"' EXIT
|
||||
git -C "$repo" init -q -b main; git -C "$repo" config user.name Student; git -C "$repo" config user.email student@example.invalid
|
||||
printf 'color=blue\n' >"$repo/settings.txt"; git -C "$repo" add .; git -C "$repo" commit -q -m base
|
||||
git -C "$repo" switch -q -c feature; printf 'color=green\n' >"$repo/settings.txt"; git -C "$repo" commit -qam 'feature purple'
|
||||
git -C "$repo" switch -q main; printf 'color=red\n' >"$repo/settings.txt"; git -C "$repo" commit -qam 'main red'
|
||||
git -C "$repo" switch -q feature; set +e; git -C "$repo" rebase main >/dev/null 2>&1; set -e
|
||||
printf 'color=purple\n' >"$repo/settings.txt"; git -C "$repo" add settings.txt; GIT_EDITOR=true git -C "$repo" rebase --continue >/dev/null 2>&1
|
||||
count="$(git -C "$repo" rev-list --count HEAD)"; merges="$(git -C "$repo" rev-list --merges --count HEAD)"; subjects="$(git -C "$repo" log --reverse --format=%s | paste -sd, -)"; status="$(git -C "$repo" status --porcelain)"
|
||||
[[ "$count" -eq 3 && "$merges" -eq 0 && "$subjects" == 'base,main red,feature purple' && "$(cat "$repo/settings.txt")" == 'color=purple' && -z "$status" ]]
|
||||
printf 'PASS task03 commits=3 merges=0 subjects="base,main red,feature purple" final=purple clean=1\n'
|
||||
Reference in New Issue
Block a user