difftool: fix dir-diff when file does not exist in working tree
Commit 02c5631 (difftool --dir-diff: symlink all files matching the
working tree, 2013-03-14) does not handle the case where a file that is
being compared does not exist in the working tree.  Fix this by checking
for existence explicitly before running git-hash-object.
Reported-by: Kevin Bracey <kevin@bracey.fi>
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									31eb360b43
								
							
						
					
					
						commit
						1f197a1de4
					
				|  | @ -92,6 +92,12 @@ sub use_wt_file | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (! -e "$workdir/$file") { | ||||||
|  | 		# If the file doesn't exist in the working tree, we cannot | ||||||
|  | 		# use it. | ||||||
|  | 		return (0, $null_sha1); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	my $wt_sha1 = $repo->command_oneline('hash-object', "$workdir/$file"); | 	my $wt_sha1 = $repo->command_oneline('hash-object', "$workdir/$file"); | ||||||
| 	my $use = ($sha1 eq $null_sha1) || ($sha1 eq $wt_sha1); | 	my $use = ($sha1 eq $null_sha1) || ($sha1 eq $wt_sha1); | ||||||
| 	return ($use, $wt_sha1); | 	return ($use, $wt_sha1); | ||||||
|  |  | ||||||
|  | @ -356,6 +356,13 @@ run_dir_diff_test 'difftool --dir-diff from subdirectory' ' | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | run_dir_diff_test 'difftool --dir-diff when worktree file is missing' ' | ||||||
|  | 	test_when_finished git reset --hard && | ||||||
|  | 	rm file2 && | ||||||
|  | 	git difftool --dir-diff $symlinks --extcmd ls branch master >output && | ||||||
|  | 	grep file2 output | ||||||
|  | ' | ||||||
|  |  | ||||||
| write_script .git/CHECK_SYMLINKS <<\EOF | write_script .git/CHECK_SYMLINKS <<\EOF | ||||||
| for f in file file2 sub/sub | for f in file file2 sub/sub | ||||||
| do | do | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 John Keeping
						John Keeping