Mercurial > hg
view tests/test-narrow-rebase.t @ 37787:92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
_destautorebase(SRC) is based on the _destrestack(SRC) revset from
fbamend. The supporting _possibledestination function is extracted
from evolve, with minor cleanups.
We've considered some alternatives here:
* This change, but with --auto as the flag name. We're hedging our bets
on this a little in this change so that if this ends up being the wrong
direction we haven't burned the valauble --auto name on rebase.
* --destination auto: I've got reservations about the discoverability of this,
and we don't currently have a good story for a revset alias of sorts that
changes behavior depending on the context in which it's used.
* A "rebase presets" feature, where we could use the currently-an-error
positional argument space for the rebase command to define presets, so that
users could define a 'linearize' preset that specifies
--revision='orphan()-obsolete()' and --dest=_destautoorphanrebase(SRC).
Personally, I find the third option somewhat appealing, but am
hesitant to "spend" the functionality space of positional arguments to
the rebase command. We should revisit the way we expose this
functionality sometime in the 4.7 cycle once we've had a chance to vet
the implementation of the functionality.
Differential Revision: https://phab.mercurial-scm.org/D2668
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 04 Mar 2018 15:29:41 -0500 |
parents | a2a6e724d61a |
children | cb516a854bc7 |
line wrap: on
line source
$ . "$TESTDIR/narrow-library.sh" create full repo $ hg init master $ cd master $ mkdir inside $ echo inside1 > inside/f1 $ echo inside2 > inside/f2 $ mkdir outside $ echo outside1 > outside/f1 $ echo outside2 > outside/f2 $ hg ci -Aqm 'initial' $ echo modified > inside/f1 $ hg ci -qm 'modify inside/f1' $ hg update -q 0 $ echo modified2 > inside/f2 $ hg ci -qm 'modify inside/f2' $ hg update -q 0 $ echo modified > outside/f1 $ hg ci -qm 'modify outside/f1' $ hg update -q 0 $ echo modified2 > outside/f1 $ hg ci -qm 'conflicting outside/f1' $ cd .. $ hg clone --narrow ssh://user@dummy/master narrow --include inside requesting all changes adding changesets adding manifests adding file changes added 5 changesets with 4 changes to 2 files (+3 heads) new changesets *:* (glob) updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ cat >> $HGRCPATH <<EOF > [extensions] > rebase= > EOF $ hg update -q 0 Can rebase onto commit where no files outside narrow spec are involved $ hg update -q 0 $ echo modified > inside/f2 $ hg ci -qm 'modify inside/f2' $ hg rebase -d 'desc("modify inside/f1")' rebasing 5:c2f36d04e05d "modify inside/f2" (tip) saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob) Can rebase onto conflicting changes inside narrow spec $ hg update -q 0 $ echo conflicting > inside/f1 $ hg ci -qm 'conflicting inside/f1' $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)' rebasing 6:cdce97fbf653 "conflicting inside/f1" (tip) merging inside/f1 unresolved conflicts (see hg resolve, then hg rebase --continue) $ echo modified3 > inside/f1 $ hg resolve -m 2>&1 | grep -v continue: (no more unresolved files) $ hg rebase --continue rebasing 6:cdce97fbf653 "conflicting inside/f1" (tip) saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob) Can rebase onto non-conflicting changes outside narrow spec $ hg update -q 0 $ echo modified > inside/f2 $ hg ci -qm 'modify inside/f2' $ hg rebase -d 'desc("modify outside/f1")' rebasing 7:c2f36d04e05d "modify inside/f2" (tip) saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob) Rebase interrupts on conflicting changes outside narrow spec $ hg update -q 'desc("conflicting outside/f1")' $ hg phase -f -d . no phases changed $ hg rebase -d 'desc("modify outside/f1")' rebasing 4:707c035aadb6 "conflicting outside/f1" abort: conflict in file 'outside/f1' is outside narrow clone [255]