mercurial/merge.py
changeset 9717 68a1b9d0663e
parent 9716 ea8c207a0f78
child 9780 1ee085511b89
equal deleted inserted replaced
9716:ea8c207a0f78 9717:68a1b9d0663e
   410 
   410 
   411     This logic is tested by test-update-branches.
   411     This logic is tested by test-update-branches.
   412 
   412 
   413     -c  -C  dirty  rev  |  linear   same  cross
   413     -c  -C  dirty  rev  |  linear   same  cross
   414      n   n    n     n   |    ok     (1)     x
   414      n   n    n     n   |    ok     (1)     x
   415      n   n    n     y   |    ok     (1)    ok
   415      n   n    n     y   |    ok     ok     ok
   416      n   n    y     *   |   merge   (2)    (3)
   416      n   n    y     *   |   merge   (2)    (2)
   417      n   y    *     *   |    ---  discard  ---
   417      n   y    *     *   |    ---  discard  ---
   418      y   n    y     *   |    ---    (4)    ---
   418      y   n    y     *   |    ---    (3)    ---
   419      y   n    n     *   |    ---    ok     ---
   419      y   n    n     *   |    ---    ok     ---
   420      y   y    *     *   |    ---    (5)    ---
   420      y   y    *     *   |    ---    (4)    ---
   421 
   421 
   422     x = can't happen
   422     x = can't happen
   423     * = don't-care
   423     * = don't-care
   424     1 = abort: crosses branches (use 'hg merge' or 'hg update -C')
   424     1 = abort: crosses branches (use 'hg merge' or 'hg update -c')
   425     2 = abort: crosses branches (use 'hg merge' or 'hg update -C'
   425     2 = abort: crosses branches (use 'hg merge' to merge or
   426                  to discard changes)
   426                  use 'hg update -C' to discard changes)
   427     3 = abort: crosses named branches (use 'hg update -C' to
   427     3 = abort: uncommitted local changes
   428                  discard changes)
   428     4 = incompatible options (checked in commands.py)
   429     4 = abort: uncommitted local changes
       
   430     5 = incompatible options (checked in commands.py)
       
   431     """
   429     """
   432 
   430 
       
   431     onode = node
   433     wlock = repo.wlock()
   432     wlock = repo.wlock()
   434     try:
   433     try:
   435         wc = repo[None]
   434         wc = repo[None]
   436         if node is None:
   435         if node is None:
   437             # tip of current branch
   436             # tip of current branch
   465                 raise util.Abort(_("outstanding uncommitted changes "
   464                 raise util.Abort(_("outstanding uncommitted changes "
   466                                    "(use 'hg status' to list changes)"))
   465                                    "(use 'hg status' to list changes)"))
   467         elif not overwrite:
   466         elif not overwrite:
   468             if pa == p1 or pa == p2: # linear
   467             if pa == p1 or pa == p2: # linear
   469                 pass # all good
   468                 pass # all good
   470             elif p1.branch() == p2.branch():
       
   471                 if wc.files() or wc.deleted():
       
   472                     raise util.Abort(_("crosses branches (use 'hg merge' or "
       
   473                                        "'hg update -C' to discard changes)"))
       
   474                 raise util.Abort(_("crosses branches (use 'hg merge' "
       
   475                                    "or 'hg update -C')"))
       
   476             elif wc.files() or wc.deleted():
   469             elif wc.files() or wc.deleted():
   477                 raise util.Abort(_("crosses named branches (use "
   470                 raise util.Abort(_("crosses branches (use 'hg merge' to merge "
   478                                    "'hg update -C' to discard changes)"))
   471                                  "or use 'hg update -C' to discard changes)"))
       
   472             elif onode is None:
       
   473                 raise util.Abort(_("crosses branches (use 'hg merge' or use "
       
   474                                    "'hg update -c')"))
   479             else:
   475             else:
   480                 # Allow jumping branches if there are no changes
   476                 # Allow jumping branches if clean and specific rev given
   481                 overwrite = True
   477                 overwrite = True
   482 
   478 
   483         ### calculate phase
   479         ### calculate phase
   484         action = []
   480         action = []
   485         if not force:
   481         if not force: