Skip to content

Commit

Permalink
sparse-index: integrate with cherry-pick and rebase
Browse files Browse the repository at this point in the history
The hard work was already done with 'git merge' and the ORT strategy.
Just add extra tests to see that we get the expected results in the
non-conflict cases.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
  • Loading branch information
derrickstolee committed Aug 16, 2021
1 parent 3710d0d commit 4125a1f
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 5 deletions.
6 changes: 6 additions & 0 deletions builtin/rebase.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,9 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options,
builtin_rebase_interactive_usage, PARSE_OPT_KEEP_ARGV0);

prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;

if (!is_null_oid(&squash_onto))
opts.squash_onto = &squash_onto;

Expand Down Expand Up @@ -1430,6 +1433,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);

prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;

options.allow_empty_message = 1;
git_config(rebase_config, &options);
/* options.gpg_sign_opt will be either "-S" or NULL */
Expand Down
3 changes: 3 additions & 0 deletions builtin/revert.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
PARSE_OPT_KEEP_ARGV0 |
PARSE_OPT_KEEP_UNKNOWN);

prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;

/* implies allow_empty */
if (opts->keep_redundant_commits)
opts->allow_empty = 1;
Expand Down
43 changes: 38 additions & 5 deletions t/t1092-sparse-checkout-compatibility.sh
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,38 @@ test_expect_success 'merge with conflict outside cone' '
test_all_match git rev-parse HEAD^{tree}
'

test_expect_success 'cherry-pick/rebase with conflict outside cone' '
init_repos &&
for OPERATION in cherry-pick rebase
do
test_all_match git checkout -B tip &&
test_all_match git reset --hard merge-left &&
test_all_match git status --porcelain=v2 &&
test_all_match test_must_fail git $OPERATION merge-right &&
test_all_match git status --porcelain=v2 &&
# Resolve the conflict in different ways:
# 1. Revert to the base
test_all_match git checkout base -- deep/deeper2/a &&
test_all_match git status --porcelain=v2 &&
# 2. Add the file with conflict markers
test_all_match git add folder1/a &&
test_all_match git status --porcelain=v2 &&
# 3. Rename the file to another sparse filename and
# accept conflict markers as resolved content.
run_on_all mv folder2/a folder2/z &&
test_all_match git add folder2 &&
test_all_match git status --porcelain=v2 &&
test_all_match git $OPERATION --continue &&
test_all_match git status --porcelain=v2 &&
test_all_match git rev-parse HEAD^{tree} || return 1
done
'

test_expect_success 'merge with outside renames' '
init_repos &&
Expand Down Expand Up @@ -682,11 +714,12 @@ test_expect_success 'sparse-index is not expanded' '
echo >>sparse-index/untracked.txt &&
ensure_not_expanded add . &&
ensure_not_expanded checkout -f update-deep &&
GIT_TEST_MERGE_ALGORITHM=ort \
ensure_not_expanded merge -m merge update-folder1 &&
GIT_TEST_MERGE_ALGORITHM=ort \
ensure_not_expanded merge -m merge update-folder2
for OPERATION in "merge -s ort -m merge" cherry-pick rebase
do
ensure_not_expanded checkout -f -B temp update-deep &&
ensure_not_expanded $OPERATION update-folder1 &&
ensure_not_expanded $OPERATION update-folder2 || return 1
done
'

# NEEDSWORK: a sparse-checkout behaves differently from a full checkout
Expand Down

0 comments on commit 4125a1f

Please sign in to comment.