2010-01-20 09:48:25 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='rev-list/rev-parse --glob'
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
tests: mark tests relying on the current default for `init.defaultBranch`
In addition to the manual adjustment to let the `linux-gcc` CI job run
the test suite with `master` and then with `main`, this patch makes sure
that GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME is set in all test scripts
that currently rely on the initial branch name being `master by default.
To determine which test scripts to mark up, the first step was to
force-set the default branch name to `master` in
- all test scripts that contain the keyword `master`,
- t4211, which expects `t/t4211/history.export` with a hard-coded ref to
initialize the default branch,
- t5560 because it sources `t/t556x_common` which uses `master`,
- t8002 and t8012 because both source `t/annotate-tests.sh` which also
uses `master`)
This trick was performed by this command:
$ sed -i '/^ *\. \.\/\(test-lib\|lib-\(bash\|cvs\|git-svn\)\|gitweb-lib\)\.sh$/i\
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master\
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME\
' $(git grep -l master t/t[0-9]*.sh) \
t/t4211*.sh t/t5560*.sh t/t8002*.sh t/t8012*.sh
After that, careful, manual inspection revealed that some of the test
scripts containing the needle `master` do not actually rely on a
specific default branch name: either they mention `master` only in a
comment, or they initialize that branch specificially, or they do not
actually refer to the current default branch. Therefore, the
aforementioned modification was undone in those test scripts thusly:
$ git checkout HEAD -- \
t/t0027-auto-crlf.sh t/t0060-path-utils.sh \
t/t1011-read-tree-sparse-checkout.sh \
t/t1305-config-include.sh t/t1309-early-config.sh \
t/t1402-check-ref-format.sh t/t1450-fsck.sh \
t/t2024-checkout-dwim.sh \
t/t2106-update-index-assume-unchanged.sh \
t/t3040-subprojects-basic.sh t/t3301-notes.sh \
t/t3308-notes-merge.sh t/t3423-rebase-reword.sh \
t/t3436-rebase-more-options.sh \
t/t4015-diff-whitespace.sh t/t4257-am-interactive.sh \
t/t5323-pack-redundant.sh t/t5401-update-hooks.sh \
t/t5511-refspec.sh t/t5526-fetch-submodules.sh \
t/t5529-push-errors.sh t/t5530-upload-pack-error.sh \
t/t5548-push-porcelain.sh \
t/t5552-skipping-fetch-negotiator.sh \
t/t5572-pull-submodule.sh t/t5608-clone-2gb.sh \
t/t5614-clone-submodules-shallow.sh \
t/t7508-status.sh t/t7606-merge-custom.sh \
t/t9302-fast-import-unpack-limit.sh
We excluded one set of test scripts in these commands, though: the range
of `git p4` tests. The reason? `git p4` stores the (foreign) remote
branch in the branch called `p4/master`, which is obviously not the
default branch. Manual analysis revealed that only five of these tests
actually require a specific default branch name to pass; They were
modified thusly:
$ sed -i '/^ *\. \.\/lib-git-p4\.sh$/i\
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master\
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME\
' t/t980[0167]*.sh t/t9811*.sh
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-11-18 23:44:19 +00:00
|
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
|
2010-01-20 09:48:25 +00:00
|
|
|
. ./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' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
commit main &&
|
|
|
|
git checkout -b subspace/one main &&
|
2010-01-20 09:48:25 +00:00
|
|
|
commit one &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git checkout -b subspace/two main &&
|
2010-01-20 09:48:25 +00:00
|
|
|
commit two &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git checkout -b subspace-x main &&
|
2010-01-20 09:48:25 +00:00
|
|
|
commit subspace-x &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git checkout -b other/three main &&
|
2010-01-20 09:48:25 +00:00
|
|
|
commit three &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git checkout -b someref main &&
|
2010-01-20 09:48:25 +00:00
|
|
|
commit some &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git checkout main &&
|
2020-09-26 21:04:21 +00:00
|
|
|
commit topic_2 &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git tag foo/bar main &&
|
2020-09-26 21:04:21 +00:00
|
|
|
commit topic_3 &&
|
2020-11-18 23:44:36 +00:00
|
|
|
git update-ref refs/remotes/foo/baz main &&
|
2020-09-26 21:04:21 +00:00
|
|
|
commit topic_4 &&
|
2018-11-12 13:25:43 +00:00
|
|
|
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 09:48:25 +00: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 10:48:24 +00: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' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-parse "main" "--glob --symbolic main"
|
2011-04-21 10:48:24 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:26 +00: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 09:48:25 +00: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/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
test_expect_success 'rev-parse --glob=heads/someref/* main' '
|
2010-01-20 09:48:25 +00:00
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-parse "main" "--glob=heads/someref/* main"
|
2010-01-20 09:48:25 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/*' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-parse "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
2010-01-20 09:48:25 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:26 +00: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 19:13:01 +00:00
|
|
|
test_expect_success 'rev-parse --exclude with --branches' '
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-parse "--exclude=*/* --branches" "main someref subspace-x"
|
2013-11-01 19:13:01 +00:00
|
|
|
'
|
|
|
|
|
|
|
|
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 19:17:58 +00: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 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --branches=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --tags=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --remotes=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --branches=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --tags=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --remotes=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-parse "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --branches=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --tags=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --remotes=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --branches=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --tags=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 13:25:44 +00:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --remotes=glob' '
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:25 +00:00
|
|
|
test_expect_success 'rev-list --glob=refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-08-05 08:22:56 +00:00
|
|
|
test_expect_success 'rev-list --glob refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2011-04-21 10:48:24 +00:00
|
|
|
test_expect_success 'rev-list not confused by option-like --glob arg' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-list "main" "--glob -0 main"
|
2011-04-21 10:48:24 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:25 +00: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 09:48:26 +00: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 18:26:50 +00:00
|
|
|
|
|
|
|
test_expect_success 'rev-list --branches' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-list "main subspace-x someref other/three subspace/one subspace/two" "--branches"
|
2010-05-14 18:26:50 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
test_expect_success 'rev-list --glob=heads/someref/* main' '
|
2010-01-20 09:48:25 +00:00
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-list "main" "--glob=heads/someref/* main"
|
2010-01-20 09:48:25 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
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/*' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-list "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
2010-01-20 09:48:25 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:26 +00:00
|
|
|
test_expect_success 'rev-list --tags=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/bar" "--tags=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-05-14 18:26:50 +00:00
|
|
|
test_expect_success 'rev-list --tags' '
|
|
|
|
|
2018-11-12 13:25:43 +00:00
|
|
|
compare rev-list "foo/bar qux/x qux/two qux/one" "--tags"
|
2010-05-14 18:26:50 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:26 +00:00
|
|
|
test_expect_success 'rev-list --remotes=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/baz" "--remotes=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-11-01 18:33:15 +00:00
|
|
|
test_expect_success 'rev-list --exclude with --branches' '
|
2020-11-18 23:44:36 +00:00
|
|
|
compare rev-list "--exclude=*/* --branches" "main someref subspace-x"
|
2013-11-01 18:33:15 +00:00
|
|
|
'
|
|
|
|
|
|
|
|
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 21:37:23 +00: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 17:48:20 +00:00
|
|
|
git rev-list --stdin </dev/null >actual &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
2013-11-01 18:33:15 +00:00
|
|
|
'
|
|
|
|
|
2017-08-02 22:26:06 +00:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with all refs excluded' '
|
2013-11-01 18:33:15 +00:00
|
|
|
git rev-list --exclude=* --all >actual &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
2013-11-01 18:33:15 +00:00
|
|
|
'
|
|
|
|
|
2017-08-02 22:26:06 +00:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty --all' '
|
2013-11-01 18:33:15 +00:00
|
|
|
(
|
|
|
|
test_create_repo empty &&
|
|
|
|
cd empty &&
|
|
|
|
git rev-list --all >actual &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
2013-11-01 18:33:15 +00:00
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2017-08-02 22:26:06 +00:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty glob' '
|
2017-08-02 22:24:51 +00:00
|
|
|
git rev-list --glob=does-not-match-anything >actual &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
revision: set rev_input_given in handle_revision_arg()
Commit 7ba826290a (revision: add rev_input_given flag, 2017-08-02) added
a flag to rev_info to tell whether we got any revision arguments. As
explained there, this is necessary because some revision arguments may
not produce any pending traversal objects, but should still inhibit
default behaviors (e.g., a glob that matches nothing).
However, it only set the flag in the globbing code, but not for
revisions we get on the command-line or via stdin. This leads to two
problems:
- the command-line code keeps its own separate got_rev_arg flag; this
isn't wrong, but it's confusing and an extra maintenance burden
- even specifically-named rev arguments might end up not adding any
pending objects: if --ignore-missing is set, then specifying a
missing object is a noop rather than an error.
And that leads to some user-visible bugs:
- when deciding whether a default rev like "HEAD" should kick in, we
check both got_rev_arg and rev_input_given. That means that
"--ignore-missing $ZERO_OID" works on the command-line (where we set
got_rev_arg) but not on --stdin (where we don't)
- when rev-list decides whether it should complain that it wasn't
given a starting point, it relies on rev_input_given. So it can't
even get the command-line "--ignore-missing $ZERO_OID" right
Let's consistently set the flag if we got any revision argument. That
lets us clean up the redundant got_rev_arg, and fixes both of those bugs
(but note there are three new tests: we'll confirm the already working
git-log command-line case).
A few implementation notes:
- conceptually we want to set the flag whenever handle_revision_arg()
finds an actual revision arg ("handles" it, you might say). But it
covers a ton of cases with early returns. Rather than annotating
each one, we just wrap it and use its success exit-code to set the
flag in one spot.
- the new rev-list test is in t6018, which is titled to cover globs.
This isn't exactly a glob, but it made sense to stick it with the
other tests that handle the "even though we got a rev, we have no
pending objects" case, which are globs.
- the tests check for the oid of a missing object, which it's pretty
clear --ignore-missing should ignore. You can see the same behavior
with "--ignore-missing a-ref-that-does-not-exist", because
--ignore-missing treats them both the same. That's perhaps less
clearly correct, and we may want to change that in the future. But
the way the code and tests here are written, we'd continue to do the
right thing even if it does.
Reported-by: Bryan Turner <bturner@atlassian.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-08-26 20:13:05 +00:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-list should succeed with empty output when ignoring missing' '
|
|
|
|
git rev-list --ignore-missing $ZERO_OID >actual &&
|
|
|
|
test_must_be_empty actual
|
2017-08-02 22:24:51 +00:00
|
|
|
'
|
|
|
|
|
2011-04-21 10:48:24 +00:00
|
|
|
test_expect_success 'shortlog accepts --glob/--tags/--remotes' '
|
|
|
|
|
|
|
|
compare shortlog "subspace/one subspace/two" --branches=subspace &&
|
|
|
|
compare shortlog \
|
2020-11-18 23:44:36 +00:00
|
|
|
"main subspace-x someref other/three subspace/one subspace/two" \
|
2011-04-21 10:48:24 +00:00
|
|
|
--branches &&
|
2020-11-18 23:44:36 +00:00
|
|
|
compare shortlog main "--glob=heads/someref/* main" &&
|
2011-04-21 10:48:24 +00:00
|
|
|
compare shortlog "subspace/one subspace/two other/three" \
|
|
|
|
"--glob=heads/subspace/* --glob=heads/other/*" &&
|
|
|
|
compare shortlog \
|
2020-11-18 23:44:36 +00:00
|
|
|
"main other/three someref subspace-x subspace/one subspace/two" \
|
2011-04-21 10:48:24 +00:00
|
|
|
"--glob=heads/*" &&
|
|
|
|
compare shortlog foo/bar --tags=foo &&
|
2018-11-12 13:25:43 +00:00
|
|
|
compare shortlog "foo/bar qux/one qux/two qux/x" --tags &&
|
2011-04-21 10:48:24 +00:00
|
|
|
compare shortlog foo/baz --remotes=foo
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog accepts --glob as detached option' '
|
|
|
|
|
|
|
|
compare shortlog \
|
2020-11-18 23:44:36 +00:00
|
|
|
"main other/three someref subspace-x subspace/one subspace/two" \
|
2011-04-21 10:48:24 +00:00
|
|
|
"--glob heads/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog --glob is not confused by option-like argument' '
|
|
|
|
|
2020-11-18 23:44:36 +00:00
|
|
|
compare shortlog main "--glob -e main"
|
2011-04-21 10:48:24 +00:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 09:48:25 +00:00
|
|
|
test_done
|