提交 cb2b9f5e 编写于 作者: P Paul Mackerras 提交者: Junio C Hamano

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: NPaul Mackerras <paulus@samba.org>
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 8f5d6b46
...@@ -213,6 +213,31 @@ static int show_modified(struct rev_info *revs, ...@@ -213,6 +213,31 @@ static int show_modified(struct rev_info *revs,
return -1; 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; oldmode = old->ce_mode;
if (mode == oldmode && !hashcmp(sha1, old->sha1) && if (mode == oldmode && !hashcmp(sha1, old->sha1) &&
!revs->diffopt.find_copies_harder) !revs->diffopt.find_copies_harder)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册