for line in data:
(sha1_old, sha1, ref) = line.split()
diff --git a/slug.py b/slug.py
-index 69bd3b9..b4ac0fd 100755
+index 69bd3b9..17a67e7 100755
--- a/slug.py
+++ b/slug.py
@@ -7,26 +7,18 @@ import os
class UnquoteConfig(configparser.ConfigParser):
def get(self, section, option, **kwargs):
value = super().get(section, option, **kwargs)
-@@ -43,25 +35,15 @@ class DelAppend(argparse._AppendAction):
+@@ -43,25 +35,30 @@ class DelAppend(argparse._AppendAction):
item.append(values)
setattr(namespace, self.dest, item)
+
+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)
-@@ -114,38 +96,62 @@ def getrefs(*args):
+@@ -114,38 +111,45 @@ def getrefs(*args):
sys.exit(2)
return refs
+ 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):
+ args.append((gitrepo, refs.heads[pkgdir], options))
- fetch_queue.join()
-+ 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('*')
-@@ -158,26 +164,60 @@ def fetch_packages(options, return_all=False):
+@@ -158,26 +162,47 @@ def fetch_packages(options, return_all=False):
if return_all:
return refs.heads
else:
- except GitRepoError as e:
- print('Problem with checking branch {} in repo {}: {}'.format(options.checkout, repo.gdir, e), file=sys.stderr)
+ 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:
- except GitRepoError as e:
- print('Problem with checking branch master in repo {}: {}'.format(repo.gdir, e), file=sys.stderr)
+ 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)
def pull_packages(options):
repolist = []
-@@ -189,19 +229,14 @@ def pull_packages(options):
+@@ -189,19 +214,8 @@ def pull_packages(options):
else:
repolist = fetch_packages(options, False)
print('--------Pulling------------')
- pass
-
+ 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)
-@@ -213,7 +248,7 @@ common_options.add_argument('-d', '--packagesdir', help='local directory with gi
+@@ -213,7 +227,7 @@ common_options.add_argument('-d', '--packagesdir', help='local directory with gi
default=os.path.expanduser('~/rpm/packages'))
common_fetchoptions = argparse.ArgumentParser(add_help=False, parents=[common_options])
common_fetchoptions.add_argument('repopattern', nargs='*', default = ['*'])
common_fetchoptions.add_argument('--depth', help='depth of fetch', default=0)
-@@ -253,10 +288,14 @@ default_options['fetch'] = {'branch': '[*]', 'prune': False, 'newpkgs': False, '
+@@ -253,10 +267,14 @@ default_options['fetch'] = {'branch': '[*]', 'prune': False, 'newpkgs': False, '
pull = subparsers.add_parser('pull', help='git-pull in all existing repositories', parents=[common_fetchoptions],
formatter_class=argparse.RawDescriptionHelpFormatter)