2010-01-20 10:48:25 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='rev-list/rev-parse --glob'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
commit () {
|
|
|
|
test_tick &&
|
|
|
|
echo $1 > foo &&
|
|
|
|
git add foo &&
|
|
|
|
git commit -m "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
compare () {
|
|
|
|
# Split arguments on whitespace.
|
|
|
|
git $1 $2 >expected &&
|
|
|
|
git $1 $3 >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
}
|
|
|
|
|
|
|
|
test_expect_success 'setup' '
|
|
|
|
|
|
|
|
commit master &&
|
|
|
|
git checkout -b subspace/one master &&
|
|
|
|
commit one &&
|
|
|
|
git checkout -b subspace/two master &&
|
|
|
|
commit two &&
|
|
|
|
git checkout -b subspace-x master &&
|
|
|
|
commit subspace-x &&
|
|
|
|
git checkout -b other/three master &&
|
|
|
|
commit three &&
|
|
|
|
git checkout -b someref master &&
|
|
|
|
commit some &&
|
|
|
|
git checkout master &&
|
2010-01-20 10:48:26 +01:00
|
|
|
commit master2 &&
|
|
|
|
git tag foo/bar master &&
|
2010-05-14 20:26:51 +02:00
|
|
|
commit master3 &&
|
|
|
|
git update-ref refs/remotes/foo/baz master &&
|
2018-11-12 14:25:43 +01:00
|
|
|
commit master4 &&
|
|
|
|
git update-ref refs/remotes/upstream/one subspace/one &&
|
|
|
|
git update-ref refs/remotes/upstream/two subspace/two &&
|
|
|
|
git update-ref refs/remotes/upstream/x subspace-x &&
|
|
|
|
git tag qux/one subspace/one &&
|
|
|
|
git tag qux/two subspace/two &&
|
|
|
|
git tag qux/x subspace-x
|
2010-01-20 10:48:25 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=refs/heads/subspace/' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/subspace/' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/subspace' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2011-04-21 12:48:24 +02:00
|
|
|
test_expect_failure 'rev-parse accepts --glob as detached option' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--glob heads/subspace"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'rev-parse is not confused by option-like glob' '
|
|
|
|
|
|
|
|
compare rev-parse "master" "--glob --symbolic master"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:26 +01:00
|
|
|
test_expect_success 'rev-parse --branches=subspace/*' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--branches=subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --branches=subspace/' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--branches=subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --branches=subspace' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two" "--branches=subspace"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:25 +01:00
|
|
|
test_expect_success 'rev-parse --glob=heads/subspace/* --glob=heads/other/*' '
|
|
|
|
|
|
|
|
compare rev-parse "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/someref/* master' '
|
|
|
|
|
|
|
|
compare rev-parse "master" "--glob=heads/someref/* master"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/*' '
|
|
|
|
|
|
|
|
compare rev-parse "master other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:26 +01:00
|
|
|
test_expect_success 'rev-parse --tags=foo' '
|
|
|
|
|
|
|
|
compare rev-parse "foo/bar" "--tags=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --remotes=foo' '
|
|
|
|
|
|
|
|
compare rev-parse "foo/baz" "--remotes=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-11-01 20:13:01 +01:00
|
|
|
test_expect_success 'rev-parse --exclude with --branches' '
|
|
|
|
compare rev-parse "--exclude=*/* --branches" "master someref subspace-x"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --exclude with --all' '
|
|
|
|
compare rev-parse "--exclude=refs/remotes/* --all" "--branches --tags"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse accumulates multiple --exclude' '
|
|
|
|
compare rev-parse "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches
|
|
|
|
'
|
|
|
|
|
2018-10-23 21:17:58 +02:00
|
|
|
test_expect_success 'rev-parse --branches clears --exclude' '
|
|
|
|
compare rev-parse "--exclude=* --branches --branches" "--branches"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --tags clears --exclude' '
|
|
|
|
compare rev-parse "--exclude=* --tags --tags" "--tags"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --all clears --exclude' '
|
|
|
|
compare rev-parse "--exclude=* --all --all" "--all"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --branches=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --tags=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --remotes=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --branches=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --tags=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --remotes=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-parse "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --branches=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --tags=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --remotes=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --branches=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --tags=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 14:25:44 +01:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --remotes=glob' '
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:25 +01:00
|
|
|
test_expect_success 'rev-list --glob=refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-08-05 10:22:56 +02:00
|
|
|
test_expect_success 'rev-list --glob refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2011-04-21 12:48:24 +02:00
|
|
|
test_expect_success 'rev-list not confused by option-like --glob arg' '
|
|
|
|
|
|
|
|
compare rev-list "master" "--glob -0 master"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:25 +01:00
|
|
|
test_expect_success 'rev-list --glob=heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --glob=refs/heads/subspace/' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --glob=heads/subspace/' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --glob=heads/subspace' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=heads/subspace"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:26 +01:00
|
|
|
test_expect_success 'rev-list --branches=subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--branches=subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --branches=subspace/' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--branches=subspace/"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --branches=subspace' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--branches=subspace"
|
|
|
|
|
|
|
|
'
|
2010-05-14 20:26:50 +02:00
|
|
|
|
|
|
|
test_expect_success 'rev-list --branches' '
|
|
|
|
|
|
|
|
compare rev-list "master subspace-x someref other/three subspace/one subspace/two" "--branches"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:25 +01:00
|
|
|
test_expect_success 'rev-list --glob=heads/someref/* master' '
|
|
|
|
|
|
|
|
compare rev-list "master" "--glob=heads/someref/* master"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --glob=heads/subspace/* --glob=heads/other/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --glob=heads/*' '
|
|
|
|
|
|
|
|
compare rev-list "master other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:26 +01:00
|
|
|
test_expect_success 'rev-list --tags=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/bar" "--tags=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-05-14 20:26:50 +02:00
|
|
|
test_expect_success 'rev-list --tags' '
|
|
|
|
|
2018-11-12 14:25:43 +01:00
|
|
|
compare rev-list "foo/bar qux/x qux/two qux/one" "--tags"
|
2010-05-14 20:26:50 +02:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:26 +01:00
|
|
|
test_expect_success 'rev-list --remotes=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/baz" "--remotes=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-11-01 19:33:15 +01:00
|
|
|
test_expect_success 'rev-list --exclude with --branches' '
|
|
|
|
compare rev-list "--exclude=*/* --branches" "master someref subspace-x"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list --exclude with --all' '
|
|
|
|
compare rev-list "--exclude=refs/remotes/* --all" "--branches --tags"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list accumulates multiple --exclude' '
|
|
|
|
compare rev-list "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches
|
|
|
|
'
|
|
|
|
|
rev-list: make empty --stdin not an error
When we originally did the series that contains 7ba826290a
(revision: add rev_input_given flag, 2017-08-02) the intent
was that "git rev-list --stdin </dev/null" would similarly
become a successful noop. However, an attempt at the time to
do that did not work[1]. The problem is that rev_input_given
serves two roles:
- it tells rev-list.c that it should not error out
- it tells revision.c that it should not have the "default"
ref kick (e.g., "HEAD" in "git log")
We want to trigger the former, but not the latter. This is
technically possible with a single flag, if we set the flag
only after revision.c's revs->def check. But this introduces
a rather subtle ordering dependency.
Instead, let's keep two flags: one to denote when we got
actual input (which triggers both roles) and one for when we
read stdin (which triggers only the first).
This does mean a caller interested in the first role has to
check both flags, but there's only one such caller. And any
future callers might want to make the distinction anyway
(e.g., if they care less about erroring out, and more about
whether revision.c soaked up our stdin).
In fact, we already keep such a flag internally in
revision.c for this purpose, so this is really just exposing
that to the caller (and the old function-local flag can go
away in favor of our new one).
[1] https://public-inbox.org/git/20170802223416.gwiezhbuxbdmbjzx@sigill.intra.peff.net/
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-22 23:37:23 +02:00
|
|
|
test_expect_success 'rev-list should succeed with empty output on empty stdin' '
|
t6018-rev-list-glob: fix 'empty stdin' test
Prior to d3c6751b18 (tests: make use of the test_must_be_empty
function, 2018-07-27), in the test 'rev-list should succeed with empty
output on empty stdin' in 't6018-rev-list-glob' the empty 'expect'
file served dual purpose: besides specifying the expected output, as
usual, it also served as empty input for 'git rev-list --stdin'.
Then d3c6751b18 came along, and, as part of the conversion to
'test_must_be_empty', removed this empty 'expect' file, not realizing
its secondary purpose. Redirecting stdin from the now non-existing
file failed the test, but since this test expects failure in the first
place, this issue went unnoticed.
Redirect 'git rev-list's stdin explicitly from /dev/null to provide
empty input. (Strictly speaking we don't need this redirection,
because the test script's stdin is already redirected from /dev/null
anyway, but I think it's better to be explicit about it.)
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-22 19:48:20 +02:00
|
|
|
git rev-list --stdin </dev/null >actual &&
|
2018-07-27 19:48:11 +02:00
|
|
|
test_must_be_empty actual
|
2013-11-01 19:33:15 +01:00
|
|
|
'
|
|
|
|
|
2017-08-03 00:26:06 +02:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with all refs excluded' '
|
2013-11-01 19:33:15 +01:00
|
|
|
git rev-list --exclude=* --all >actual &&
|
2018-07-27 19:48:11 +02:00
|
|
|
test_must_be_empty actual
|
2013-11-01 19:33:15 +01:00
|
|
|
'
|
|
|
|
|
2017-08-03 00:26:06 +02:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty --all' '
|
2013-11-01 19:33:15 +01:00
|
|
|
(
|
|
|
|
test_create_repo empty &&
|
|
|
|
cd empty &&
|
|
|
|
git rev-list --all >actual &&
|
2018-07-27 19:48:11 +02:00
|
|
|
test_must_be_empty actual
|
2013-11-01 19:33:15 +01:00
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2017-08-03 00:26:06 +02:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty glob' '
|
2017-08-03 00:24:51 +02:00
|
|
|
git rev-list --glob=does-not-match-anything >actual &&
|
2018-07-27 19:48:11 +02:00
|
|
|
test_must_be_empty actual
|
2017-08-03 00:24:51 +02:00
|
|
|
'
|
|
|
|
|
2011-04-21 12:48:24 +02:00
|
|
|
test_expect_success 'shortlog accepts --glob/--tags/--remotes' '
|
|
|
|
|
|
|
|
compare shortlog "subspace/one subspace/two" --branches=subspace &&
|
|
|
|
compare shortlog \
|
|
|
|
"master subspace-x someref other/three subspace/one subspace/two" \
|
|
|
|
--branches &&
|
|
|
|
compare shortlog master "--glob=heads/someref/* master" &&
|
|
|
|
compare shortlog "subspace/one subspace/two other/three" \
|
|
|
|
"--glob=heads/subspace/* --glob=heads/other/*" &&
|
|
|
|
compare shortlog \
|
|
|
|
"master other/three someref subspace-x subspace/one subspace/two" \
|
|
|
|
"--glob=heads/*" &&
|
|
|
|
compare shortlog foo/bar --tags=foo &&
|
2018-11-12 14:25:43 +01:00
|
|
|
compare shortlog "foo/bar qux/one qux/two qux/x" --tags &&
|
2011-04-21 12:48:24 +02:00
|
|
|
compare shortlog foo/baz --remotes=foo
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog accepts --glob as detached option' '
|
|
|
|
|
|
|
|
compare shortlog \
|
|
|
|
"master other/three someref subspace-x subspace/one subspace/two" \
|
|
|
|
"--glob heads/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog --glob is not confused by option-like argument' '
|
|
|
|
|
|
|
|
compare shortlog master "--glob -e master"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 10:48:25 +01:00
|
|
|
test_done
|