I think I figured out how to generate a single patch for
a clone that has all its changes on the default branch,
comparing it with cpython's default branch. The command to generate
the patch is

hg diff -r'max(p1(min(outgoing())) or p2(max(merge() and branch(default))))' -r default

If it's a branch different from default, replace 'default' in both places with the branch name.

I'd be curious for people to try this out and report whether it works correctly. You'll need a Mercurial release supporting revsets.

Here is the theory of operation: The diff needs to be either from
the oldest of the commits (in case no merges have been made from cpython), or from cpython's code in that was last merged. So:

- merge() gives all changesets that are merges
- branch(default) gives all changesets on the default branch
- 'merge() and branch(default)' gives all merges to the default
  branch
- max(merge() and branch(default)) gives the most recent merge
  to the default branch
- p2(max(merge() and branch(default))) is the second parent,
  which will be the upstream version of cpython that got last
  merged
- outgoing() gives all changes in the local repository not
  in cpython
- min(outgoing()) gives the first local change made
- p1(min(outgoing())) gives revision that was the starting
  point for the local modifications
- max(p1(...) or p2(...)) determines which of the two is
  later.

Having the revision of cpython to compare against is the
difficult part; the other revision must be default's head,
which is always called 'default'.

Enjoy,
Martin
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to