From cd6ef521f930578763ae043a4bc43281bba3bf0e Mon Sep 17 00:00:00 2001
From: Brian Dolbec <dol...@gentoo.org>
Date: Sat, 6 Dec 2014 14:54:36 -0800
Subject: [PATCH 2/2] portage/sync/controller.py: Make a per-repo postsync.d 
subdir

This then runs per-repo postsync hooks only on scripts in the per-repo subdir.
This also maintains compatibility with existing scripts in the postsync.d dir 
or other
sub-directories.
---
 pym/portage/sync/controller.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 21aa7a7..c9ae5b4 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -88,15 +88,15 @@ class SyncManager(object):
 
                self.module_controller = portage.sync.module_controller
                self.module_names = self.module_controller.module_names
-               postsync_dir = os.path.join(self.settings["PORTAGE_CONFIGROOT"],
+               self.postsync_dir = 
os.path.join(self.settings["PORTAGE_CONFIGROOT"],
                        portage.USER_CONFIG_PATH, "postsync.d")
-               hooks = []
-               for root, dirs, names in os.walk(postsync_dir, topdown=True):
+               hooks = {}
+               for root, dirs, names in os.walk(self.postsync_dir, 
topdown=True):
                        #print("root:", root, "dirs:", dirs, "names:", names)
                        for name in names:
                                filepath = os.path.join(root, name)
                                if os.access(filepath, os.X_OK):
-                                       hooks.append((filepath, name))
+                                       hooks[filepath] = name
                                else:
                                        writemsg_level(" %s postsync.d hook: 
'%s' is not executable\n"
                                                % (warn("*"), 
_unicode_decode(name),), level=logging.WARN, noiselevel=2)
@@ -159,7 +159,11 @@ class SyncManager(object):
 
        def perform_post_sync_hook(self, reponame, dosyncuri='', 
repolocation=''):
                succeeded = os.EX_OK
-               for filepath, hook in self.hooks:
+               if reponame:
+                       hooks = [(f,self.hooks[f]) for f in sorted(self.hooks) 
if 'per-repo' in f]
+               else:
+                       hooks = [(f,self.hooks[f]) for f in sorted(self.hooks) 
if 'per-repo' not in f]
+               for filepath, hook in hooks:
                        writemsg_level("Spawning post_sync hook: %s\n"
                                % (_unicode_decode(hook)),
                                level=logging.ERROR, noiselevel=4)
-- 
2.1.2


-- 
Brian Dolbec <dolsen>


Reply via email to