Browse Source
* tr/previous-branch: t1505: remove debugging cruft Simplify parsing branch switching events in reflog Introduce for_each_recent_reflog_ent(). interpret_nth_last_branch(): plug small memleak Fix reflog parsing for a malformed branch switching entry Fix parsing of @{-1}@{1} interpret_nth_last_branch(): avoid traversing the reflog twice checkout: implement "-" abbreviation, add docs and tests sha1_name: support @{-N} syntax in get_sha1() sha1_name: tweak @{-N} lookup checkout: implement "@{-N}" shortcut name for N-th last branch Conflicts: sha1_name.cmaint
Junio C Hamano
16 years ago
9 changed files with 324 additions and 7 deletions
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='test @{-N} syntax' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
|
||||
make_commit () { |
||||
echo "$1" > "$1" && |
||||
git add "$1" && |
||||
git commit -m "$1" |
||||
} |
||||
|
||||
|
||||
test_expect_success 'setup' ' |
||||
|
||||
make_commit 1 && |
||||
git branch side && |
||||
make_commit 2 && |
||||
make_commit 3 && |
||||
git checkout side && |
||||
make_commit 4 && |
||||
git merge master && |
||||
git checkout master |
||||
|
||||
' |
||||
|
||||
# 1 -- 2 -- 3 master |
||||
# \ \ |
||||
# \ \ |
||||
# --- 4 --- 5 side |
||||
# |
||||
# and 'side' should be the last branch |
||||
|
||||
test_rev_equivalent () { |
||||
|
||||
git rev-parse "$1" > expect && |
||||
git rev-parse "$2" > output && |
||||
test_cmp expect output |
||||
|
||||
} |
||||
|
||||
test_expect_success '@{-1} works' ' |
||||
test_rev_equivalent side @{-1} |
||||
' |
||||
|
||||
test_expect_success '@{-1}~2 works' ' |
||||
test_rev_equivalent side~2 @{-1}~2 |
||||
' |
||||
|
||||
test_expect_success '@{-1}^2 works' ' |
||||
test_rev_equivalent side^2 @{-1}^2 |
||||
' |
||||
|
||||
test_expect_success '@{-1}@{1} works' ' |
||||
test_rev_equivalent side@{1} @{-1}@{1} |
||||
' |
||||
|
||||
test_expect_success '@{-2} works' ' |
||||
test_rev_equivalent master @{-2} |
||||
' |
||||
|
||||
test_expect_success '@{-3} fails' ' |
||||
test_must_fail git rev-parse @{-3} |
||||
' |
||||
|
||||
test_done |
||||
|
||||
|
@ -0,0 +1,94 @@
@@ -0,0 +1,94 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='checkout can switch to last branch' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success 'setup' ' |
||||
echo hello >world && |
||||
git add world && |
||||
git commit -m initial && |
||||
git branch other && |
||||
echo "hello again" >>world && |
||||
git add world && |
||||
git commit -m second |
||||
' |
||||
|
||||
test_expect_success '"checkout -" does not work initially' ' |
||||
test_must_fail git checkout - |
||||
' |
||||
|
||||
test_expect_success 'first branch switch' ' |
||||
git checkout other |
||||
' |
||||
|
||||
test_expect_success '"checkout -" switches back' ' |
||||
git checkout - && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master" |
||||
' |
||||
|
||||
test_expect_success '"checkout -" switches forth' ' |
||||
git checkout - && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other" |
||||
' |
||||
|
||||
test_expect_success 'detach HEAD' ' |
||||
git checkout $(git rev-parse HEAD) |
||||
' |
||||
|
||||
test_expect_success '"checkout -" attaches again' ' |
||||
git checkout - && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other" |
||||
' |
||||
|
||||
test_expect_success '"checkout -" detaches again' ' |
||||
git checkout - && |
||||
test "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" && |
||||
test_must_fail git symbolic-ref HEAD |
||||
' |
||||
|
||||
test_expect_success 'more switches' ' |
||||
for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 |
||||
do |
||||
git checkout -b branch$i |
||||
done |
||||
' |
||||
|
||||
more_switches () { |
||||
for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 |
||||
do |
||||
git checkout branch$i |
||||
done |
||||
} |
||||
|
||||
test_expect_success 'switch to the last' ' |
||||
more_switches && |
||||
git checkout @{-1} && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch2" |
||||
' |
||||
|
||||
test_expect_success 'switch to second from the last' ' |
||||
more_switches && |
||||
git checkout @{-2} && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch3" |
||||
' |
||||
|
||||
test_expect_success 'switch to third from the last' ' |
||||
more_switches && |
||||
git checkout @{-3} && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch4" |
||||
' |
||||
|
||||
test_expect_success 'switch to fourth from the last' ' |
||||
more_switches && |
||||
git checkout @{-4} && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch5" |
||||
' |
||||
|
||||
test_expect_success 'switch to twelfth from the last' ' |
||||
more_switches && |
||||
git checkout @{-12} && |
||||
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch13" |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue