diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-04-18 11:49:31 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-18 11:49:31 -0700 |
commit | e7e656c09ab6bb0eda6312045cb5d61448309bcb (patch) | |
tree | f94e0a4f00c47bc60040b9f354f43a83f91848df /builtin | |
parent | Merge branch 'jk/http-dumb-namespaces' (diff) | |
parent | merge-tree: don't print entries that match "local" (diff) | |
download | tgif-e7e656c09ab6bb0eda6312045cb5d61448309bcb.tar.xz |
Merge branch 'jk/merge-tree-added-identically'
The resolution of some corner cases by "git merge-tree" were
inconsistent between top-of-the-tree and in a subdirectory.
* jk/merge-tree-added-identically:
merge-tree: don't print entries that match "local"
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/merge-tree.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c index bc912e399e..ed25d81b88 100644 --- a/builtin/merge-tree.c +++ b/builtin/merge-tree.c @@ -155,6 +155,11 @@ static int same_entry(struct name_entry *a, struct name_entry *b) a->mode == b->mode; } +static int both_empty(struct name_entry *a, struct name_entry *b) +{ + return !(a->sha1 || b->sha1); +} + static struct merge_list *create_entry(unsigned stage, unsigned mode, const unsigned char *sha1, const char *path) { struct merge_list *res = xcalloc(1, sizeof(*res)); @@ -297,13 +302,10 @@ static void unresolved(const struct traverse_info *info, struct name_entry n[3]) static int threeway_callback(int n, unsigned long mask, unsigned long dirmask, struct name_entry *entry, struct traverse_info *info) { /* Same in both? */ - if (same_entry(entry+1, entry+2)) { - if (entry[0].sha1) { - /* Modified identically */ - resolve(info, NULL, entry+1); - return mask; - } - /* "Both added the same" is left unresolved */ + if (same_entry(entry+1, entry+2) || both_empty(entry+0, entry+2)) { + /* Modified, added or removed identically */ + resolve(info, NULL, entry+1); + return mask; } if (same_entry(entry+0, entry+1)) { @@ -319,12 +321,10 @@ static int threeway_callback(int n, unsigned long mask, unsigned long dirmask, s */ } - if (same_entry(entry+0, entry+2)) { - if (entry[1].sha1 && !S_ISDIR(entry[1].mode)) { - /* We modified, they did not touch -- take ours */ - resolve(info, NULL, entry+1); - return mask; - } + if (same_entry(entry+0, entry+2) || both_empty(entry+0, entry+2)) { + /* We added, modified or removed, they did not touch -- take ours */ + resolve(info, NULL, entry+1); + return mask; } unresolved(info, entry); |