[PATCH] Fix diff output take #4.
This implements the output format suggested by Linus in <Pine.LNX.4.58.0505161556260.18337@ppc970.osdl.org>, except the imaginary diff option is spelled "diff --git" with double dashes as suggested by Matthias Urlichs. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
		
				
					committed by
					
						
						Linus Torvalds
					
				
			
			
				
	
			
			
			
						parent
						
							bf0f910d1d
						
					
				
				
					commit
					b58f23b38a
				
			
							
								
								
									
										14
									
								
								diff.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								diff.c
									
									
									
									
									
								
							@ -83,7 +83,6 @@ static void builtin_diff(const char *name,
 | 
				
			|||||||
			 struct diff_tempfile *temp)
 | 
								 struct diff_tempfile *temp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i, next_at;
 | 
						int i, next_at;
 | 
				
			||||||
	const char *git_prefix = "# mode: ";
 | 
					 | 
				
			||||||
	const char *diff_cmd = "diff -L'%s%s' -L'%s%s'";
 | 
						const char *diff_cmd = "diff -L'%s%s' -L'%s%s'";
 | 
				
			||||||
	const char *diff_arg  = "'%s' '%s'||:"; /* "||:" is to return 0 */
 | 
						const char *diff_arg  = "'%s' '%s'||:"; /* "||:" is to return 0 */
 | 
				
			||||||
	const char *input_name_sq[2];
 | 
						const char *input_name_sq[2];
 | 
				
			||||||
@ -123,15 +122,16 @@ static void builtin_diff(const char *name,
 | 
				
			|||||||
	next_at += snprintf(cmd+next_at, cmd_size-next_at,
 | 
						next_at += snprintf(cmd+next_at, cmd_size-next_at,
 | 
				
			||||||
			    diff_arg, input_name_sq[0], input_name_sq[1]);
 | 
								    diff_arg, input_name_sq[0], input_name_sq[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("diff --git a/%s b/%s\n", name, name);
 | 
				
			||||||
	if (!path1[0][0])
 | 
						if (!path1[0][0])
 | 
				
			||||||
		printf("%s. %s %s\n", git_prefix, temp[1].mode, name);
 | 
							printf("new file mode %s\n", temp[1].mode);
 | 
				
			||||||
	else if (!path1[1][0])
 | 
						else if (!path1[1][0])
 | 
				
			||||||
		printf("%s%s . %s\n", git_prefix, temp[0].mode, name);
 | 
							printf("deleted file mode %s\n", temp[0].mode);
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (strcmp(temp[0].mode, temp[1].mode))
 | 
							if (strcmp(temp[0].mode, temp[1].mode)) {
 | 
				
			||||||
			printf("%s%s %s %s\n", git_prefix,
 | 
								printf("old mode %s\n", temp[0].mode);
 | 
				
			||||||
			       temp[0].mode, temp[1].mode, name);
 | 
								printf("new mode %s\n", temp[1].mode);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (strncmp(temp[0].mode, temp[1].mode, 3))
 | 
							if (strncmp(temp[0].mode, temp[1].mode, 3))
 | 
				
			||||||
			/* we do not run diff between different kind
 | 
								/* we do not run diff between different kind
 | 
				
			||||||
			 * of objects.
 | 
								 * of objects.
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,9 @@ test_expect_success \
 | 
				
			|||||||
    'git-diff-files -p after editing work tree.' \
 | 
					    'git-diff-files -p after editing work tree.' \
 | 
				
			||||||
    'git-diff-files -p >current'
 | 
					    'git-diff-files -p >current'
 | 
				
			||||||
cat >expected <<\EOF
 | 
					cat >expected <<\EOF
 | 
				
			||||||
# mode: 100644 100755 path0
 | 
					diff --git a/path0 b/path0
 | 
				
			||||||
 | 
					old mode 100644
 | 
				
			||||||
 | 
					new mode 100755
 | 
				
			||||||
--- a/path0
 | 
					--- a/path0
 | 
				
			||||||
+++ b/path0
 | 
					+++ b/path0
 | 
				
			||||||
@@ -1,3 +1,3 @@
 | 
					@@ -1,3 +1,3 @@
 | 
				
			||||||
@ -34,7 +36,8 @@ cat >expected <<\EOF
 | 
				
			|||||||
 Line 2
 | 
					 Line 2
 | 
				
			||||||
-line 3
 | 
					-line 3
 | 
				
			||||||
+Line 3
 | 
					+Line 3
 | 
				
			||||||
# mode: 100755 . path1
 | 
					diff --git a/path1 b/path1
 | 
				
			||||||
 | 
					deleted file mode 100755
 | 
				
			||||||
--- a/path1
 | 
					--- a/path1
 | 
				
			||||||
+++ /dev/null
 | 
					+++ /dev/null
 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
					@@ -1,3 +0,0 @@
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user