Mercurial > hg
changeset 6297:fed1a9c22076
dirstate.remove: during merges, remember the previous file state
We encode the previous state as a negative file size (AFAICS, previous
versions of hg always have size == 0 when state == 'r').
We save the state of 'm'erged and dirty files, because they're the
two states that indicate that a file has to be committed on a merge
to correctly record per-file history.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Tue, 18 Mar 2008 04:07:39 -0300 |
parents | a9e6b8875805 |
children | 53cbb33e1269 |
files | mercurial/dirstate.py tests/test-merge-remove tests/test-merge-remove.out |
diffstat | 3 files changed, 53 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Tue Mar 18 04:07:39 2008 -0300 +++ b/mercurial/dirstate.py Tue Mar 18 04:07:39 2008 -0300 @@ -270,8 +270,15 @@ 'mark a file removed' self._dirty = True self._changepath(f, 'r') - self._map[f] = ('r', 0, 0, 0, 0) - if f in self._copymap: + size = 0 + if self._pl[1] != nullid and f in self._map: + entry = self._map[f] + if entry[0] == 'm': + size = -1 + elif entry[0] == 'n' and entry[2] == -2: + size = -2 + self._map[f] = ('r', 0, size, 0, 0) + if size == 0 and f in self._copymap: del self._copymap[f] def merge(self, f):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-merge-remove Tue Mar 18 04:07:39 2008 -0300 @@ -0,0 +1,29 @@ +#!/bin/sh + +hg init repo +cd repo + +echo foo > foo +echo bar > bar +hg ci -qAm 'add foo bar' + +echo foo2 >> foo +echo bleh > bar +hg ci -m 'change foo bar' + +hg up -qC 0 +hg mv foo foo1 +echo foo1 > foo1 +hg cat foo >> foo1 +hg ci -m 'mv foo foo1' + +hg merge +hg debugstate --nodates +hg st -q + +echo '% removing foo1 and bar' +cp foo1 F +cp bar B +hg rm -f foo1 bar +hg debugstate --nodates +hg st -qC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-merge-remove.out Tue Mar 18 04:07:39 2008 -0300 @@ -0,0 +1,15 @@ +merging foo1 and foo +1 files updated, 1 files merged, 0 files removed, 0 files unresolved +(branch merge, don't forget to commit) +n 0 -2 bar +m 644 14 foo1 +copy: foo -> foo1 +M bar +M foo1 +% removing foo1 and bar +r 0 -2 bar +r 0 -1 foo1 +copy: foo -> foo1 +R bar +R foo1 + foo