Git development
 help / color / mirror / Atom feed
* [PATCH] combine-diff: diff-files fix.
@ 2006-02-14  7:53 Junio C Hamano
  0 siblings, 0 replies; only message in thread
From: Junio C Hamano @ 2006-02-14  7:53 UTC (permalink / raw)
  To: git

When showing a conflicted merge from index stages and working
tree file, we did not fetch the mode from the working tree,
and mistook that as a deleted file.  Also if the manual
resolution (or automated resolution by git rerere) ended up
taking either parent's version, we did not show _anything_ for
that path.  Either was quite bad and confusing.

Signed-off-by: Junio C Hamano <junkio@cox.net>

---
 * This will be part of 1.2.1 maintenance series.

 combine-diff.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

713a11fceb662f275b5e1294acc6f38674834941
diff --git a/combine-diff.c b/combine-diff.c
index a38f01b..d812600 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -630,9 +630,10 @@ static int show_patch_diff(struct combin
 	int i, show_hunks, shown_header = 0;
 	char ourtmp_buf[TMPPATHLEN];
 	char *ourtmp = ourtmp_buf;
+	int working_tree_file = !memcmp(elem->sha1, null_sha1, 20);
 
 	/* Read the result of merge first */
-	if (memcmp(elem->sha1, null_sha1, 20)) {
+	if (!working_tree_file) {
 		result = grab_blob(elem->sha1, &size);
 		write_to_temp_file(ourtmp, result, size);
 	}
@@ -646,6 +647,7 @@ static int show_patch_diff(struct combin
 			int len = st.st_size;
 			int cnt = 0;
 
+			elem->mode = DIFF_FILE_CANON_MODE(st.st_mode);
 			size = len;
 			result = xmalloc(len + 1);
 			while (cnt < len) {
@@ -661,6 +663,7 @@ static int show_patch_diff(struct combin
 		else {
 			/* deleted file */
 			size = 0;
+			elem->mode = 0;
 			result = xmalloc(1);
 			result[0] = 0;
 			ourtmp = "/dev/null";
@@ -716,7 +719,7 @@ static int show_patch_diff(struct combin
 
 	show_hunks = make_hunks(sline, cnt, num_parent, dense);
 
-	if (show_hunks || mode_differs) {
+	if (show_hunks || mode_differs || working_tree_file) {
 		const char *abb;
 
 		if (header) {
@@ -731,8 +734,6 @@ static int show_patch_diff(struct combin
 		putchar('\n');
 		printf("index ");
 		for (i = 0; i < num_parent; i++) {
-			if (elem->parent[i].mode != elem->mode)
-				mode_differs = 1;
 			abb = find_unique_abbrev(elem->parent[i].sha1,
 						 DEFAULT_ABBREV);
 			printf("%s%s", i ? "," : "", abb);
-- 
1.2.0.g45dc

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2006-02-14  7:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-14  7:53 [PATCH] combine-diff: diff-files fix 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