evolve: take changes to one file out of a changeset

Greg Ward greg at gerg.ca
Thu Jan 24 18:16:38 UTC 2013


Hi folks --

I've been playing with the evolve extension recently as an alternative
to MQ. I'm fairly impressed so far, but here's one problem I can't
figure out cleanly: if I accidentally commit too many files, I can't
use "hg amend" to remove one of them from the changeset, restoring its
changes to the working dir.

Here's how I would do it with MQ:

  $ hg status
  M a
  M b
  $ hg qnew -m"modify a" a.patch
  [oops! I didn't mean to commit b as well!]
  $ hg qref -X b
  $ hg status
  M b

Now let's try the same thing with evolve:

  $ hg status
  M a
  M b
  $ hg commit -m"modify a"
  [oops! I didn't mean to commit b as well!]
  $ hg amend -X b
  abort: no updates found
  $ hg amend a            
  abort: no updates found
  $ hg amend -I a
  abort: no updates found

Darn. I have to do it the hard way:

  $ hg diff -c . b > patch
  $ patch -R -p1 < patch
  patching file b
  $ hg amend
  $ patch -p1 < patch   
  patching file b
  $ hg st
  M b

Yuck. Is this the only option with evolve for this use case?

(Oh yeah: I'm using Mercurial 2.4.2+8-7648b87e76db because evolve
doesn't work with 2.5rc. ;-( evolve.py is from changeset f727ebe6ffd5,
current stable, in https://bitbucket.org/marmoute/mutable-history.)

       Greg

-- 
Greg Ward                            http://www.gerg.ca
<greg at gerg.ca>                       @gergdotca



More information about the Mercurial mailing list