Patchwork D1652: tests: add a simple test for in-memory rebase

login
register
mail settings
Submitter phabricator
Date Dec. 11, 2017, 6:43 a.m.
Message ID <64374701d278c0e61af7223b979c5e1f@localhost.localdomain>
Download mbox | patch
Permalink /patch/26212/
State Not Applicable
Headers show

Comments

phabricator - Dec. 11, 2017, 6:43 a.m.
phillco updated this revision to Diff 4348.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D1652?vs=4347&id=4348

REVISION DETAIL
  https://phab.mercurial-scm.org/D1652

AFFECTED FILES
  hgext/rebase.py
  tests/test-rebase-conflicts.t
  tests/test-rebase-inmemory.t

CHANGE DETAILS




To: phillco, #hg-reviewers
Cc: mercurial-devel

Patch

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'
+  
+
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/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()