[PATCH] Add a --reverse option to patch
Alexis S. L. Carvalho
alexis at cecm.usp.br
Tue Aug 28 18:09:54 CDT 2007
Thus spake Brendan Cully:
> > Thus spake Brendan Cully:
> > > + if reverse:
> > > + node1, ctx1, node2, ctx2 = node2, ctx2, node1, ctx1
> > > + execf1, linkf1, execf2, linkf2 = execf2, linkf2, execf1, linkf1
> > > + added, removed = removed, added
> > > + man1 = ctx1.manifest()
> > > +
> > If I'm reading the code correctly, the call to ctx1.manifest() here will
> > force another walk of the working dir, making a hg diff --reverse quite
> > a bit slower than a regular hg diff.
> I've avoided using ctx1.manifest() in this patch, but it turned out to
> be messier than I was expecting for renames and for diffs of working
> directory merges. Ideas would be welcome.
I don't have any suggestions for the diff during merges issue, but for
the rename thing it might be easier to just do the "man1 = ctx1.manifest()"
in the opts.git case.
We would have a performance penalty with "hg diff --git --reverse", but:
- it wouldn't affect other cases much more common cases
- our copy detection won't work in this case anyway (we should try to
use the code from merge.py...), so I'm guessing it won't get used much
(then again I don't really know why you want diff --reverse...)
- I've just noticed that we're already doing an extra walk for hg diff
--git (because of the c.files() in renamed - shouldn't be hard to
fix), so it shouldn't be slower than what we have now.
Some test would be good, too - I'm seeing a "hg diff --git --reverse"
enter an infinite loop if I have added files (probably because of
ctx1.rev() returning None in the beginning of renamed()).
More information about the Mercurial-devel