From: John Keeping <john@keeping.me.uk>
To: Florian Aspart <florian.aspart@gmail.com>
Cc: Michael J Gruber <git@drmicha.warpmail.net>, git@vger.kernel.org
Subject: Re: Using clean/smudge filters with difftool
Date: Thu, 18 Jun 2015 15:28:52 +0100 [thread overview]
Message-ID: <20150618142852.GL18226@serenity.lan> (raw)
In-Reply-To: <CAGA3+++ibw=8Q1LtM6yJrZ7Q4eVs_MEHmPAzctSVSREXMmBiMQ@mail.gmail.com>
On Thu, Jun 18, 2015 at 04:17:52PM +0200, Florian Aspart wrote:
> 2015-06-18 16:11 GMT+02:00 John Keeping <john@keeping.me.uk>:
> > On Thu, Jun 18, 2015 at 03:51:25PM +0200, Florian Aspart wrote:
> >> 2015-06-18 15:26 GMT+02:00 John Keeping <john@keeping.me.uk>:
> >> > [Please don't top-post on this list.]
> >> >
> >> > On Thu, Jun 18, 2015 at 03:15:38PM +0200, Florian Aspart wrote:
> >> >> 2015-06-18 14:31 GMT+02:00 Michael J Gruber <git@drmicha.warpmail.net>:
> >> >> > Florian Aspart venit, vidit, dixit 16.06.2015 16:11:
> >> >> >> I created a clean filter to apply on some files before commiting them.
> >> >> >> The filter works correctly when I commit the file and is also applied
> >> >> >> when I usethe iff command line tool.
> >> >> >> However, when using difftool with meld, the filter is not applied and
> >> >> >> the different versions of the files are compared without any
> >> >> >> filtering.
> >> >> >>
> >> >> >> Is there a way to apply the clean/smudge filters when comparing the
> >> >> >> working copy of a file to the HEAD version in a gui diff tool?
> >> >> >>
> >> >> >> I'm using git version 2.4.3 under Ubuntu.
> >
> > I also realised that the code for file diff is very different from
> > directory diff do you see any difference between git-difftool acting on
> > files and with the `--dir-diff` option?
>
> No, even with the --dir-diff option, the filter is still not applied.
I have tried to reproduce this and it works as expected for me (i.e. the
filter is applied) both for file diff and directory diff mode:
$ git config filter.quote.clean "sed -e 's/^> //'"
$ git config filter.quote.smudge "sed -e '/^> /n; s/^/> /'"
$ git config filter.quote.required true
$ echo '*.quote filter=quote' >>.gitattributes
$ cat >1.quote <<EOF
one
two
three
EOF
$ git add .gitattributes 1.quote
$ git commit -m 'Initial commit'
$ echo four >>1.quote
Now `git-difftool` shows the differences with the filter applied. This can be
seen running with GIT_TRACE:
$ GIT_TRACE=2 git difftool
15:26:59.211541 git.c:557 trace: exec: 'git-difftool'
15:26:59.211674 run-command.c:347 trace: run_command: 'git-difftool'
15:26:59.338617 git.c:348 trace: built-in: git 'config' '--bool' '--get' 'difftool.trustExitCode'
15:26:59.342664 git.c:348 trace: built-in: git 'diff'
15:26:59.344857 run-command.c:347 trace: run_command: 'sed -e '\''s/^> //'\'''
15:26:59.345383 run-command.c:195 trace: exec: '/bin/sh' '-c' 'sed -e '\''s/^> //'\''' 'sed -e '\''s/^> //'\'''
15:26:59.351077 run-command.c:347 trace: run_command: 'sed -e '\''/^> /n; s/^/> /'\'''
15:26:59.351605 run-command.c:195 trace: exec: '/bin/sh' '-c' 'sed -e '\''/^> /n; s/^/> /'\''' 'sed -e '\''/^> /n; s/^/> /'\'''
15:26:59.355716 run-command.c:347 trace: run_command: 'git-difftool--helper' '1.quote' '/tmp/SUEySx_1.quote' '4cb29ea38f70d7c61b2a3a25b02e3bdf44905402' '100644' '1.quote' '0000000000000000000000000000000000000000' '100644'
15:26:59.356191 run-command.c:195 trace: exec: 'git-difftool--helper' '1.quote' '/tmp/SUEySx_1.quote' '4cb29ea38f70d7c61b2a3a25b02e3bdf44905402' '100644' '1.quote' '0000000000000000000000000000000000000000' '100644'
15:26:59.370468 git.c:348 trace: built-in: git 'config' 'diff.tool'
15:26:59.373485 git.c:348 trace: built-in: git 'config' 'merge.tool'
15:26:59.378402 git.c:348 trace: built-in: git 'config' 'difftool.vimdiff.cmd'
15:26:59.381424 git.c:348 trace: built-in: git 'config' 'mergetool.vimdiff.cmd'
15:26:59.386623 git.c:348 trace: built-in: git 'config' '--bool' 'mergetool.prompt'
15:26:59.390198 git.c:348 trace: built-in: git 'config' '--bool' 'difftool.prompt'
I think the first run_command of `sed` is cleaning the working tree file
to figure out *if* it differs, then the second `sed` is smudging the
version in the index so that difftool can use it.
next prev parent reply other threads:[~2015-06-18 14:39 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-16 14:11 Using clean/smudge filters with difftool Florian Aspart
2015-06-18 12:31 ` Michael J Gruber
2015-06-18 13:15 ` Florian Aspart
2015-06-18 13:26 ` John Keeping
2015-06-18 13:51 ` Florian Aspart
2015-06-18 14:11 ` John Keeping
2015-06-18 14:17 ` Florian Aspart
2015-06-18 14:28 ` John Keeping [this message]
2015-06-18 15:39 ` Florian Aspart
2015-06-18 16:01 ` John Keeping
2015-06-18 20:00 ` Junio C Hamano
2015-06-18 22:39 ` John Keeping
2015-06-18 22:55 ` Junio C Hamano
2015-06-19 8:57 ` Michael J Gruber
2015-06-19 9:32 ` John Keeping
2015-06-19 15:04 ` Florian Aspart
2015-06-19 17:03 ` Junio C Hamano
2015-06-21 19:29 ` Michael J Gruber
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=20150618142852.GL18226@serenity.lan \
--to=john@keeping.me.uk \
--cc=florian.aspart@gmail.com \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
/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).