From: gmcm at hypernet.com (Gordon McMillan)
Date: Tue, 13 Apr 1999 22:10:51 GMT
Subject: Tools for three way merge of Python source files?
In-Reply-To: <Pine.SGI.3.95q.990413125514.14593X-100000@masox202.msd.ray.com>
References: <Pine.SGI.3.95q.990413125514.14593X-100000@masox202.msd.ray.com>
Message-ID: <1288080836-20523748@hypernet.com>
Content-Length: 2333
X-UID: 741                                                  

Milton L. Hankins writes:

> Are there tools to help with 3-way merges of Python sources and/or
> indentation conversion?

I can help with the indentation conversion.

http://www.mcmillan-inc.com/dnld/tabcleaner.py

This converts leading whitespace to whatever tab / spaces 
configuration you want. It uses tokenize.py to determine indents and 
dedents, so it's Guido doing the parsing, not me.

(Anyone who's had trouble with this before - it's been completely 
rewritten, and no longer gets fooled by certain triple-quoted 
strings).

Another way (for your purposes) might be to always filter everything 
through pindent.py.

> I'm using Python on a Real Project and I need to do a 3-way merge.
> Certain whitespace characters must be ignored -- specifically,
> carriage returns.  I have a diff tool which ignores blanks but then
> I run into problems where a block of code has been indented further
> (inside a new block).
> 
> I wish I could rely on the parser to catch this sort of thing, but
> it won't detect all possible follies, such as this one:
> 
> <my file & ancestor are the same>
> if foo:
>   if bar:
>     baz()
>   else:
>     frob()
> 
> <other file, important change>
> if foo:
>   if bar:
>     baz()
> else:
>   frob()
> 
> Here, the merge result (using blank ignorance) would not incorporate
> the changes from <other file>.
> 
> One correct solution seems to be to strip CR from CRLF.  But I'm
> afraid of having too many conflicting sections (false negatives)
> where the spacing difference is actually benign.  Perhaps I should
> just tell my fellow developers not to change indentation unless they
> have to.
> 
> So, it also appears that I need a Python-aware indentation converter
> -- something that converts a source file to use a minimal number of
> tabs (or perhaps spaces, as long as it were consistent) for block
> indents.
> 
> If anyone has had similar experiences or knows of a solution I'd
> love to hear about it.  Email is preferred.  Thanks.
> 
> 
> (I really hope this doesn't start Yet Another Whitespace War.)
> 
> --
>              Milton L. Hankins               -=- 
>              <mlh at swl.msd.ray.com>
> Software Engineer, Raytheon Systems Company  -=-  RayComNet 
> 7-225-4728
>       http://amasts.msd.ray.com/~mlh         -=-  ><>  Isaiah 64:6 
>       ><> 
> 
> 

- Gordon




