diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-01-19 00:04:25 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-01-19 15:35:21 -0800 |
commit | c2883e62f5b9980e5402431f2261c961354d0f15 (patch) | |
tree | be6de693adb7e9b21e95e9409dc06a7d341d9133 /t/t2012-checkout-last.sh | |
parent | checkout: implement "-" abbreviation, add docs and tests (diff) | |
download | tgif-c2883e62f5b9980e5402431f2261c961354d0f15.tar.xz |
interpret_nth_last_branch(): avoid traversing the reflog twice
You can have quite a many reflog entries, but you typically won't recall
which branch you were on after switching branches for more than several
times.
Instead of reading the reflog twice, this reads the branch switching event
and keeps as many entries as the user asked from the latest such entries,
which is the minimum required to be able to switch back to the branch we
were recently on.
[jc: improvements from Dscho squashed in]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t2012-checkout-last.sh')
-rwxr-xr-x | t/t2012-checkout-last.sh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh index 320f6eb2be..87b30a268c 100755 --- a/t/t2012-checkout-last.sh +++ b/t/t2012-checkout-last.sh @@ -47,4 +47,48 @@ test_expect_success '"checkout -" detaches again' ' 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 |