From 366f9cea18fbb7ebb0a75735da8c2a9d5a916809 Mon Sep 17 00:00:00 2001 From: David Aguilar Date: Mon, 16 May 2016 11:05:37 -0700 Subject: difftool: handle unmerged files in dir-diff mode When files are unmerged they can show up as both unmerged and modified in the output of `git diff --raw`. This causes difftool's dir-diff to create filesystem entries for the same path twice, which fails when it encounters a duplicate path. Ensure that each worktree path is only processed once. Add a test to demonstrate the breakage. Reported-by: Jan Smets Signed-off-by: David Aguilar Signed-off-by: Junio C Hamano --- git-difftool.perl | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'git-difftool.perl') diff --git a/git-difftool.perl b/git-difftool.perl index 8cf0040590..ebd13baa6e 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -138,6 +138,7 @@ sub setup_dir_diff my %submodule; my %symlink; my @working_tree = (); + my %working_tree_dups = (); my @rawdiff = split('\0', $diffrtn); my $i = 0; @@ -188,6 +189,10 @@ EOF } if ($rmode ne $null_mode) { + # Avoid duplicate working_tree entries + if ($working_tree_dups{$dst_path}++) { + next; + } my ($use, $wt_sha1) = use_wt_file($repo, $workdir, $dst_path, $rsha1); if ($use) { -- cgit v1.2.1