From: David Aguilar <davvid@gmail.com>
To: John Keeping <john@keeping.me.uk>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Matt McClure <matthewlmcclure@gmail.com>,
Tim Henigan <tim.henigan@gmail.com>
Subject: Re: [PATCH 2/2] difftool --dir-diff: symlink all files matching the working tree
Date: Wed, 13 Mar 2013 20:41:29 -0700 [thread overview]
Message-ID: <CAJDDKr5M4pqmd9HSVT8hDJB9AxgV2RexN6B6v6ccTS6raWY_Qg@mail.gmail.com> (raw)
In-Reply-To: <796eafb6816b302c87873c8f4a1bd2225ce40c55.1363206651.git.john@keeping.me.uk>
On Wed, Mar 13, 2013 at 1:33 PM, John Keeping <john@keeping.me.uk> wrote:
> Some users like to edit files in their diff tool when using "git
> difftool --dir-diff --symlink" to compare against the working tree but
> difftool currently only created symlinks when a file contains unstaged
> changes.
>
> Change this behaviour so that symlinks are created whenever the
> right-hand side of the comparison has the same SHA1 as the file in the
> working tree.
>
> Note that textconv filters are handled in the same way as by git-diff
> and if a clean filter is not the inverse of its smudge filter we already
> get a null SHA1 from "diff --raw" and will symlink the file without
> going through the new hash-object based check.
>
> Reported-by: Matt McClure <matthewlmcclure@gmail.com>
> Signed-off-by: John Keeping <john@keeping.me.uk>
> ---
> Documentation/git-difftool.txt | 4 +++-
> git-difftool.perl | 21 ++++++++++++++++++---
> t/t7800-difftool.sh | 14 ++++++++++++++
> 3 files changed, 35 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
> index e575fea..8361e6e 100644
> --- a/Documentation/git-difftool.txt
> +++ b/Documentation/git-difftool.txt
> @@ -72,7 +72,9 @@ with custom merge tool commands and has the same value as `$MERGED`.
> --symlinks::
> --no-symlinks::
> 'git difftool''s default behavior is create symlinks to the
> - working tree when run in `--dir-diff` mode.
> + working tree when run in `--dir-diff` mode and the right-hand
> + side of the comparison yields the same content as the file in
> + the working tree.
> +
> Specifying `--no-symlinks` instructs 'git difftool' to create copies
> instead. `--no-symlinks` is the default on Windows.
> diff --git a/git-difftool.perl b/git-difftool.perl
> index 0a90de4..5f093ae 100755
> --- a/git-difftool.perl
> +++ b/git-difftool.perl
> @@ -83,6 +83,21 @@ sub exit_cleanup
> exit($status | ($status >> 8));
> }
>
> +sub use_wt_file
> +{
> + my ($repo, $workdir, $file, $sha1, $symlinks) = @_;
> + my $null_sha1 = '0' x 40;
> +
> + if ($sha1 eq $null_sha1) {
> + return 1;
> + } elsif (not $symlinks) {
> + return 0;
> + }
> +
> + my $wt_sha1 = $repo->command_oneline('hash-object', "$workdir/$file");
> + return $sha1 eq $wt_sha1;
> +}
> +
> sub setup_dir_diff
> {
> my ($repo, $workdir, $symlinks) = @_;
> @@ -159,10 +174,10 @@ EOF
> }
>
> if ($rmode ne $null_mode) {
> - if ($rsha1 ne $null_sha1) {
> - $rindex .= "$rmode $rsha1\t$dst_path\0";
> - } else {
> + if (use_wt_file($repo, $workdir, $dst_path, $rsha1, $symlinks)) {
> push(@working_tree, $dst_path);
> + } else {
> + $rindex .= "$rmode $rsha1\t$dst_path\0";
> }
> }
> }
> diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
> index eb1d3f8..8102ce1 100755
> --- a/t/t7800-difftool.sh
> +++ b/t/t7800-difftool.sh
> @@ -370,6 +370,20 @@ test_expect_success PERL 'difftool --dir-diff' '
> echo "$diff" | stdin_contains file
> '
>
> +write_script .git/CHECK_SYMLINKS <<\EOF &&
Tiny nit. Is there any downside to leaving this file
at the root instead of inside the .git dir?
> +#!/bin/sh
> +test -L "$2/file" &&
> +test -L "$2/file2" &&
> +test -L "$2/sub/sub"
> +echo $?
> +EOF
> +
> +test_expect_success PERL,SYMLINKS 'difftool --dir-diff --symlink without unstaged changes' '
> + result=$(git difftool --dir-diff --symlink \
> + --extcmd "./.git/CHECK_SYMLINKS" branch HEAD) &&
> + test "$result" = 0
> +'
> +
How about something like this?
+ echo 0 >expect &&
+ git difftool --dir-diff --symlink \
+ --extcmd ./CHECK_SYMLINKS branch HEAD >actual &&
+ test_cmp expect actual
(sans gmail whitespace damage) so that we can keep it chained with &&.
Ah.. it seems your branch is based on master, perhaps?
There's stuff cooking in next for difftool's tests.
I'm not sure if this patch is based on top of them.
Can you rebase the tests so that the chaining is done like it is in 'next'?
--
David
next prev parent reply other threads:[~2013-03-14 3:41 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-26 20:23 difftool -d symlinks, under what conditions Matt McClure
2012-11-27 6:20 ` David Aguilar
2012-11-27 21:10 ` Matt McClure
[not found] ` <CAJELnLEL8y0G3MBGkW+YDKtVxX4n4axJG7p0oPsXsV4_FRyGDg@mail.gmail.com>
2013-03-12 18:12 ` Matt McClure
2013-03-12 19:09 ` John Keeping
2013-03-12 19:23 ` David Aguilar
2013-03-12 19:43 ` John Keeping
2013-03-12 20:39 ` Junio C Hamano
2013-03-12 21:06 ` John Keeping
2013-03-12 21:26 ` Junio C Hamano
2013-03-12 21:43 ` Matt McClure
2013-03-12 22:11 ` Matt McClure
2013-03-12 22:16 ` Junio C Hamano
2013-03-12 22:48 ` Matt McClure
2013-03-13 0:17 ` John Keeping
2013-03-13 0:56 ` Matt McClure
2013-03-13 8:24 ` David Aguilar
2013-03-13 15:30 ` Junio C Hamano
2013-03-13 16:45 ` Junio C Hamano
2013-03-13 17:08 ` John Keeping
2013-03-13 17:40 ` Junio C Hamano
2013-03-13 18:01 ` John Keeping
2013-03-13 19:28 ` Junio C Hamano
2013-03-13 20:33 ` [PATCH 0/2] difftool --dir-diff: symlink all files matching the working tree John Keeping
2013-03-13 20:33 ` [PATCH 1/2] git-difftool(1): fix formatting of --symlink description John Keeping
2013-03-13 20:33 ` [PATCH 2/2] difftool --dir-diff: symlink all files matching the working tree John Keeping
2013-03-14 3:41 ` David Aguilar [this message]
2013-03-14 9:36 ` John Keeping
2013-03-14 15:18 ` Junio C Hamano
2013-03-14 20:19 ` [PATCH v2 0/3] " John Keeping
2013-03-14 20:19 ` [PATCH v2 1/3] git-difftool(1): fix formatting of --symlink description John Keeping
2013-03-14 20:19 ` [PATCH v2 2/3] difftool: avoid double slashes in symlink targets John Keeping
2013-03-14 21:19 ` Junio C Hamano
2013-03-14 20:19 ` [PATCH v2 3/3] difftool --dir-diff: symlink all files matching the working tree John Keeping
2013-03-14 21:28 ` Junio C Hamano
2013-03-14 22:24 ` John Keeping
2013-03-14 22:31 ` Junio C Hamano
2013-03-14 9:43 ` difftool -d symlinks, under what conditions John Keeping
2013-03-14 17:25 ` John Keeping
2013-03-14 17:33 ` Junio C Hamano
2013-03-14 20:00 ` [PATCH 0/2] checkout-index: fix .gitattributes handling with --prefix John Keeping
2013-03-14 20:00 ` [PATCH 1/2] t2003: modernize style John Keeping
2013-03-14 20:00 ` [PATCH 2/2] entry: fix filter lookup John Keeping
2013-03-14 21:50 ` Junio C Hamano
2013-03-12 20:38 ` difftool -d symlinks, under what conditions Junio C Hamano
2013-03-12 19:24 ` [PATCH] difftool: Make directory diff symlink work tree John Keeping
2013-03-12 23:12 ` Matt McClure
2013-03-12 23:40 ` John Keeping
2013-03-13 0:26 ` Matt McClure
2013-03-13 9:11 ` John Keeping
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAJDDKr5M4pqmd9HSVT8hDJB9AxgV2RexN6B6v6ccTS6raWY_Qg@mail.gmail.com \
--to=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=john@keeping.me.uk \
--cc=matthewlmcclure@gmail.com \
--cc=tim.henigan@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).