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 ( |