merge with stable
authorMatt Mackall <mpm@selenic.com>
Thu, 27 Nov 2014 12:25:01 -0600
changeset 23404 b913c394386f
parent 23399 fd5247a88e63 (current diff)
parent 23403 edf29f9c15f0 (diff)
child 23405 2a038deeac9a
merge with stable
mercurial/cmdutil.py
mercurial/commands.py
mercurial/context.py
tests/test-commandserver.t
tests/test-help.t
tests/test-revert.t
--- a/mercurial/cmdutil.py	Tue Nov 11 20:32:10 2014 -0800
+++ b/mercurial/cmdutil.py	Thu Nov 27 12:25:01 2014 -0600
@@ -2615,12 +2615,16 @@
             dsmodified = modified
             dsadded = added
             dsremoved = removed
+            # store all local modifications, useful later for rename detection
+            localchanges = dsmodified | dsadded
             modified, added, removed = set(), set(), set()
         else:
             changes = repo.status(node1=parent, match=m)
             dsmodified = set(changes.modified)
             dsadded    = set(changes.added)
             dsremoved  = set(changes.removed)
+            # store all local modifications, useful later for rename detection
+            localchanges = dsmodified | dsadded
 
             # only take into account for removes between wc and target
             clean |= dsremoved - removed
@@ -2654,7 +2658,7 @@
 
         # if f is a rename, update `names` to also revert the source
         cwd = repo.getcwd()
-        for f in dsadded:
+        for f in localchanges:
             src = repo.dirstate.copied(f)
             # XXX should we check for rename down to target node?
             if src and src not in names and repo.dirstate[src] == 'r':
--- a/mercurial/commands.py	Tue Nov 11 20:32:10 2014 -0800
+++ b/mercurial/commands.py	Thu Nov 27 12:25:01 2014 -0600
@@ -4524,7 +4524,7 @@
      ] + mergetoolopts,
     _('[-P] [-f] [[-r] REV]'))
 def merge(ui, repo, node=None, **opts):
-    """merge working directory with another revision
+    """merge another revision into working directory
 
     The current working directory is updated with all changes made in
     the requested revision since the last common predecessor revision.
--- a/mercurial/context.py	Tue Nov 11 20:32:10 2014 -0800
+++ b/mercurial/context.py	Thu Nov 27 12:25:01 2014 -0600
@@ -1037,15 +1037,16 @@
     def _manifest(self):
         """generate a manifest corresponding to the values in self._status"""
 
-        man = self._parents[0].manifest().copy()
+        man1 = self._parents[0].manifest()
+        man = man1.copy()
         if len(self._parents) > 1:
             man2 = self.p2().manifest()
             def getman(f):
-                if f in man:
-                    return man
+                if f in man1:
+                    return man1
                 return man2
         else:
-            getman = lambda f: man
+            getman = lambda f: man1
 
         copied = self._repo.dirstate.copies()
         ff = self._flagfunc
@@ -1310,8 +1311,10 @@
         else:
             wlock = self._repo.wlock()
             try:
-                if self._repo.dirstate[dest] in '?r':
+                if self._repo.dirstate[dest] in '?':
                     self._repo.dirstate.add(dest)
+                elif self._repo.dirstate[dest] in 'r':
+                    self._repo.dirstate.normallookup(dest)
                 self._repo.dirstate.copy(source, dest)
             finally:
                 wlock.release()
--- a/tests/test-alias.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-alias.t	Thu Nov 27 12:25:01 2014 -0600
@@ -443,7 +443,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
@@ -469,7 +469,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
@@ -495,7 +495,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
--- a/tests/test-commandserver.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-commandserver.t	Thu Nov 27 12:25:01 2014 -0600
@@ -68,7 +68,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
--- a/tests/test-globalopts.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-globalopts.t	Thu Nov 27 12:25:01 2014 -0600
@@ -315,7 +315,7 @@
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
    manifest      output the current or given revision of the project manifest
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    outgoing      show changesets not found in the destination
    paths         show aliases for remote repositories
    phase         set or show the current phase name
@@ -396,7 +396,7 @@
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
    manifest      output the current or given revision of the project manifest
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    outgoing      show changesets not found in the destination
    paths         show aliases for remote repositories
    phase         set or show the current phase name
--- a/tests/test-help.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-help.t	Thu Nov 27 12:25:01 2014 -0600
@@ -14,7 +14,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
@@ -35,7 +35,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
@@ -78,7 +78,7 @@
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
    manifest      output the current or given revision of the project manifest
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    outgoing      show changesets not found in the destination
    paths         show aliases for remote repositories
    phase         set or show the current phase name
@@ -153,7 +153,7 @@
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
    manifest      output the current or given revision of the project manifest
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    outgoing      show changesets not found in the destination
    paths         show aliases for remote repositories
    phase         set or show the current phase name
@@ -293,7 +293,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log, history  show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove, rm    remove the specified files on the next commit
@@ -600,7 +600,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit
@@ -695,7 +695,7 @@
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
    manifest      output the current or given revision of the project manifest
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    outgoing      show changesets not found in the destination
    paths         show aliases for remote repositories
    phase         set or show the current phase name
@@ -1363,7 +1363,7 @@
   merge
   </a>
   </td><td>
-  merge working directory with another revision
+  merge another revision into working directory
   </td></tr>
   <tr><td>
   <a href="/help/pull">
--- a/tests/test-mq-qrename.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-mq-qrename.t	Thu Nov 27 12:25:01 2014 -0600
@@ -76,8 +76,8 @@
   $ hg qrename patchb patchc
   $ hg qrename patcha patchb
   $ hg st --mq
+  M patchb
   M series
-  A patchb
   A patchc
   R patcha
   $ cd ..
--- a/tests/test-rename.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-rename.t	Thu Nov 27 12:25:01 2014 -0600
@@ -571,20 +571,30 @@
   $ hg rename d1/a d1/c
   $ hg rename d1/b d1/a
   $ hg status -C
-  A d1/a
+  M d1/a
     d1/b
   A d1/c
     d1/a
   R d1/b
   $ hg diff --git
-  diff --git a/d1/b b/d1/a
-  rename from d1/b
-  rename to d1/a
+  diff --git a/d1/a b/d1/a
+  --- a/d1/a
+  +++ b/d1/a
+  @@ -1,1 +1,1 @@
+  -d1/a
+  +d1/b
+  diff --git a/d1/b b/d1/b
+  deleted file mode 100644
+  --- a/d1/b
+  +++ /dev/null
+  @@ -1,1 +0,0 @@
+  -d1/b
   diff --git a/d1/a b/d1/c
   copy from d1/a
   copy to d1/c
   $ hg update -C
-  2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ rm d1/c # The file was marked as added, so 'hg update' action  was 'forget'
 
 check illegal path components
 
--- a/tests/test-revert.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-revert.t	Thu Nov 27 12:25:01 2014 -0600
@@ -234,6 +234,12 @@
   $ hg st a newa
   ? newa
 
+Also true for move overwriting an existing file
+
+  $ hg mv --force a b/b
+  $ hg revert b/b
+  $ hg status a b/b
+
   $ cd ..
 
   $ hg init ignored
--- a/tests/test-status.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-status.t	Thu Nov 27 12:25:01 2014 -0600
@@ -390,3 +390,49 @@
 #endif
 
   $ cd ..
+
+Status after move overwriting a file (issue4458)
+=================================================
+
+
+  $ hg init issue4458
+  $ cd issue4458
+  $ echo a > a
+  $ echo b > b
+  $ hg commit -Am base
+  adding a
+  adding b
+
+
+with --force
+
+  $ hg mv b --force a
+  $ hg st --copies
+  M a
+    b
+  R b
+  $ hg revert --all
+  reverting a
+  undeleting b
+  $ rm *.orig
+
+without force
+
+  $ hg rm a
+  $ hg st --copies
+  R a
+  $ hg mv b a
+  $ hg st --copies
+  M a
+    b
+  R b
+
+Other "bug" highlight, the revision status does not report the copy information.
+This is buggy behavior.
+
+  $ hg commit -m 'blah'
+  $ hg st --copies --change .
+  M a
+  R b
+
+  $ cd ..
--- a/tests/test-strict.t	Tue Nov 11 20:32:10 2014 -0800
+++ b/tests/test-strict.t	Thu Nov 27 12:25:01 2014 -0600
@@ -28,7 +28,7 @@
    forget        forget the specified files on the next commit
    init          create a new repository in the given directory
    log           show revision history of entire repository or files
-   merge         merge working directory with another revision
+   merge         merge another revision into working directory
    pull          pull changes from the specified source
    push          push changes to the specified destination
    remove        remove the specified files on the next commit