mercurial/destutil.py
changeset 28102 bd74b5e0d2c0
parent 28065 6b1fc09c699a
child 28103 7d852bb47b0a
equal deleted inserted replaced
28101:79437fb352ce 28102:bd74b5e0d2c0
   132 
   132 
   133     _destupdatevalidate(repo, rev, clean, check)
   133     _destupdatevalidate(repo, rev, clean, check)
   134 
   134 
   135     return rev, movemark, activemark
   135     return rev, movemark, activemark
   136 
   136 
       
   137 msgdestmerge = {
       
   138     # too many matching divergent bookmark
       
   139     'toomanybookmarks':
       
   140         (_("multiple matching bookmarks to merge -"
       
   141            " please merge with an explicit rev or bookmark"),
       
   142          _("run 'hg heads' to see all heads")),
       
   143     # no other matching divergent bookmark
       
   144     'nootherbookmarks':
       
   145         (_("no matching bookmark to merge - "
       
   146            "please merge with an explicit rev or bookmark"),
       
   147          _("run 'hg heads' to see all heads")),
       
   148     # branch have too many unbookmarked heads, no obvious destination
       
   149     'toomanyheads':
       
   150         (_("branch '%s' has %d heads - please merge with an explicit rev"),
       
   151          _("run 'hg heads .' to see heads")),
       
   152     # branch have no other unbookmarked heads
       
   153     'bookmarkedheads':
       
   154         (_("heads are bookmarked - please merge with an explicit rev"),
       
   155          _("run 'hg heads' to see all heads")),
       
   156     # branch have just a single heads, but there is other branches
       
   157     'nootherbranchheads':
       
   158         (_("branch '%s' has one head - please merge with an explicit rev"),
       
   159          _("run 'hg heads' to see all heads")),
       
   160     # repository have a single head
       
   161     'nootherheads':
       
   162         (_('nothing to merge'),
       
   163          None),
       
   164     # repository have a single head and we are not on it
       
   165     'nootherheadsbehind':
       
   166         (_('nothing to merge'),
       
   167          _("use 'hg update' instead")),
       
   168     # We are not on a head
       
   169     'notatheads':
       
   170         (_('working directory not at a head revision'),
       
   171          _("use 'hg update' or merge with an explicit revision"))
       
   172         }
       
   173 
   137 def _destmergebook(repo):
   174 def _destmergebook(repo):
   138     """find merge destination in the active bookmark case"""
   175     """find merge destination in the active bookmark case"""
   139     node = None
   176     node = None
   140     bmheads = repo.bookmarkheads(repo._activebookmark)
   177     bmheads = repo.bookmarkheads(repo._activebookmark)
   141     curhead = repo[repo._activebookmark].node()
   178     curhead = repo[repo._activebookmark].node()
   143         if curhead == bmheads[0]:
   180         if curhead == bmheads[0]:
   144             node = bmheads[1]
   181             node = bmheads[1]
   145         else:
   182         else:
   146             node = bmheads[0]
   183             node = bmheads[0]
   147     elif len(bmheads) > 2:
   184     elif len(bmheads) > 2:
   148         raise error.Abort(_("multiple matching bookmarks to merge - "
   185         msg, hint = msgdestmerge['toomanybookmarks']
   149             "please merge with an explicit rev or bookmark"),
   186         raise error.Abort(msg, hint=hint)
   150             hint=_("run 'hg heads' to see all heads"))
       
   151     elif len(bmheads) <= 1:
   187     elif len(bmheads) <= 1:
   152         raise error.Abort(_("no matching bookmark to merge - "
   188         msg, hint = msgdestmerge['nootherbookmarks']
   153             "please merge with an explicit rev or bookmark"),
   189         raise error.Abort(msg, hint=hint)
   154             hint=_("run 'hg heads' to see all heads"))
       
   155     assert node is not None
   190     assert node is not None
   156     return node
   191     return node
   157 
   192 
   158 def _destmergebranch(repo):
   193 def _destmergebranch(repo):
   159     """find merge destination based on branch heads"""
   194     """find merge destination based on branch heads"""
   161     branch = repo[None].branch()
   196     branch = repo[None].branch()
   162     bheads = repo.branchheads(branch)
   197     bheads = repo.branchheads(branch)
   163     nbhs = [bh for bh in bheads if not repo[bh].bookmarks()]
   198     nbhs = [bh for bh in bheads if not repo[bh].bookmarks()]
   164 
   199 
   165     if len(nbhs) > 2:
   200     if len(nbhs) > 2:
   166         raise error.Abort(_("branch '%s' has %d heads - "
   201         msg, hint = msgdestmerge['toomanyheads']
   167                            "please merge with an explicit rev")
   202         msg %= (branch, len(bheads))
   168                          % (branch, len(bheads)),
   203         raise error.Abort(msg, hint=hint)
   169                          hint=_("run 'hg heads .' to see heads"))
       
   170 
   204 
   171     parent = repo.dirstate.p1()
   205     parent = repo.dirstate.p1()
   172     if len(nbhs) <= 1:
   206     if len(nbhs) <= 1:
   173         if len(bheads) > 1:
   207         if len(bheads) > 1:
   174             raise error.Abort(_("heads are bookmarked - "
   208             msg, hint = msgdestmerge['bookmarkedheads']
   175                                "please merge with an explicit rev"),
   209         elif len(repo.heads()) > 1:
   176                              hint=_("run 'hg heads' to see all heads"))
   210             msg, hint = msgdestmerge['nootherbranchheads']
   177         if len(repo.heads()) > 1:
   211             msg %= branch
   178             raise error.Abort(_("branch '%s' has one head - "
   212         elif parent != repo.lookup(branch):
   179                                "please merge with an explicit rev")
   213             msg, hint = msgdestmerge['nootherheadsbehind']
   180                              % branch,
   214         else:
   181                              hint=_("run 'hg heads' to see all heads"))
   215             msg, hint = msgdestmerge['nootherheads']
   182         msg, hint = _('nothing to merge'), None
       
   183         if parent != repo.lookup(branch):
       
   184             hint = _("use 'hg update' instead")
       
   185         raise error.Abort(msg, hint=hint)
   216         raise error.Abort(msg, hint=hint)
   186 
   217 
   187     if parent not in bheads:
   218     if parent not in bheads:
   188         raise error.Abort(_('working directory not at a head revision'),
   219         msg, hint = msgdestmerge['notatheads']
   189                          hint=_("use 'hg update' or merge with an "
   220         raise error.Abort(msg, hint=hint)
   190                                 "explicit revision"))
       
   191     if parent == nbhs[0]:
   221     if parent == nbhs[0]:
   192         node = nbhs[-1]
   222         node = nbhs[-1]
   193     else:
   223     else:
   194         node = nbhs[0]
   224         node = nbhs[0]
   195     assert node is not None
   225     assert node is not None