2010-01-20 12:48:25 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='rev-list/rev-parse --glob'
|
|
|
|
|
2020-11-19 02:44:36 +03: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-19 02:44:19 +03:00
|
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
|
revisions API: have release_revisions() release "cmdline"
Extend the the release_revisions() function so that it frees the
"cmdline" in the "struct rev_info". This in combination with a
preceding change to free "commits" and "mailmap" means that we can
whitelist another test under "TEST_PASSES_SANITIZE_LEAK=true".
There was a proposal in [1] to do away with xstrdup()-ing this
add_rev_cmdline(), perhaps that would be worthwhile, but for now let's
just free() it.
We could also make that a "char *" in "struct rev_cmdline_entry"
itself, but since we own it let's expose it as a constant to outside
callers. I proposed that in [2] but have since changed my mind. See
14d30cdfc04 (ref-filter: fix memory leak in `free_array_item()`,
2019-07-10), c514c62a4fd (checkout: fix leak of non-existent branch
names, 2020-08-14) and other log history hits for "free((char *)" for
prior art.
This includes the tests we had false-positive passes on before my
6798b08e848 (perl Git.pm: don't ignore signalled failure in
_cmd_close(), 2022-02-01), now they pass for real.
Since there are 66 tests matching t/t[0-9]*git-svn*.sh it's easier to
list those that don't pass than to touch most of those 66. So let's
introduce a "TEST_FAILS_SANITIZE_LEAK=true", which if set in the tests
won't cause lib-git-svn.sh to set "TEST_PASSES_SANITIZE_LEAK=true.
This change also marks all the tests that we removed
"TEST_FAILS_SANITIZE_LEAK=true" from in an earlier commit due to
removing the UNLEAK() from cmd_format_patch(), we can now assert that
its API use doesn't leak any "struct rev_info" memory.
This change also made commit "t5503-tagfollow.sh" pass on current
master, but that would regress when combined with
ps/fetch-atomic-fixup's de004e848a9 (t5503: simplify setup of test
which exercises failure of backfill, 2022-03-03) (through no fault of
that topic, that change started using "git clone" in the test, which
has an outstanding leak). Let's leave that test out for now to avoid
in-flight semantic conflicts.
1. https://lore.kernel.org/git/YUj%2FgFRh6pwrZalY@carlos-mbp.lan/
2. https://lore.kernel.org/git/87o88obkb1.fsf@evledraar.gmail.com/
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-13 23:01:47 +03:00
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
2010-01-20 12:48:25 +03: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-19 02:44:36 +03:00
|
|
|
commit main &&
|
|
|
|
git checkout -b subspace/one main &&
|
2010-01-20 12:48:25 +03:00
|
|
|
commit one &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout -b subspace/two main &&
|
2010-01-20 12:48:25 +03:00
|
|
|
commit two &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout -b subspace-x main &&
|
2010-01-20 12:48:25 +03:00
|
|
|
commit subspace-x &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout -b other/three main &&
|
2010-01-20 12:48:25 +03:00
|
|
|
commit three &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout -b someref main &&
|
2010-01-20 12:48:25 +03:00
|
|
|
commit some &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout main &&
|
2020-09-27 00:04:21 +03:00
|
|
|
commit topic_2 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git tag foo/bar main &&
|
2020-09-27 00:04:21 +03:00
|
|
|
commit topic_3 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git update-ref refs/remotes/foo/baz main &&
|
2020-09-27 00:04:21 +03:00
|
|
|
commit topic_4 &&
|
2018-11-12 16:25:43 +03: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 12:48:25 +03: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 14:48:24 +04: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-19 02:44:36 +03:00
|
|
|
compare rev-parse "main" "--glob --symbolic main"
|
2011-04-21 14:48:24 +04:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:26 +03: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 12:48:25 +03: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-19 02:44:36 +03:00
|
|
|
test_expect_success 'rev-parse --glob=heads/someref/* main' '
|
2010-01-20 12:48:25 +03:00
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-parse "main" "--glob=heads/someref/* main"
|
2010-01-20 12:48:25 +03:00
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rev-parse --glob=heads/*' '
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-parse "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
2010-01-20 12:48:25 +03:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:26 +03: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 23:13:01 +04:00
|
|
|
test_expect_success 'rev-parse --exclude with --branches' '
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-parse "--exclude=*/* --branches" "main someref subspace-x"
|
2013-11-01 23:13:01 +04: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 22:17:58 +03: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 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --branches=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --tags=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=glob with --remotes=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --branches=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --tags=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-parse --exclude=ref with --remotes=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-parse "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --branches=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=subspace-* --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --tags=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=qux/? --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=glob with --remotes=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=upstream/? --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --branches=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=subspace-x --branches=sub*" "subspace/one subspace/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --tags=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=qux/x --tags=qux/*" "qux/one qux/two"
|
|
|
|
'
|
|
|
|
|
2018-11-12 16:25:44 +03:00
|
|
|
test_expect_success 'rev-list --exclude=ref with --remotes=glob' '
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "--exclude=upstream/x --remotes=upstream/*" "upstream/one upstream/two"
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:25 +03:00
|
|
|
test_expect_success 'rev-list --glob=refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-08-05 12:22:56 +04:00
|
|
|
test_expect_success 'rev-list --glob refs/heads/subspace/*' '
|
|
|
|
|
|
|
|
compare rev-list "subspace/one subspace/two" "--glob refs/heads/subspace/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2011-04-21 14:48:24 +04:00
|
|
|
test_expect_success 'rev-list not confused by option-like --glob arg' '
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-list "main" "--glob -0 main"
|
2011-04-21 14:48:24 +04:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:25 +03: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 12:48:26 +03: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 22:26:50 +04:00
|
|
|
|
|
|
|
test_expect_success 'rev-list --branches' '
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-list "main subspace-x someref other/three subspace/one subspace/two" "--branches"
|
2010-05-14 22:26:50 +04:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
test_expect_success 'rev-list --glob=heads/someref/* main' '
|
2010-01-20 12:48:25 +03:00
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-list "main" "--glob=heads/someref/* main"
|
2010-01-20 12:48:25 +03: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-19 02:44:36 +03:00
|
|
|
compare rev-list "main other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
|
2010-01-20 12:48:25 +03:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:26 +03:00
|
|
|
test_expect_success 'rev-list --tags=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/bar" "--tags=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-05-14 22:26:50 +04:00
|
|
|
test_expect_success 'rev-list --tags' '
|
|
|
|
|
2018-11-12 16:25:43 +03:00
|
|
|
compare rev-list "foo/bar qux/x qux/two qux/one" "--tags"
|
2010-05-14 22:26:50 +04:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:26 +03:00
|
|
|
test_expect_success 'rev-list --remotes=foo' '
|
|
|
|
|
|
|
|
compare rev-list "foo/baz" "--remotes=foo"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-11-01 22:33:15 +04:00
|
|
|
test_expect_success 'rev-list --exclude with --branches' '
|
2020-11-19 02:44:36 +03:00
|
|
|
compare rev-list "--exclude=*/* --branches" "main someref subspace-x"
|
2013-11-01 22:33:15 +04: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-23 00:37:23 +03: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 20:48:20 +03:00
|
|
|
git rev-list --stdin </dev/null >actual &&
|
2018-07-27 20:48:11 +03:00
|
|
|
test_must_be_empty actual
|
2013-11-01 22:33:15 +04:00
|
|
|
'
|
|
|
|
|
2017-08-03 01:26:06 +03:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with all refs excluded' '
|
2013-11-01 22:33:15 +04:00
|
|
|
git rev-list --exclude=* --all >actual &&
|
2018-07-27 20:48:11 +03:00
|
|
|
test_must_be_empty actual
|
2013-11-01 22:33:15 +04:00
|
|
|
'
|
|
|
|
|
2017-08-03 01:26:06 +03:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty --all' '
|
2013-11-01 22:33:15 +04:00
|
|
|
(
|
|
|
|
test_create_repo empty &&
|
|
|
|
cd empty &&
|
|
|
|
git rev-list --all >actual &&
|
2018-07-27 20:48:11 +03:00
|
|
|
test_must_be_empty actual
|
2013-11-01 22:33:15 +04:00
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2017-08-03 01:26:06 +03:00
|
|
|
test_expect_success 'rev-list should succeed with empty output with empty glob' '
|
2017-08-03 01:24:51 +03:00
|
|
|
git rev-list --glob=does-not-match-anything >actual &&
|
2018-07-27 20:48:11 +03: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 23:13:05 +03: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-03 01:24:51 +03:00
|
|
|
'
|
|
|
|
|
2011-04-21 14:48:24 +04:00
|
|
|
test_expect_success 'shortlog accepts --glob/--tags/--remotes' '
|
|
|
|
|
|
|
|
compare shortlog "subspace/one subspace/two" --branches=subspace &&
|
|
|
|
compare shortlog \
|
2020-11-19 02:44:36 +03:00
|
|
|
"main subspace-x someref other/three subspace/one subspace/two" \
|
2011-04-21 14:48:24 +04:00
|
|
|
--branches &&
|
2020-11-19 02:44:36 +03:00
|
|
|
compare shortlog main "--glob=heads/someref/* main" &&
|
2011-04-21 14:48:24 +04:00
|
|
|
compare shortlog "subspace/one subspace/two other/three" \
|
|
|
|
"--glob=heads/subspace/* --glob=heads/other/*" &&
|
|
|
|
compare shortlog \
|
2020-11-19 02:44:36 +03:00
|
|
|
"main other/three someref subspace-x subspace/one subspace/two" \
|
2011-04-21 14:48:24 +04:00
|
|
|
"--glob=heads/*" &&
|
|
|
|
compare shortlog foo/bar --tags=foo &&
|
2018-11-12 16:25:43 +03:00
|
|
|
compare shortlog "foo/bar qux/one qux/two qux/x" --tags &&
|
2011-04-21 14:48:24 +04:00
|
|
|
compare shortlog foo/baz --remotes=foo
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog accepts --glob as detached option' '
|
|
|
|
|
|
|
|
compare shortlog \
|
2020-11-19 02:44:36 +03:00
|
|
|
"main other/three someref subspace-x subspace/one subspace/two" \
|
2011-04-21 14:48:24 +04:00
|
|
|
"--glob heads/*"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'shortlog --glob is not confused by option-like argument' '
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
compare shortlog main "--glob -e main"
|
2011-04-21 14:48:24 +04:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-01-20 12:48:25 +03:00
|
|
|
test_done
|