Differences between revisions 6 and 7
Revision 6 as of 2008-03-10 16:47:24
Size: 1819
Editor: jason
Comment:
Revision 7 as of 2008-09-03 22:50:36
Size: 3427
Editor: AlexGhitza
Comment:
Deletions are marked like this. Additions are marked like this.
Line 92: Line 92:

It is possible to "fold" several patches into one:
{{{
# If the patches are on trac, download them in RAW format
# Say they are called one.patch, two.patch, three.patch in some
# directory ~/downloads

# cd into the repository
cd sage/devel/sage/

# if it hasn't been already done, hg qinit

# create a new (initially empty) patch in the queue
hg qnew combined.patch

# import the new patches (if they're coming from trac, say)
hg qimport ~/downloads/one.patch ~/downloads/two.patch ~/downloads/three.patch

# let's see what's in the queue series
hg qseries
[hg replies:] combined.patch
[hg replies:] one.patch
[hg replies:] two.patch
[hg replies:] three.patch

# fold the patches into combined.patch (they get applied in order)
hg qfold one.patch two.patch three.patch
# the previous step can also be done one-at-a-time, of course

# combined.patch is the only applied patch now, containing all the others
hg qapplied
[hg replies:] combined.patch

# the folded patches are also removed from the queue series
hg qseries
[hg replies:] combined.patch

# now we go on with the usual things
sage -b # rebuild
sage -t ... # test
hg qrefresh # if files were edited
hg export qtip > ~/uploads/combined.patch # make a physical patch file with all the changes
hg qpop # get back to the initial state of the repository
sage -b # rebuild

# upload ~/uploads/combined.patch to trac
}}}

Mercurial Queues

  • Philosophy
  • Commands
    • qnew, qpop, qpush, qdelete, export
  • Example
  • Advanced usage
    • guards, merge, etc.

See [http://hgbook.red-bean.com/hgbook.html], Chapters 12 and 13.

The mercurial bash completion script is at [http://www.cct.lsu.edu/~mkemp2/mercurial]

My mercurial queue workflow:

# cd into the repository
cd sage/devel/sage/


# initialize the queues.  This only needs to be done once.
hg qinit



# cd into the directory I am working in 
cd sage/graphs/

emacs graph.py # write my function, save the file

# The -e pops up an editor for me to enter a commit message
# The -f retroactively saves my changes as a patch
# (the changes visible in hg diff)

hg qnew -e -f mypatch.patch

# RUN THE DOCTESTS!!!

sage -b
sage -t graph.py

# Happily all the doctests pass :)

# Review the patch in diff format
hg qdiff

# Oops, I see a mistake in my patch!
emacs graph.py # fix mistake

# refresh the patch to reflect my current source
# Do hg qrefresh -e to edit the commit message
hg qrefresh 

# Export the tip of the queue (the last patch)
hg export qtip > ~/mypatch.patch

# If I want the patch to be unapplied, pop it off of the stack
hg qpop

# Now my source is back to where it was when I started.

To look at a patch from trac or from somewhere else:

# Download the patch from trac (in RAW format) and save to, e.g., newpatch.patch

# Pop off all my patches so I have a pristine release
hg qpop -a 

# import the new patch
hg qimport newpatch.patch

# apply the new patch
hg qpush

# build and run sage
sage -br

# or doctest a file
sage -b
sage -t file.py

# pop the experimental patch off of the stack
hg qpop 

# delete the patch
hg qdelete newpatch.patch

It is possible to "fold" several patches into one:

# If the patches are on trac, download them in RAW format
# Say they are called one.patch, two.patch, three.patch in some
# directory ~/downloads

# cd into the repository
cd sage/devel/sage/

# if it hasn't been already done, hg qinit

# create a new (initially empty) patch in the queue
hg qnew combined.patch

# import the new patches (if they're coming from trac, say)
hg qimport ~/downloads/one.patch ~/downloads/two.patch ~/downloads/three.patch

# let's see what's in the queue series
hg qseries
[hg replies:] combined.patch
[hg replies:] one.patch
[hg replies:] two.patch
[hg replies:] three.patch

# fold the patches into combined.patch (they get applied in order)
hg qfold one.patch two.patch three.patch
# the previous step can also be done one-at-a-time, of course

# combined.patch is the only applied patch now, containing all the others
hg qapplied
[hg replies:] combined.patch

# the folded patches are also removed from the queue series
hg qseries
[hg replies:] combined.patch

# now we go on with the usual things
sage -b                                       # rebuild
sage -t ...                                   # test
hg qrefresh                                   # if files were edited
hg export qtip > ~/uploads/combined.patch     # make a physical patch file with all the changes
hg qpop                                       # get back to the initial state of the repository
sage -b                                       # rebuild

# upload ~/uploads/combined.patch to trac