Gentoo Archives: gentoo-commits

From: "André Erdmann" <dywi@×××××××.de>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/db/
Date: Fri, 30 Aug 2013 14:49:44
Message-Id: 1377873561.adc664ff7740d326a99e43f9de939b69db5648e1.dywi@gentoo
1 commit: adc664ff7740d326a99e43f9de939b69db5648e1
2 Author: André Erdmann <dywi <AT> mailerd <DOT> de>
3 AuthorDate: Fri Aug 30 14:39:21 2013 +0000
4 Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
5 CommitDate: Fri Aug 30 14:39:21 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=adc664ff
7
8 distmap: get_distfile_slot()
9
10 distmap-side support for detecting file collisions.
11
12 Note that volatile entries could be handled better (currently, they _should_
13 be overwritten when writing the overlay).
14
15 ---
16 roverlay/db/distmap.py | 40 +++++++++++++++++++++++++++++-----------
17 1 file changed, 29 insertions(+), 11 deletions(-)
18
19 diff --git a/roverlay/db/distmap.py b/roverlay/db/distmap.py
20 index 47cfa27..cddcb5b 100644
21 --- a/roverlay/db/distmap.py
22 +++ b/roverlay/db/distmap.py
23 @@ -33,12 +33,22 @@ class DistMapInfo ( object ):
24
25 @classmethod
26 def from_package_info ( cls, p_info, allow_digest_create=True ):
27 - key, value = p_info.get_distmap_value (
28 - allow_digest_create=allow_digest_create
29 + return cls (
30 + *p_info.get_distmap_value (
31 + allow_digest_create=allow_digest_create
32 + )
33 )
34 - return key, cls ( *value )
35 # --- end of from_package_info (...) ---
36
37 + @classmethod
38 + def volatile_from_package_info ( cls, p_info, backref=None ):
39 + instance = cls ( *p_info.get_distmap_value ( no_digest=True ) )
40 + instance.volatile = True
41 + if backref is not None:
42 + instance.add_backref ( backref )
43 + return instance
44 + # --- end of volatile_from_package_info (...) ---
45 +
46 def __init__ (
47 self, distfile, repo_name, repo_file, sha256, volatile=False
48 ):
49 @@ -233,16 +243,22 @@ class _DistMapBase ( object ):
50 yield info.to_str ( str ( distfile ), field_delimiter )
51 # --- end of gen_info_lines (...) ---
52
53 - def get_distfile_slot ( self, backref, distfile ):
54 - entry = self.get_entry ( distfile )
55 + def get_distfile_slot ( self, package_dir, p_info ):
56 + distfile = p_info ['package_src_destpath']
57 + entry = self.get_entry ( distfile )
58 +
59 if entry is None:
60 - raise NotImplementedError ( "backref gets new 'slot'." )
61 + # entry does not exist, create a new,volatile one
62 + self._distmap [distfile] = DistMapInfo.volatile_from_package_info (
63 + p_info, backref=package_dir.get_ref()
64 + )
65 return 1
66 - elif entry.has_backref_to ( backref.deref_safe() ):
67 - # revbump check might be necessary
68 + elif entry.has_backref_to ( package_dir ):
69 + # entry exists and belongs to backref, nothing to do here
70 + # a revbump check might be necessary
71 return 2
72 else:
73 - raise NotImplementedError ( "handle file collision." )
74 + # collision, should be resolved by the distroot
75 return 0
76 # --- end of get_distfile_slot (...) ---
77
78 @@ -416,8 +432,10 @@ class _DistMapBase ( object ):
79
80 Returns: created entry
81 """
82 - key, value = DistMapInfo.from_package_info ( p_info )
83 - return self.add_entry ( key, value )
84 + return self.add_entry (
85 + p_info.get_distmap_key(),
86 + DistMapInfo.from_package_info ( p_info )
87 + )
88 # --- end of add_entry_for (...) ---
89
90 def add_dummy_entry (