Skip to content

Commit 255b6d4

Browse files
committed
group flags of 'gl branch' and 'gl tag' and throw error on invalid combinations
1 parent e04f22f commit 255b6d4

File tree

2 files changed

+50
-21
lines changed

2 files changed

+50
-21
lines changed

gitless/cli/gl_branch.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,48 +16,64 @@
1616

1717
def parser(subparsers, _):
1818
"""Adds the branch parser to the given subparsers object."""
19-
desc = 'list, create, edit or delete branches'
19+
desc = 'list, create, delete, or edit branches'
2020
branch_parser = subparsers.add_parser(
2121
'branch', help=desc, description=desc.capitalize())
22-
branch_parser.add_argument(
22+
23+
list_group = branch_parser.add_argument_group('list branches')
24+
list_group.add_argument(
2325
'-r', '--remote',
2426
help='list remote branches in addition to local branches',
2527
action='store_true')
28+
list_group.add_argument(
29+
'-v', '--verbose', help='be verbose, will output the head of each branch',
30+
action='store_true')
2631

27-
branch_parser.add_argument(
32+
create_group = branch_parser.add_argument_group('create branches')
33+
create_group.add_argument(
2834
'-c', '--create', nargs='+', help='create branch(es)', dest='create_b',
2935
metavar='branch')
30-
branch_parser.add_argument(
36+
create_group.add_argument(
3137
'-dp', '--divergent-point',
3238
help='the commit from where to \'branch out\' (only relevant if a new '
33-
'branch is created; defaults to HEAD)', default='HEAD',
34-
dest='dp')
35-
branch_parser.add_argument(
39+
'branch is created; defaults to HEAD)', dest='dp')
40+
41+
delete_group = branch_parser.add_argument_group('delete branches')
42+
delete_group.add_argument(
3643
'-d', '--delete', nargs='+', help='delete branch(es)', dest='delete_b',
3744
metavar='branch')
3845

39-
branch_parser.add_argument(
46+
edit_group = branch_parser.add_argument_group('edit the current branch')
47+
edit_group.add_argument(
4048
'-sh', '--set-head', help='set the head of the current branch',
4149
dest='new_head', metavar='commit_id')
42-
branch_parser.add_argument(
50+
edit_group.add_argument(
4351
'-su', '--set-upstream',
4452
help='set the upstream branch of the current branch',
4553
dest='upstream_b', metavar='branch')
46-
branch_parser.add_argument(
54+
edit_group.add_argument(
4755
'-uu', '--unset-upstream',
4856
help='unset the upstream branch of the current branch',
4957
action='store_true')
5058

51-
branch_parser.add_argument(
52-
'-v', '--verbose', help='be verbose, will output the head of each branch',
53-
action='store_true')
5459
branch_parser.set_defaults(func=main)
5560

5661

5762
def main(args, repo):
63+
is_list = bool(args.verbose or args.remote)
64+
is_create = bool(args.create_b or args.dp)
65+
is_delete = bool(args.delete_b)
66+
is_edit = bool(args.new_head or args.upstream_b or args.unset_upstream)
67+
68+
if is_list + is_create + is_delete + is_edit > 1:
69+
pprint.err('Invalid flag combination')
70+
pprint.err_exp(
71+
'Can only do one of list, create, delete, or edit branches at a time')
72+
return False
73+
5874
ret = True
5975
if args.create_b:
60-
ret = _do_create(args.create_b, args.dp, repo)
76+
ret = _do_create(args.create_b, args.dp or 'HEAD', repo)
6177
elif args.delete_b:
6278
ret = _do_delete(args.delete_b, repo)
6379
elif args.upstream_b:

gitless/cli/gl_tag.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,43 @@ def parser(subparsers, _):
1717
desc = 'list, create, or delete tags'
1818
tag_parser = subparsers.add_parser(
1919
'tag', help=desc, description=desc.capitalize())
20-
tag_parser.add_argument(
20+
21+
list_group = tag_parser.add_argument_group('list tags')
22+
list_group.add_argument(
2123
'-r', '--remote',
2224
help='list remote tags in addition to local tags',
2325
action='store_true')
2426

25-
tag_parser.add_argument(
27+
create_group = tag_parser.add_argument_group('create tags')
28+
create_group.add_argument(
2629
'-c', '--create', nargs='+', help='create tag(s)', dest='create_t',
2730
metavar='tag')
28-
tag_parser.add_argument(
31+
create_group.add_argument(
2932
'-ci', '--commit',
3033
help='the commit to tag (only relevant if a new '
31-
'tag is created; defaults to the HEAD commit)', default='HEAD',
32-
dest='ci')
33-
tag_parser.add_argument(
34+
'tag is created; defaults to the HEAD commit)', dest='ci')
35+
36+
delete_group = tag_parser.add_argument_group('delete tags')
37+
delete_group.add_argument(
3438
'-d', '--delete', nargs='+', help='delete tag(s)', dest='delete_t',
3539
metavar='tag')
3640

3741
tag_parser.set_defaults(func=main)
3842

3943

4044
def main(args, repo):
45+
is_list = bool(args.remote)
46+
is_create = bool(args.create_t or args.ci)
47+
is_delete = bool(args.delete_t)
48+
49+
if is_list + is_create + is_delete > 1:
50+
pprint.err('Invalid flag combination')
51+
pprint.err_exp('Can only do one of list, create, or delete tags at a time')
52+
return False
53+
4154
ret = True
4255
if args.create_t:
43-
ret = _do_create(args.create_t, args.ci, repo)
56+
ret = _do_create(args.create_t, args.ci or 'HEAD', repo)
4457
elif args.delete_t:
4558
ret = _do_delete(args.delete_t, repo)
4659
else:

0 commit comments

Comments
 (0)