-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathhg_close_branch
executable file
·136 lines (112 loc) · 3.72 KB
/
hg_close_branch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env python
#coding:utf-8
class _Getch:
"""Gets a single character from standard input. Does not echo to the screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
try:
self.impl = _GetchMacCarbon()
except ImportError:
self.impl = _GetchUnix()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch()
class _GetchMacCarbon:
"""
A function which returns the current ASCII key that is down;
if no ASCII key is down, the null string is returned. The
page http://www.mactech.com/macintosh-c/chap02-1.html was
very helpful in figuring out how to do this.
"""
def __init__(self):
from Carbon import Evt
Evt #see if it has this (in Unix, it doesn't)
def __call__(self):
from Carbon import Evt
if Evt.EventAvail(0x0008)[0] == 0: # 0x0008 is the keyDownMask
return ''
else:
#
# The event contains the following info:
# (what,msg,when,where,mod)=Evt.GetNextEvent(0x0008)[1]
#
# The message (msg) contains the ASCII char which is
# extracted with the 0x000000FF charCodeMask; this
# number is converted to an ASCII character with chr() and
# returned
#
(what, msg, when, where, mod) = Evt.GetNextEvent(0x0008)[1]
return chr(msg & 0x000000FF)
getch = _Getch()
from os.path import join
from os import getenv
from optparse import OptionParser
def main():
import os
import sys
from os.path import dirname, exists, join
path = os.getcwd()
#os.chroot(path)
sys.argv = sys.argv[:1]
while True:
hg_branch = os.popen('hg branches').readlines()
t = []
for i in hg_branch:
i = i.strip()
if i and i.find(':') > 0:
name = i.split(' ', 1)
if name[0] != 'default':
t.append(map(str.strip, name))
print '\n'
for pos, i in enumerate(t, 1):
print '%s\t%s\t%s'%(str(pos).ljust(3), i[0].ljust(35), i[1])
num_list = raw_input('\nCLOSE BRANCH : ').strip().split()
branch_list = []
for num in num_list:
if num.isdigit():
num = int(num) - 1
if num < 0:
break
if num >= 0 and num < len(t):
branch = t[num][0]
branch_list.append(branch)
print '\n关闭分支\n%s\n(Y确认,否则取消)'%'\n'.join(branch_list)
if not getch() in ['y', 'Y']:
continue
for branch in branch_list:
cmd = """
hg update %s
hg commit --close-branch -m close
hg update default
"""%branch
line_break = '-'*64
cmd = [i.strip() for i in cmd.split('\n') if i]
print line_break
import os
success = True
for i in cmd:
print '>>>%s'%i
if os.system(i) != 0:
success = False
break
if __name__ == '__main__':
main()