[projects/git-slug: 8/9] Better keyboard interrupt handling. Move worker running code into separate function.

glen glen at pld-linux.org
Mon Sep 21 21:41:23 CEST 2015


commit d5e9bba336ac4999e66483a3e5a799489a953933
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Fri Nov 28 18:07:57 2014 +0100

    Better keyboard interrupt handling. Move worker running code into separate function.

 slug.py | 63 +++++++++++++++++++++------------------------------------------
 1 file changed, 21 insertions(+), 42 deletions(-)
---
diff --git a/slug.py b/slug.py
index b4ac0fd..17a67e7 100755
--- a/slug.py
+++ b/slug.py
@@ -45,6 +45,21 @@ def cpu_count():
 def pool_worker_init():
     signal.signal(signal.SIGINT, signal.SIG_IGN)
 
+def run_worker(function, options, args):
+    ret = []
+    pool = WorkerPool(options.jobs, pool_worker_init)
+    try:
+        ret = pool.starmap(function, args)
+        pool.close()
+        pool.join()
+        ret = list(filter(None, ret))
+    except KeyboardInterrupt:
+        print('Keyboard interrupt received, finishing...', file=sys.stderr)
+        pool.terminate()
+        pool.join()
+        sys.exit(1)
+    return ret
+
 def readconfig(path):
     config = UnquoteConfig(delimiters='=', interpolation=None, strict=False)
     config.read(path)
@@ -124,14 +139,7 @@ def fetch_packages(options, return_all=False):
             if not os.path.isdir(gitdir):
                 pkgs_new.append(pkgdir)
 
-        pool = WorkerPool(options.jobs, pool_worker_init)
-        try:
-            pool.starmap(initpackage, zip(pkgs_new, [options] * len(pkgs_new)))
-        except KeyboardInterrupt:
-            pool.terminate()
-        else:
-            pool.close()
-        pool.join()
+        run_worker(initpackage, options, zip(pkgs_new, [options] * len(pkgs_new)))
 
     args = []
     for pkgdir in sorted(refs.heads):
@@ -141,17 +149,7 @@ def fetch_packages(options, return_all=False):
             gitrepo = GitRepo(os.path.join(options.packagesdir, pkgdir))
             args.append((gitrepo, refs.heads[pkgdir], options))
 
-    updated_repos = []
-    pool = WorkerPool(options.jobs, pool_worker_init)
-    try:
-        updated_repos = pool.starmap(fetch_package, args)
-    except KeyboardInterrupt:
-        pool.terminate()
-    else:
-        pool.close()
-    pool.join()
-
-    updated_repos = list(filter(None, updated_repos))
+    updated_repos = run_worker(fetch_package, options, args)
 
     if options.prune:
         refs = getrefs('*')
@@ -180,14 +178,8 @@ def checkout_packages(options):
     repos = []
     for pkgdir in sorted(refs.heads):
         repos.append(GitRepo(os.path.join(options.packagesdir, pkgdir)))
-    pool = WorkerPool(options.jobs)
-    try:
-        pool.starmap(checkout_package, zip(repos, [options] * len(repos)))
-    except KeyboardInterrupt:
-        pool.terminate()
-    else:
-        pool.close()
-    pool.join()
+
+    run_worker(checkout_package, options, zip(repos, [options] * len(repos)))
 
 def clone_package(repo, options):
     try:
@@ -197,14 +189,7 @@ def clone_package(repo, options):
 
 def clone_packages(options):
     repos = fetch_packages(options)
-    pool = WorkerPool(options.jobs)
-    try:
-        pool.starmap(clone_package, zip(repos, [options] * len(repos)))
-    except KeyboardInterrupt:
-        pool.terminate()
-    else:
-        pool.close()
-    pool.join()
+    run_worker(clone_package, options, zip(repos, [options] * len(repos)))
 
 def pull_package(gitrepo, options):
     directory = os.path.basename(gitrepo.wtree)
@@ -230,13 +215,7 @@ def pull_packages(options):
         repolist = fetch_packages(options, False)
     print('--------Pulling------------')
     pool = WorkerPool(options.jobs, pool_worker_init)
-    try:
-        pool.starmap(pull_package, zip(repolist, [options] * len(repolist)))
-    except KeyboardInterrupt:
-        pool.terminate()
-    else:
-        pool.close()
-    pool.join()
+    run_worker(pull_package, options, zip(repolist, [options] * len(repolist)))
 
 def list_packages(options):
     refs = getrefs(options.branch, options.repopattern)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/git-slug.git/commitdiff/d9fdf7d60e5aea39f9ac7065a09a645261fc712b



More information about the pld-cvs-commit mailing list