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>
This commit is contained in:
parent
8f5d6b469f
commit
cb2b9f5ee1
25
diff-lib.c
25
diff-lib.c
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user