How to make `hg diff` show whitespace changes?

Matt Harbison mharbison72 at gmail.com
Thu Jan 14 10:04:38 CST 2016


(cc: list)

On Thu, 14 Jan 2016 10:26:05 -0500, Noemi Millman  
<noemi.millman at backstage.com> wrote:

>
> Thanks, Matt!
>
> Great call about the resource forks (and a facepalm moment for me!)  I  
> can confirm that that's the problem, since changing the default app to  
> open a file without editing the file itself adds it to the list of  
> mysteriously changed-yet-unchanged files.
>
> I wonder why Mercurial recognizes resource fork changes but git doesn't?

It's been a few months since I looked into it, but IIRC, the python call  
used to determine the file size sees both the data and resource forks.   
Thats going to be different from the data-fork-only size in Mercurial.  So  
nothing you can do without submitting patches, but you should probably  
wait until after Feb 1 to do that.  It may be too close to a code freeze  
now to mess around with that.

I noticed it because of beyondcompare like I said, but it was  
"intermittent" because extdiff sometimes copies the files to a temp  
directory, and sometimes opens them in place.  When Mercurial copies the  
file back to your working directory from /tmp, it ignores the resource  
fork that was made in /tmp/foo, so the problem doesn't happen.

If you can't restore to a clean copy with 'update -C', that seems like a  
bug to me.

> I'll have to do a bit of research to figure out how to get Mercurial to  
> ignore them, and will post back if I can for the reference of anyone who  
> encounters this in the future.
>
> cheers,
> -Noemi
>
>> On Jan 13, 2016, at 10:58 PM, Matt Harbison <mharbison72 at gmail.com>  
>> wrote:
>>
>> On Wed, 13 Jan 2016 11:03:37 -0500, Noemi Millman  
>> <noemi.millman at backstage.com> wrote:
>>
>>> Thanks, Matt!
>>>
>>> Why would a merge show a file as changed if contents, permissions,  
>>> line endings, etc. haven't changed?
>>
>> In addition to what Matt said (which is likely the reason for your  
>> merge issue), be aware of resource forks on OS X.  Mercurial doesn't  
>> track or handle them, but if a tool adds one, status will say 'M' and  
>> diff will show nothing because the file size changes.  You can see if  
>> you have them with `ls -l@`.
>>
>> They seem to get created with BeyondCompare on 10.6.8, but not on  
>> 10.10.  I forget if `hg update -C` removes them, but I'm thinking not  
>> since I've gotten into the habit of manually removing them.
>>
>>>> On Jan 13, 2016, at 10:53 AM, Matt Mackall <mpm at selenic.com> wrote:
>>>>
>>>> On Wed, 2016-01-13 at 07:13 -0800, Noemi wrote:
>>>>> When I run `hg status`, it shows a few files as changed, but `hg  
>>>>> diff`
>>>>> outputs absolutely nothing.  Why might this happen other than  
>>>>> whitespace
>>>>> changes?
>>>>
>>>> Line ending, empty vs deleted, copies, renames, exec bits, merges,  
>>>> etc.
>>>>
>>>>>  If it is whitespace changes, how can I make `hg diff` display
>>>>> them?  The docs explain how to ignore whitespace changes, but not  
>>>>> how to
>>>>> make sure they're displayed.
>>>>
>>>> They're displayed by default.
>>>>
>>>> The standard diff tool was created in 1974. Mercurial was created in  
>>>> 2005. So
>>>> asking why the diff format doesn't capture all the details is a bit  
>>>> like asking
>>>> why a VHS (1976) copy of a BluRay (2006) doesn't look as good.
>>>>
>>>> We also support the Git format with -g which will show some but not  
>>>> all of the
>>>> aforementioned differences and also breaks some of the tools that  
>>>> work with
>>>> standard diffs.
>>>>
>>>> --
>>>> Mathematics is the supreme nostalgia of our time.
>>>>
>>>
>>> _______________________________________________
>>> Mercurial mailing list
>>> Mercurial at selenic.com
>>> https://selenic.com/mailman/listinfo/mercurial


More information about the Mercurial mailing list