aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2013-08-30 16:39:21 +0200
committerAndré Erdmann <dywi@mailerd.de>2013-08-30 16:39:21 +0200
commitadc664ff7740d326a99e43f9de939b69db5648e1 (patch)
tree433cb6e7d284b4582a3d891a1558399e24b69330 /roverlay/db
parentutil.fileio: strip newlines if preparse is True (diff)
downloadR_overlay-adc664ff7740d326a99e43f9de939b69db5648e1.tar.gz
R_overlay-adc664ff7740d326a99e43f9de939b69db5648e1.tar.bz2
R_overlay-adc664ff7740d326a99e43f9de939b69db5648e1.zip
distmap: get_distfile_slot()
distmap-side support for detecting file collisions. Note that volatile entries could be handled better (currently, they _should_ be overwritten when writing the overlay).
Diffstat (limited to 'roverlay/db')
-rw-r--r--roverlay/db/distmap.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/roverlay/db/distmap.py b/roverlay/db/distmap.py
index 47cfa27..cddcb5b 100644
--- a/roverlay/db/distmap.py
+++ b/roverlay/db/distmap.py
@@ -33,12 +33,22 @@ class DistMapInfo ( object ):
@classmethod
def from_package_info ( cls, p_info, allow_digest_create=True ):
- key, value = p_info.get_distmap_value (
- allow_digest_create=allow_digest_create
+ return cls (
+ *p_info.get_distmap_value (
+ allow_digest_create=allow_digest_create
+ )
)
- return key, cls ( *value )
# --- end of from_package_info (...) ---
+ @classmethod
+ def volatile_from_package_info ( cls, p_info, backref=None ):
+ instance = cls ( *p_info.get_distmap_value ( no_digest=True ) )
+ instance.volatile = True
+ if backref is not None:
+ instance.add_backref ( backref )
+ return instance
+ # --- end of volatile_from_package_info (...) ---
+
def __init__ (
self, distfile, repo_name, repo_file, sha256, volatile=False
):
@@ -233,16 +243,22 @@ class _DistMapBase ( object ):
yield info.to_str ( str ( distfile ), field_delimiter )
# --- end of gen_info_lines (...) ---
- def get_distfile_slot ( self, backref, distfile ):
- entry = self.get_entry ( distfile )
+ def get_distfile_slot ( self, package_dir, p_info ):
+ distfile = p_info ['package_src_destpath']
+ entry = self.get_entry ( distfile )
+
if entry is None:
- raise NotImplementedError ( "backref gets new 'slot'." )
+ # entry does not exist, create a new,volatile one
+ self._distmap [distfile] = DistMapInfo.volatile_from_package_info (
+ p_info, backref=package_dir.get_ref()
+ )
return 1
- elif entry.has_backref_to ( backref.deref_safe() ):
- # revbump check might be necessary
+ elif entry.has_backref_to ( package_dir ):
+ # entry exists and belongs to backref, nothing to do here
+ # a revbump check might be necessary
return 2
else:
- raise NotImplementedError ( "handle file collision." )
+ # collision, should be resolved by the distroot
return 0
# --- end of get_distfile_slot (...) ---
@@ -416,8 +432,10 @@ class _DistMapBase ( object ):
Returns: created entry
"""
- key, value = DistMapInfo.from_package_info ( p_info )
- return self.add_entry ( key, value )
+ return self.add_entry (
+ p_info.get_distmap_key(),
+ DistMapInfo.from_package_info ( p_info )
+ )
# --- end of add_entry_for (...) ---
def add_dummy_entry (