2010-12-13 04:01:15 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='tests for ref^{stuff}'
|
|
|
|
|
2020-11-19 00:44:21 +01: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 00:44:19 +01:00
|
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
|
2010-12-13 04:01:15 +01:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success 'setup' '
|
|
|
|
echo blob >a-blob &&
|
2015-12-22 16:05:49 +01:00
|
|
|
git tag -a -m blob blob-tag $(git hash-object -w a-blob) &&
|
2010-12-13 04:01:15 +01:00
|
|
|
mkdir a-tree &&
|
|
|
|
echo moreblobs >a-tree/another-blob &&
|
|
|
|
git add . &&
|
2015-12-22 16:05:49 +01:00
|
|
|
TREE_SHA1=$(git write-tree) &&
|
2010-12-13 04:01:15 +01:00
|
|
|
git tag -a -m tree tree-tag "$TREE_SHA1" &&
|
|
|
|
git commit -m Initial &&
|
|
|
|
git tag -a -m commit commit-tag &&
|
|
|
|
git branch ref &&
|
2020-11-19 00:44:21 +01:00
|
|
|
git checkout main &&
|
2010-12-13 04:01:15 +01:00
|
|
|
echo modified >>a-blob &&
|
|
|
|
git add -u &&
|
2016-01-10 03:22:29 +01:00
|
|
|
git commit -m Modified &&
|
|
|
|
git branch modref &&
|
|
|
|
echo changed! >>a-blob &&
|
|
|
|
git add -u &&
|
|
|
|
git commit -m !Exp &&
|
|
|
|
git branch expref &&
|
|
|
|
echo changed >>a-blob &&
|
|
|
|
git add -u &&
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
git commit -m Changed &&
|
|
|
|
echo changed-again >>a-blob &&
|
|
|
|
git add -u &&
|
|
|
|
git commit -m Changed-again
|
2010-12-13 04:01:15 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{non-existent}' '
|
|
|
|
test_must_fail git rev-parse ref^{non-existent}
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{}' '
|
|
|
|
git rev-parse ref >expected &&
|
|
|
|
git rev-parse ref^{} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
git rev-parse commit-tag^{} >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{commit}' '
|
|
|
|
git rev-parse ref >expected &&
|
|
|
|
git rev-parse ref^{commit} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
git rev-parse commit-tag^{commit} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
test_must_fail git rev-parse tree-tag^{commit} &&
|
|
|
|
test_must_fail git rev-parse blob-tag^{commit}
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{tree}' '
|
|
|
|
echo $TREE_SHA1 >expected &&
|
|
|
|
git rev-parse ref^{tree} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
git rev-parse commit-tag^{tree} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
git rev-parse tree-tag^{tree} >actual &&
|
|
|
|
test_cmp expected actual &&
|
|
|
|
test_must_fail git rev-parse blob-tag^{tree}
|
|
|
|
'
|
|
|
|
|
2013-09-03 21:50:16 +02:00
|
|
|
test_expect_success 'ref^{tag}' '
|
|
|
|
test_must_fail git rev-parse HEAD^{tag} &&
|
|
|
|
git rev-parse commit-tag >expected &&
|
|
|
|
git rev-parse commit-tag^{tag} >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2010-12-13 04:01:15 +01:00
|
|
|
test_expect_success 'ref^{/.}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
git rev-parse main >expected &&
|
|
|
|
git rev-parse main^{/.} >actual &&
|
2010-12-13 04:01:15 +01:00
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/non-existent}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
test_must_fail git rev-parse main^{/non-existent}
|
2010-12-13 04:01:15 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/Initial}' '
|
|
|
|
git rev-parse ref >expected &&
|
2020-11-19 00:44:21 +01:00
|
|
|
git rev-parse main^{/Initial} >actual &&
|
2010-12-13 04:01:15 +01:00
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2016-01-10 03:22:29 +01:00
|
|
|
test_expect_success 'ref^{/!Exp}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
test_must_fail git rev-parse main^{/!Exp}
|
2016-01-10 03:22:29 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
test_must_fail git rev-parse main^{/!}
|
2016-01-10 03:22:29 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!!Exp}' '
|
|
|
|
git rev-parse expref >expected &&
|
2020-11-19 00:44:21 +01:00
|
|
|
git rev-parse main^{/!!Exp} >actual &&
|
2016-01-10 03:22:29 +01:00
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
test_expect_success 'ref^{/!-}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
test_must_fail git rev-parse main^{/!-}
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!-.}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
test_must_fail git rev-parse main^{/!-.}
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!-non-existent}' '
|
2020-11-19 00:44:21 +01:00
|
|
|
git rev-parse main >expected &&
|
|
|
|
git rev-parse main^{/!-non-existent} >actual &&
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!-Changed}' '
|
|
|
|
git rev-parse expref >expected &&
|
2020-11-19 00:44:21 +01:00
|
|
|
git rev-parse main^{/!-Changed} >actual &&
|
object name: introduce '^{/!-<negative pattern>}' notation
To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say
$ git rev-parse HEAD^{/!-foo}
and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.
The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:
$ git diff @^{/!-^WIP}
The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.
Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-31 01:06:01 +01:00
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'ref^{/!-!Exp}' '
|
|
|
|
git rev-parse modref >expected &&
|
|
|
|
git rev-parse expref^{/!-!Exp} >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2010-12-13 04:01:15 +01:00
|
|
|
test_done
|