[issue921] hg fetch can delete the wrong file when merging

Jesse Glick mercurial-bugs at selenic.com
Tue Jan 8 20:15:38 CST 2008


New submission from Jesse Glick <jesse.glick at sun.com>:

Run:

---%<---
#!/bin/bash
set -e -x
hg version
cd /tmp
rm -rf hgtest-fetch*
hg init hgtest-fetch
hg clone hgtest-fetch hgtest-fetch-a
hg clone hgtest-fetch hgtest-fetch-b
cd hgtest-fetch-a
touch a
hg add a
hg ci -m.
hg push
cd ../hgtest-fetch-b
hg pull -u
ls
touch b
hg add b
hg rem a
hg ci -m.
ls
hg push
cd ../hgtest-fetch-a
touch c
hg add c
hg ci -m.
hg fetch
#hg pull
#hg merge
#hg ci -m.
ls
hg push
cd ../hgtest-fetch-b
ls
hg pull -u
ls
---%<---

I get:

---%<---
+ hg version
Mercurial Distributed SCM (version 0.9.5)

Copyright (C) 2005-2007 Matt Mackall <mpm at selenic.com> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ cd /tmp
+ rm -rf hgtest-fetch hgtest-fetch-a hgtest-fetch-b
+ hg init hgtest-fetch
+ hg clone hgtest-fetch hgtest-fetch-a
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ hg clone hgtest-fetch hgtest-fetch-b
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ cd hgtest-fetch-a
+ touch a
+ hg add a
+ hg ci -m.
+ hg push
pushing to /tmp/hgtest-fetch
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
+ cd ../hgtest-fetch-b
+ hg pull -u
pulling from /tmp/hgtest-fetch
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ ls
a
+ touch b
+ hg add b
+ hg rem a
+ hg ci -m.
+ ls
b
+ hg push
pushing to /tmp/hgtest-fetch
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
+ cd ../hgtest-fetch-a
+ touch c
+ hg add c
+ hg ci -m.
+ hg fetch
pulling from /tmp/hgtest-fetch
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
merging with new head 2:25015baca70d
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
new changeset 3:2e03af81f688 merges remote changes with local
+ ls
b  c
+ hg push
pushing to /tmp/hgtest-fetch
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 1 changes to 1 files
+ cd ../hgtest-fetch-b
+ ls
b
+ hg pull -u
pulling from /tmp/hgtest-fetch
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 1 changes to 1 files
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ ls
a  c
---%<---

For some reason the merge done by the Fetch extension affects the wrong files.
In fact the correct merge is left in the working dir but not committed:

---%<---
$ hg -R hgtest-fetch-a stat
M b
R a
---%<---

If you uncomment the three lines to use regular pull+merge+ci instead of fetch,
it works as expected; the last line shows 'b c'.

----------
messages: 4848
nosy: jglick
priority: urgent
status: unread
title: hg fetch can delete the wrong file when merging
topic: merge

____________________________________________________
Mercurial issue tracker <mercurial-bugs at selenic.com>
<http://www.selenic.com/mercurial/bts/issue921>
____________________________________________________



More information about the Mercurial-devel mailing list