Merge branch 'dotgit-case-maint-1.8.5' into maint-1.8.5
authorJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2014 19:11:15 +0000 (11:11 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Dec 2014 19:11:15 +0000 (11:11 -0800)
* dotgit-case-maint-1.8.5:
fsck: complain about NTFS ".git" aliases in trees
read-cache: optionally disallow NTFS .git variants
path: add is_ntfs_dotgit() helper
fsck: complain about HFS+ ".git" aliases in trees
read-cache: optionally disallow HFS+ .git variants
utf8: add is_hfs_dotgit() helper
fsck: notice .git case-insensitively
t1450: refactor ".", "..", and ".git" fsck tests
verify_dotfile(): reject .git case-insensitively
read-tree: add tests for confusing paths like ".." and ".git"
unpack-trees: propagate errors adding entries to the index

1  2 
unpack-trees.c
diff --combined unpack-trees.c
index ad3e9a04fe8ccb9286b94480f4484b0569f70a57,cf8996e0eab665fbef0672fcdfd576babfceeff4..648180256e873f01bce91cbd2afb29fb91fe0651
@@@ -102,7 -102,7 +102,7 @@@ void setup_unpack_trees_porcelain(struc
                opts->unpack_rejects[i].strdup_strings = 1;
  }
  
- static void do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
+ static int do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
                         unsigned int set, unsigned int clear)
  {
        clear |= CE_HASHED | CE_UNHASHED;
  
        ce->next = NULL;
        ce->ce_flags = (ce->ce_flags & ~clear) | set;
-       add_index_entry(&o->result, ce,
-                       ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
+       return add_index_entry(&o->result, ce,
+                              ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
  }
  
  static struct cache_entry *dup_entry(const struct cache_entry *ce)
@@@ -608,7 -608,9 +608,9 @@@ static int unpack_nondirectories(int n
  
        for (i = 0; i < n; i++)
                if (src[i] && src[i] != o->df_conflict_entry)
-                       do_add_entry(o, src[i], 0, 0);
+                       if (do_add_entry(o, src[i], 0, 0))
+                               return -1;
        return 0;
  }
  
@@@ -1763,23 -1765,14 +1765,23 @@@ int twoway_merge(const struct cache_ent
                newtree = NULL;
  
        if (current) {
 -              if ((!oldtree && !newtree) || /* 4 and 5 */
 -                  (!oldtree && newtree &&
 -                   same(current, newtree)) || /* 6 and 7 */
 -                  (oldtree && newtree &&
 -                   same(oldtree, newtree)) || /* 14 and 15 */
 -                  (oldtree && newtree &&
 -                   !same(oldtree, newtree) && /* 18 and 19 */
 -                   same(current, newtree))) {
 +              if (current->ce_flags & CE_CONFLICTED) {
 +                      if (same(oldtree, newtree) || o->reset) {
 +                              if (!newtree)
 +                                      return deleted_entry(current, current, o);
 +                              else
 +                                      return merged_entry(newtree, current, o);
 +                      }
 +                      return o->gently ? -1 : reject_merge(current, o);
 +              }
 +              else if ((!oldtree && !newtree) || /* 4 and 5 */
 +                       (!oldtree && newtree &&
 +                        same(current, newtree)) || /* 6 and 7 */
 +                       (oldtree && newtree &&
 +                        same(oldtree, newtree)) || /* 14 and 15 */
 +                       (oldtree && newtree &&
 +                        !same(oldtree, newtree) && /* 18 and 19 */
 +                        same(current, newtree))) {
                        return keep_entry(current, o);
                }
                else if (oldtree && !newtree && same(current, oldtree)) {