Merge branch 'sg/name-rev-wo-recursion'
Redo "git name-rev" to avoid recursive calls. * sg/name-rev-wo-recursion: name-rev: cleanup name_ref() name-rev: eliminate recursion in name_rev() name-rev: use 'name->tip_name' instead of 'tip_name' name-rev: drop name_rev()'s 'generation' and 'distance' parameters name-rev: restructure creating/updating 'struct rev_name' instances name-rev: restructure parsing commits and applying date cutoff name-rev: pull out deref handling from the recursion name-rev: extract creating/updating a 'struct name_rev' into a helper t6120: add a test to cover inner conditions in 'git name-rev's name_rev() name-rev: use sizeof(*ptr) instead of sizeof(type) in allocation name-rev: avoid unnecessary cast in name_ref() name-rev: use strbuf_strip_suffix() in get_rev_name() t6120-describe: modernize the 'check_describe' helper t6120-describe: correct test repo history graph in comment
This commit is contained in:
@ -1,28 +1,27 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='test describe
|
||||
test_description='test describe'
|
||||
|
||||
# o---o-----o----o----o-------o----x
|
||||
# \ D,R e /
|
||||
# \---o-------------o-'
|
||||
# \ B /
|
||||
# `-o----o----o-'
|
||||
# A c
|
||||
#
|
||||
# First parent of a merge commit is on the same line, second parent below.
|
||||
|
||||
B
|
||||
.--------------o----o----o----x
|
||||
/ / /
|
||||
o----o----o----o----o----. /
|
||||
\ A c /
|
||||
.------------o---o---o
|
||||
D,R e
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
check_describe () {
|
||||
expect="$1"
|
||||
shift
|
||||
R=$(git describe "$@" 2>err.actual)
|
||||
S=$?
|
||||
cat err.actual >&3
|
||||
test_expect_success "describe $*" '
|
||||
test $S = 0 &&
|
||||
describe_opts="$@"
|
||||
test_expect_success "describe $describe_opts" '
|
||||
R=$(git describe $describe_opts 2>err.actual) &&
|
||||
case "$R" in
|
||||
$expect) echo happy ;;
|
||||
*) echo "Oops - $R is not $expect";
|
||||
*) echo "Oops - $R is not $expect" &&
|
||||
false ;;
|
||||
esac
|
||||
'
|
||||
@ -382,7 +381,7 @@ test_expect_success 'describe tag object' '
|
||||
test_i18ngrep "fatal: test-blob-1 is neither a commit nor blob" actual
|
||||
'
|
||||
|
||||
test_expect_failure ULIMIT_STACK_SIZE 'name-rev works in a deep repo' '
|
||||
test_expect_success ULIMIT_STACK_SIZE 'name-rev works in a deep repo' '
|
||||
i=1 &&
|
||||
while test $i -lt 8000
|
||||
do
|
||||
@ -439,4 +438,45 @@ test_expect_success 'name-rev a rev shortly after epoch' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
# A--------------master
|
||||
# \ /
|
||||
# \----------M2
|
||||
# \ /
|
||||
# \---M1-C
|
||||
# \ /
|
||||
# B
|
||||
test_expect_success 'name-rev covers all conditions while looking at parents' '
|
||||
git init repo &&
|
||||
(
|
||||
cd repo &&
|
||||
|
||||
echo A >file &&
|
||||
git add file &&
|
||||
git commit -m A &&
|
||||
A=$(git rev-parse HEAD) &&
|
||||
|
||||
git checkout --detach &&
|
||||
echo B >file &&
|
||||
git commit -m B file &&
|
||||
B=$(git rev-parse HEAD) &&
|
||||
|
||||
git checkout $A &&
|
||||
git merge --no-ff $B && # M1
|
||||
|
||||
echo C >file &&
|
||||
git commit -m C file &&
|
||||
|
||||
git checkout $A &&
|
||||
git merge --no-ff HEAD@{1} && # M2
|
||||
|
||||
git checkout master &&
|
||||
git merge --no-ff HEAD@{1} &&
|
||||
|
||||
echo "$B master^2^2~1^2" >expect &&
|
||||
git name-rev $B >actual &&
|
||||
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user