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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html