mirror of
https://github.com/git/git.git
synced 2026-03-24 15:40:08 +01:00
Merge branch 'kn/ref-filter-branch-list'
The code to list branches in "git branch" has been consolidated with the more generic ref-filter API. * kn/ref-filter-branch-list: (21 commits) ref-filter: resurrect "strip" as a synonym to "lstrip" branch: implement '--format' option branch: use ref-filter printing APIs branch, tag: use porcelain output ref-filter: allow porcelain to translate messages in the output ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnames ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>' ref-filter: Do not abruptly die when using the 'lstrip=<N>' option ref-filter: rename the 'strip' option to 'lstrip' ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal() ref-filter: introduce refname_atom_parser() ref-filter: introduce refname_atom_parser_internal() ref-filter: make "%(symref)" atom work with the ':short' modifier ref-filter: add support for %(upstream:track,nobracket) ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams ref-filter: introduce format_ref_array_item() ref-filter: move get_head_description() from branch.c ref-filter: modify "%(objectname:short)" to take length ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>) ref-filter: include reference to 'used_atom' within 'atom_value' ...
This commit is contained in:
@@ -194,7 +194,7 @@ test_expect_success 'local-branch symrefs shortened properly' '
|
||||
git symbolic-ref refs/heads/ref-to-remote refs/remotes/origin/branch-one &&
|
||||
cat >expect <<-\EOF &&
|
||||
ref-to-branch -> branch-one
|
||||
ref-to-remote -> refs/remotes/origin/branch-one
|
||||
ref-to-remote -> origin/branch-one
|
||||
EOF
|
||||
git branch >actual.raw &&
|
||||
grep ref-to <actual.raw >actual &&
|
||||
@@ -225,4 +225,18 @@ test_expect_success 'sort branches, ignore case' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'git branch --format option' '
|
||||
cat >expect <<-\EOF &&
|
||||
Refname is (HEAD detached from fromtag)
|
||||
Refname is refs/heads/ambiguous
|
||||
Refname is refs/heads/branch-one
|
||||
Refname is refs/heads/branch-two
|
||||
Refname is refs/heads/master
|
||||
Refname is refs/heads/ref-to-branch
|
||||
Refname is refs/heads/ref-to-remote
|
||||
EOF
|
||||
git branch --format="Refname is %(refname)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -44,7 +44,7 @@ b1 [ahead 1, behind 1] d
|
||||
b2 [ahead 1, behind 1] d
|
||||
b3 [behind 1] b
|
||||
b4 [ahead 2] f
|
||||
b5 g
|
||||
b5 [gone] g
|
||||
b6 c
|
||||
EOF
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ test_atom() {
|
||||
case "$1" in
|
||||
head) ref=refs/heads/master ;;
|
||||
tag) ref=refs/tags/testtag ;;
|
||||
sym) ref=refs/heads/sym ;;
|
||||
*) ref=$1 ;;
|
||||
esac
|
||||
printf '%s\n' "$3" >expected
|
||||
@@ -50,16 +51,40 @@ test_atom() {
|
||||
|
||||
test_atom head refname refs/heads/master
|
||||
test_atom head refname:short master
|
||||
test_atom head refname:lstrip=1 heads/master
|
||||
test_atom head refname:lstrip=2 master
|
||||
test_atom head refname:lstrip=-1 master
|
||||
test_atom head refname:lstrip=-2 heads/master
|
||||
test_atom head refname:rstrip=1 refs/heads
|
||||
test_atom head refname:rstrip=2 refs
|
||||
test_atom head refname:rstrip=-1 refs
|
||||
test_atom head refname:rstrip=-2 refs/heads
|
||||
test_atom head refname:strip=1 heads/master
|
||||
test_atom head refname:strip=2 master
|
||||
test_atom head refname:strip=-1 master
|
||||
test_atom head refname:strip=-2 heads/master
|
||||
test_atom head upstream refs/remotes/origin/master
|
||||
test_atom head upstream:short origin/master
|
||||
test_atom head upstream:lstrip=2 origin/master
|
||||
test_atom head upstream:lstrip=-2 origin/master
|
||||
test_atom head upstream:rstrip=2 refs/remotes
|
||||
test_atom head upstream:rstrip=-2 refs/remotes
|
||||
test_atom head upstream:strip=2 origin/master
|
||||
test_atom head upstream:strip=-2 origin/master
|
||||
test_atom head push refs/remotes/myfork/master
|
||||
test_atom head push:short myfork/master
|
||||
test_atom head push:lstrip=1 remotes/myfork/master
|
||||
test_atom head push:lstrip=-1 master
|
||||
test_atom head push:rstrip=1 refs/remotes/myfork
|
||||
test_atom head push:rstrip=-1 refs
|
||||
test_atom head push:strip=1 remotes/myfork/master
|
||||
test_atom head push:strip=-1 master
|
||||
test_atom head objecttype commit
|
||||
test_atom head objectsize 171
|
||||
test_atom head objectname $(git rev-parse refs/heads/master)
|
||||
test_atom head objectname:short $(git rev-parse --short refs/heads/master)
|
||||
test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
|
||||
test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
|
||||
test_atom head tree $(git rev-parse refs/heads/master^{tree})
|
||||
test_atom head parent ''
|
||||
test_atom head numparent 0
|
||||
@@ -99,6 +124,8 @@ test_atom tag objecttype tag
|
||||
test_atom tag objectsize 154
|
||||
test_atom tag objectname $(git rev-parse refs/tags/testtag)
|
||||
test_atom tag objectname:short $(git rev-parse --short refs/tags/testtag)
|
||||
test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
|
||||
test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
|
||||
test_atom tag tree ''
|
||||
test_atom tag parent ''
|
||||
test_atom tag numparent ''
|
||||
@@ -134,16 +161,6 @@ test_expect_success 'Check invalid atoms names are errors' '
|
||||
test_must_fail git for-each-ref --format="%(INVALID)" refs/heads
|
||||
'
|
||||
|
||||
test_expect_success 'arguments to :strip must be positive integers' '
|
||||
test_must_fail git for-each-ref --format="%(refname:strip=0)" &&
|
||||
test_must_fail git for-each-ref --format="%(refname:strip=-1)" &&
|
||||
test_must_fail git for-each-ref --format="%(refname:strip=foo)"
|
||||
'
|
||||
|
||||
test_expect_success 'stripping refnames too far gives an error' '
|
||||
test_must_fail git for-each-ref --format="%(refname:strip=3)"
|
||||
'
|
||||
|
||||
test_expect_success 'Check format specifiers are ignored in naming date atoms' '
|
||||
git for-each-ref --format="%(authordate)" refs/heads &&
|
||||
git for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&
|
||||
@@ -164,6 +181,12 @@ test_expect_success 'Check invalid format specifiers are errors' '
|
||||
test_must_fail git for-each-ref --format="%(authordate:INVALID)" refs/heads
|
||||
'
|
||||
|
||||
test_expect_success 'arguments to %(objectname:short=) must be positive integers' '
|
||||
test_must_fail git for-each-ref --format="%(objectname:short=0)" &&
|
||||
test_must_fail git for-each-ref --format="%(objectname:short=-1)" &&
|
||||
test_must_fail git for-each-ref --format="%(objectname:short=foo)"
|
||||
'
|
||||
|
||||
test_date () {
|
||||
f=$1 &&
|
||||
committer_date=$2 &&
|
||||
@@ -362,6 +385,8 @@ test_expect_success 'setup for upstream:track[short]' '
|
||||
|
||||
test_atom head upstream:track '[ahead 1]'
|
||||
test_atom head upstream:trackshort '>'
|
||||
test_atom head upstream:track,nobracket 'ahead 1'
|
||||
test_atom head upstream:nobracket,track 'ahead 1'
|
||||
test_atom head push:track '[ahead 1]'
|
||||
test_atom head push:trackshort '>'
|
||||
|
||||
@@ -372,7 +397,7 @@ test_expect_success 'Check that :track[short] cannot be used with other atoms' '
|
||||
|
||||
test_expect_success 'Check that :track[short] works when upstream is invalid' '
|
||||
cat >expected <<-\EOF &&
|
||||
|
||||
[gone]
|
||||
|
||||
EOF
|
||||
test_when_finished "git config branch.master.merge refs/heads/master" &&
|
||||
@@ -554,6 +579,7 @@ test_expect_success 'Verify sort with multiple keys' '
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
|
||||
test_expect_success 'do not dereference NULL upon %(HEAD) on unborn branch' '
|
||||
test_when_finished "git checkout master" &&
|
||||
git for-each-ref --format="%(HEAD) %(refname:short)" refs/heads/ >actual &&
|
||||
@@ -588,4 +614,52 @@ test_expect_success 'basic atom: head contents:trailers' '
|
||||
test_cmp expect actual.clean
|
||||
'
|
||||
|
||||
test_expect_success 'Add symbolic ref for the following tests' '
|
||||
git symbolic-ref refs/heads/sym refs/heads/master
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
refs/heads/master
|
||||
EOF
|
||||
|
||||
test_expect_success 'Verify usage of %(symref) atom' '
|
||||
git for-each-ref --format="%(symref)" refs/heads/sym >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
heads/master
|
||||
EOF
|
||||
|
||||
test_expect_success 'Verify usage of %(symref:short) atom' '
|
||||
git for-each-ref --format="%(symref:short)" refs/heads/sym >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
master
|
||||
heads/master
|
||||
EOF
|
||||
|
||||
test_expect_success 'Verify usage of %(symref:lstrip) atom' '
|
||||
git for-each-ref --format="%(symref:lstrip=2)" refs/heads/sym > actual &&
|
||||
git for-each-ref --format="%(symref:lstrip=-2)" refs/heads/sym >> actual &&
|
||||
test_cmp expected actual &&
|
||||
|
||||
git for-each-ref --format="%(symref:strip=2)" refs/heads/sym > actual &&
|
||||
git for-each-ref --format="%(symref:strip=-2)" refs/heads/sym >> actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
refs
|
||||
refs/heads
|
||||
EOF
|
||||
|
||||
test_expect_success 'Verify usage of %(symref:rstrip) atom' '
|
||||
git for-each-ref --format="%(symref:rstrip=2)" refs/heads/sym > actual &&
|
||||
git for-each-ref --format="%(symref:rstrip=-2)" refs/heads/sym >> actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -327,4 +327,98 @@ test_expect_success 'reverse version sort' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'improper usage of %(if), %(then), %(else) and %(end) atoms' '
|
||||
test_must_fail git for-each-ref --format="%(if)" &&
|
||||
test_must_fail git for-each-ref --format="%(then) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(else) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(else) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(then) %(then) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(then) %(else) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(else) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(then) %(else)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(else) %(then) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(then) %(else) %(else) %(end)" &&
|
||||
test_must_fail git for-each-ref --format="%(if) %(end)"
|
||||
'
|
||||
|
||||
test_expect_success 'check %(if)...%(then)...%(end) atoms' '
|
||||
git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Author: %(authorname)%(end)" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
refs/heads/master Author: A U Thor
|
||||
refs/heads/side Author: A U Thor
|
||||
refs/odd/spot Author: A U Thor
|
||||
refs/tags/annotated-tag
|
||||
refs/tags/doubly-annotated-tag
|
||||
refs/tags/doubly-signed-tag
|
||||
refs/tags/foo1.10 Author: A U Thor
|
||||
refs/tags/foo1.3 Author: A U Thor
|
||||
refs/tags/foo1.6 Author: A U Thor
|
||||
refs/tags/four Author: A U Thor
|
||||
refs/tags/one Author: A U Thor
|
||||
refs/tags/signed-tag
|
||||
refs/tags/three Author: A U Thor
|
||||
refs/tags/two Author: A U Thor
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check %(if)...%(then)...%(else)...%(end) atoms' '
|
||||
git for-each-ref --format="%(if)%(authorname)%(then)%(authorname)%(else)No author%(end): %(refname)" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
A U Thor: refs/heads/master
|
||||
A U Thor: refs/heads/side
|
||||
A U Thor: refs/odd/spot
|
||||
No author: refs/tags/annotated-tag
|
||||
No author: refs/tags/doubly-annotated-tag
|
||||
No author: refs/tags/doubly-signed-tag
|
||||
A U Thor: refs/tags/foo1.10
|
||||
A U Thor: refs/tags/foo1.3
|
||||
A U Thor: refs/tags/foo1.6
|
||||
A U Thor: refs/tags/four
|
||||
A U Thor: refs/tags/one
|
||||
No author: refs/tags/signed-tag
|
||||
A U Thor: refs/tags/three
|
||||
A U Thor: refs/tags/two
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
test_expect_success 'ignore spaces in %(if) atom usage' '
|
||||
git for-each-ref --format="%(refname:short): %(if)%(HEAD)%(then)Head ref%(else)Not Head ref%(end)" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
master: Head ref
|
||||
side: Not Head ref
|
||||
odd/spot: Not Head ref
|
||||
annotated-tag: Not Head ref
|
||||
doubly-annotated-tag: Not Head ref
|
||||
doubly-signed-tag: Not Head ref
|
||||
foo1.10: Not Head ref
|
||||
foo1.3: Not Head ref
|
||||
foo1.6: Not Head ref
|
||||
four: Not Head ref
|
||||
one: Not Head ref
|
||||
signed-tag: Not Head ref
|
||||
three: Not Head ref
|
||||
two: Not Head ref
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check %(if:equals=<string>)' '
|
||||
git for-each-ref --format="%(if:equals=master)%(refname:short)%(then)Found master%(else)Not master%(end)" refs/heads/ >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
Found master
|
||||
Not master
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check %(if:notequals=<string>)' '
|
||||
git for-each-ref --format="%(if:notequals=master)%(refname:short)%(then)Not master%(else)Found master%(end)" refs/heads/ >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
Found master
|
||||
Not master
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user