# HG changeset patch # User Pierre-Yves David # Date 1325074224 -3600 # Node ID 438fe133b06833740c1d274b2dcb0c6201ff429a # Parent 64ca29eef349fff6bea4068e72b4c3983ce2e611 Add a -o and -O option to graft. diff -r 64ca29eef349 -r 438fe133b068 doc/from-mq.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/from-mq.rst Wed Dec 28 13:10:24 2011 +0100 @@ -0,0 +1,137 @@ +Moving from mq to hg-evolution +=============================== + + +quick reference: + +mq command equivalent + +hg qseries hg log +hg qnew hg commit +hg qrefresh hg amend +hg qpop hg update +hg qpush hg graft or rebase +hg qrm hg kill +hg qfold hg collapse +hg qdiff hg diff + +hg qfinish -- +hg qimport -- + + +hg qseries +----------- + +All your work in progress are now real changeset all the time. + +You can then use standard log to display them. You can use phase revset to +display unfinished business only and template to have the same kind of compact +output qseries have. + +This will result in something like that + + $ hg log -r 'not public()' --template='{rev}:{node|short} {description|firstline}\n' + + [alias] + wip = log -r 'not public()' --template='{rev}:{node|short} {description|firstline}\n' + +hg qnew +-------- + +With evolution you handle standard changeset without additional overlay. + +Standard changeset are created using hg commit as usual. + + $ hg commit + +If you want to keep the "wip are not pushed" behavior, you are looking for +setting your changeset in the secret phase. This can be achieved with the following sequence: + + $ hg phase --secret + $ hg commit + +Note that you only need it for the first commit you want to be secret. Later +commit will inherit their parents phase. + +If you always want your new commit to be in the secret phase, your should +consider updating your configuration: + + [phases] + new-commit=secret + +hg qref +-------- + +A new command from evolution will allow you to rewrite the changeset you are +current on. just invoc: + + $ hg amend + + +This command takes the same option than commit plus useful switch '-e' (--edit) + +Amend have also a -c switch which allow you to make and explicit amending +commit before rewriting a changeset. + + $ hg record -m 'feature A' + # oups, I forget some stuff + $ hg record babar.py + $ hg amend -c .^ # .^ refer to "working directoy parent, here 'feature A' + +note: refresh is an alias for amend + + +hg qpop +--------- + +If you need to go back to a previous state just: + + $ hg update + +hg qpush +-------- + +When you rewrite changeset, descendant of rewritten changeset are marked as +"out of sync". You new to rewrite them on top of the new version of their +ancestor. + +The evolution extension add a command to rewrite the next changeset: + + $ hg evolve + +You can also decide to do it manually using + + $ hg graft -O + +or + + $ hg rebase -r -d . + +note: using graft allow you to pick the changeset you want next as the --move +option of qpush do. + + +hg qrm +------- + +evolution introduce a new command to mark a changeset as "not wanted anymore". + + $ hg kill + +hg qfold +--------- + + + $ hg collapse # XXX not implemented + + $ hg rebase --collapse # XXX not tested + + +hg qdiff +--------- + + + + $ hg diff -r .^ + + diff -r 64ca29eef349 -r 438fe133b068 hgext/evolution.py --- a/hgext/evolution.py Wed Dec 28 12:38:01 2011 +0100 +++ b/hgext/evolution.py Wed Dec 28 13:10:24 2011 +0100 @@ -225,6 +225,8 @@ _('specifies the changeset to amend'), _('REV')), ('b', 'branch', '', _('specifies a branch for the new.'), _('REV')), + ('e', 'edit', False, + _('edit commit message.'), _('')), ] + walkopts + commitopts + commitopts2, _('[OPTION]... [FILE]...')) @@ -274,7 +276,7 @@ ciopts.pop('logfile', None) ciopts['message'] = opts.get('note') or ('amends %s' % old.hex()) e = cmdutil.commiteditor - if ciopts.get('force_editor'): + if ciopts.get('edit'): e = cmdutil.commitforceeditor def commitfunc(ui, repo, message, match, opts): return repo.commit(message, opts.get('user'), opts.get('date'), match, @@ -313,7 +315,19 @@ repo.addobsolete(new.node(), old.node()) return result +def graftwrapper(orig, ui, repo, *revs, **kwargs): + if kwargs.get('old_obsolete'): + obsoleted = kwargs.setdefault('obsolete', []) + if kwargs['continue']: + obsoleted.extend(repo.opener.read('graftstate').splitlines()) + else: + obsoleted.extend(revs) + return commitwrapper(orig, ui, repo,*revs, **kwargs) + def extsetup(ui): entry = extensions.wrapcommand(commands.table, 'commit', commitwrapper) entry[1].append(('o', 'obsolete', [], _("this commit obsolet this revision"))) + entry = extensions.wrapcommand(commands.table, 'graft', graftwrapper) + entry[1].append(('o', 'obsolete', [], _("this graft obsolet this revision"))) + entry[1].append(('O', 'old-obsolete', False, _("graft result obsolete graft source")))