Skip to content

Commit a46f84b

Browse files
committed
handle ctrl+c interupt
1 parent 2924297 commit a46f84b

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

GitHack.py

+24-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
14
import sys
25
import urllib2
36
import os
@@ -6,6 +9,7 @@
69
import threading
710
import Queue
811
import re
12+
import time
913
from lib.parser import parse
1014

1115

@@ -37,13 +41,15 @@ def __init__(self):
3741
if "sha1" in entry.keys():
3842
self.queue.put((entry["sha1"].strip(), entry["name"].strip()))
3943
self.lock = threading.Lock()
44+
self.thread_count = 20
45+
self.STOP_ME = False
4046

4147
def get_back_file(self):
42-
while True:
48+
while not self.STOP_ME:
4349
try:
4450
sha1, file_name = self.queue.get(timeout=0.5)
4551
except:
46-
return
52+
break
4753
for i in range(3):
4854
try:
4955
folder = '/objects/%s/' % sha1[:2]
@@ -59,17 +65,29 @@ def get_back_file(self):
5965
print '[OK] %s' % file_name
6066
self.lock.release()
6167
break
62-
except KeyboardInterrupt, e:
63-
break
6468
except urllib2.HTTPError, e:
6569
if str(e).find('HTTP Error 404') >=0: break
6670
except Exception, e:
6771
pass
72+
self.exit_thread()
73+
74+
def exit_thread(self):
75+
self.lock.acquire()
76+
self.thread_count -= 1
77+
self.lock.release()
6878

6979
def scan(self):
70-
for i in range(20):
80+
for i in range(self.thread_count):
7181
t = threading.Thread(target=self.get_back_file)
7282
t.start()
7383

84+
7485
s = Scanner()
75-
s.scan()
86+
s.scan()
87+
try:
88+
while s.thread_count > 0:
89+
time.sleep(0.1)
90+
except KeyboardInterrupt, e:
91+
s.STOP_ME = True
92+
time.sleep(1.0)
93+
print 'User Aborted.'

0 commit comments

Comments
 (0)