Re: Using clean/smudge filters with difftool

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2015-06-18 16:28 GMT+02:00 John Keeping <john@xxxxxxxxxxxxx>:
> On Thu, Jun 18, 2015 at 04:17:52PM +0200, Florian Aspart wrote:
>> 2015-06-18 16:11 GMT+02:00 John Keeping <john@xxxxxxxxxxxxx>:
>> > On Thu, Jun 18, 2015 at 03:51:25PM +0200, Florian Aspart wrote:
>> >> 2015-06-18 15:26 GMT+02:00 John Keeping <john@xxxxxxxxxxxxx>:
>> >> > [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@xxxxxxxxxxxxxxxxxxxx>:
>> >> >> > 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.

I'm not really understanding what your filter is doing, but I tried
your code on my machine and I get a different result when using diff
and difftool on my machine.

The diff results give me:

diff --git a/1.quote b/1.quote
index 4cb29ea..f384549 100644
--- a/1.quote
+++ b/1.quote
@@ -1,3 +1,4 @@
 one
 two
 three
+four

While the diff tool tells me that the repository file is:
> one
> two
> three

and my working copy:
one
two
three
four

In both case the the filters are called twice (cf GIT_TRACE) as in the
example your wrote.
--
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



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]