[PATCH RFC] update: add an option to allow to merge local changes when crossing branches

Matt Mackall mpm at selenic.com
Fri Feb 22 11:15:13 CST 2013


On Fri, 2013-02-22 at 14:24 +0100, Laurens Holst wrote:
> Op 22-02-13 13:26, Angel Ezquerra schreef:
> > On Fri, Feb 22, 2013 at 11:22 AM, Gilles Moris <gilles.moris at free.fr> wrote:
> >> # HG changeset patch
> >> # User Gilles Moris <gilles.moris at free.fr>
> >> # Date 1361528509 -3600
> >> # Node ID 567106adefd309717d8f0538197dc7dde45d34f1
> >> # Parent  013fcd112f13f31a35ea6a40d8cd1c6923cdaf20
> >> update: add an option to allow to merge local changes when crossing branches
> >>
> >> *NOT READY FOR INCLUSION*
> >>
> >> Normally, it is not possible to update to another branch with local changes.
> >> One have to use "hg update --clean" to discard changes and force the update.
> >> One workaround is to update to the common ancestor of the branches, and then
> >> to the other branch. This workaround is not well known by users.
> >>
> >> I introduce an update --merge option that enables to rebase the local changes
> >> in one step.
> >>
> >> However, I have still some questions about how to design it:
> >> I/ option naming
> >> * I used --merge as it seems pretty but though could be confused with
> >>    changesets merge
> >> * --rebase could be used, may be ,ore accurate, but IMO too tied to the rebase
> >>    extension
> >> * --crossbranches would not be a good idea, as we probably don't want to allow
> >>    crossing branches if a revision is not explicitely provided, whether there
> >>    are some local changes or not
> >> * other possibilities: --reseat, --move, ...
> >> * last possibility: no option, allow by default to merge local changes, we've
> >>    got --check if we want to block. By the way, this would greatly simplify both
> >>    the code and the help content. The help content is currently partially lying:
> >>      "If the changeset is not a descendant or ancestor of the working
> >>       directory's parent, the update is aborted."
> >>    Was true before, but since many releases we allow to cross branch for clean
> >>    working directory and an explicit release.
> >>      "-c --check     update across branches if no uncommitted changes"
> >>    Again wrong, this option aborts on any dirty working dir, whether we cross
> >>    branches or not.
> >>    So no option might be more consistent with the evolution of the CLI.
> > What about --force? It would let you do an update where the regular
> > update would not let you...
> 
> I’m not entirely clear why this isn’t the default?

Because it was once the default and many users shot themselves in the
foot (and blamed us) and now we know better.

-- 
Mathematics is the supreme nostalgia of our time.




More information about the Mercurial-devel mailing list