--- 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