diff options
author | Jeff King <peff@peff.net> | 2009-05-30 17:54:18 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-05-31 15:59:16 -0700 |
commit | 6e4f981ffb88c8a9d3d6128314f4dd4f54ffb8a8 (patch) | |
tree | 46b7c19d0fdcc6c9634c0aea2b95cf6219c95487 | |
parent | 13bd21340888de1fab7d745fc447bb43694a20c5 (diff) | |
download | git-6e4f981ffb88c8a9d3d6128314f4dd4f54ffb8a8.tar.gz git-6e4f981ffb88c8a9d3d6128314f4dd4f54ffb8a8.tar.xz |
git-add: no need for -f when resolving a conflict in already tracked path
When a path F that matches ignore pattern has a conflict, "git add F"
insisted the -f option be given, which did not make sense. It would have
required -f when the path was originally added, but when resolving a
conflict, it already is tracked.
So this should work (and does):
$ echo file >.gitignore
$ echo content >file
$ git add -f file ;# need -f because we are adding new path
$ echo more content >>file
$ git add file ;# don't need -f; it is not actually an "other" file
This is handled under the hood by the COLLECT_IGNORED option to
read_directory. When that code finds an ignored file, it checks the
index to make sure it is not actually a tracked file. However, the test
it uses does not take into account unmerged entries, and considers them
to still be ignored. "git ls-files" uses a more elaborate test and gets
the right answer and the same test should be used here.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | dir.c | 2 | ||||
-rwxr-xr-x | t/t3700-add.sh | 12 |
2 files changed, 13 insertions, 1 deletions
@@ -396,7 +396,7 @@ static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathna static struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len) { - if (cache_name_pos(pathname, len) >= 0) + if (!cache_name_is_other(pathname, len)) return NULL; ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc); diff --git a/t/t3700-add.sh b/t/t3700-add.sh index 050de42ef..6ce8256a1 100755 --- a/t/t3700-add.sh +++ b/t/t3700-add.sh @@ -230,4 +230,16 @@ test_expect_success BSLASHPSPEC "git add 'fo\\[ou\\]bar' ignores foobar" ' ! ( git ls-files foobar | grep foobar ) ' +test_expect_success 'git add to resolve conflicts on otherwise ignored path' ' + git reset --hard && + H=$(git rev-parse :1/2/a) && + ( + echo "100644 $H 1 track-this" + echo "100644 $H 3 track-this" + ) | git update-index --index-info && + echo track-this >>.gitignore && + echo resolved >track-this && + git add track-this +' + test_done |