public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:plugin-sync commit in: pym/portage/sync/
  2014-12-04 20:16 [gentoo-commits] proj/portage:master commit in: pym/portage/sync/ Brian Dolbec
@ 2014-12-04 20:04 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:04 UTC (permalink / raw
  To: gentoo-commits

commit:     fc65d8afbbfdcc52073d07818288c693ad04596a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Dec  4 17:03:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:36 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=fc65d8af

portage/sync/controller.py: Add repo location to parameters passed to post_sync hooks

---
 pym/portage/sync/controller.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 5c58865..b7c668c 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -142,7 +142,7 @@ class SyncManager(object):
 		taskmaster = TaskHandler(callback=self.do_callback)
 		taskmaster.run_tasks(tasks, func, status, options=task_opts)
 
-		self.perform_post_sync_hook(repo.name, repo.sync_uri)
+		self.perform_post_sync_hook(repo.name, repo.sync_uri, repo.location)
 
 		return self.exitcode, None
 
@@ -156,13 +156,13 @@ class SyncManager(object):
 		return
 
 
-	def perform_post_sync_hook(self, reponame, dosyncuri=''):
+	def perform_post_sync_hook(self, reponame, dosyncuri='', repolocation=''):
 		succeeded = os.EX_OK
 		for filepath, hook in self.hooks:
 			writemsg_level("Spawning post_sync hook: %s\n" % (hook,),
 				level=logging.ERROR, noiselevel=4)
 			retval = portage.process.spawn([filepath,
-				reponame, dosyncuri], env=self.settings.environ())
+				reponame, dosyncuri, repolocation], env=self.settings.environ())
 			if retval != os.EX_OK:
 				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
 					hook, filepath), level=logging.ERROR, noiselevel=-1)


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-04 20:16 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     737ccc31d83f73395a22f4a19bb13fbc1e94208a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 27 05:05:01 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:34 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=737ccc31

Sync: Implement native postsync.d hook code

As per bug 522032, pass the repo.name and repo.sync_uri to the hooks.
With this information, the hooks can be taylored to operate for only certain repos, or only when all repos have been synced.

---
 pym/portage/sync/controller.py | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 9e483e9..c860e1a 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -87,6 +87,19 @@ 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"],
+			portage.USER_CONFIG_PATH, "postsync.d")
+		hooks = []
+		for root, dirs, names in os.walk(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))
+				else:
+					writemsg_level(" %s postsync.d hook: '%s' is not executable\n"
+						% (warn("*"), name,), level=logging.WARN, noiselevel=2)
+		self.hooks = hooks
 
 
 	def get_module_descriptions(self, mod):
@@ -129,7 +142,7 @@ class SyncManager(object):
 		taskmaster = TaskHandler(callback=self.do_callback)
 		taskmaster.run_tasks(tasks, func, status, options=task_opts)
 
-		self.perform_post_sync_hook(repo.sync_uri)
+		self.perform_post_sync_hook(repo.name, repo.sync_uri)
 
 		return self.exitcode, None
 
@@ -143,17 +156,18 @@ class SyncManager(object):
 		return
 
 
-	def perform_post_sync_hook(self, dosyncuri):
-		postsync = os.path.join(self.settings["PORTAGE_CONFIGROOT"],
-			portage.USER_CONFIG_PATH, "bin", "post_sync")
-		if os.access(postsync, os.X_OK):
-			retval = portage.process.spawn([postsync, dosyncuri],
-				env=self.settings.environ())
+	def perform_post_sync_hook(self, reponame, dosyncuri=''):
+		succeeded = os.EX_OK
+		for filepath, hook in self.hooks:
+			writemsg_level("Spawning post_sync hook: %s\n" % (hook,),
+				level=logging.ERROR, noiselevel=4)
+			retval = portage.process.spawn([filepath,
+				reponame, dosyncuri], env=self.settings.environ())
 			if retval != os.EX_OK:
-				writemsg_level(" %s spawn failed of %s\n" % (bad("*"),
-					postsync,), level=logging.ERROR, noiselevel=-1)
-			return retval
-		return os.EX_OK
+				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
+					hook, filepath), level=logging.ERROR, noiselevel=-1)
+				succeeded = retval
+		return succeeded
 
 
 	def pre_sync(self, repo):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
  2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
@ 2014-12-04 20:16 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     7f28745b044f54862732e77185c0492667af42a5
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Sep  7 01:40:25 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:34 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7f28745b

sync/controller.py: Use assert() on tasks, func

---
 pym/portage/sync/controller.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index e1aabb7..9e483e9 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -36,8 +36,9 @@ class TaskHandler(object):
 
 	def run_tasks(self, tasks, func, status=None, verbose=True, options=None):
 		"""Runs the module tasks"""
-		if tasks is None or func is None:
-			return
+		# Ensure we have a task and function
+		assert(tasks)
+		assert(func)
 		for task in tasks:
 			inst = task()
 			show_progress = self.show_progress_bar and self.isatty


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
  2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
@ 2014-12-04 20:16 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     174fbc3b24168c7b42270accb4e69707b946a484
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Fri Sep  5 20:14:57 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:34 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=174fbc3b

portage/sync/controller.py: Remove list copy, module_names list is not modified

---
 pym/portage/sync/controller.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 10ae0a8..e1aabb7 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -85,7 +85,7 @@ class SyncManager(object):
 		os.umask(0o22)
 
 		self.module_controller = portage.sync.module_controller
-		self.module_names = self.module_controller.module_names[:]
+		self.module_names = self.module_controller.module_names
 
 
 	def get_module_descriptions(self, mod):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
  2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
@ 2014-12-04 20:16 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     213b1da7b74a7b392292fca077f9e187eb10a503
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 20 20:44:41 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:34 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=213b1da7

_sync_callback: check for md5-cache, not cache

This fixes FEATURES=metadata-transfer to work again now that the
metadata/cache directory has been replaced with metadata/md5-cache.

---
 pym/portage/sync/controller.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index c860e1a..5c58865 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -227,7 +227,8 @@ class SyncManager(object):
 			updatecache_flg = False
 
 		if updatecache_flg and \
-			os.path.exists(os.path.join(self.repo.location, 'metadata', 'cache')):
+			os.path.exists(os.path.join(
+			self.repo.location, 'metadata', 'md5-cache')):
 
 			# Only update cache for repo.location since that's
 			# the only one that's been synced here.


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
  2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
@ 2014-12-04 20:16 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     54bcea5d7acf3e79653f4fe0f1e8e3ed552ae342
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 17 00:42:29 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:33 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=54bcea5d

sync/syncbase.py: Fix the self.has_bin logic

---
 pym/portage/sync/syncbase.py | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/pym/portage/sync/syncbase.py b/pym/portage/sync/syncbase.py
index 2b6b8c7..94d4aab 100644
--- a/pym/portage/sync/syncbase.py
+++ b/pym/portage/sync/syncbase.py
@@ -34,16 +34,18 @@ class SyncBase(object):
 		self.repo = None
 		self.xterm_titles = None
 		self.spawn_kwargs = None
-		self.bin_command = portage.process.find_binary(bin_command)
-
-		self.has_bin = True
-		if bin_command and self.bin_command is None:
-			msg = ["Command not found: %s" % bin_command,
-			"Type \"emerge %s\" to enable %s support." % (bin_pkg, bin_command)]
-			for l in msg:
-				writemsg_level("!!! %s\n" % l,
-					level=self.logger.ERROR, noiselevel=-1)
-			self.has_bin = False
+		self.bin_command = None
+		self.has_bin = False
+		if bin_command:
+			self.bin_command = portage.process.find_binary(bin_command)
+			if self.bin_command is None:
+				msg = ["Command not found: %s" % bin_command,
+				"Type \"emerge %s\" to enable %s support." % (bin_pkg, bin_command)]
+				for l in msg:
+					writemsg_level("!!! %s\n" % l,
+						level=self.logger.ERROR, noiselevel=-1)
+			else:
+				self.has_bin = True
 
 
 	def _kwargs(self, kwargs):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
  2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
@ 2014-12-04 20:16 ` Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     f51290f5c93eff9d4167ee01792a50172989c375
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 17 18:44:43 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:33 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f51290f5

portage/sync: Add additional output info for unsupported sync-types

Comment out some debug print()'s

---
 pym/portage/sync/__init__.py      | 5 +++--
 pym/portage/sync/config_checks.py | 4 ++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/pym/portage/sync/__init__.py b/pym/portage/sync/__init__.py
index 6d2a732..b74c89e 100644
--- a/pym/portage/sync/__init__.py
+++ b/pym/portage/sync/__init__.py
@@ -11,12 +11,12 @@ sync_manager = None
 
 path = os.path.join(os.path.dirname(__file__), "modules")
 # initial development debug info
-print("module path:", path)
+#print("module path:", path)
 
 module_controller = Modules(path=path, namepath="portage.sync.modules")
 
 # initial development debug info
-print(module_controller.module_names)
+#print(module_controller.module_names)
 module_names = module_controller.module_names[:]
 
 
@@ -43,6 +43,7 @@ def get_syncer(settings=None, logger=None):
 
 def validate_config(repo, logger):
 	'''Validate the repos.conf settings for the repo'''
+	global module_names, module_controller
 	if not check_type(repo, logger, module_names):
 		return False
 

diff --git a/pym/portage/sync/config_checks.py b/pym/portage/sync/config_checks.py
index 8ef1974..db316aa 100644
--- a/pym/portage/sync/config_checks.py
+++ b/pym/portage/sync/config_checks.py
@@ -26,6 +26,10 @@ def check_type(repo, logger, module_names):
 			_("Repository '%s' has sync-type attribute set to unsupported value: '%s'")
 			% (repo.name, repo.sync_type),
 			level=logger.ERROR, noiselevel=-1)
+		writemsg_level("!!! %s\n" %
+			_("Installed sync-types are: '%s'")
+			% (str(module_names)),
+			level=logger.ERROR, noiselevel=-1)
 		return False
 	return True
 


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-04 20:16 Brian Dolbec
  2014-12-04 20:04 ` [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
  0 siblings, 1 reply; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     fc65d8afbbfdcc52073d07818288c693ad04596a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Dec  4 17:03:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:56:36 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=fc65d8af

portage/sync/controller.py: Add repo location to parameters passed to post_sync hooks

---
 pym/portage/sync/controller.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 5c58865..b7c668c 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -142,7 +142,7 @@ class SyncManager(object):
 		taskmaster = TaskHandler(callback=self.do_callback)
 		taskmaster.run_tasks(tasks, func, status, options=task_opts)
 
-		self.perform_post_sync_hook(repo.name, repo.sync_uri)
+		self.perform_post_sync_hook(repo.name, repo.sync_uri, repo.location)
 
 		return self.exitcode, None
 
@@ -156,13 +156,13 @@ class SyncManager(object):
 		return
 
 
-	def perform_post_sync_hook(self, reponame, dosyncuri=''):
+	def perform_post_sync_hook(self, reponame, dosyncuri='', repolocation=''):
 		succeeded = os.EX_OK
 		for filepath, hook in self.hooks:
 			writemsg_level("Spawning post_sync hook: %s\n" % (hook,),
 				level=logging.ERROR, noiselevel=4)
 			retval = portage.process.spawn([filepath,
-				reponame, dosyncuri], env=self.settings.environ())
+				reponame, dosyncuri, repolocation], env=self.settings.environ())
 			if retval != os.EX_OK:
 				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
 					hook, filepath), level=logging.ERROR, noiselevel=-1)


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-04 20:16 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-04 20:16 UTC (permalink / raw
  To: gentoo-commits

commit:     5e37e1aebb371b0ee36a70e0e166af8398cff926
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Dec  4 19:49:22 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Dec  4 19:58:35 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5e37e1ae

portage/sync/controller.py: Wrap variables with _unicode_decode for writemsg_level() calls

Fixes "BytesWarning: str() on a bytes instance" errors in py3.

---
 pym/portage/sync/controller.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index b7c668c..21aa7a7 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -20,6 +20,7 @@ bad = create_color_func("BAD")
 warn = create_color_func("WARN")
 from portage.package.ebuild.doebuild import _check_temp_dir
 from portage.metadata import action_metadata
+from portage import _unicode_decode
 
 
 class TaskHandler(object):
@@ -98,7 +99,7 @@ class SyncManager(object):
 					hooks.append((filepath, name))
 				else:
 					writemsg_level(" %s postsync.d hook: '%s' is not executable\n"
-						% (warn("*"), name,), level=logging.WARN, noiselevel=2)
+						% (warn("*"), _unicode_decode(name),), level=logging.WARN, noiselevel=2)
 		self.hooks = hooks
 
 
@@ -159,13 +160,15 @@ class SyncManager(object):
 	def perform_post_sync_hook(self, reponame, dosyncuri='', repolocation=''):
 		succeeded = os.EX_OK
 		for filepath, hook in self.hooks:
-			writemsg_level("Spawning post_sync hook: %s\n" % (hook,),
+			writemsg_level("Spawning post_sync hook: %s\n"
+				% (_unicode_decode(hook)),
 				level=logging.ERROR, noiselevel=4)
 			retval = portage.process.spawn([filepath,
 				reponame, dosyncuri, repolocation], env=self.settings.environ())
 			if retval != os.EX_OK:
 				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
-					hook, filepath), level=logging.ERROR, noiselevel=-1)
+					_unicode_decode(hook), filepath),
+					level=logging.ERROR, noiselevel=-1)
 				succeeded = retval
 		return succeeded
 
@@ -182,7 +185,8 @@ class SyncManager(object):
 		except OSError:
 			st = None
 		if st is None:
-			writemsg_level(">>> '%s' not found, creating it." % repo.location)
+			writemsg_level(">>> '%s' not found, creating it."
+				% _unicode_decode(repo.location))
 			portage.util.ensure_dirs(repo.location, mode=0o755)
 			st = os.stat(repo.location)
 


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-07  5:42 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-07  5:42 UTC (permalink / raw
  To: gentoo-commits

commit:     a3991f7727be0eb973aad1b120d248a0739be453
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  6 22:54:36 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sun Dec  7 05:22:51 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a3991f77

portage/sync/controller.py: Make a repo.postsync.d directory

This then runs per-repo postsync hooks only on scripts in the repo.postsync.d directory.
This also maintains compatibility with existing scripts in the postsync.d dir or other
sub-directories.
Both postsync.d directories support subdirectories.
Scripts are run in sorted order.

---
 pym/portage/sync/controller.py | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 21aa7a7..41f3830 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -20,7 +20,9 @@ bad = create_color_func("BAD")
 warn = create_color_func("WARN")
 from portage.package.ebuild.doebuild import _check_temp_dir
 from portage.metadata import action_metadata
+from portage import OrderedDict
 from portage import _unicode_decode
+from portage import util
 
 
 class TaskHandler(object):
@@ -88,19 +90,21 @@ 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"],
-			portage.USER_CONFIG_PATH, "postsync.d")
-		hooks = []
-		for root, dirs, names in os.walk(postsync_dir, topdown=True):
-			#print("root:", root, "dirs:", dirs, "names:", names)
-			for name in names:
-				filepath = os.path.join(root, name)
+		self.hooks = {}
+		for _dir in ["repo.postsync.d", "postsync.d"]:
+			postsync_dir = os.path.join(self.settings["PORTAGE_CONFIGROOT"],
+				portage.USER_CONFIG_PATH, _dir)
+			hooks = OrderedDict()
+			for filepath in util._recursive_file_list(postsync_dir):
+				name = filepath.split(postsync_dir)[1].lstrip(os.sep)
 				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)
-		self.hooks = hooks
+					writemsg_level(" %s %s hook: '%s' is not executable\n"
+						% (warn("*"), _dir, _unicode_decode(name),),
+						level=logging.WARN, noiselevel=2)
+			self.hooks[_dir] = hooks
+		print(self.hooks)
 
 
 	def get_module_descriptions(self, mod):
@@ -159,15 +163,19 @@ 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 = self.hooks["repo.postsync.d"]
+		else:
+			_hooks = self.hooks["postsync.d"]
+		for filepath in _hooks:
 			writemsg_level("Spawning post_sync hook: %s\n"
-				% (_unicode_decode(hook)),
+				% (_unicode_decode(_hooks[filepath])),
 				level=logging.ERROR, noiselevel=4)
 			retval = portage.process.spawn([filepath,
 				reponame, dosyncuri, repolocation], env=self.settings.environ())
 			if retval != os.EX_OK:
 				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
-					_unicode_decode(hook), filepath),
+					_unicode_decode(_hooks[filepath]), filepath),
 					level=logging.ERROR, noiselevel=-1)
 				succeeded = retval
 		return succeeded


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-07  9:15 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2014-12-07  9:15 UTC (permalink / raw
  To: gentoo-commits

commit:     8a5ee0a68764a272c554ed534fcb252e81f89118
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Dec  7 09:12:13 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sun Dec  7 09:12:49 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=8a5ee0a6

portage/sync/controller.py: Remove a debug print() missed

Fixes commit: a3991f7727be0eb973aad1b120d248a0739be453
Author: Brian Dolbec <dolsen <AT> gentoo.org> (Sat 06 Dec 2014 02:54:36 PM PST)
Subject: portage/sync/controller.py: Make a repo.postsync.d directory

---
 pym/portage/sync/controller.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 41f3830..6b9fb2c 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -104,7 +104,6 @@ class SyncManager(object):
 						% (warn("*"), _dir, _unicode_decode(name),),
 						level=logging.WARN, noiselevel=2)
 			self.hooks[_dir] = hooks
-		print(self.hooks)
 
 
 	def get_module_descriptions(self, mod):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2014-12-07 22:57 Michał Górny
  0 siblings, 0 replies; 23+ messages in thread
From: Michał Górny @ 2014-12-07 22:57 UTC (permalink / raw
  To: gentoo-commits

commit:     9a2b1e6096e35508e9f101fa0478101493ef0335
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Dec  5 22:54:27 2014 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Dec  7 22:57:07 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9a2b1e60

sync: ensure sync_{umask,user} is respected when creating repo

---
 pym/portage/sync/controller.py | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index ab6eb21..9001298 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -192,11 +192,6 @@ class SyncManager(object):
 			st = os.stat(repo.location)
 		except OSError:
 			st = None
-		if st is None:
-			writemsg_level(">>> '%s' not found, creating it."
-				% _unicode_decode(repo.location))
-			portage.util.ensure_dirs(repo.location, mode=0o755)
-			st = os.stat(repo.location)
 
 		self.usersync_uid = None
 		spawn_kwargs = {}
@@ -249,7 +244,24 @@ class SyncManager(object):
 				spawn_kwargs["groups"] = [gid]
 			if home is not None:
 				spawn_kwargs["env"]["HOME"] = home
-		elif ('usersync' in self.settings.features and
+
+		if st is None:
+			perms = {'mode': 0o755}
+			# respect sync-user if set
+			if 'umask' in spawn_kwargs:
+				perms['mode'] &= ~spawn_kwargs['umask']
+			if 'uid' in spawn_kwargs:
+				perms['uid'] = spawn_kwargs['uid']
+			if 'gid' in spawn_kwargs:
+				perms['gid'] = spawn_kwargs['gid']
+
+			writemsg_level(">>> '%s' not found, creating it."
+				% _unicode_decode(repo.location))
+			portage.util.ensure_dirs(repo.location, **perms)
+			st = os.stat(repo.location)
+
+		if (repo.sync_user is None and
+			'usersync' in self.settings.features and
 			portage.data.secpass >= 2 and
 			(st.st_uid != os.getuid() and st.st_mode & 0o700 or
 			st.st_gid != os.getgid() and st.st_mode & 0o070)):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-01-18 18:04 Michał Górny
  0 siblings, 0 replies; 23+ messages in thread
From: Michał Górny @ 2015-01-18 18:04 UTC (permalink / raw
  To: gentoo-commits

commit:     768b9e920fe0919d87537665ae3ce88007630cc1
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 17 13:03:53 2015 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jan 18 18:04:25 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=768b9e92

sync: fix module_names enumeration

Fix module_names enumeration to consider all modules. Before, the first
module on the list was omitted ('cvs' in this case).

---
 pym/portage/sync/controller.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 9001298..3d217db 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -119,7 +119,7 @@ class SyncManager(object):
 		self.callback = callback or self._sync_callback
 		self.repo = repo
 		self.exitcode = 1
-		if repo.sync_type in self.module_names[1:]:
+		if repo.sync_type in self.module_names:
 			tasks = [self.module_controller.get_class(repo.sync_type)]
 		else:
 			msg = "\n%s: Sync module '%s' is not an installed/known type'\n" \


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-02-09 20:12 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2015-02-09 20:12 UTC (permalink / raw
  To: gentoo-commits

commit:     e4f9c7251a34e780315271e6fb97dfddcb86d85a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb  9 19:43:47 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Mon Feb  9 20:11:44 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e4f9c725

portage/sync/controller.py: Fix commit 7909ed55ba, failure to import writemsg

Author: Michał Górny <mgorny <AT> gentoo.org> (Fri 05 Dec 2014 02:40:13 PM PST)
Subjetc: sync: allow overriding sync-user for the repository
SHA: 7909ed55ba45b8a94f4a29148e43953eb58aa184

---
 pym/portage/sync/controller.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index d2c606d..1583767 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -14,7 +14,7 @@ from portage import os
 from portage.progress import ProgressBar
 #from portage.emaint.defaults import DEFAULT_OPTIONS
 #from portage.util._argparse import ArgumentParser
-from portage.util import writemsg_level
+from portage.util import writemsg, writemsg_level
 from portage.output import create_color_func
 good = create_color_func("GOOD")
 bad = create_color_func("BAD")


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-02-09 20:12 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2015-02-09 20:12 UTC (permalink / raw
  To: gentoo-commits

commit:     a1091d4b0c538cfabc1f67e7758d7c9bab71a040
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb  9 19:51:01 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Mon Feb  9 20:11:44 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a1091d4b

portage/sync/controller.py: Fix missed self.portdb assignment bug 539478

In _sync_callback() action_metadata() call, portdb was needed as one of it's parameters.
But it was not defined when it was moved into task_opts dictionary to be passed to the sync module.

---
 pym/portage/sync/controller.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 1583767..6dec3c8 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -135,7 +135,7 @@ class SyncManager(object):
 		task_opts = {
 			'emerge_config': emerge_config,
 			'logger': self.logger,
-			'portdb': self.trees[self.settings['EROOT']]['porttree'].dbapi,
+			'portdb': self.portdb,
 			'repo': repo,
 			'settings': self.settings,
 			'spawn_kwargs': self.spawn_kwargs,
@@ -192,6 +192,7 @@ class SyncManager(object):
 			% (repo.name, repo.location)
 		self.logger(self.xterm_titles, msg)
 		writemsg_level(msg + "\n")
+		self.portdb = self.trees[self.settings['EROOT']]['porttree'].dbapi
 		try:
 			st = os.stat(repo.location)
 		except OSError:


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-04-22 16:59 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2015-04-22 16:59 UTC (permalink / raw
  To: gentoo-commits

commit:     7a16988f4765963896170b92253ebbd4344216ea
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 22 16:58:38 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Wed Apr 22 16:58:38 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7a16988f

portage/sync/controller.py: Fix postsync hook regression (bug 547414)

It seems the migration from the portage-utils postsync hook script to the native portage one
causes problems.  This is due to the fact the portage-utils supplied script did not pass on any 
arguments, even though emerge did pass on the uri to it.

X-Gentoo-Bug: 547414
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=547414

 pym/portage/sync/controller.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 6dec3c8..307487f 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -175,8 +175,13 @@ class SyncManager(object):
 			writemsg_level("Spawning post_sync hook: %s\n"
 				% (_unicode_decode(_hooks[filepath])),
 				level=logging.ERROR, noiselevel=4)
-			retval = portage.process.spawn([filepath,
-				reponame, dosyncuri, repolocation], env=self.settings.environ())
+			if reponame:
+				retval = portage.process.spawn(
+					[filepath, reponame, dosyncuri, repolocation],
+					env=self.settings.environ())
+			else:
+				retval = portage.process.spawn([filepath],
+					env=self.settings.environ())
 			if retval != os.EX_OK:
 				writemsg_level(" %s Spawn failed for: %s, %s\n" % (bad("*"),
 					_unicode_decode(_hooks[filepath]), filepath),


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-07-14 21:31 Brian Dolbec
  0 siblings, 0 replies; 23+ messages in thread
From: Brian Dolbec @ 2015-07-14 21:31 UTC (permalink / raw
  To: gentoo-commits

commit:     c0e1d514c1c8159aa732d23a527640432a9c076d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 14 20:40:23 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Tue Jul 14 21:28:32 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c0e1d514

portage/sync.__init__.py: Trap KeyError in module_specific_options()

Return an empty frozenset if the sync module is older and does not contain a
module_specific_option definition in it's module_spec.
Makes the module_specific_options addition backwards compatible with existing sync modules.

 pym/portage/sync/__init__.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/pym/portage/sync/__init__.py b/pym/portage/sync/__init__.py
index b0e0ebe..32b2c45 100644
--- a/pym/portage/sync/__init__.py
+++ b/pym/portage/sync/__init__.py
@@ -31,9 +31,11 @@ def module_specific_options(repo):
 	global module_controller
 
 	if repo.sync_type:
-		opts = frozenset([opt for opt in
-			module_controller.modules[repo.sync_type]['module_specific_options']])
-		return opts
+		try:
+			return frozenset(
+				module_controller.modules[repo.sync_type]['module_specific_options'])
+		except KeyError:
+			pass
 	return frozenset()
 
 


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-08-30 23:52 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2015-08-30 23:52 UTC (permalink / raw
  To: gentoo-commits

commit:     4a3f6ce8e5c64b7447bb32851ee91e19faf18be3
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 29 19:56:50 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Aug 30 23:50:58 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4a3f6ce8

sync: include metadata/layout.conf with profile submodule (bug 559122)

Since metadata/layout.conf settings such as profile-formats affect the
interpretation of profiles, make the profiles submodule include this
file (which is all that's needed for a minimal binhost client).

X-Gentoo-Bug: 559122
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=559122
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/sync/__init__.py | 6 +++---
 pym/portage/sync/syncbase.py | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/pym/portage/sync/__init__.py b/pym/portage/sync/__init__.py
index 32b2c45..805b1f2 100644
--- a/pym/portage/sync/__init__.py
+++ b/pym/portage/sync/__init__.py
@@ -9,9 +9,9 @@ from portage.sync.controller import SyncManager
 from portage.sync.config_checks import check_type
 
 _SUBMODULE_PATH_MAP = OrderedDict([
-	('glsa', 'metadata/glsa'),
-	('news', 'metadata/news'),
-	('profiles', 'profiles'),
+	('glsa', ('metadata/glsa',)),
+	('news', ('metadata/news',)),
+	('profiles', ('metadata/layout.conf', 'profiles')),
 ])
 
 path = os.path.join(os.path.dirname(__file__), "modules")

diff --git a/pym/portage/sync/syncbase.py b/pym/portage/sync/syncbase.py
index d30d69d..6aaa9c4 100644
--- a/pym/portage/sync/syncbase.py
+++ b/pym/portage/sync/syncbase.py
@@ -99,7 +99,7 @@ class SyncBase(object):
 		emerge_config = self.options.get('emerge_config')
 		if emerge_config is not None:
 			for name in emerge_config.opts.get('--sync-submodule', []):
-				paths.append(_SUBMODULE_PATH_MAP[name])
+				paths.extend(_SUBMODULE_PATH_MAP[name])
 		return tuple(paths)
 
 


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-09-23 22:32 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2015-09-23 22:32 UTC (permalink / raw
  To: gentoo-commits

commit:     200d876b01dd11521cdcd9bfa07abdca165d24e8
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Sep 23 16:16:45 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Sep 23 22:31:36 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=200d876b

SyncManager.async: initialize attributes before fork (bug 561234)

Since commit 496ff326dc18890889d1ea5d2aec590394635960, the pre_sync
method executes in a forked child process. Therefore, initialize
attributes before the fork (in the async method).

Fixes: 496ff326dc18 ("sync repositories in parallel (bug 557426)")
X-Gentoo-Bug: 561234
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=561234
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/sync/controller.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index e992cc4..28dbc57 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -115,13 +115,16 @@ class SyncManager(object):
 		return []
 
 	def async(self, emerge_config=None, repo=None):
+		self.emerge_config = emerge_config
+		self.settings, self.trees, self.mtimedb = emerge_config
+		self.xterm_titles = "notitles" not in self.settings.features
+		self.portdb = self.trees[self.settings['EROOT']]['porttree'].dbapi
 		proc = AsyncFunction(target=self.sync,
 			kwargs=dict(emerge_config=emerge_config, repo=repo))
 		proc.addExitListener(self._sync_callback)
 		return proc
 
 	def sync(self, emerge_config=None, repo=None):
-		self.emerge_config = emerge_config
 		self.callback = None
 		self.repo = repo
 		self.exitcode = 1
@@ -199,13 +202,10 @@ class SyncManager(object):
 
 
 	def pre_sync(self, repo):
-		self.settings, self.trees, self.mtimedb = self.emerge_config
-		self.xterm_titles = "notitles" not in self.settings.features
 		msg = ">>> Syncing repository '%s' into '%s'..." \
 			% (repo.name, repo.location)
 		self.logger(self.xterm_titles, msg)
 		writemsg_level(msg + "\n")
-		self.portdb = self.trees[self.settings['EROOT']]['porttree'].dbapi
 		try:
 			st = os.stat(repo.location)
 		except OSError:


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-10-06 16:27 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2015-10-06 16:27 UTC (permalink / raw
  To: gentoo-commits

commit:     4205ec912aebf2e3b0bd673fcacb576b1f344329
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Oct  5 23:01:49 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Oct  6 16:25:37 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4205ec91

SyncRepos.async: group sync and callback as composite task (bug 562264)

Group together the sync operation and the callback as a single task,
so that the callback will not execute concurrently with another sync
operation for --jobs=1.

X-Gentoo-Bug: 562264
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562264
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/sync/controller.py | 39 +++++++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 28dbc57..159b9c0 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -25,6 +25,7 @@ from portage.util._async.AsyncFunction import AsyncFunction
 from portage import OrderedDict
 from portage import _unicode_decode
 from portage import util
+from _emerge.CompositeTask import CompositeTask
 
 
 class TaskHandler(object):
@@ -119,10 +120,9 @@ class SyncManager(object):
 		self.settings, self.trees, self.mtimedb = emerge_config
 		self.xterm_titles = "notitles" not in self.settings.features
 		self.portdb = self.trees[self.settings['EROOT']]['porttree'].dbapi
-		proc = AsyncFunction(target=self.sync,
-			kwargs=dict(emerge_config=emerge_config, repo=repo))
-		proc.addExitListener(self._sync_callback)
-		return proc
+		return SyncRepo(sync_task=AsyncFunction(target=self.sync,
+			kwargs=dict(emerge_config=emerge_config, repo=repo)),
+			sync_callback=self._sync_callback)
 
 	def sync(self, emerge_config=None, repo=None):
 		self.callback = None
@@ -343,3 +343,34 @@ class SyncManager(object):
 			action_metadata(self.settings, self.portdb, self.emerge_config.opts,
 				porttrees=[repo.location])
 
+
+class SyncRepo(CompositeTask):
+	"""
+	Encapsulates a sync operation and the callback which executes afterwards,
+	so both can be considered as a single composite task. This is useful
+	since we don't want to consider a particular repo's sync operation as
+	complete until after the callback has executed (bug 562264).
+
+	The kwargs and result properties expose attributes that are accessed
+	by SyncScheduler.
+	"""
+
+	__slots__ = ('sync_task', 'sync_callback')
+
+	@property
+	def kwargs(self):
+		return self.sync_task.kwargs
+
+	@property
+	def result(self):
+		return self.sync_task.result
+
+	def _start(self):
+		self._start_task(self.sync_task, self._sync_task_exit)
+
+	def _sync_task_exit(self, sync_task):
+		self._current_task = None
+		self.returncode = sync_task.returncode
+		self.sync_callback(self.sync_task)
+		self._async_wait()
+


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-11-24 16:16 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2015-11-24 16:16 UTC (permalink / raw
  To: gentoo-commits

commit:     baeff1e7a7306081123d9a31b24c62d59ae73abb
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 22 20:05:37 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Nov 24 16:15:04 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=baeff1e7

SyncManager: redirect command stderr to stdout (bug 566132)

X-Gentoo-Bug: 566132
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=566132
Acked-by: Alexander Berntsen <bernalex <AT> gentoo.org>

 pym/portage/sync/controller.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index 4595293..e71ba67 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -218,6 +218,13 @@ class SyncManager(object):
 
 		self.usersync_uid = None
 		spawn_kwargs = {}
+		# Redirect command stderr to stdout, in order to prevent
+		# spurious cron job emails (bug 566132).
+		spawn_kwargs["fd_pipes"] = {
+			0: sys.__stdin__.fileno(),
+			1: sys.__stdout__.fileno(),
+			2: sys.__stdout__.fileno()
+		}
 		spawn_kwargs["env"] = self.settings.environ()
 		if repo.sync_user is not None:
 			def get_sync_user_data(sync_user):


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2015-12-12 23:42 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2015-12-12 23:42 UTC (permalink / raw
  To: gentoo-commits

commit:     32b372bf79633bbfe6c7b1f5bca2f290a32695d4
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 12 22:24:04 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Dec 12 23:40:41 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=32b372bf

SyncManager.sync: always return 4-tuple (bug 567932)

Since commit 496ff326dc18890889d1ea5d2aec590394635960, invalid repos.conf
settings or failure of the pre_sync method caused SyncManager.sync to
return an incorrect number of values.

Fixes: 496ff326dc18 ("sync repositories in parallel (bug 557426)")
X-Gentoo-Bug: 567932
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=567932
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/sync/controller.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py
index e71ba67..92be3cb 100644
--- a/pym/portage/sync/controller.py
+++ b/pym/portage/sync/controller.py
@@ -129,16 +129,17 @@ class SyncManager(object):
 		self.repo = repo
 		self.exitcode = 1
 		self.updatecache_flg = False
+		hooks_enabled = master_hooks or not repo.sync_hooks_only_on_change
 		if repo.sync_type in self.module_names:
 			tasks = [self.module_controller.get_class(repo.sync_type)]
 		else:
 			msg = "\n%s: Sync module '%s' is not an installed/known type'\n" \
 				% (bad("ERROR"), repo.sync_type)
-			return self.exitcode, msg
+			return self.exitcode, msg, self.updatecache_flg, hooks_enabled
 
 		rval = self.pre_sync(repo)
 		if rval != os.EX_OK:
-			return rval, None
+			return rval, None, self.updatecache_flg, hooks_enabled
 
 		# need to pass the kwargs dict to the modules
 		# so they are available if needed.
@@ -157,7 +158,6 @@ class SyncManager(object):
 		taskmaster = TaskHandler(callback=self.do_callback)
 		taskmaster.run_tasks(tasks, func, status, options=task_opts)
 
-		hooks_enabled = False
 		if (master_hooks or self.updatecache_flg or
 			not repo.sync_hooks_only_on_change):
 			hooks_enabled = True


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/sync/
@ 2017-09-17 23:59 Zac Medico
  0 siblings, 0 replies; 23+ messages in thread
From: Zac Medico @ 2017-09-17 23:59 UTC (permalink / raw
  To: gentoo-commits

commit:     0d1d2b8dccdd5ce9f99358fe842fb968a0423a25
Author:     Nicolas Porcel <nicolasporcel06 <AT> gmail <DOT> com>
AuthorDate: Sun Sep 17 23:29:27 2017 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Sep 17 23:59:11 2017 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=0d1d2b8d

Fix emerge --info when using webrsync (bug 630538)

When calling retrieve_head from a SyncBase object, it is expected to
raise a NotImplementedError. However, all classes that do not inherit
from NewBase will raise an AttributeError which is not caught.

Fixes: 0e1699ad6b3f ("emerge: Add head commit per repo to --info")

 pym/portage/sync/syncbase.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pym/portage/sync/syncbase.py b/pym/portage/sync/syncbase.py
index 05e4d69d4..43b667fb0 100644
--- a/pym/portage/sync/syncbase.py
+++ b/pym/portage/sync/syncbase.py
@@ -102,6 +102,10 @@ class SyncBase(object):
 				paths.extend(_SUBMODULE_PATH_MAP[name])
 		return tuple(paths)
 
+	def retrieve_head(self, **kwargs):
+		'''Get information about the head commit'''
+		raise NotImplementedError
+
 
 class NewBase(SyncBase):
 	'''Subclasses Syncbase adding a new() and runs it
@@ -133,7 +137,3 @@ class NewBase(SyncBase):
 		'''Update existing repository
 		'''
 		raise NotImplementedError
-
-	def retrieve_head(self, **kwargs):
-		'''Get information about the head commit'''
-		raise NotImplementedError


^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2017-09-18  0:00 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-04 20:16 [gentoo-commits] proj/portage:master commit in: pym/portage/sync/ Brian Dolbec
2014-12-04 20:04 ` [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
  -- strict thread matches above, loose matches on Subject: below --
2017-09-17 23:59 [gentoo-commits] proj/portage:master " Zac Medico
2015-12-12 23:42 Zac Medico
2015-11-24 16:16 Zac Medico
2015-10-06 16:27 Zac Medico
2015-09-23 22:32 Zac Medico
2015-08-30 23:52 Zac Medico
2015-07-14 21:31 Brian Dolbec
2015-04-22 16:59 Brian Dolbec
2015-02-09 20:12 Brian Dolbec
2015-02-09 20:12 Brian Dolbec
2015-01-18 18:04 Michał Górny
2014-12-07 22:57 Michał Górny
2014-12-07  9:15 Brian Dolbec
2014-12-07  5:42 Brian Dolbec
2014-12-04 20:16 Brian Dolbec
2014-12-04 20:16 Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox