* [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/pkgdir/metadata/, roverlay/overlay/pkgdir/
@ 2013-09-05 14:43 André Erdmann
0 siblings, 0 replies; only message in thread
From: André Erdmann @ 2013-09-05 14:43 UTC (permalink / raw
To: gentoo-commits
commit: 014240b7155c2fede9931f83e0bb22fb292d83c0
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Sep 5 14:41:55 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Sep 5 14:41:55 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=014240b7
log _why_ metadata.xml could not be created
---
roverlay/overlay/pkgdir/metadata/__init__.py | 78 +++++++++++++++-------------
roverlay/overlay/pkgdir/packagedir_base.py | 5 +-
2 files changed, 45 insertions(+), 38 deletions(-)
diff --git a/roverlay/overlay/pkgdir/metadata/__init__.py b/roverlay/overlay/pkgdir/metadata/__init__.py
index aad7553..da42307 100644
--- a/roverlay/overlay/pkgdir/metadata/__init__.py
+++ b/roverlay/overlay/pkgdir/metadata/__init__.py
@@ -22,7 +22,12 @@ USE_FULL_DESCRIPTION = True
class MetadataJob ( object ):
"""R package description data -> metadata.xml interface."""
- DATA_KEYS = frozenset (( 'Description', 'Title' ))
+ METADATA_SUCCESS = 0
+ METADATA_NO_PACKAGE = 2**0
+ METADATA_EMPTY = 2**1
+ METADATA_WRITE_ERROR = 2**2
+
+ DATA_KEYS = frozenset ({ 'Description', 'Title' })
def __init__ ( self, filepath, logger ):
"""Initializes a MetadataJob.
@@ -31,9 +36,11 @@ class MetadataJob ( object ):
* filepath -- path where the metadata file will be written to
* logger -- parent logger to use
"""
- self.logger = logger.getChild ( 'metadata' )
- self._package_info = None
- self.filepath = filepath
+ self.logger = logger.getChild ( 'metadata' )
+ self._package_info = None
+ self.filepath = filepath
+ self.last_write_code = -1
+
# no longer storing self._metadata, which will only be created twice
# when running show() (expected 1x write per PackageInfo instance)
# --- end of __init__ (...) ---
@@ -112,20 +119,6 @@ class MetadataJob ( object ):
return mref
# --- end of update (...) ---
- def _write ( self, fh, mref ):
- """Writes the metadata into a file.
-
- arguments:
- * fh -- file handle used for writing
-
- returns: True if writing succeeds, else False
-
- raises: Exception if no metadata to write
- """
- return mref.write_file ( fh )
- #raise Exception ( "not enough metadata to write!" )
- # --- end of _write (...) ---
-
def show ( self, stream ):
if self._package_info is not None:
return self._create().write_file ( stream )
@@ -134,23 +127,36 @@ class MetadataJob ( object ):
# --- end of show (...) ---
def write ( self ):
+ retcode = self.METADATA_SUCCESS
if self._package_info is not None:
- _success = False
- try:
- # succeed if metadata empty or written
- mref = self._create()
- if mref.empty():
- _success = True
- else:
- fh = open ( self.filepath, 'w' )
- _success = self._write ( fh, mref )
-
- except Exception as e:
- self.logger.exception ( e )
- finally:
- if 'fh' in locals() and fh: fh.close()
-
- return _success
- else:
- return False
+ # succeed if metadata empty or written
+ mref = self._create()
+ if mref.empty():
+ retcode |= self.METADATA_EMPTY
+ else:
+ with open ( self.filepath, 'w' ) as fh:
+ if not mref.write_file ( fh ):
+ retcode |= self.METADATA_WRITE_ERROR
+
+ self.last_write_code = retcode
+ return bool ( retcode == self.METADATA_SUCCESS )
# --- end of write (...) ---
+
+ def decode_write_errors ( self ):
+ # usually yields only one word
+ def gen_decode ( code ):
+ if code < 0:
+ yield "<invalid>"
+ else:
+ if code & self.METADATA_NO_PACKAGE:
+ yield "no package"
+
+ if code & self.METADATA_EMPTY:
+ yield "empty"
+
+ if code & self.METADATA_WRITE_ERROR:
+ yield "write error"
+
+ reasons = list ( self.gen_decode ( self.last_write_code ) )
+ return reasons if reasons else [ '<unknown>', ]
+ # --- end of decode_write_errors (...) ---
diff --git a/roverlay/overlay/pkgdir/packagedir_base.py b/roverlay/overlay/pkgdir/packagedir_base.py
index 36ae5f7..870a419 100644
--- a/roverlay/overlay/pkgdir/packagedir_base.py
+++ b/roverlay/overlay/pkgdir/packagedir_base.py
@@ -1107,8 +1107,9 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ):
success = True
else:
self.logger.error (
- "Failed to write metadata file {}.".format (
- self._metadata.filepath
+ "Failed to write metadata file {}: {}".format (
+ self._metadata.filepath,
+ ', '.join ( self._metadata.decode_write_errors() )
)
)
else:
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2013-09-05 14:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-05 14:43 [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/pkgdir/metadata/, roverlay/overlay/pkgdir/ André Erdmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox