Remove ignored files by default when they are in the way

Change several commands to remove ignored files by default when they are in the way. Since some commands (checkout, merge) take a --no-overwrite-ignore option to allow the user to configure this, and it may make sense to add that option to more commands (and in the case of merge, actually plumb that configuration option through to more of the backends than just the fast-forwarding special case), add little comments about where such flags would be used. Incidentally, this fixes a test failure in t7112. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Sep 27, 2021 at 16:33 UTC 1b5f37334a2603c7134da7accba76276d8d31cf6
9 files changed +8 -16
builtin/am.c
+1 -2
@@ -1920,8 +1920,7 @@ static int fast_forward_to(struct tree *head, struct tree *remote, int reset)
1920 opts.merge = 1;
1921 opts.reset = reset;
1922 if (!reset)
1923 - /* FIXME: Default should be to remove ignored files */
1924 - opts.preserve_ignored = 1;
1923 + opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
1924 opts.fn = twoway_merge;
1925 init_tree_desc(&t[0], head->buffer, head->size);
1926 init_tree_desc(&t[1], remote->buffer, remote->size);
builtin/clone.c
+1 -2
@@ -803,8 +803,7 @@ static int checkout(int submodule_progress)
803 opts.update = 1;
804 opts.merge = 1;
805 opts.clone = 1;
806 - /* FIXME: Default should be to remove ignored files */
807 - opts.preserve_ignored = 1;
806 + opts.preserve_ignored = 0;
807 opts.fn = oneway_merge;
808 opts.verbose_update = (option_verbosity >= 0);
809 opts.src_index = &the_index;
builtin/merge.c
+1 -2
@@ -681,8 +681,7 @@ static int read_tree_trivial(struct object_id *common, struct object_id *head,
681 opts.verbose_update = 1;
682 opts.trivial_merges_only = 1;
683 opts.merge = 1;
684 - /* FIXME: Default should be to remove ignored files */
685 - opts.preserve_ignored = 1;
684 + opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
685 trees[nr_trees] = parse_tree_indirect(common);
686 if (!trees[nr_trees++])
687 return -1;
builtin/reset.c
+1 -2
@@ -67,8 +67,7 @@ static int reset_index(const char *ref, const struct object_id *oid, int reset_t
67 case KEEP:
68 case MERGE:
69 opts.update = 1;
70 - /* FIXME: Default should be to remove ignored files */
71 - opts.preserve_ignored = 1;
70 + opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
71 break;
72 case HARD:
73 opts.update = 1;
builtin/stash.c
+1 -2
@@ -259,8 +259,7 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
259 opts.reset = reset;
260 opts.update = update;
261 if (update && !reset)
262 - /* FIXME: Default should be to remove ignored files */
263 - opts.preserve_ignored = 1;
262 + opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
263 opts.fn = oneway_merge;
264
265 if (unpack_trees(nr_trees, t, &opts))
merge-ort.c
+1 -1
@@ -4045,7 +4045,7 @@ static int checkout(struct merge_options *opt,
4045 unpack_opts.quiet = 0; /* FIXME: sequencer might want quiet? */
4046 unpack_opts.verbose_update = (opt->verbosity > 2);
4047 unpack_opts.fn = twoway_merge;
4048 - unpack_opts.preserve_ignored = 0; /* FIXME: !opts->overwrite_ignore*/
4048 + unpack_opts.preserve_ignored = 0; /* FIXME: !opts->overwrite_ignore */
4049 parse_tree(prev);
4050 init_tree_desc(&trees[0], prev->buffer, prev->size);
4051 parse_tree(next);
reset.c
+1 -2
@@ -56,8 +56,7 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
56 unpack_tree_opts.fn = reset_hard ? oneway_merge : twoway_merge;
57 unpack_tree_opts.update = 1;
58 unpack_tree_opts.merge = 1;
59 - /* FIXME: Default should be to remove ignored files */
60 - unpack_tree_opts.preserve_ignored = 1;
59 + unpack_tree_opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
60 init_checkout_metadata(&unpack_tree_opts.meta, switch_to_branch, oid, NULL);
61 if (!detach_head)
62 unpack_tree_opts.reset = 1;
sequencer.c
+1 -2
@@ -3690,8 +3690,7 @@ static int do_reset(struct repository *r,
3690 unpack_tree_opts.fn = oneway_merge;
3691 unpack_tree_opts.merge = 1;
3692 unpack_tree_opts.update = 1;
3693 - /* FIXME: Default should be to remove ignored files */
3694 - unpack_tree_opts.preserve_ignored = 1;
3693 + unpack_tree_opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
3694 init_checkout_metadata(&unpack_tree_opts.meta, name, &oid, NULL);
3695
3696 if (repo_read_index_unmerged(r)) {
t/t7112-reset-submodule.sh
-1
@@ -6,7 +6,6 @@ test_description='reset can handle submodules'
6 . "$TEST_DIRECTORY"/lib-submodule-update.sh
7
8 KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
9 -KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED=1
9
10 test_submodule_switch_recursing_with_args "reset --keep"
11