1 |
commit: 43ab1d2328ee2968dc0d5076f33629f859e12718 |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Fri Aug 2 10:17:52 2013 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Fri Aug 2 10:17:52 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=43ab1d23 |
7 |
|
8 |
support suffixes $PV when importing ebuilds |
9 |
|
10 |
Selfdep validation may fail/ignore when dealing with import ebuilds with a |
11 |
version suffix ("_pre..." etc.). |
12 |
|
13 |
--- |
14 |
roverlay/packageinfo.py | 18 +++++++++++------- |
15 |
roverlay/versiontuple.py | 30 +++++++++++++++++++++++++++--- |
16 |
2 files changed, 38 insertions(+), 10 deletions(-) |
17 |
|
18 |
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py |
19 |
index 752f996..704807e 100644 |
20 |
--- a/roverlay/packageinfo.py |
21 |
+++ b/roverlay/packageinfo.py |
22 |
@@ -805,17 +805,21 @@ class PackageInfo ( object ): |
23 |
pv_str, DONT_CARE, pr_str = pvr.partition ( '-r' ) |
24 |
pv, DONT_CARE, pv_suffix = pv_str.partition ( '_' ) |
25 |
|
26 |
+ # non-digit chars in pv are not supported |
27 |
+ pv_list = [ int(z) for z in pv.split ( '.' ) ] |
28 |
+ |
29 |
if pv_suffix: |
30 |
# not supported |
31 |
- raise NotImplementedError ( |
32 |
- "version suffix {!r} cannot be preserved for $PVR {!r}".format ( |
33 |
- pv_suffix, pvr |
34 |
+ self._info ['version'] = ( |
35 |
+ roverlay.versiontuple.SuffixedIntVersionTuple ( |
36 |
+ pv_list, pv_suffix |
37 |
) |
38 |
) |
39 |
- # non-digit chars in pv are unsupported, too |
40 |
- self._info ['version'] = roverlay.versiontuple.IntVersionTuple ( |
41 |
- int ( z ) for z in pv.split ( '.' ) |
42 |
- ) |
43 |
+ else: |
44 |
+ self._info ['version'] = ( |
45 |
+ roverlay.versiontuple.IntVersionTuple ( pv_list ) |
46 |
+ ) |
47 |
+ |
48 |
self._info ['rev'] = int ( pr_str ) if pr_str else 0 |
49 |
|
50 |
self._info ['ebuild_verstr'] = pvr |
51 |
|
52 |
diff --git a/roverlay/versiontuple.py b/roverlay/versiontuple.py |
53 |
index 6586088..579471f 100644 |
54 |
--- a/roverlay/versiontuple.py |
55 |
+++ b/roverlay/versiontuple.py |
56 |
@@ -67,9 +67,9 @@ def pkgver_decorator ( func ): |
57 |
|
58 |
class VersionTuple ( tuple ): |
59 |
|
60 |
- def __init__ ( self, *args, **kwargs ): |
61 |
- super ( VersionTuple, self ).__init__ ( *args, **kwargs ) |
62 |
- # --- end of __init__ (...) --- |
63 |
+ def __new__ ( cls, gen_tuple, *args, **kwargs ): |
64 |
+ return super ( VersionTuple, cls ).__new__ ( cls, gen_tuple ) |
65 |
+ # --- end of __new__ (...) --- |
66 |
|
67 |
def get_comparator ( self, mode ): |
68 |
"""Returns a function "this ~ other" that returns |
69 |
@@ -228,4 +228,28 @@ class IntVersionTuple ( VersionTuple ): |
70 |
return NotImplemented |
71 |
# --- end of __gt__ (...) --- |
72 |
|
73 |
+ def __str__ ( self ): |
74 |
+ return '.'.join ( str(k) for k in self ) |
75 |
+ # --- end of __str__ ( self ) |
76 |
+ |
77 |
# --- end of IntVersionTuple --- |
78 |
+ |
79 |
+class SuffixedIntVersionTuple ( VersionTuple ): |
80 |
+ # inherit VersionTuple: does not implement comparision functions |
81 |
+ |
82 |
+ def __init__ ( self, gen_tuple, suffix ): |
83 |
+ super ( SuffixedIntVersionTuple, self ).__init__ ( gen_tuple ) |
84 |
+ self.suffix = suffix |
85 |
+ # --- end of __init__ (...) --- |
86 |
+ |
87 |
+ def get_suffix_str ( self ): |
88 |
+ ret = str ( self.suffix ) |
89 |
+ if not ret or ret[0] == '_': |
90 |
+ return ret |
91 |
+ else: |
92 |
+ return '_' + ret |
93 |
+ # --- end of get_suffix_str (...) --- |
94 |
+ |
95 |
+ def __str__ ( self ): |
96 |
+ return '.'.join ( str(k) for k in self ) + self.get_suffix_str() |
97 |
+ # --- end of __str__ (...) ---- |