[projects/git-slug: 149/170] fetch_packages returns more accurate list of updated repos

glen glen at pld-linux.org
Mon Sep 21 21:51:20 CEST 2015


commit 34505de595823123a0c636720c22eefe655c255a
Author: Kacper Kornet <draenog at pld-linux.org>
Date:   Tue Nov 20 20:24:03 2012 +0000

    fetch_packages returns more accurate list of updated repos

 slug.py | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)
---
diff --git a/slug.py b/slug.py
index 6f4e441..4452f89 100755
--- a/slug.py
+++ b/slug.py
@@ -18,6 +18,15 @@ from git_slug.gitconst import GITLOGIN, GITSERVER, GIT_REPO, GIT_REPO_PUSH, REMO
 from git_slug.gitrepo import GitRepo, GitRepoError
 from git_slug.refsdata import GitArchiveRefsData, NoMatchedRepos, RemoteRefsError
 
+class Store():
+    def __init__(self):
+        self.lock = threading.Lock()
+        self.items = []
+
+    def put(self, item):
+        with self.lock:
+            self.items.append(item)
+
 class UnquoteConfig(configparser.ConfigParser):
     def get(self, section, option, **kwargs):
         value = super().get(section, option, **kwargs)
@@ -35,11 +44,12 @@ class DelAppend(argparse._AppendAction):
         setattr(namespace, self.dest, item)
 
 class ThreadFetch(threading.Thread):
-    def __init__(self, queue, pkgdir, depth=0):
+    def __init__(self, queue, output, pkgdir, depth=0):
         threading.Thread.__init__(self)
         self.queue = queue
         self.packagesdir = pkgdir
         self.depth = depth
+        self.output = output
 
     def run(self):
         while True:
@@ -48,6 +58,7 @@ class ThreadFetch(threading.Thread):
                 (stdout, stderr) = gitrepo.fetch(ref2fetch, self.depth)
                 if stderr != b'':
                     print('------', gitrepo.gdir[:-len('.git')], '------\n' + stderr.decode('utf-8'))
+                    self.output.put(gitrepo)
             except GitRepoError as e:
                 print('------', gitrepo.gdir[:-len('.git')], '------\n', e)
             self.queue.task_done()
@@ -105,8 +116,9 @@ def getrefs(*args):
 
 def fetch_packages(options):
     fetch_queue = queue.Queue()
+    updated_repos = Store()
     for i in range(options.jobs):
-        t = ThreadFetch(fetch_queue, options.packagesdir, options.depth)
+        t = ThreadFetch(fetch_queue, updated_repos, options.packagesdir, options.depth)
         t.setDaemon(True)
         t.start()
 
@@ -114,7 +126,6 @@ def fetch_packages(options):
 
     refs = getrefs(options.branch, options.repopattern)
     print('Read remotes data')
-    updated_repos = []
     for pkgdir in sorted(refs.heads):
         gitdir = os.path.join(options.packagesdir, pkgdir, '.git')
         if not os.path.isdir(gitdir):
@@ -133,7 +144,6 @@ def fetch_packages(options):
         if ref2fetch:
             ref2fetch.append('refs/notes/*:refs/notes/*')
             fetch_queue.put((gitrepo, ref2fetch))
-            updated_repos.append(gitrepo)
 
     fetch_queue.join()
 
@@ -145,7 +155,7 @@ def fetch_packages(options):
                 if len(refs.heads[pkgdir]) == 0 and os.path.isdir(os.path.join(fulldir, '.git')):
                     print('Removing', fulldir)
                     shutil.rmtree(fulldir)
-    return updated_repos
+    return updated_repos.items
 
 def checkout_packages(options):
     if options.checkout is None:
================================================================

---- gitweb:

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



More information about the pld-cvs-commit mailing list