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() |