[Bug 4357] New: hg merge erroneously renames files renamed in unrelated branch

mercurial-bugs at selenic.com mercurial-bugs at selenic.com
Sat Sep 6 00:44:58 CDT 2014


http://bz.selenic.com/show_bug.cgi?id=4357

          Priority: normal
            Bug ID: 4357
                CC: mercurial-devel at selenic.com
          Assignee: bugzilla at selenic.com
           Summary: hg merge erroneously renames files renamed in
                    unrelated branch
          Severity: bug
    Classification: Unclassified
                OS: Mac OS
          Reporter: mail_ben_schmidt at yahoo.com.au
          Hardware: Macintosh
            Status: UNCONFIRMED
           Version: 3.1
         Component: Mercurial
           Product: Mercurial

Created attachment 1786
  --> http://bz.selenic.com/attachment.cgi?id=1786&action=edit
Script I used to produce the description

I originally encountered this with named branches, but tried to reduce to a
more minimal case, and came up with this:

Create repository
  $ hg init 
Create and commit vendor/one
  $ mkdir vendor 
  $ hg add vendor/one 
  $ hg commit -m "add vendor/one" 
Create and commit vendor/two on independent branch
  $ hg up null 
    0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ mkdir vendor 
  $ hg add vendor/two 
  $ hg commit -m "add vendor/two" 
    created new head
Merge to create main branch
  $ hg up 0 
    1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg merge 1 
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    (branch merge, don't forget to commit)
  $ hg commit -m merge 
Move vendor/one to dir/vendor/one on its branch
  $ hg up 0 
    0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ ls 
    vendor
  $ ls vendor 
    one
  $ hg mv vendor dir/vendor 
    moving vendor/one to dir/vendor/one
  $ hg commit -m "move vendor/one to dir/vendor/one" 
    created new head
Move vendor/two to dir/vendor/two on its branch
  $ hg up 1 
    1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ ls 
    vendor
  $ ls vendor 
    two
  $ hg mv vendor dir/vendor 
    moving vendor/two to dir/vendor/two
  $ hg commit -m "move vendor/two to dir/vendor/two" 
    created new head
Update to main branch and merge branch which moved one
  $ hg up 2 
    2 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ ls 
    vendor
  $ ls vendor 
    one
    two
  $ hg merge 3 
    2 files updated, 0 files merged, 1 files removed, 0 files unresolved
    (branch merge, don't forget to commit)
Why has two also moved?! It was not moved in either parent
  $ ls 
    dir
  $ ls dir 
    vendor
  $ hg st 
    M dir/vendor/one
    A dir/vendor/two
    R vendor/one
    R vendor/two
  $ hg log --graph 
    o  changeset:   4:9ec94b076964
    |  tag:         tip
    |  parent:      1:40d445dfec7a
    |  user:        Ben Schmidt
    |  date:        Sat Sep 06 15:41:37 2014 +1000
    |  summary:     move vendor/two to dir/vendor/two
    |
    | @  changeset:   3:beaba0ec239b
    | |  parent:      0:de1e05afafaa
    | |  user:        Ben Schmidt
    | |  date:        Sat Sep 06 15:41:37 2014 +1000
    | |  summary:     move vendor/one to dir/vendor/one
    | |
    +---@  changeset:   2:173ffb794ecd
    | |/   parent:      0:de1e05afafaa
    | |    parent:      1:40d445dfec7a
    | |    user:        Ben Schmidt
    | |    date:        Sat Sep 06 15:41:37 2014 +1000
    | |    summary:     merge
    | |
    o |  changeset:   1:40d445dfec7a
     /   parent:      -1:000000000000
    |    user:        Ben Schmidt
    |    date:        Sat Sep 06 15:41:36 2014 +1000
    |    summary:     add vendor/two
    |
    o  changeset:   0:de1e05afafaa
       user:        Ben Schmidt
       date:        Sat Sep 06 15:41:36 2014 +1000
       summary:     add vendor/one

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list