[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master 1/4] import known_changes with correct name. catch keybord exception



Signed-off-by: Mike O'Connor <stew@vireo.org>
---
 dak/import_known_changes.py |   32 ++++++++++++++++++++++++++++++--
 daklib/changes.py           |    2 +-
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/dak/import_known_changes.py b/dak/import_known_changes.py
index dcd3a33..0391d97 100755
--- a/dak/import_known_changes.py
+++ b/dak/import_known_changes.py
@@ -168,6 +168,10 @@ class ChangesGenerator(threading.Thread):
         threading.Thread.__init__(self)
         self.queue = queue
         self.session = DBConn().session()
+        self.die = False
+
+    def plsDie(self):
+        self.die = True
 
     def run(self):
         cnf = Config()
@@ -181,6 +185,9 @@ class ChangesGenerator(threading.Thread):
                     if not filenames:
                         # Empty directory (or only subdirectories), next
                         continue
+                    if self.die:
+                        return
+
                     for changesfile in filenames:
                         if not changesfile.endswith(".changes"):
                             # Only interested in changes files.
@@ -199,10 +206,16 @@ class ImportThread(threading.Thread):
         threading.Thread.__init__(self)
         self.queue = queue
         self.session = DBConn().session()
+        self.die = False
+
+    def plsDie(self):
+        self.die = True
 
     def run(self):
         while True:
             try:
+                if self.die:
+                    return
                 to_import = self.queue.dequeue()
                 if not to_import:
                     return
@@ -268,10 +281,25 @@ def main():
 
 
     queue = OneAtATime()
-    ChangesGenerator(queue).start()
+    threads = [ ChangesGenerator(queue) ]
 
     for i in range(num_threads):
-        ImportThread(queue).start()
+        threads.append( ImportThread(queue) )
+
+    try:
+        for thread in threads:
+            thread.start()
+
+        for thread in thrads:
+            thread.join()
+
+    except KeyboardInterrupt:
+        utils.warn("Caught C-c; terminating.")
+        for thread in threads:
+            thread.plsDie()
+
+        for thread in threads:
+            thread.join()
 
 
 if __name__ == '__main__':
diff --git a/daklib/changes.py b/daklib/changes.py
index 2413bf4..90ce231 100755
--- a/daklib/changes.py
+++ b/daklib/changes.py
@@ -215,7 +215,7 @@ class Changes(object):
               distribution, urgency, maintainer, fingerprint, changedby, date)
               VALUES (:changesfile,:filetime,:source,:binary, :architecture,
               :version,:distribution,:urgency,:maintainer,:fingerprint,:changedby,:date)""",
-              { 'changesfile':changesfile,
+              { 'changesfile':self.changes_file,
                 'filetime':filetime,
                 'source':self.changes["source"],
                 'binary':self.changes["binary"],
-- 
1.6.3.3



Reply to: