summaryrefslogtreecommitdiff
path: root/diffcore-break.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-06-19 13:17:50 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-19 20:13:18 -0700
commit366175ef8c3b1e145f4ba846e63a1dea3ec3cacc (patch)
treebb4a2e04362c038ee2f8d6b77e5bdb9f4223dfea /diffcore-break.c
parent232b75ab3d60475b19270be022a966772c25c84b (diff)
downloadgit-366175ef8c3b1e145f4ba846e63a1dea3ec3cacc.tar.gz
[PATCH] Rework -B output.
Patch for a completely rewritten file detected by the -B flag was shown as a pair of creation followed by deletion in earlier versions. This was an misguided attempt to make reviewing such a complete rewrite easier, and unnecessarily ended up confusing git-apply. Instead, show the entire contents of old version prefixed with '-', followed by the entire contents of new version prefixed with '+'. This gives the same easy-to-review for human consumer while keeping it a single, regular modification patch for machine consumption, something that even GNU patch can grok. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'diffcore-break.c')
-rw-r--r--diffcore-break.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/diffcore-break.c b/diffcore-break.c
index 082e4e5962..920062bfd9 100644
--- a/diffcore-break.c
+++ b/diffcore-break.c
@@ -214,7 +214,7 @@ static void merge_broken(struct diff_filepair *p,
struct diff_queue_struct *outq)
{
/* p and pp are broken pairs we want to merge */
- struct diff_filepair *c = p, *d = pp;
+ struct diff_filepair *c = p, *d = pp, *dp;
if (DIFF_FILE_VALID(p->one)) {
/* this must be a delete half */
d = p; c = pp;
@@ -229,7 +229,8 @@ static void merge_broken(struct diff_filepair *p,
if (!DIFF_FILE_VALID(c->two))
die("internal error in merge #4");
- diff_queue(outq, d->one, c->two);
+ dp = diff_queue(outq, d->one, c->two);
+ dp->score = p->score;
diff_free_filespec_data(d->two);
diff_free_filespec_data(c->one);
free(d);
@@ -251,7 +252,6 @@ void diffcore_merge_broken(void)
/* we already merged this with its peer */
continue;
else if (p->broken_pair &&
- p->score == 0 &&
!strcmp(p->one->path, p->two->path)) {
/* If the peer also survived rename/copy, then
* we merge them back together.
@@ -259,7 +259,6 @@ void diffcore_merge_broken(void)
for (j = i + 1; j < q->nr; j++) {
struct diff_filepair *pp = q->queue[j];
if (pp->broken_pair &&
- p->score == 0 &&
!strcmp(pp->one->path, pp->two->path) &&
!strcmp(p->one->path, pp->two->path)) {
/* Peer survived. Merge them */