* [PATCH] Do 3-way diff between HEAD, index and working directory
@ 2006-09-04 11:38 Paul Mackerras
2006-09-04 22:23 ` Junio C Hamano
0 siblings, 1 reply; 2+ messages in thread
From: Paul Mackerras @ 2006-09-04 11:38 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
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>
---
Junio, does this look right? It seems to work OK, and I need it for
my new git commit tool, for the cases where the user has done a
checkin and then further modified the working file. It will be needed
even more when I implement partial checkins within a file.
Thanks,
Paul.
diff --git a/diff-lib.c b/diff-lib.c
index 9edfa92..fc69fb9 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -213,6 +213,31 @@ static int show_modified(struct rev_info
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)
--
VGER BF report: U 0.519891
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] Do 3-way diff between HEAD, index and working directory
2006-09-04 11:38 [PATCH] Do 3-way diff between HEAD, index and working directory Paul Mackerras
@ 2006-09-04 22:23 ` Junio C Hamano
0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2006-09-04 22:23 UTC (permalink / raw)
To: Paul Mackerras; +Cc: git
Paul Mackerras <paulus@samba.org> writes:
> 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>
> ---
> Junio, does this look right?
Seems correct from a cursory look. This also seems to change
the behaviour for an unmerged entry case slightly but I think
it is for the better (depending on the definition of "better" --
some people may feel combined diff to be weird and confusing).
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-09-04 22:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-04 11:38 [PATCH] Do 3-way diff between HEAD, index and working directory Paul Mackerras
2006-09-04 22:23 ` Junio C Hamano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).