diff options
author | Paul Mackerras <paulus@samba.org> | 2006-09-04 21:38:40 +1000 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-09-05 00:13:25 -0700 |
commit | cb2b9f5ee15547e878c668504140c66f3a42d81c (patch) | |
tree | 2ddaff61d286bc79e9678de2e9183ed2e828b575 /diff-lib.c | |
parent | 8f5d6b469fdb41d549fb8624a54dc62ff1760c41 (diff) | |
download | git-cb2b9f5ee15547e878c668504140c66f3a42d81c.tar.gz git-cb2b9f5ee15547e878c668504140c66f3a42d81c.tar.xz |
diff-index --cc shows a 3-way diff between HEAD, index and working tree.
This implements a 3-way diff between the HEAD commit, the state in the
index, and the working directory. This is like the n-way diff for a
merge, and uses much of the same code. It is invoked with the -c flag
to git-diff-index, which it already accepted and did nothing with.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'diff-lib.c')
-rw-r--r-- | diff-lib.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/diff-lib.c b/diff-lib.c index 9edfa9262..fc69fb92a 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -213,6 +213,31 @@ static int show_modified(struct rev_info *revs, return -1; } + if (revs->combine_merges && !cached && + (hashcmp(sha1, old->sha1) || hashcmp(old->sha1, new->sha1))) { + struct combine_diff_path *p; + int pathlen = ce_namelen(new); + + p = xmalloc(combine_diff_path_size(2, pathlen)); + p->path = (char *) &p->parent[2]; + p->next = NULL; + p->len = pathlen; + memcpy(p->path, new->name, pathlen); + p->path[pathlen] = 0; + p->mode = ntohl(mode); + hashclr(p->sha1); + memset(p->parent, 0, 2 * sizeof(struct combine_diff_parent)); + p->parent[0].status = DIFF_STATUS_MODIFIED; + p->parent[0].mode = ntohl(new->ce_mode); + hashcpy(p->parent[0].sha1, new->sha1); + p->parent[1].status = DIFF_STATUS_MODIFIED; + p->parent[1].mode = ntohl(old->ce_mode); + hashcpy(p->parent[1].sha1, old->sha1); + show_combined_diff(p, 2, revs->dense_combined_merges, revs); + free(p); + return 0; + } + oldmode = old->ce_mode; if (mode == oldmode && !hashcmp(sha1, old->sha1) && !revs->diffopt.find_copies_harder) |