Re: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear update is aborted
On Tue, 21 Feb 2017 11:08:05 -0500, Augie Facklerwrote: On Feb 20, 2017, at 05:38, Gábor STEFANIK wrote: On Wed, Feb 15, 2017 at 12:56:41PM -0800, Martin von Zweigbergk via Mercurial-devel wrote: # HG changeset patch # User Martin von Zweigbergk # Date 1487140898 28800 # Tue Feb 14 22:41:38 2017 -0800 # Node ID c6cd58d272aee6633fbad5eacdad742e2f9909cd # Parent 542a99ede6c3ac7cb4afccd3703fcc30e3d4c90d update: also suggest --merge when non-linear update is aborted This makes me a touch nervous, since the merge can leave the user in an state that's hard to recover from. Basically "hg resolve -au; hg resolve -at:local; hg update --merge -r$(head -c40 .hg/merge/state) -t:local"; but we need to expose a less hacky way of doing so. Not quite, because this isn't sure (I don't think) to get you back to exactly the pre-update-command state, as some files might have been merged behind your back? Crazy thought- what if `hg update` were to do the equivalent under the hood: $ hg ci --secret -m "backup for update" $ src=$(hg log -r . -T "{rev}") $ hg up $dest $ hg rebase -r $src -d . Rebase strips (or obsoletes), so the temp commit is gone. If things go awry, `hg update --abort` is the equivalent of: $ hg rebase --abort $ hg up -C $src^ $ hg revert --all -r $src $ hg strip --no-backup $src This would restore files merged behind your back too. Obviously it is only needed if a file changed in both branches between ancestor($src, $dest) -> $src and ancestor($src, $dest) -> $dest. I've been pondering how to do that calculation with filesets, so at least there's an easy way to tell if there's a potential conflict beforehand. Maybe a new 'changed(rev)' fileset, that works like `hg status --change`? "hg update --abort"? I'd be a big fan of having an update --abort that just takes you back to where you were before the conflicts. To date, nobody has been motivated enough to do the work (I'd love to do it, but it's unlikely to be near the top of my stack for months/years). ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear update is aborted
Excerpts from Augie Fackler's message of 2017-02-21 11:08:05 -0500: > > "hg update --abort"? > > I'd be a big fan of having an update --abort that just takes you back to > where you were before the conflicts. To date, nobody has been motivated > enough to do the work (I'd love to do it, but it's unlikely to be near the > top of my stack for months/years). I think that could be hard if the user do touch some files being updated - it seems to me like a "recursive" update/merge situation, that requires comprehensive transaction support which works for non-append-only files (and maybe directories). My intuition is that it's impossible to implement such fancy transaction cleanly with the POSIX APIs, unless we control the filesystem (like fuse etc). So I'd prefer simple and straightfoward solutions. "update --clean" to go back looks good enough to me. ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear update is aborted
> On Feb 20, 2017, at 05:38, Gábor STEFANIKwrote: > >> On Wed, Feb 15, 2017 at 12:56:41PM -0800, Martin von Zweigbergk via >> Mercurial-devel wrote: >>> # HG changeset patch >>> # User Martin von Zweigbergk # Date >> 1487140898 >>> 28800 >>> # Tue Feb 14 22:41:38 2017 -0800 >>> # Node ID c6cd58d272aee6633fbad5eacdad742e2f9909cd >>> # Parent 542a99ede6c3ac7cb4afccd3703fcc30e3d4c90d >>> update: also suggest --merge when non-linear update is aborted >> >> This makes me a touch nervous, since the merge can leave the user in an >> state that's hard to recover from. > > Basically "hg resolve -au; hg resolve -at:local; hg update --merge -r$(head > -c40 .hg/merge/state) -t:local"; but we need to expose a less hacky way of > doing so. Not quite, because this isn't sure (I don't think) to get you back to exactly the pre-update-command state, as some files might have been merged behind your back? > > "hg update --abort"? I'd be a big fan of having an update --abort that just takes you back to where you were before the conflicts. To date, nobody has been motivated enough to do the work (I'd love to do it, but it's unlikely to be near the top of my stack for months/years). ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
RE: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear update is aborted
> -- This message, including its attachments, is confidential. For more information please read NNG's email policy here: http://www.nng.com/emailpolicy/ By responding to this email you accept the email policy. -Original Message- > From: Mercurial-devel [mailto:mercurial-devel-boun...@mercurial-scm.org] > On Behalf Of Augie Fackler > Sent: Wednesday, February 15, 2017 11:25 PM > To: Martin von Zweigbergk <martinv...@google.com> > Cc: mercurial-devel@mercurial-scm.org > Subject: Re: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear > update is aborted > > On Wed, Feb 15, 2017 at 12:56:41PM -0800, Martin von Zweigbergk via > Mercurial-devel wrote: > > # HG changeset patch > > # User Martin von Zweigbergk <martinv...@google.com> # Date > 1487140898 > > 28800 > > # Tue Feb 14 22:41:38 2017 -0800 > > # Node ID c6cd58d272aee6633fbad5eacdad742e2f9909cd > > # Parent 542a99ede6c3ac7cb4afccd3703fcc30e3d4c90d > > update: also suggest --merge when non-linear update is aborted > > This makes me a touch nervous, since the merge can leave the user in an > state that's hard to recover from. Basically "hg resolve -au; hg resolve -at:local; hg update --merge -r$(head -c40 .hg/merge/state) -t:local"; but we need to expose a less hacky way of doing so. "hg update --abort"? > > Series LG otherwise, but I won't land it since I'm also enthusiastic about the > feature added in patch 4. > > > > > diff -r 542a99ede6c3 -r c6cd58d272ae mercurial/merge.py > > --- a/mercurial/merge.pyMon Feb 13 16:03:05 2017 -0800 > > +++ b/mercurial/merge.pyTue Feb 14 22:41:38 2017 -0800 > > @@ -1570,7 +1570,8 @@ > > pass # allow updating to successors > > else: > > msg = _("uncommitted changes") > > -hint = _("commit or update --clean to discard > > changes") > > +hint = _("commit, or use --clean to discard > > changes, " > > + "or use --merge to allow update") > > raise error.UpdateAbort(msg, hint=hint) > > else: > > # Allow jumping branches if clean and specific > > rev given diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-merge5.t > > --- a/tests/test-merge5.t Mon Feb 13 16:03:05 2017 -0800 > > +++ b/tests/test-merge5.t Tue Feb 14 22:41:38 2017 -0800 > > @@ -26,7 +26,7 @@ > > > >$ hg update 1 > >abort: uncommitted changes > > - (commit or update --clean to discard changes) > > + (commit, or use --clean to discard changes, or use --merge to allow > > + update) > >[255] > >$ mv c a > > > > diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-subrepo-svn.t > > --- a/tests/test-subrepo-svn.t Mon Feb 13 16:03:05 2017 -0800 > > +++ b/tests/test-subrepo-svn.t Tue Feb 14 22:41:38 2017 -0800 > > @@ -472,7 +472,7 @@ > >$ echo "updating should (maybe) fail" > obstruct/other > >$ hg co tip > >abort: uncommitted changes > > - (commit or update --clean to discard changes) > > + (commit, or use --clean to discard changes, or use --merge to allow > > + update) > >[255] > > > > Point to a Subversion branch which has since been deleted and > > recreated diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-update- > branches.t > > --- a/tests/test-update-branches.t Mon Feb 13 16:03:05 2017 -0800 > > +++ b/tests/test-update-branches.t Tue Feb 14 22:41:38 2017 -0800 > > @@ -123,19 +123,19 @@ > > > >$ revtest 'none dirty same' dirty 2 3 > >abort: uncommitted changes > > - (commit or update --clean to discard changes) > > + (commit, or use --clean to discard changes, or use --merge to allow > > + update) > >parent=2 > >M foo > > > >$ revtest 'none dirtysub same' dirtysub 2 3 > >abort: uncommitted changes > > - (commit or update --clean to discard changes) > > + (commit, or use --clean to discard changes, or use --merge to allow > > + update) > >parent=2 > >M sub/suba > > > >$ revtest 'none dirty cross' dirty 3 4 > >abort: uncommitted changes > > - (commit or update --clean to discard changes) > > + (commit, or use --clean to discard changes, or use --merge to allow > > + update) > >parent=3 > >M foo > > > > @@ -147,7 +147,7
Re: [PATCH 3 of 4 V3] update: also suggest --merge when non-linear update is aborted
On Wed, Feb 15, 2017 at 12:56:41PM -0800, Martin von Zweigbergk via Mercurial-devel wrote: > # HG changeset patch > # User Martin von Zweigbergk> # Date 1487140898 28800 > # Tue Feb 14 22:41:38 2017 -0800 > # Node ID c6cd58d272aee6633fbad5eacdad742e2f9909cd > # Parent 542a99ede6c3ac7cb4afccd3703fcc30e3d4c90d > update: also suggest --merge when non-linear update is aborted This makes me a touch nervous, since the merge can leave the user in an state that's hard to recover from. Series LG otherwise, but I won't land it since I'm also enthusiastic about the feature added in patch 4. > > diff -r 542a99ede6c3 -r c6cd58d272ae mercurial/merge.py > --- a/mercurial/merge.py Mon Feb 13 16:03:05 2017 -0800 > +++ b/mercurial/merge.py Tue Feb 14 22:41:38 2017 -0800 > @@ -1570,7 +1570,8 @@ > pass # allow updating to successors > else: > msg = _("uncommitted changes") > -hint = _("commit or update --clean to discard > changes") > +hint = _("commit, or use --clean to discard changes, > " > + "or use --merge to allow update") > raise error.UpdateAbort(msg, hint=hint) > else: > # Allow jumping branches if clean and specific rev given > diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-merge5.t > --- a/tests/test-merge5.t Mon Feb 13 16:03:05 2017 -0800 > +++ b/tests/test-merge5.t Tue Feb 14 22:41:38 2017 -0800 > @@ -26,7 +26,7 @@ > >$ hg update 1 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >[255] >$ mv c a > > diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-subrepo-svn.t > --- a/tests/test-subrepo-svn.tMon Feb 13 16:03:05 2017 -0800 > +++ b/tests/test-subrepo-svn.tTue Feb 14 22:41:38 2017 -0800 > @@ -472,7 +472,7 @@ >$ echo "updating should (maybe) fail" > obstruct/other >$ hg co tip >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >[255] > > Point to a Subversion branch which has since been deleted and recreated > diff -r 542a99ede6c3 -r c6cd58d272ae tests/test-update-branches.t > --- a/tests/test-update-branches.tMon Feb 13 16:03:05 2017 -0800 > +++ b/tests/test-update-branches.tTue Feb 14 22:41:38 2017 -0800 > @@ -123,19 +123,19 @@ > >$ revtest 'none dirty same' dirty 2 3 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >parent=2 >M foo > >$ revtest 'none dirtysub same' dirtysub 2 3 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >parent=2 >M sub/suba > >$ revtest 'none dirty cross' dirty 3 4 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >parent=3 >M foo > > @@ -147,7 +147,7 @@ > >$ revtest 'none dirtysub cross' dirtysub 3 4 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >parent=3 >M sub/suba > > @@ -258,7 +258,7 @@ > >$ revtest 'dirty cross' dirty 3 4 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >parent=3 >M foo > > @@ -476,7 +476,7 @@ >$ hg up --quiet 2 >$ hg up 5 >abort: uncommitted changes > - (commit or update --clean to discard changes) > + (commit, or use --clean to discard changes, or use --merge to allow update) >[255] > > Test that we don't crash when updating from a pruned changeset (i.e. has no > ___ > Mercurial-devel mailing list > Mercurial-devel@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel