On Tue, Mar 12, 2013 at 12:23:52PM -0700, David Aguilar wrote: > I don't think we could do this without adding an additional flag > to trigger this change in behavior (e.g. --null-sha1-for-....?) > so that existing users are unaffected by the change. > > It feels like forcing the null SHA-1 is heavy-handed, but I > haven't thought it through enough. > > While this may be a quick way to get this behavior, > I wonder if there is a better way. > > Does anybody else have any comments/suggestions on how to > better accomplish this? How about something like "--symlink-all" where the everything in the right-hand tree is symlink'd? Something like this perhaps: -- >8 -- diff --git a/git-difftool.perl b/git-difftool.perl index 0a90de4..cab7c45 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -85,7 +85,7 @@ sub exit_cleanup sub setup_dir_diff { - my ($repo, $workdir, $symlinks) = @_; + my ($repo, $workdir, $symlinks, $symlink_all) = @_; # Run the diff; exit immediately if no diff found # 'Repository' and 'WorkingCopy' must be explicitly set to insure that @@ -159,10 +159,10 @@ EOF } if ($rmode ne $null_mode) { - if ($rsha1 ne $null_sha1) { - $rindex .= "$rmode $rsha1\t$dst_path\0"; - } else { + if ($symlink_all or $rsha1 eq $null_sha1) { push(@working_tree, $dst_path); + } else { + $rindex .= "$rmode $rsha1\t$dst_path\0"; } } } @@ -299,6 +299,7 @@ sub main prompt => undef, symlinks => $^O ne 'cygwin' && $^O ne 'MSWin32' && $^O ne 'msys', + symlink_all => undef, tool_help => undef, ); GetOptions('g|gui!' => \$opts{gui}, @@ -308,6 +309,7 @@ sub main 'y' => sub { $opts{prompt} = 0; }, 'symlinks' => \$opts{symlinks}, 'no-symlinks' => sub { $opts{symlinks} = 0; }, + 'symlink-all' => \$opts{symlink_all}, 't|tool:s' => \$opts{difftool_cmd}, 'tool-help' => \$opts{tool_help}, 'x|extcmd:s' => \$opts{extcmd}); @@ -346,7 +348,7 @@ sub main # will invoke a separate instance of 'git-difftool--helper' for # each file that changed. if (defined($opts{dirdiff})) { - dir_diff($opts{extcmd}, $opts{symlinks}); + dir_diff($opts{extcmd}, $opts{symlinks}, $opts{symlink_all}); } else { file_diff($opts{prompt}); } @@ -354,13 +356,13 @@ sub main sub dir_diff { - my ($extcmd, $symlinks) = @_; + my ($extcmd, $symlinks, $symlink_all) = @_; my $rc; my $error = 0; my $repo = Git->repository(); my $workdir = find_worktree($repo); my ($a, $b, $tmpdir, @worktree) = - setup_dir_diff($repo, $workdir, $symlinks); + setup_dir_diff($repo, $workdir, $symlinks, $symlink_all); if (defined($extcmd)) { $rc = system($extcmd, $a, $b); -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html