public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/
@ 2012-08-02 15:14 André Erdmann
  0 siblings, 0 replies; only message in thread
From: André Erdmann @ 2012-08-02 15:14 UTC (permalink / raw
  To: gentoo-commits

commit:     46c518b8349bccf3a3532d2091776f59f8ae651a
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Aug  2 15:03:26 2012 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Aug  2 15:03:26 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=46c518b8

read description data in PackageInfo

---
 roverlay/ebuild/creation.py |   61 +++++++++++++-----------------------------
 roverlay/packageinfo.py     |   47 ++++++++++++++++++++++++---------
 2 files changed, 53 insertions(+), 55 deletions(-)

diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
index 778f93a..89e0323 100644
--- a/roverlay/ebuild/creation.py
+++ b/roverlay/ebuild/creation.py
@@ -4,8 +4,7 @@
 
 import logging
 
-from roverlay.ebuild                     import depres, ebuilder, evars
-from roverlay.rpackage.descriptionreader import DescriptionReader
+from roverlay.ebuild import depres, ebuilder, evars
 
 
 LOGGER = logging.getLogger ( 'EbuildCreation' )
@@ -55,9 +54,7 @@ class EbuildCreation ( object ):
 			raise Exception ( "Cannot run again." )
 
 		try:
-			self._lazyimport_desc_data()
-
-			self.package_info.set_readonly()
+			self.package_info.update_now ( make_desc_data=True )
 
 			if self._make_ebuild():
 				self.logger.debug ( "Ebuild is ready." )
@@ -72,26 +69,6 @@ class EbuildCreation ( object ):
 			raise
 	# --- end of run (...) ---
 
-	def _lazyimport_desc_data ( self ):
-		"""Reads R package description data."""
-		# TODO/FIXME: read this somewhere else?
-		if self.package_info.get ( 'desc_data',
-			fallback_value=None, do_fallback=True ) is None:
-
-			logging.debug ( 'Reading description data now.' )
-			reader = DescriptionReader (
-				self.package_info,
-				logger=self.logger,
-				read_now=True
-			)
-
-			self.package_info.update_now (
-				desc_data=reader.get_desc ( run_if_unset=False )
-			)
-			del reader
-
-	# --- end of _lazyimport_desc_data (...) ---
-
 	def _get_ebuild_description ( self ):
 		"""Creates a DESCRIPTION variable."""
 		desc = self.package_info ['desc_data']
@@ -138,30 +115,30 @@ class EbuildCreation ( object ):
 			depres_channel_spawner=self.depres_channel_spawner,
 			err_queue=self.err_queue
 		)
-		if not _dep_resolution.success():
-			# log here? (FIXME)
-			return False
 
+		if _dep_resolution.success():
+			dep_result = _dep_resolution.get_result()
 
-		dep_result = _dep_resolution.get_result()
+			ebuild = ebuilder.Ebuilder()
 
-		ebuild = ebuilder.Ebuilder()
+			# add *DEPEND, IUSE to the ebuild
+			ebuild.use ( *dep_result [1] )
 
-		# add *DEPEND, IUSE to the ebuild
-		ebuild.use ( *dep_result [1] )
+			# DESCRIPTION
+			ebuild.use ( self._get_ebuild_description() )
 
-		# DESCRIPTION
-		ebuild.use ( self._get_ebuild_description() )
+			# SRC_URI
+			ebuild.use ( evars.SRC_URI ( self.package_info ['SRC_URI'] ) )
 
-		# SRC_URI
-		ebuild.use ( evars.SRC_URI ( self.package_info ['SRC_URI'] ) )
+			ebuild_text = ebuild.to_str()
 
-		ebuild_text = ebuild.to_str()
+			self.package_info.update_now (
+				ebuild=ebuild_text,
+				depres_result=dep_result
+			)
 
-		self.package_info.update_now (
-			ebuild=ebuild_text,
-			depres_result=dep_result
-		)
+			return True
 
-		return True
+		else:
+			return False
 	# --- end of _make_ebuild (...) ---

diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py
index 4514d4f..82233bf 100644
--- a/roverlay/packageinfo.py
+++ b/roverlay/packageinfo.py
@@ -7,7 +7,8 @@ import os.path
 import logging
 import threading
 
-from roverlay import config, util
+from roverlay          import config, strutil
+from roverlay.rpackage import descriptionreader
 
 #
 # PackageInfo keys known to be used (read) in the roverlay modules:
@@ -21,13 +22,12 @@ from roverlay import config, util
 # * package_file     in rpackage/descriptionreader
 # * package_name     in rpackage/descriptionreader
 # * package_url      in ebuild/creation
+# * physical_only    in overlay/pacakge
 # * version          in ebuild/package (as tuple)
 #
 
 LOGGER = logging.getLogger ( 'PackageInfo' )
 
-
-
 class PackageInfo ( object ):
 	"""PackageInfo offers easy, subscriptable (['sth']) access to package
 	information, whether stored or calculated.
@@ -49,6 +49,7 @@ class PackageInfo ( object ):
 		self.readonly            = False
 		self._update_lock        = threading.RLock()
 		self.overlay_package_ref = None
+		self.logger              = LOGGER
 
 		self.update ( **initial_info )
 	# --- end of __init__ (...) ---
@@ -216,6 +217,18 @@ class PackageInfo ( object ):
 			raise KeyError ( key )
 	# --- end of get (...) ---
 
+	def get_desc_data ( self ):
+		if 'desc_data' in self._info:
+			return self._info ['desc_data']
+
+		self._writelock_acquire()
+		if 'desc_data' not in self._info:
+			self._info ['desc_data'] = descriptionreader.read ( self )
+
+		self._update_lock.release()
+		return self._info ['desc_data']
+	# --- end of get_desc_data (...) ---
+
 	def __getitem__ ( self, key ):
 		return self.get ( key, do_fallback=False )
 	# --- end of __getitem__ (...) ---
@@ -262,7 +275,6 @@ class PackageInfo ( object ):
 
 		simple_keys = frozenset ((
 			'origin',
-			'desc_data',
 			'ebuild',
 			'ebuild_file',
 			'physical_only',
@@ -305,8 +317,14 @@ class PackageInfo ( object ):
 			elif key == 'remove_auto':
 				self._remove_auto ( value )
 
+			elif key == 'make_desc_data':
+				if value:
+					self.get_desc_data()
+
 			else:
-				LOGGER.error ( "in update(): unknown info key {}!".format ( key ) )
+				self.logger.error (
+					"in update(): unknown info key {}!".format ( key )
+				)
 
 		self._update_lock.release()
 	# --- end of update (**kw) ---
@@ -322,14 +340,16 @@ class PackageInfo ( object ):
 		# remove .tar.gz .tar.bz2 etc.
 		filename = PackageInfo.PKGSUFFIX_REGEX.sub ( '', filename_with_ext )
 
+		self.logger = logging.getLogger ( filename )
+
 		package_name, sepa, package_version = filename.partition (
 			config.get ( 'R_PACKAGE.name_ver_separator', '_' )
 		)
 
 		if not sepa:
 			# file name unexpected, tarball extraction will (probably) fail
-			LOGGER.error    ( "unexpected file name {!r}.".format ( filename ) )
-			raise Exception ( "cannot use file {!r}.".format ( filename ) )
+			self.logger.error ( "unexpected file name {!r}.".format ( filename ) )
+			raise Exception   ( "cannot use file {!r}.".format ( filename ) )
 			return
 
 		version_str = PackageInfo.EBUILDVER_REGEX.sub ( '.', package_version )
@@ -338,9 +358,8 @@ class PackageInfo ( object ):
 			version = tuple ( int ( z ) for z in version_str.split ( '.' ) )
 			self ['version'] = version
 		except ValueError as ve:
-			# version string is malformed
-			# TODO: discard or continue with bad version?
-			logging.error (
+			# version string is malformed, cannot use it
+			self.logger.error (
 				"Cannot parse version string {!r} for {!r}".format (
 					_filename, version_str
 				)
@@ -351,7 +370,7 @@ class PackageInfo ( object ):
 		#  using pkg_version for the ebuild version
 
 		# removing illegal chars from the package_name
-		ebuild_name = util.fix_ebuild_name ( package_name )
+		ebuild_name = strutil.fix_ebuild_name ( package_name )
 
 		if ebuild_name != package_name:
 			self ['name'] = ebuild_name
@@ -388,7 +407,9 @@ class PackageInfo ( object ):
 				# needs python >= 2.7
 				info_new = { k : self.get ( k ) for k in to_keep }
 
-				# also add an ebuild stub to the new dict (workaround, FIXME)
+				# also add an ebuild stub to the new dict to indicate
+				# that this PackageInfo instance has been created from been
+				# created from an R package in this script run
 				info_new ['ebuild'] = True
 
 				if 'physical_only' in self._info:
@@ -407,7 +428,7 @@ class PackageInfo ( object ):
 		arguments:
 		* _filepath --
 		"""
-		LOGGER.warn (
+		self.logger.warn (
 			'Please note that _use_filepath is only meant for testing.'
 		)
 		filepath = os.path.abspath ( _filepath )


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2012-08-02 15:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-02 15:14 [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/ André Erdmann

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