зеркало из https://github.com/microsoft/git.git
Merge branch 'sb/unpack-trees-super-prefix'
"git read-tree" and its underlying unpack_trees() machinery learned to report problematic paths prefixed with the --super-prefix option. * sb/unpack-trees-super-prefix: unpack-trees: support super-prefix option t1001: modernize style t1000: modernize style read-tree: use OPT_BOOL instead of OPT_SET_INT
This commit is contained in:
Коммит
2243d229f7
|
@ -109,34 +109,34 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||
{ OPTION_CALLBACK, 0, "index-output", NULL, N_("file"),
|
||||
N_("write resulting index to <file>"),
|
||||
PARSE_OPT_NONEG, index_output_cb },
|
||||
OPT_SET_INT(0, "empty", &read_empty,
|
||||
N_("only empty the index"), 1),
|
||||
OPT_BOOL(0, "empty", &read_empty,
|
||||
N_("only empty the index")),
|
||||
OPT__VERBOSE(&opts.verbose_update, N_("be verbose")),
|
||||
OPT_GROUP(N_("Merging")),
|
||||
OPT_SET_INT('m', NULL, &opts.merge,
|
||||
N_("perform a merge in addition to a read"), 1),
|
||||
OPT_SET_INT(0, "trivial", &opts.trivial_merges_only,
|
||||
N_("3-way merge if no file level merging required"), 1),
|
||||
OPT_SET_INT(0, "aggressive", &opts.aggressive,
|
||||
N_("3-way merge in presence of adds and removes"), 1),
|
||||
OPT_SET_INT(0, "reset", &opts.reset,
|
||||
N_("same as -m, but discard unmerged entries"), 1),
|
||||
OPT_BOOL('m', NULL, &opts.merge,
|
||||
N_("perform a merge in addition to a read")),
|
||||
OPT_BOOL(0, "trivial", &opts.trivial_merges_only,
|
||||
N_("3-way merge if no file level merging required")),
|
||||
OPT_BOOL(0, "aggressive", &opts.aggressive,
|
||||
N_("3-way merge in presence of adds and removes")),
|
||||
OPT_BOOL(0, "reset", &opts.reset,
|
||||
N_("same as -m, but discard unmerged entries")),
|
||||
{ OPTION_STRING, 0, "prefix", &opts.prefix, N_("<subdirectory>/"),
|
||||
N_("read the tree into the index under <subdirectory>/"),
|
||||
PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP },
|
||||
OPT_SET_INT('u', NULL, &opts.update,
|
||||
N_("update working tree with merge result"), 1),
|
||||
OPT_BOOL('u', NULL, &opts.update,
|
||||
N_("update working tree with merge result")),
|
||||
{ OPTION_CALLBACK, 0, "exclude-per-directory", &opts,
|
||||
N_("gitignore"),
|
||||
N_("allow explicitly ignored files to be overwritten"),
|
||||
PARSE_OPT_NONEG, exclude_per_directory_cb },
|
||||
OPT_SET_INT('i', NULL, &opts.index_only,
|
||||
N_("don't check the working tree after merging"), 1),
|
||||
OPT_BOOL('i', NULL, &opts.index_only,
|
||||
N_("don't check the working tree after merging")),
|
||||
OPT__DRY_RUN(&opts.dry_run, N_("don't update the index or the work tree")),
|
||||
OPT_SET_INT(0, "no-sparse-checkout", &opts.skip_sparse_checkout,
|
||||
N_("skip applying sparse checkout filter"), 1),
|
||||
OPT_SET_INT(0, "debug-unpack", &opts.debug_unpack,
|
||||
N_("debug unpack-trees"), 1),
|
||||
OPT_BOOL(0, "no-sparse-checkout", &opts.skip_sparse_checkout,
|
||||
N_("skip applying sparse checkout filter")),
|
||||
OPT_BOOL(0, "debug-unpack", &opts.debug_unpack,
|
||||
N_("debug unpack-trees")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
|
|
2
git.c
2
git.c
|
@ -472,7 +472,7 @@ static struct cmd_struct commands[] = {
|
|||
{ "prune-packed", cmd_prune_packed, RUN_SETUP },
|
||||
{ "pull", cmd_pull, RUN_SETUP | NEED_WORK_TREE },
|
||||
{ "push", cmd_push, RUN_SETUP },
|
||||
{ "read-tree", cmd_read_tree, RUN_SETUP },
|
||||
{ "read-tree", cmd_read_tree, RUN_SETUP | SUPPORT_SUPER_PREFIX},
|
||||
{ "receive-pack", cmd_receive_pack },
|
||||
{ "reflog", cmd_reflog, RUN_SETUP },
|
||||
{ "remote", cmd_remote, RUN_SETUP },
|
||||
|
|
|
@ -128,29 +128,29 @@ cat >expected <<\EOF
|
|||
EOF
|
||||
|
||||
check_result () {
|
||||
git ls-files --stage | sed -e 's/ '"$_x40"' / X /' >current &&
|
||||
test_cmp expected current
|
||||
git ls-files --stage | sed -e 's/ '"$_x40"' / X /' >current &&
|
||||
test_cmp expected current
|
||||
}
|
||||
|
||||
# This is done on an empty work directory, which is the normal
|
||||
# merge person behaviour.
|
||||
test_expect_success \
|
||||
'3-way merge with git read-tree -m, empty cache' \
|
||||
"rm -fr [NDMALTS][NDMALTSF] Z &&
|
||||
rm .git/index &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '3-way merge with git read-tree -m, empty cache' '
|
||||
rm -fr [NDMALTS][NDMALTSF] Z &&
|
||||
rm .git/index &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
# This starts out with the first head, which is the normal
|
||||
# patch submitter behaviour.
|
||||
test_expect_success \
|
||||
'3-way merge with git read-tree -m, match H' \
|
||||
"rm -fr [NDMALTS][NDMALTSF] Z &&
|
||||
rm .git/index &&
|
||||
read_tree_must_succeed $tree_A &&
|
||||
git checkout-index -f -u -a &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '3-way merge with git read-tree -m, match H' '
|
||||
rm -fr [NDMALTS][NDMALTSF] Z &&
|
||||
rm .git/index &&
|
||||
read_tree_must_succeed $tree_A &&
|
||||
git checkout-index -f -u -a &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
: <<\END_OF_CASE_TABLE
|
||||
|
||||
|
@ -208,322 +208,304 @@ DF (file) when tree B require DF to be a directory by having DF/DF
|
|||
|
||||
END_OF_CASE_TABLE
|
||||
|
||||
test_expect_success '1 - must not have an entry not in A.' "
|
||||
rm -f .git/index XX &&
|
||||
echo XX >XX &&
|
||||
git update-index --add XX &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '1 - must not have an entry not in A.' '
|
||||
rm -f .git/index XX &&
|
||||
echo XX >XX &&
|
||||
git update-index --add XX &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'2 - must match B in !O && !A && B case.' \
|
||||
"rm -f .git/index NA &&
|
||||
cp .orig-B/NA NA &&
|
||||
git update-index --add NA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B"
|
||||
test_expect_success '2 - must match B in !O && !A && B case.' '
|
||||
rm -f .git/index NA &&
|
||||
cp .orig-B/NA NA &&
|
||||
git update-index --add NA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'2 - matching B alone is OK in !O && !A && B case.' \
|
||||
"rm -f .git/index NA &&
|
||||
cp .orig-B/NA NA &&
|
||||
git update-index --add NA &&
|
||||
echo extra >>NA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B"
|
||||
test_expect_success '2 - matching B alone is OK in !O && !A && B case.' '
|
||||
rm -f .git/index NA &&
|
||||
cp .orig-B/NA NA &&
|
||||
git update-index --add NA &&
|
||||
echo extra >>NA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'3 - must match A in !O && A && !B case.' \
|
||||
"rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
git update-index --add AN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '3 - must match A in !O && A && !B case.' '
|
||||
rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
git update-index --add AN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'3 - matching A alone is OK in !O && A && !B case.' \
|
||||
"rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
git update-index --add AN &&
|
||||
echo extra >>AN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B"
|
||||
test_expect_success '3 - matching A alone is OK in !O && A && !B case.' '
|
||||
rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
git update-index --add AN &&
|
||||
echo extra >>AN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'3 (fail) - must match A in !O && A && !B case.' "
|
||||
rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
echo extra >>AN &&
|
||||
git update-index --add AN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '3 (fail) - must match A in !O && A && !B case.' '
|
||||
rm -f .git/index AN &&
|
||||
cp .orig-A/AN AN &&
|
||||
echo extra >>AN &&
|
||||
git update-index --add AN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'4 - must match and be up-to-date in !O && A && B && A!=B case.' \
|
||||
"rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
git update-index --add AA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '4 - must match and be up-to-date in !O && A && B && A!=B case.' '
|
||||
rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
git update-index --add AA &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
|
||||
rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
git update-index --add AA &&
|
||||
echo extra >>AA &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' '
|
||||
rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
git update-index --add AA &&
|
||||
echo extra >>AA &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
|
||||
rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
echo extra >>AA &&
|
||||
git update-index --add AA &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' '
|
||||
rm -f .git/index AA &&
|
||||
cp .orig-A/AA AA &&
|
||||
echo extra >>AA &&
|
||||
git update-index --add AA &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'5 - must match in !O && A && B && A==B case.' \
|
||||
"rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
git update-index --add LL &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '5 - must match in !O && A && B && A==B case.' '
|
||||
rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
git update-index --add LL &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'5 - must match in !O && A && B && A==B case.' \
|
||||
"rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
git update-index --add LL &&
|
||||
echo extra >>LL &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '5 - must match in !O && A && B && A==B case.' '
|
||||
rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
git update-index --add LL &&
|
||||
echo extra >>LL &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'5 (fail) - must match A in !O && A && B && A==B case.' "
|
||||
rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
echo extra >>LL &&
|
||||
git update-index --add LL &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '5 (fail) - must match A in !O && A && B && A==B case.' '
|
||||
rm -f .git/index LL &&
|
||||
cp .orig-A/LL LL &&
|
||||
echo extra >>LL &&
|
||||
git update-index --add LL &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'6 - must not exist in O && !A && !B case' "
|
||||
rm -f .git/index DD &&
|
||||
echo DD >DD &&
|
||||
git update-index --add DD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '6 - must not exist in O && !A && !B case' '
|
||||
rm -f .git/index DD &&
|
||||
echo DD >DD &&
|
||||
git update-index --add DD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'7 - must not exist in O && !A && B && O!=B case' "
|
||||
rm -f .git/index DM &&
|
||||
cp .orig-B/DM DM &&
|
||||
git update-index --add DM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '7 - must not exist in O && !A && B && O!=B case' '
|
||||
rm -f .git/index DM &&
|
||||
cp .orig-B/DM DM &&
|
||||
git update-index --add DM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'8 - must not exist in O && !A && B && O==B case' "
|
||||
rm -f .git/index DN &&
|
||||
cp .orig-B/DN DN &&
|
||||
git update-index --add DN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '8 - must not exist in O && !A && B && O==B case' '
|
||||
rm -f .git/index DN &&
|
||||
cp .orig-B/DN DN &&
|
||||
git update-index --add DN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'9 - must match and be up-to-date in O && A && !B && O!=A case' \
|
||||
"rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
git update-index --add MD &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '9 - must match and be up-to-date in O && A && !B && O!=A case' '
|
||||
rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
git update-index --add MD &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
|
||||
rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
git update-index --add MD &&
|
||||
echo extra >>MD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' '
|
||||
rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
git update-index --add MD &&
|
||||
echo extra >>MD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
|
||||
rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
echo extra >>MD &&
|
||||
git update-index --add MD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' '
|
||||
rm -f .git/index MD &&
|
||||
cp .orig-A/MD MD &&
|
||||
echo extra >>MD &&
|
||||
git update-index --add MD &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'10 - must match and be up-to-date in O && A && !B && O==A case' \
|
||||
"rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
git update-index --add ND &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '10 - must match and be up-to-date in O && A && !B && O==A case' '
|
||||
rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
git update-index --add ND &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
|
||||
rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
git update-index --add ND &&
|
||||
echo extra >>ND &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' '
|
||||
rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
git update-index --add ND &&
|
||||
echo extra >>ND &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
|
||||
rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
echo extra >>ND &&
|
||||
git update-index --add ND &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' '
|
||||
rm -f .git/index ND &&
|
||||
cp .orig-A/ND ND &&
|
||||
echo extra >>ND &&
|
||||
git update-index --add ND &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' \
|
||||
"rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
git update-index --add MM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
|
||||
rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
git update-index --add MM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
|
||||
rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
git update-index --add MM &&
|
||||
echo extra >>MM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
|
||||
rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
git update-index --add MM &&
|
||||
echo extra >>MM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
|
||||
rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
echo extra >>MM &&
|
||||
git update-index --add MM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
|
||||
rm -f .git/index MM &&
|
||||
cp .orig-A/MM MM &&
|
||||
echo extra >>MM &&
|
||||
git update-index --add MM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'12 - must match A in O && A && B && O!=A && A==B case' \
|
||||
"rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
git update-index --add SS &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '12 - must match A in O && A && B && O!=A && A==B case' '
|
||||
rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
git update-index --add SS &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'12 - must match A in O && A && B && O!=A && A==B case' \
|
||||
"rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
git update-index --add SS &&
|
||||
echo extra >>SS &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '12 - must match A in O && A && B && O!=A && A==B case' '
|
||||
rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
git update-index --add SS &&
|
||||
echo extra >>SS &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'12 (fail) - must match A in O && A && B && O!=A && A==B case' "
|
||||
rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
echo extra >>SS &&
|
||||
git update-index --add SS &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '12 (fail) - must match A in O && A && B && O!=A && A==B case' '
|
||||
rm -f .git/index SS &&
|
||||
cp .orig-A/SS SS &&
|
||||
echo extra >>SS &&
|
||||
git update-index --add SS &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'13 - must match A in O && A && B && O!=A && O==B case' \
|
||||
"rm -f .git/index MN &&
|
||||
cp .orig-A/MN MN &&
|
||||
git update-index --add MN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '13 - must match A in O && A && B && O!=A && O==B case' '
|
||||
rm -f .git/index MN &&
|
||||
cp .orig-A/MN MN &&
|
||||
git update-index --add MN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'13 - must match A in O && A && B && O!=A && O==B case' \
|
||||
"rm -f .git/index MN &&
|
||||
cp .orig-A/MN MN &&
|
||||
git update-index --add MN &&
|
||||
echo extra >>MN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '13 - must match A in O && A && B && O!=A && O==B case' '
|
||||
rm -f .git/index MN &&
|
||||
cp .orig-A/MN MN &&
|
||||
git update-index --add MN &&
|
||||
echo extra >>MN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'14 - must match and be up-to-date in O && A && B && O==A && O!=B case' \
|
||||
"rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
git update-index --add NM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '14 - must match and be up-to-date in O && A && B && O==A && O!=B case' '
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
git update-index --add NM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'14 - may match B in O && A && B && O==A && O!=B case' \
|
||||
"rm -f .git/index NM &&
|
||||
cp .orig-B/NM NM &&
|
||||
git update-index --add NM &&
|
||||
echo extra >>NM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '14 - may match B in O && A && B && O==A && O!=B case' '
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-B/NM NM &&
|
||||
git update-index --add NM &&
|
||||
echo extra >>NM &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
git update-index --add NM &&
|
||||
echo extra >>NM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' '
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
git update-index --add NM &&
|
||||
echo extra >>NM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
echo extra >>NM &&
|
||||
git update-index --add NM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' '
|
||||
rm -f .git/index NM &&
|
||||
cp .orig-A/NM NM &&
|
||||
echo extra >>NM &&
|
||||
git update-index --add NM &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'15 - must match A in O && A && B && O==A && O==B case' \
|
||||
"rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
git update-index --add NN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '15 - must match A in O && A && B && O==A && O==B case' '
|
||||
rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
git update-index --add NN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'15 - must match A in O && A && B && O==A && O==B case' \
|
||||
"rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
git update-index --add NN &&
|
||||
echo extra >>NN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result"
|
||||
test_expect_success '15 - must match A in O && A && B && O==A && O==B case' '
|
||||
rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
git update-index --add NN &&
|
||||
echo extra >>NN &&
|
||||
read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
|
||||
check_result
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'15 (fail) - must match A in O && A && B && O==A && O==B case' "
|
||||
rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
echo extra >>NN &&
|
||||
git update-index --add NN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
"
|
||||
test_expect_success '15 (fail) - must match A in O && A && B && O==A && O==B case' '
|
||||
rm -f .git/index NN &&
|
||||
cp .orig-A/NN NN &&
|
||||
echo extra >>NN &&
|
||||
git update-index --add NN &&
|
||||
read_tree_must_fail -m $tree_O $tree_A $tree_B
|
||||
'
|
||||
|
||||
# #16
|
||||
test_expect_success \
|
||||
'16 - A matches in one and B matches in another.' \
|
||||
'rm -f .git/index F16 &&
|
||||
echo F16 >F16 &&
|
||||
git update-index --add F16 &&
|
||||
tree0=$(git write-tree) &&
|
||||
echo E16 >F16 &&
|
||||
git update-index F16 &&
|
||||
tree1=$(git write-tree) &&
|
||||
read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&
|
||||
git ls-files --stage'
|
||||
test_expect_success '16 - A matches in one and B matches in another.' '
|
||||
rm -f .git/index F16 &&
|
||||
echo F16 >F16 &&
|
||||
git update-index --add F16 &&
|
||||
tree0=$(git write-tree) &&
|
||||
echo E16 >F16 &&
|
||||
git update-index F16 &&
|
||||
tree1=$(git write-tree) &&
|
||||
read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&
|
||||
git ls-files --stage
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
|
@ -14,10 +14,10 @@ all the combinations described in the two-tree merge "carry forward"
|
|||
rules, found in <Documentation/git read-tree.txt>.
|
||||
|
||||
In the test, these paths are used:
|
||||
bozbar - in H, stays in M, modified from bozbar to gnusto
|
||||
frotz - not in H added in M
|
||||
nitfol - in H, stays in M unmodified
|
||||
rezrov - in H, deleted in M
|
||||
bozbar - in H, stays in M, modified from bozbar to gnusto
|
||||
frotz - not in H added in M
|
||||
nitfol - in H, stays in M unmodified
|
||||
rezrov - in H, deleted in M
|
||||
yomin - not in H or M
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
@ -60,336 +60,343 @@ EOF
|
|||
|
||||
sed -e 's/bozbar/gnusto (earlier bozbar)/' bozbar-old >bozbar-new
|
||||
|
||||
test_expect_success \
|
||||
setup \
|
||||
'echo frotz >frotz &&
|
||||
echo nitfol >nitfol &&
|
||||
cat bozbar-old >bozbar &&
|
||||
echo rezrov >rezrov &&
|
||||
echo yomin >yomin &&
|
||||
git update-index --add nitfol bozbar rezrov &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH &&
|
||||
test_expect_success 'setup' '
|
||||
echo frotz >frotz &&
|
||||
echo nitfol >nitfol &&
|
||||
cat bozbar-old >bozbar &&
|
||||
echo rezrov >rezrov &&
|
||||
echo yomin >yomin &&
|
||||
git update-index --add nitfol bozbar rezrov &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH &&
|
||||
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add frotz bozbar --force-remove rezrov &&
|
||||
git ls-files --stage >M.out &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git diff-tree $treeH $treeM'
|
||||
|
||||
test_expect_success \
|
||||
'1, 2, 3 - no carry forward' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >1-3.out &&
|
||||
test_cmp M.out 1-3.out &&
|
||||
check_cache_at bozbar dirty &&
|
||||
check_cache_at frotz dirty &&
|
||||
check_cache_at nitfol dirty'
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add frotz bozbar --force-remove rezrov &&
|
||||
git ls-files --stage >M.out &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git diff-tree $treeH $treeM
|
||||
'
|
||||
|
||||
test_expect_success '1, 2, 3 - no carry forward' '
|
||||
rm -f .git/index &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >1-3.out &&
|
||||
test_cmp M.out 1-3.out &&
|
||||
check_cache_at bozbar dirty &&
|
||||
check_cache_at frotz dirty &&
|
||||
check_cache_at nitfol dirty
|
||||
'
|
||||
echo '+100644 X 0 yomin' >expected
|
||||
|
||||
test_expect_success \
|
||||
'4 - carry forward local addition.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
git update-index --add yomin &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >4.out &&
|
||||
test_must_fail git diff --no-index M.out 4.out >4diff.out &&
|
||||
compare_change 4diff.out expected &&
|
||||
check_cache_at yomin clean'
|
||||
test_expect_success '4 - carry forward local addition.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
git update-index --add yomin &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >4.out &&
|
||||
test_must_fail git diff --no-index M.out 4.out >4diff.out &&
|
||||
compare_change 4diff.out expected &&
|
||||
check_cache_at yomin clean
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'5 - carry forward local addition.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo yomin >yomin &&
|
||||
git update-index --add yomin &&
|
||||
echo yomin yomin >yomin &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >5.out &&
|
||||
test_must_fail git diff --no-index M.out 5.out >5diff.out &&
|
||||
compare_change 5diff.out expected &&
|
||||
check_cache_at yomin dirty'
|
||||
test_expect_success '5 - carry forward local addition.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo yomin >yomin &&
|
||||
git update-index --add yomin &&
|
||||
echo yomin yomin >yomin &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >5.out &&
|
||||
test_must_fail git diff --no-index M.out 5.out >5diff.out &&
|
||||
compare_change 5diff.out expected &&
|
||||
check_cache_at yomin dirty
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'6 - local addition already has the same.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
git update-index --add frotz &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >6.out &&
|
||||
test_cmp M.out 6.out &&
|
||||
check_cache_at frotz clean'
|
||||
test_expect_success '6 - local addition already has the same.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
git update-index --add frotz &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >6.out &&
|
||||
test_cmp M.out 6.out &&
|
||||
check_cache_at frotz clean
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'7 - local addition already has the same.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
echo frotz frotz >frotz &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >7.out &&
|
||||
test_cmp M.out 7.out &&
|
||||
check_cache_at frotz dirty'
|
||||
test_expect_success '7 - local addition already has the same.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
echo frotz frotz >frotz &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >7.out &&
|
||||
test_cmp M.out 7.out &&
|
||||
check_cache_at frotz dirty
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'8 - conflicting addition.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '8 - conflicting addition.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'9 - conflicting addition.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
echo frotz >frotz &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '9 - conflicting addition.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo frotz frotz >frotz &&
|
||||
git update-index --add frotz &&
|
||||
echo frotz >frotz &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'10 - path removed.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >10.out &&
|
||||
test_cmp M.out 10.out'
|
||||
test_expect_success '10 - path removed.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >10.out &&
|
||||
test_cmp M.out 10.out
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'11 - dirty path removed.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '11 - dirty path removed.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'12 - unmatching local changes being removed.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '12 - unmatching local changes being removed.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'13 - unmatching local changes being removed.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
echo rezrov >rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '13 - unmatching local changes being removed.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo rezrov rezrov >rezrov &&
|
||||
git update-index --add rezrov &&
|
||||
echo rezrov >rezrov &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
-100644 X 0 nitfol
|
||||
+100644 X 0 nitfol
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'14 - unchanged in two heads.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo nitfol nitfol >nitfol &&
|
||||
git update-index --add nitfol &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >14.out &&
|
||||
test_must_fail git diff --no-index M.out 14.out >14diff.out &&
|
||||
compare_change 14diff.out expected &&
|
||||
check_cache_at nitfol clean'
|
||||
test_expect_success '14 - unchanged in two heads.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo nitfol nitfol >nitfol &&
|
||||
git update-index --add nitfol &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >14.out &&
|
||||
test_must_fail git diff --no-index M.out 14.out >14diff.out &&
|
||||
compare_change 14diff.out expected &&
|
||||
check_cache_at nitfol clean
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'15 - unchanged in two heads.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo nitfol nitfol >nitfol &&
|
||||
git update-index --add nitfol &&
|
||||
echo nitfol nitfol nitfol >nitfol &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >15.out &&
|
||||
test_must_fail git diff --no-index M.out 15.out >15diff.out &&
|
||||
compare_change 15diff.out expected &&
|
||||
check_cache_at nitfol dirty'
|
||||
test_expect_success '15 - unchanged in two heads.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo nitfol nitfol >nitfol &&
|
||||
git update-index --add nitfol &&
|
||||
echo nitfol nitfol nitfol >nitfol &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >15.out &&
|
||||
test_must_fail git diff --no-index M.out 15.out >15diff.out &&
|
||||
compare_change 15diff.out expected &&
|
||||
check_cache_at nitfol dirty
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'16 - conflicting local change.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo bozbar bozbar >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '16 - conflicting local change.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo bozbar bozbar >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'17 - conflicting local change.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo bozbar bozbar >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo bozbar bozbar bozbar >bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '17 - conflicting local change.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
echo bozbar bozbar >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo bozbar bozbar bozbar >bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'18 - local change already having a good result.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >18.out &&
|
||||
test_cmp M.out 18.out &&
|
||||
check_cache_at bozbar clean'
|
||||
test_expect_success '18 - local change already having a good result.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >18.out &&
|
||||
test_cmp M.out 18.out &&
|
||||
check_cache_at bozbar clean
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'19 - local change already having a good result, further modified.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo gnusto gnusto >bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >19.out &&
|
||||
test_cmp M.out 19.out &&
|
||||
check_cache_at bozbar dirty'
|
||||
test_expect_success '19 - local change already having a good result, further modified.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-new >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo gnusto gnusto >bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >19.out &&
|
||||
test_cmp M.out 19.out &&
|
||||
check_cache_at bozbar dirty
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'20 - no local change, use new tree.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >20.out &&
|
||||
test_cmp M.out 20.out &&
|
||||
check_cache_at bozbar dirty'
|
||||
test_expect_success '20 - no local change, use new tree.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
read_tree_twoway $treeH $treeM &&
|
||||
git ls-files --stage >20.out &&
|
||||
test_cmp M.out 20.out &&
|
||||
check_cache_at bozbar dirty
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'21 - no local change, dirty cache.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo gnusto gnusto >bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '21 - no local change, dirty cache.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
cat bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
echo gnusto gnusto >bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
# This fails with straight two-way fast-forward.
|
||||
test_expect_success \
|
||||
'22 - local change cache updated.' \
|
||||
'rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
test_expect_success '22 - local change cache updated.' '
|
||||
rm -f .git/index &&
|
||||
read_tree_must_succeed $treeH &&
|
||||
git checkout-index -u -f -q -a &&
|
||||
sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
|
||||
git update-index --add bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi
|
||||
'
|
||||
|
||||
# Also make sure we did not break DF vs DF/DF case.
|
||||
test_expect_success \
|
||||
'DF vs DF/DF case setup.' \
|
||||
'rm -f .git/index &&
|
||||
echo DF >DF &&
|
||||
git update-index --add DF &&
|
||||
treeDF=$(git write-tree) &&
|
||||
echo treeDF $treeDF &&
|
||||
git ls-tree $treeDF &&
|
||||
test_expect_success 'DF vs DF/DF case setup.' '
|
||||
rm -f .git/index &&
|
||||
echo DF >DF &&
|
||||
git update-index --add DF &&
|
||||
treeDF=$(git write-tree) &&
|
||||
echo treeDF $treeDF &&
|
||||
git ls-tree $treeDF &&
|
||||
|
||||
rm -f DF &&
|
||||
mkdir DF &&
|
||||
echo DF/DF >DF/DF &&
|
||||
git update-index --add --remove DF DF/DF &&
|
||||
treeDFDF=$(git write-tree) &&
|
||||
echo treeDFDF $treeDFDF &&
|
||||
git ls-tree $treeDFDF &&
|
||||
git ls-files --stage >DFDF.out'
|
||||
rm -f DF &&
|
||||
mkdir DF &&
|
||||
echo DF/DF >DF/DF &&
|
||||
git update-index --add --remove DF DF/DF &&
|
||||
treeDFDF=$(git write-tree) &&
|
||||
echo treeDFDF $treeDFDF &&
|
||||
git ls-tree $treeDFDF &&
|
||||
git ls-files --stage >DFDF.out
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'DF vs DF/DF case test.' \
|
||||
'rm -f .git/index &&
|
||||
rm -fr DF &&
|
||||
echo DF >DF &&
|
||||
git update-index --add DF &&
|
||||
read_tree_twoway $treeDF $treeDFDF &&
|
||||
git ls-files --stage >DFDFcheck.out &&
|
||||
test_cmp DFDF.out DFDFcheck.out &&
|
||||
check_cache_at DF/DF dirty &&
|
||||
:'
|
||||
test_expect_success 'DF vs DF/DF case test.' '
|
||||
rm -f .git/index &&
|
||||
rm -fr DF &&
|
||||
echo DF >DF &&
|
||||
git update-index --add DF &&
|
||||
read_tree_twoway $treeDF $treeDFDF &&
|
||||
git ls-files --stage >DFDFcheck.out &&
|
||||
test_cmp DFDF.out DFDFcheck.out &&
|
||||
check_cache_at DF/DF dirty &&
|
||||
:
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'a/b (untracked) vs a case setup.' \
|
||||
'rm -f .git/index &&
|
||||
: >a &&
|
||||
git update-index --add a &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git ls-files --stage >treeM.out &&
|
||||
test_expect_success 'a/b (untracked) vs a case setup.' '
|
||||
rm -f .git/index &&
|
||||
: >a &&
|
||||
git update-index --add a &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git ls-files --stage >treeM.out &&
|
||||
|
||||
rm -f a &&
|
||||
git update-index --remove a &&
|
||||
mkdir a &&
|
||||
: >a/b &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH'
|
||||
rm -f a &&
|
||||
git update-index --remove a &&
|
||||
mkdir a &&
|
||||
: >a/b &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'a/b (untracked) vs a, plus c/d case test.' \
|
||||
'read_tree_u_must_fail -u -m "$treeH" "$treeM" &&
|
||||
git ls-files --stage &&
|
||||
test -f a/b'
|
||||
test_expect_success 'a/b (untracked) vs a, plus c/d case test.' '
|
||||
read_tree_u_must_fail -u -m "$treeH" "$treeM" &&
|
||||
git ls-files --stage &&
|
||||
test -f a/b
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'a/b vs a, plus c/d case setup.' \
|
||||
'rm -f .git/index &&
|
||||
rm -fr a &&
|
||||
: >a &&
|
||||
mkdir c &&
|
||||
: >c/d &&
|
||||
git update-index --add a c/d &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git ls-files --stage >treeM.out &&
|
||||
test_expect_success 'read-tree supports the super-prefix' '
|
||||
cat <<-EOF >expect &&
|
||||
error: Updating '\''fictional/a'\'' would lose untracked files in it
|
||||
EOF
|
||||
test_must_fail git --super-prefix fictional/ read-tree -u -m "$treeH" "$treeM" 2>actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
rm -f a &&
|
||||
mkdir a &&
|
||||
: >a/b &&
|
||||
git update-index --add --remove a a/b &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH'
|
||||
test_expect_success 'a/b vs a, plus c/d case setup.' '
|
||||
rm -f .git/index &&
|
||||
rm -fr a &&
|
||||
: >a &&
|
||||
mkdir c &&
|
||||
: >c/d &&
|
||||
git update-index --add a c/d &&
|
||||
treeM=$(git write-tree) &&
|
||||
echo treeM $treeM &&
|
||||
git ls-tree $treeM &&
|
||||
git ls-files --stage >treeM.out &&
|
||||
|
||||
test_expect_success \
|
||||
'a/b vs a, plus c/d case test.' \
|
||||
'read_tree_u_must_succeed -u -m "$treeH" "$treeM" &&
|
||||
git ls-files --stage | tee >treeMcheck.out &&
|
||||
test_cmp treeM.out treeMcheck.out'
|
||||
rm -f a &&
|
||||
mkdir a &&
|
||||
: >a/b &&
|
||||
git update-index --add --remove a a/b &&
|
||||
treeH=$(git write-tree) &&
|
||||
echo treeH $treeH &&
|
||||
git ls-tree $treeH
|
||||
'
|
||||
|
||||
test_expect_success 'a/b vs a, plus c/d case test.' '
|
||||
read_tree_u_must_succeed -u -m "$treeH" "$treeM" &&
|
||||
git ls-files --stage | tee >treeMcheck.out &&
|
||||
test_cmp treeM.out treeMcheck.out
|
||||
'
|
||||
|
||||
test_expect_success '-m references the correct modified tree' '
|
||||
echo >file-a &&
|
||||
|
|
|
@ -52,6 +52,41 @@ static const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = {
|
|||
? ((o)->msgs[(type)]) \
|
||||
: (unpack_plumbing_errors[(type)]) )
|
||||
|
||||
static const char *super_prefixed(const char *path)
|
||||
{
|
||||
/*
|
||||
* It is necessary and sufficient to have two static buffers
|
||||
* here, as the return value of this function is fed to
|
||||
* error() using the unpack_*_errors[] templates we see above.
|
||||
*/
|
||||
static struct strbuf buf[2] = {STRBUF_INIT, STRBUF_INIT};
|
||||
static int super_prefix_len = -1;
|
||||
static unsigned idx = ARRAY_SIZE(buf) - 1;
|
||||
|
||||
if (super_prefix_len < 0) {
|
||||
const char *super_prefix = get_super_prefix();
|
||||
if (!super_prefix) {
|
||||
super_prefix_len = 0;
|
||||
} else {
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(buf); i++)
|
||||
strbuf_addstr(&buf[i], super_prefix);
|
||||
super_prefix_len = buf[0].len;
|
||||
}
|
||||
}
|
||||
|
||||
if (!super_prefix_len)
|
||||
return path;
|
||||
|
||||
if (++idx >= ARRAY_SIZE(buf))
|
||||
idx = 0;
|
||||
|
||||
strbuf_setlen(&buf[idx], super_prefix_len);
|
||||
strbuf_addstr(&buf[idx], path);
|
||||
|
||||
return buf[idx].buf;
|
||||
}
|
||||
|
||||
void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
|
||||
const char *cmd)
|
||||
{
|
||||
|
@ -172,7 +207,7 @@ static int add_rejected_path(struct unpack_trees_options *o,
|
|||
const char *path)
|
||||
{
|
||||
if (!o->show_all_errors)
|
||||
return error(ERRORMSG(o, e), path);
|
||||
return error(ERRORMSG(o, e), super_prefixed(path));
|
||||
|
||||
/*
|
||||
* Otherwise, insert in a list for future display by
|
||||
|
@ -196,7 +231,7 @@ static void display_error_msgs(struct unpack_trees_options *o)
|
|||
something_displayed = 1;
|
||||
for (i = 0; i < rejects->nr; i++)
|
||||
strbuf_addf(&path, "\t%s\n", rejects->items[i].string);
|
||||
error(ERRORMSG(o, e), path.buf);
|
||||
error(ERRORMSG(o, e), super_prefixed(path.buf));
|
||||
strbuf_release(&path);
|
||||
}
|
||||
string_list_clear(rejects, 0);
|
||||
|
@ -1925,7 +1960,9 @@ int bind_merge(const struct cache_entry * const *src,
|
|||
o->merge_size);
|
||||
if (a && old)
|
||||
return o->gently ? -1 :
|
||||
error(ERRORMSG(o, ERROR_BIND_OVERLAP), a->name, old->name);
|
||||
error(ERRORMSG(o, ERROR_BIND_OVERLAP),
|
||||
super_prefixed(a->name),
|
||||
super_prefixed(old->name));
|
||||
if (!a)
|
||||
return keep_entry(old, o);
|
||||
else
|
||||
|
|
Загрузка…
Ссылка в новой задаче