diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -386,8 +386,10 @@ if self.inmemory: from mercurial.context import overlayworkingctx self.wctx = overlayworkingctx(self.repo) + self.repo.ui.debug("rebasing in-memory\n") else: self.wctx = self.repo[None] + self.repo.ui.debug("rebasing on disk\n") def _performrebase(self, tr): self._assignworkingcopy() diff --git a/tests/test-rebase-conflicts.t b/tests/test-rebase-conflicts.t --- a/tests/test-rebase-conflicts.t +++ b/tests/test-rebase-conflicts.t @@ -235,6 +235,7 @@ $ hg rebase -s9 -d2 --debug # use debug to really check merge base used rebase onto 4bc80088dc6b starting from e31216eec445 + rebasing on disk rebase status stored rebasing 9:e31216eec445 "more changes to f1" future parents are 2 and -1 diff --git a/tests/test-rebase-inmemory.t b/tests/test-rebase-inmemory.t new file mode 100644 --- /dev/null +++ b/tests/test-rebase-inmemory.t @@ -0,0 +1,157 @@ +#require symlink execbit + $ cat << EOF >> $HGRCPATH + > [extensions] + > amend= + > rebase= + > debugdrawdag=$TESTDIR/drawdag.py + > [diff] + > git=1 + > [alias] + > tglog = log -G --template "{rev}: {node|short} '{desc}'\n" + > EOF + +Rebase a simple DAG: + $ hg init repo1 + $ cd repo1 + $ hg debugdrawdag <<'EOS' + > c b + > |/ + > d + > | + > a + > EOS + $ hg up -C a + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg tglog + o 3: 814f6bd05178 'c' + | + | o 2: db0e82a16a62 'b' + |/ + o 1: 02952614a83d 'd' + | + @ 0: b173517d0057 'a' + + $ hg cat -r 3 c + c (no-eol) + $ hg cat -r 2 b + b (no-eol) + $ hg rebase --inmemory --debug -r b -d c | grep rebasing + rebasing in-memory + rebasing 2:db0e82a16a62 "b" (b) + $ hg tglog + o 3: ca58782ad1e4 'b' + | + o 2: 814f6bd05178 'c' + | + o 1: 02952614a83d 'd' + | + @ 0: b173517d0057 'a' + + $ hg cat -r 3 b + b (no-eol) + $ hg cat -r 2 c + c (no-eol) + +Case 2: + $ hg init repo2 + $ cd repo2 + $ hg debugdrawdag <<'EOS' + > c b + > |/ + > d + > | + > a + > EOS + +Add a symlink and executable file: + $ hg up -C c + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ ln -s somefile e + $ echo f > f + $ chmod +x f + $ hg add e f + $ hg amend -q + $ hg up -Cq a + +Write files to the working copy, and ensure they're still there after the rebase + $ echo "abc" > a + $ ln -s def b + $ echo "ghi" > c + $ echo "jkl" > d + $ echo "mno" > e + $ hg tglog + o 3: f56b71190a8f 'c' + | + | o 2: db0e82a16a62 'b' + |/ + o 1: 02952614a83d 'd' + | + @ 0: b173517d0057 'a' + + $ hg cat -r 3 c + c (no-eol) + $ hg cat -r 2 b + b (no-eol) + $ hg cat -r 3 e + somefile (no-eol) + $ hg rebase --inmemory --debug -s b -d a | grep rebasing + rebasing in-memory + rebasing 2:db0e82a16a62 "b" (b) + $ hg tglog + o 3: fc055c3b4d33 'b' + | + | o 2: f56b71190a8f 'c' + | | + | o 1: 02952614a83d 'd' + |/ + @ 0: b173517d0057 'a' + + $ hg cat -r 2 c + c (no-eol) + $ hg cat -r 3 b + b (no-eol) + $ hg rebase --inmemory --debug -s 1 -d 3 | grep rebasing + rebasing in-memory + rebasing 1:02952614a83d "d" (d) + rebasing 2:f56b71190a8f "c" + $ hg tglog + o 3: 753feb6fd12a 'c' + | + o 2: 09c044d2cb43 'd' + | + o 1: fc055c3b4d33 'b' + | + @ 0: b173517d0057 'a' + +Ensure working copy files are still there: + $ cat a + abc + $ readlink.py b + b -> def + $ cat e + mno + +Ensure symlink and executable files were rebased properly: + $ hg up -Cq 3 + $ readlink.py e + e -> somefile + $ ls -l f | cut -c -10 + -rwxr-xr-x + +Rebase the working copy parent, which should default to an on-disk merge even if +we requested in-memory. + $ hg up -C 3 + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg rebase -r 3 -d 0 --inmemory --debug | grep rebasing + rebasing on disk + rebasing 3:753feb6fd12a "c" (tip) + $ hg tglog + @ 3: 844a7de3e617 'c' + | + | o 2: 09c044d2cb43 'd' + | | + | o 1: fc055c3b4d33 'b' + |/ + o 0: b173517d0057 'a' + +