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; | ||||
| 	} | ||||
|  | ||||
| 	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 $use = ($sha1 eq $null_sha1) || ($sha1 eq $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 | ||||
| for f in file file2 sub/sub | ||||
| do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 John Keeping
						John Keeping