mercurial/commands.py
changeset 35745 3bd8ab4c80a5
parent 35711 35a0f6f31eef
child 35746 e5b6ba786d83
equal deleted inserted replaced
35744:8685192a8733 35745:3bd8ab4c80a5
  1000         bookmarks.printbookmarks(ui, repo, **opts)
  1000         bookmarks.printbookmarks(ui, repo, **opts)
  1001 
  1001 
  1002 @command('branch',
  1002 @command('branch',
  1003     [('f', 'force', None,
  1003     [('f', 'force', None,
  1004      _('set branch name even if it shadows an existing branch')),
  1004      _('set branch name even if it shadows an existing branch')),
  1005     ('C', 'clean', None, _('reset branch name to parent branch name'))],
  1005      ('C', 'clean', None, _('reset branch name to parent branch name')),
       
  1006      ('r', 'rev', [], _('change branches of the given revs (EXPERIMENTAL)')),
       
  1007     ],
  1006     _('[-fC] [NAME]'))
  1008     _('[-fC] [NAME]'))
  1007 def branch(ui, repo, label=None, **opts):
  1009 def branch(ui, repo, label=None, **opts):
  1008     """set or show the current branch name
  1010     """set or show the current branch name
  1009 
  1011 
  1010     .. note::
  1012     .. note::
  1032     considered closed.
  1034     considered closed.
  1033 
  1035 
  1034     Returns 0 on success.
  1036     Returns 0 on success.
  1035     """
  1037     """
  1036     opts = pycompat.byteskwargs(opts)
  1038     opts = pycompat.byteskwargs(opts)
       
  1039     revs = opts.get('rev')
  1037     if label:
  1040     if label:
  1038         label = label.strip()
  1041         label = label.strip()
  1039 
  1042 
  1040     if not opts.get('clean') and not label:
  1043     if not opts.get('clean') and not label:
       
  1044         if revs:
       
  1045             raise error.Abort(_("no branch name specified for the revisions"))
  1041         ui.write("%s\n" % repo.dirstate.branch())
  1046         ui.write("%s\n" % repo.dirstate.branch())
  1042         return
  1047         return
  1043 
  1048 
  1044     with repo.wlock():
  1049     with repo.wlock():
  1045         if opts.get('clean'):
  1050         if opts.get('clean'):
  1046             label = repo[None].p1().branch()
  1051             label = repo[None].p1().branch()
  1047             repo.dirstate.setbranch(label)
  1052             repo.dirstate.setbranch(label)
  1048             ui.status(_('reset working directory to branch %s\n') % label)
  1053             ui.status(_('reset working directory to branch %s\n') % label)
  1049         elif label:
  1054         elif label:
       
  1055 
       
  1056             scmutil.checknewlabel(repo, label, 'branch')
       
  1057             if revs:
       
  1058                 # XXX: we should allow setting name to existing branch if the
       
  1059                 # branch of root of the revs is same as the new branch name
       
  1060                 if label in repo.branchmap():
       
  1061                     raise error.Abort(_('a branch of the same'
       
  1062                                         ' name already exists'))
       
  1063                 return cmdutil.changebranch(ui, repo, revs, label)
       
  1064 
  1050             if not opts.get('force') and label in repo.branchmap():
  1065             if not opts.get('force') and label in repo.branchmap():
  1051                 if label not in [p.branch() for p in repo[None].parents()]:
  1066                 if label not in [p.branch() for p in repo[None].parents()]:
  1052                     raise error.Abort(_('a branch of the same name already'
  1067                     raise error.Abort(_('a branch of the same name already'
  1053                                        ' exists'),
  1068                                        ' exists'),
  1054                                      # i18n: "it" refers to an existing branch
  1069                                      # i18n: "it" refers to an existing branch
  1055                                      hint=_("use 'hg update' to switch to it"))
  1070                                      hint=_("use 'hg update' to switch to it"))
  1056             scmutil.checknewlabel(repo, label, 'branch')
  1071 
  1057             repo.dirstate.setbranch(label)
  1072             repo.dirstate.setbranch(label)
  1058             ui.status(_('marked working directory as branch %s\n') % label)
  1073             ui.status(_('marked working directory as branch %s\n') % label)
  1059 
  1074 
  1060             # find any open named branches aside from default
  1075             # find any open named branches aside from default
  1061             others = [n for n, h, t, c in repo.branchmap().iterbranches()
  1076             others = [n for n, h, t, c in repo.branchmap().iterbranches()