2009-07-29 21:02:39 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='merging when a directory was replaced with a symlink'
|
2020-11-18 23:44:38 +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
|
|
|
|
|
tests: mark tests as passing with SANITIZE=leak
This marks tests that have been leak-free since various recent
commits, but which were not marked us such when the memory leak was
fixed. These were mostly discovered with the "check" mode added in
faececa53f9 (test-lib: have the "check" mode for SANITIZE=leak
consider leak logs, 2022-07-28).
Commits that fixed the last memory leak in these tests. Per narrowing
down when they started to pass under SANITIZE=leak with "bisect":
- t1022-read-tree-partial-clone.sh:
7e2619d8ff0 (list_objects_filter_options: plug leak of filter_spec
strings, 2022-09-08)
- t4053-diff-no-index.sh: 07a6f94a6d0 (diff-no-index: release prefixed
filenames, 2022-09-07)
- t6415-merge-dir-to-symlink.sh: bac92b1f39f (Merge branch
'js/ort-clean-up-after-failed-merge', 2022-08-08).
- t5554-noop-fetch-negotiator.sh:
66eede4a37c (prepare_repo_settings(): plug leak of config values,
2022-09-08)
- t2012-checkout-last.sh, t7504-commit-msg-hook.sh,
t91{15,46,60}-git-svn-*.sh: The in-flight "pw/rebase-no-reflog-action"
series, upon which this is based:
https://lore.kernel.org/git/pull.1405.git.1667575142.gitgitgadget@gmail.com/
Let's mark all of these as passing with
"TEST_PASSES_SANITIZE_LEAK=true", to have it regression tested,
including as part of the "linux-leaks" CI job.
Additionally, let's remove the "!SANITIZE_LEAK" prerequisite from
tests that now pass, these were marked as failing in:
- 77e56d55ba6 (diff.c: fix a double-free regression in a18d66cefb,
2022-03-17)
- c4d1d526312 (tests: change some 'test $(git) = "x"' to test_cmp,
2022-03-07)
These were not spotted with the new "check" mode, but manually, it
doesn't cover these sort of prerequisites. There's few enough that we
shouldn't bother to automate it. They'll be going away sooner than
later.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
2022-11-08 18:17:37 +00:00
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
2009-07-29 21:02:39 +00:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'create a commit where dir a/b changed to symlink' '
|
2009-07-29 21:02:39 +00:00
|
|
|
mkdir -p a/b/c a/b-2/c &&
|
|
|
|
> a/b/c/d &&
|
|
|
|
> a/b-2/c/d &&
|
|
|
|
> a/x &&
|
|
|
|
git add -A &&
|
|
|
|
git commit -m base &&
|
|
|
|
git tag start &&
|
|
|
|
rm -rf a/b &&
|
|
|
|
git add -A &&
|
2013-06-07 20:53:33 +00:00
|
|
|
test_ln_s_add b-2 a/b &&
|
2009-07-29 21:02:39 +00:00
|
|
|
git commit -m "dir to symlink"
|
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'checkout does not clobber untracked symlink' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git checkout HEAD^0 &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git reset --hard main &&
|
2009-07-29 21:02:39 +00:00
|
|
|
git rm --cached a/b &&
|
|
|
|
git commit -m "untracked symlink remains" &&
|
2021-09-11 17:08:42 +00:00
|
|
|
test_must_fail git checkout start^0 &&
|
|
|
|
git clean -fd # Do not leave the untracked symlink in the way
|
2011-02-20 12:13:43 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'a/b-2/c/d is kept when clobbering symlink b' '
|
2011-02-20 12:13:43 +00:00
|
|
|
git checkout HEAD^0 &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git reset --hard main &&
|
2011-02-20 12:13:43 +00:00
|
|
|
git rm --cached a/b &&
|
|
|
|
git commit -m "untracked symlink remains" &&
|
|
|
|
git checkout -f start^0 &&
|
2021-09-11 17:08:42 +00:00
|
|
|
test_path_is_file a/b-2/c/d &&
|
|
|
|
git clean -fd # Do not leave the untracked symlink in the way
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'checkout should not have deleted a/b-2/c/d' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git checkout HEAD^0 &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git reset --hard main &&
|
2009-07-29 21:02:39 +00:00
|
|
|
git checkout start^0 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'setup for merge test' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d &&
|
2009-07-29 21:02:39 +00:00
|
|
|
echo x > a/x &&
|
|
|
|
git add a/x &&
|
|
|
|
git commit -m x &&
|
|
|
|
git tag baseline
|
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git merge -s resolve main &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
|
|
|
|
test -h a/b
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git merge -s recursive main &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
|
|
|
|
test -h a/b
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git checkout main^0 &&
|
2010-07-09 13:10:51 +00:00
|
|
|
git merge -s resolve baseline^0 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
|
|
|
|
test -h a/b
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
2020-11-18 23:44:38 +00:00
|
|
|
git checkout main^0 &&
|
2010-07-09 13:10:51 +00:00
|
|
|
git merge -s recursive baseline^0 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b-2/c/d
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b was resolved as symlink' '
|
|
|
|
test -h a/b
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_failure 'do not lose untracked in merge (resolve)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
>a/b/c/e &&
|
2020-11-18 23:44:38 +00:00
|
|
|
test_must_fail git merge -s resolve main &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b/c/e &&
|
|
|
|
test_path_is_file a/b-2/c/d
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'do not lose untracked in merge (recursive)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
>a/b/c/e &&
|
2020-11-18 23:44:38 +00:00
|
|
|
test_must_fail git merge -s recursive main &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b/c/e &&
|
|
|
|
test_path_is_file a/b-2/c/d
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'do not lose modifications in merge (resolve)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
echo more content >>a/b/c/d &&
|
2020-11-18 23:44:38 +00:00
|
|
|
test_must_fail git merge -s resolve main
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'do not lose modifications in merge (recursive)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
echo more content >>a/b/c/d &&
|
2020-11-18 23:44:38 +00:00
|
|
|
test_must_fail git merge -s recursive main
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout start^0 &&
|
|
|
|
rm -rf a/b-2 &&
|
|
|
|
git add -A &&
|
2013-06-07 20:53:33 +00:00
|
|
|
test_ln_s_add b a/b-2 &&
|
2009-07-29 21:02:39 +00:00
|
|
|
git commit -m "dir a/b-2 to symlink" &&
|
|
|
|
git tag test2
|
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success 'merge should not have D/F conflicts (resolve)' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
git merge -s resolve test2 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b/c/d
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
|
|
|
|
test -h a/b-2
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'merge should not have D/F conflicts (recursive)' '
|
2009-07-29 21:02:39 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout baseline^0 &&
|
|
|
|
git merge -s recursive test2 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b/c/d
|
2009-07-29 21:02:39 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
|
|
|
|
test -h a/b-2
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'merge should not have F/D conflicts (recursive)' '
|
2010-07-09 13:10:51 +00:00
|
|
|
git reset --hard &&
|
|
|
|
git checkout -b foo test2 &&
|
|
|
|
git merge -s recursive baseline^0 &&
|
2020-02-27 00:14:21 +00:00
|
|
|
test_path_is_file a/b/c/d
|
2010-07-09 13:10:51 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 20:53:33 +00:00
|
|
|
test_expect_success SYMLINKS 'a/b-2 was resolved as symlink' '
|
|
|
|
test -h a/b-2
|
|
|
|
'
|
|
|
|
|
2009-07-29 21:02:39 +00:00
|
|
|
test_done
|