##// END OF EJS Templates
new command debugcomplete...
Benoit Boissinot -
r1887:913397c2 default
parent child Browse files
Show More
@@ -1,30 +1,5 b''
1 shopt -s extglob
1 shopt -s extglob
2
2
3 _hg_command_list()
4 {
5 "$hg" --debug help 2>/dev/null | \
6 awk -F', ' '/^list of commands:/ {commands=1}
7 commands==1 && /^ [^ ]/ {
8 line = substr($0, 2)
9 colon = index(line, ":")
10 if (colon > 0)
11 line = substr(line, 1, colon-1)
12 n = split(line, aliases)
13 command = aliases[1]
14 if (index(command, "debug") == 1) {
15 for (i=1; i<=n; i++)
16 debug[j++] = aliases[i]
17 next
18 }
19 print command
20 for (i=2; i<=n; i++)
21 if (index(command, aliases[i]) != 1)
22 print aliases[i]
23 }
24 /^global options:/ {exit 0}
25 END {for (i in debug) print debug[i]}'
26 }
27
28 _hg_option_list()
3 _hg_option_list()
29 {
4 {
30 "$hg" -v help $1 2>/dev/null | \
5 "$hg" -v help $1 2>/dev/null | \
@@ -40,21 +15,8 b' shopt -s extglob'
40
15
41 _hg_commands()
16 _hg_commands()
42 {
17 {
43 local all commands result
18 local commands="$("$hg" debugcomplete "$cur")"
44
19 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
45 all=$(_hg_command_list)
46 commands=${all%%$'\n'debug*}
47 result=$(compgen -W '$commands' -- "$cur")
48
49 # hide debug commands from users, but complete them if
50 # there is no other possible command
51 if [ "$result" = "" ]; then
52 local debug
53 debug=debug${all#*$'\n'debug}
54 result=$(compgen -W '$debug' -- "$cur")
55 fi
56
57 COMPREPLY=(${COMPREPLY[@]:-} $result)
58 }
20 }
59
21
60 _hg_paths()
22 _hg_paths()
@@ -1013,6 +1013,12 b' def debugancestor(ui, index, rev1, rev2)'
1013 a = r.ancestor(r.lookup(rev1), r.lookup(rev2))
1013 a = r.ancestor(r.lookup(rev1), r.lookup(rev2))
1014 ui.write("%d:%s\n" % (r.rev(a), hex(a)))
1014 ui.write("%d:%s\n" % (r.rev(a), hex(a)))
1015
1015
1016 def debugcomplete(ui, cmd):
1017 """returns the completion list associated with the given command"""
1018 clist = findpossible(cmd).keys()
1019 clist.sort()
1020 ui.write("%s\n" % " ".join(clist))
1021
1016 def debugrebuildstate(ui, repo, rev=None):
1022 def debugrebuildstate(ui, repo, rev=None):
1017 """rebuild the dirstate as it would look like for the given revision"""
1023 """rebuild the dirstate as it would look like for the given revision"""
1018 if not rev:
1024 if not rev:
@@ -2427,6 +2433,7 b' table = {'
2427 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
2433 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
2428 _('hg copy [OPTION]... [SOURCE]... DEST')),
2434 _('hg copy [OPTION]... [SOURCE]... DEST')),
2429 "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')),
2435 "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')),
2436 "debugcomplete": (debugcomplete, [], _('debugcomplete CMD')),
2430 "debugrebuildstate":
2437 "debugrebuildstate":
2431 (debugrebuildstate,
2438 (debugrebuildstate,
2432 [('r', 'rev', '', _('revision to rebuild to'))],
2439 [('r', 'rev', '', _('revision to rebuild to'))],
@@ -2658,42 +2665,49 b' globalopts = ['
2658 ('h', 'help', None, _('display help and exit')),
2665 ('h', 'help', None, _('display help and exit')),
2659 ]
2666 ]
2660
2667
2661 norepo = ("clone init version help debugancestor debugdata"
2668 norepo = ("clone init version help debugancestor debugcomplete debugdata"
2662 " debugindex debugindexdot")
2669 " debugindex debugindexdot")
2663 optionalrepo = ("paths debugconfig")
2670 optionalrepo = ("paths debugconfig")
2664
2671
2665 def find(cmd):
2672 def findpossible(cmd):
2666 """Return (aliases, command table entry) for command string."""
2673 """
2667 choice = []
2674 Return cmd -> (aliases, command table entry)
2668 debugchoice = []
2675 for each matching command
2676 """
2677 choice = {}
2678 debugchoice = {}
2669 for e in table.keys():
2679 for e in table.keys():
2670 aliases = e.lstrip("^").split("|")
2680 aliases = e.lstrip("^").split("|")
2671 if cmd in aliases:
2681 if cmd in aliases:
2672 return aliases, table[e]
2682 choice[cmd] = (aliases, table[e])
2683 continue
2673 for a in aliases:
2684 for a in aliases:
2674 if a.startswith(cmd):
2685 if a.startswith(cmd):
2675 if aliases[0].startswith("debug"):
2686 if aliases[0].startswith("debug"):
2676 debugchoice.append([aliases, table[e]])
2687 debugchoice[a] = (aliases, table[e])
2677 else:
2688 else:
2678 choice.append([aliases, table[e]])
2689 choice[a] = (aliases, table[e])
2679 break
2690 break
2680
2691
2681 if not choice and debugchoice:
2692 if not choice and debugchoice:
2682 choice = debugchoice
2693 choice = debugchoice
2683
2694
2695 return choice
2696
2697 def find(cmd):
2698 """Return (aliases, command table entry) for command string."""
2699 choice = findpossible(cmd)
2700
2701 if choice.has_key(cmd):
2702 return choice[cmd]
2703
2684 if len(choice) > 1:
2704 if len(choice) > 1:
2685 clist = []
2705 clist = choice.keys()
2686 for aliases, table_e in choice:
2687 if aliases[0].startswith(cmd):
2688 clist.append(aliases[0])
2689 for a in aliases[1:]:
2690 if a.startswith(cmd) and not aliases[0].startswith(a):
2691 clist.append(a)
2692 clist.sort()
2706 clist.sort()
2693 raise AmbiguousCommand(cmd, clist)
2707 raise AmbiguousCommand(cmd, clist)
2694
2708
2695 if choice:
2709 if choice:
2696 return choice[0]
2710 return choice.values()[0]
2697
2711
2698 raise UnknownCommand(cmd)
2712 raise UnknownCommand(cmd)
2699
2713
General Comments 0
You need to be logged in to leave comments. Login now