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/overlay/pkgdir/distroot/, roverlay/overlay/pkgdir/
Date: Fri, 30 Aug 2013 14:49:40
Message-Id: 1377866501.eff4b96c03175e65a368756d5bfe6d4ed0bb4627.dywi@gentoo
1 commit: eff4b96c03175e65a368756d5bfe6d4ed0bb4627
2 Author: André Erdmann <dywi <AT> mailerd <DOT> de>
3 AuthorDate: Fri Aug 30 12:41:12 2013 +0000
4 Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
5 CommitDate: Fri Aug 30 12:41:41 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=eff4b96c
7
8 distroot: handle_file_collision() [stub]
9
10 ---
11 roverlay/overlay/pkgdir/distroot/distroot.py | 70 ++++++++++++++++++++++------
12 roverlay/overlay/pkgdir/packagedir_base.py | 10 +++-
13 2 files changed, 65 insertions(+), 15 deletions(-)
14
15 diff --git a/roverlay/overlay/pkgdir/distroot/distroot.py b/roverlay/overlay/pkgdir/distroot/distroot.py
16 index e38fccd..6deb06f 100644
17 --- a/roverlay/overlay/pkgdir/distroot/distroot.py
18 +++ b/roverlay/overlay/pkgdir/distroot/distroot.py
19 @@ -54,7 +54,7 @@ class DistrootBase ( object ):
20 # or use hasattr ( self, '_default_distdir' )
21 self._flat = flat
22
23 - self.distmap = distmap
24 + self._set_distmap ( distmap )
25
26 if flat:
27 self._default_distdir = (
28 @@ -72,6 +72,10 @@ class DistrootBase ( object ):
29 atexit.register ( self._atexit_run )
30 # --- end of __init__ (...) ---
31
32 + def _set_distmap ( self, distmap ):
33 + self.distmap = distmap
34 + # --- end of _set_distmap (...) ---
35 +
36 def _atexit_run ( self ):
37 """Performs at-exit actions unless already done."""
38 if self.finalize_at_exit:
39 @@ -100,6 +104,7 @@ class DistrootBase ( object ):
40 self.distmap.backup_and_write ( force=False )
41 else:
42 self.distmap.write ( force=False )
43 + self.logger.debug ( "finalize() done" )
44 # --- end of finalize (...) ---
45
46 @roverlay.util.objects.abstractmethod
47 @@ -308,6 +313,20 @@ class DistrootBase ( object ):
48 return str ( self._root )
49 # --- end of get_root (...) ---
50
51 + def get_fspath ( self, relpath ):
52 + """Returns the filesystem path prefixed with the distroot's directory
53 + path.
54 +
55 + arguments:
56 + * relpath --
57 + """
58 + return str ( self._root ) + os.sep + relpath
59 + # --- end of get_fspath (...) ---
60 +
61 + def get_relpath ( self, abspath ):
62 + return os.path.relpath ( dest, str ( self._root ) )
63 + # --- end of get_relpath (...) ---
64 +
65 def distmap_register ( self, p_info ):
66 """Adds a new entry for the given PackageInfo instance to the distmap.
67
68 @@ -354,7 +373,9 @@ class DistrootBase ( object ):
69 self.logger.info (
70 "file not in distmap, creating dummy entry: {!r}".format ( relpath )
71 )
72 - self.distmap.add_dummy_entry ( relpath, hashdict=hashdict )
73 + self.distmap.add_dummy_entry (
74 + relpath, hashdict=hashdict, log_level=False
75 + )
76 distfiles.add ( relpath )
77 elif status == 2:
78 # file in distmap, but not valid - remove it from distmap
79 @@ -391,6 +412,13 @@ class DistrootBase ( object ):
80 pass
81 # --- end of set_distfile_owner (...) ---
82
83 + @roverlay.util.objects.abstractmethod (
84 + params=[ 'package_dir', 'package_info' ]
85 + )
86 + def handle_file_collision ( self, package_dir, package_info ):
87 + pass
88 + # --- end of handle_file_collision (...) ---
89 +
90 # --- end of DistrootBase ---
91
92
93 @@ -404,10 +432,19 @@ class TemporaryDistroot ( DistrootBase ):
94 flat = False,
95 logger = logger,
96 )
97 + self._file_index = set()
98 # --- end of __init__ (...) ---
99
100 + def handle_file_collision ( self, package_dir, package_info ):
101 + distfile_rel = package_info.get ( 'package_src_destpath' )
102 + return distfile_rel not in self._file_index
103 + # --- end of handle_file_collision (...) ---
104 +
105 def _add ( self, src, dest ):
106 - return self._add_symlink ( src, dest, filter_exceptions=False )
107 + ret = self._add_symlink ( src, dest, filter_exceptions=False )
108 + if ret:
109 + self._file_index.add ( self.get_relpath ( dest ) )
110 + return ret
111 # --- end of _add (...) ---
112
113 def _cleanup ( self ):
114 @@ -416,7 +453,8 @@ class TemporaryDistroot ( DistrootBase ):
115 shutil.rmtree ( self._root )
116 # --- end of _cleanup (...) ---
117
118 - def set_distfile_owner ( self, *args, **kwargs ):
119 + def set_distfile_owner ( self, backref, distfile ):
120 + self._file_index.add ( distfile )
121 return True
122 # --- end of set_distfile_owner (...) ---
123
124 @@ -481,24 +519,30 @@ class PersistentDistroot ( DistrootBase ):
125 self.USE_COPY : self._add_file,
126 }
127
128 - if self.distmap is not None:
129 + if verify and self.distmap is not None:
130 + # expensive task, print a message
131 + print (
132 + "Checking distroot file integrity, this may take some time ... "
133 + )
134 + self.check_integrity()
135 + # --- end of __init__ (...) ---
136 +
137 + def _set_distmap ( self, distmap ):
138 + self.distmap = distmap
139 + if distmap is not None:
140 self.set_distfile_owner = self._set_distfile_owner_distmap
141 - if verify:
142 - # expensive task, print a message
143 - print (
144 - "Checking distroot file integrity, this may take some time ... "
145 - )
146 - self.check_integrity()
147 else:
148 self.set_distfile_owner = self._set_distfile_owner_nop
149 - # --- end of __init__ (...) ---
150 + # --- end of _set_distmap (...) ---
151
152 def _set_distfile_owner_nop ( self, backref, distfile ):
153 return True
154 # --- end of _set_distfile_owner_nop (...) ---
155
156 def _set_distfile_owner_distmap ( self, backref, distfile ):
157 - print ( "_set_distfile_owner_distmap(): method stub" )
158 + self.distmap.add_distfile_owner (
159 + backref, distfile, self.get_fspath ( distfile )
160 + )
161 # --- end of _set_distfile_owner_distmap (...) ---
162
163 def _add ( self, src, dest ):
164
165 diff --git a/roverlay/overlay/pkgdir/packagedir_base.py b/roverlay/overlay/pkgdir/packagedir_base.py
166 index 5196815..67488b4 100644
167 --- a/roverlay/overlay/pkgdir/packagedir_base.py
168 +++ b/roverlay/overlay/pkgdir/packagedir_base.py
169 @@ -225,7 +225,12 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ):
170 elif allow_postpone:
171 added = None
172
173 - elif self.DISTMAP.check_revbump_necessary ( package_info ):
174 + elif not self.DISTMAP.handle_file_collision (
175 + self, package_info
176 + ):
177 + added = False
178 +
179 + elif self.DISTROOT.check_revbump_necessary ( package_info ):
180 # resolve by recursion
181 added = self.add (
182 package_info.revbump(), add_if_physical=False, _lock=False
183 @@ -245,6 +250,7 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ):
184 PN=self.name, PVR=shortver
185 )
186 )
187 +
188 else:
189 # package has been added to this packagedir before,
190 # this most likely happens if it is available from
191 @@ -254,7 +260,7 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ):
192 PN=self.name, PVR=shortver
193 )
194 )
195 - else:
196 + elif self.DISTROOT.handle_file_collision ( self, package_info ):
197 self._packages [shortver] = package_info
198 added = True