1 |
Author: grobian |
2 |
Date: 2009-06-27 14:31:19 +0000 (Sat, 27 Jun 2009) |
3 |
New Revision: 13713 |
4 |
|
5 |
Added: |
6 |
main/branches/prefix/pym/_emerge/changelog.py |
7 |
Modified: |
8 |
main/branches/prefix/pym/_emerge/Scheduler.py |
9 |
main/branches/prefix/pym/_emerge/depgraph.py |
10 |
Log: |
11 |
Merged from trunk -r13675:13677 |
12 |
|
13 |
| 13676 | Bu #275217 - Part 1 - Resolve the circular dep between | |
14 |
| zmedico | Scheduler and depgraph; mark all functions as local that | |
15 |
| | aren't used outside of depgraph. Thanks to Sebastian | |
16 |
| | Mingramm (few) <s.mingramm@×××.de> for this patch. | |
17 |
|
18 |
| 13677 | Bug #275217 - Part 2 - Move changelog stuff stuff out of | |
19 |
| zmedico | depgraph. Thanks to Sebastian Mingramm (few) | |
20 |
| | <s.mingramm@×××.de> for this patch. | |
21 |
|
22 |
|
23 |
Modified: main/branches/prefix/pym/_emerge/Scheduler.py |
24 |
=================================================================== |
25 |
--- main/branches/prefix/pym/_emerge/Scheduler.py 2009-06-27 14:28:34 UTC (rev 13712) |
26 |
+++ main/branches/prefix/pym/_emerge/Scheduler.py 2009-06-27 14:31:19 UTC (rev 13713) |
27 |
@@ -29,6 +29,7 @@ |
28 |
from _emerge.create_depgraph_params import create_depgraph_params |
29 |
from _emerge.create_world_atom import create_world_atom |
30 |
from _emerge.DepPriority import DepPriority |
31 |
+from _emerge.depgraph import depgraph |
32 |
from _emerge.EbuildFetcher import EbuildFetcher |
33 |
from _emerge.EbuildPhase import EbuildPhase |
34 |
from _emerge.emergelog import emergelog, _emerge_log_dir |
35 |
@@ -44,12 +45,6 @@ |
36 |
from _emerge.SequentialTaskQueue import SequentialTaskQueue |
37 |
from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice |
38 |
|
39 |
-import portage.proxy.lazyimport |
40 |
-import portage.proxy as proxy |
41 |
-proxy.lazyimport.lazyimport(globals(), |
42 |
- '_emerge.depgraph:depgraph', |
43 |
-) |
44 |
- |
45 |
class Scheduler(PollScheduler): |
46 |
|
47 |
_opts_ignore_blockers = \ |
48 |
|
49 |
Copied: main/branches/prefix/pym/_emerge/changelog.py (from rev 13677, main/trunk/pym/_emerge/changelog.py) |
50 |
=================================================================== |
51 |
--- main/branches/prefix/pym/_emerge/changelog.py (rev 0) |
52 |
+++ main/branches/prefix/pym/_emerge/changelog.py 2009-06-27 14:31:19 UTC (rev 13713) |
53 |
@@ -0,0 +1,63 @@ |
54 |
+import os |
55 |
+import re |
56 |
+ |
57 |
+# for an explanation on this logic, see pym/_emerge/__init__.py |
58 |
+import os |
59 |
+import sys |
60 |
+if os.environ.__contains__("PORTAGE_PYTHONPATH"): |
61 |
+ sys.path.insert(0, os.environ["PORTAGE_PYTHONPATH"]) |
62 |
+else: |
63 |
+ sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym")) |
64 |
+import portage |
65 |
+ |
66 |
+def calc_changelog(ebuildpath,current,next): |
67 |
+ if ebuildpath == None or not os.path.exists(ebuildpath): |
68 |
+ return [] |
69 |
+ current = '-'.join(portage.catpkgsplit(current)[1:]) |
70 |
+ if current.endswith('-r0'): |
71 |
+ current = current[:-3] |
72 |
+ next = '-'.join(portage.catpkgsplit(next)[1:]) |
73 |
+ if next.endswith('-r0'): |
74 |
+ next = next[:-3] |
75 |
+ changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog') |
76 |
+ try: |
77 |
+ changelog = open(changelogpath).read() |
78 |
+ except SystemExit, e: |
79 |
+ raise # Needed else can't exit |
80 |
+ except: |
81 |
+ return [] |
82 |
+ divisions = _find_changelog_tags(changelog) |
83 |
+ #print 'XX from',current,'to',next |
84 |
+ #for div,text in divisions: print 'XX',div |
85 |
+ # skip entries for all revisions above the one we are about to emerge |
86 |
+ for i in range(len(divisions)): |
87 |
+ if divisions[i][0]==next: |
88 |
+ divisions = divisions[i:] |
89 |
+ break |
90 |
+ # find out how many entries we are going to display |
91 |
+ for i in range(len(divisions)): |
92 |
+ if divisions[i][0]==current: |
93 |
+ divisions = divisions[:i] |
94 |
+ break |
95 |
+ else: |
96 |
+ # couldnt find the current revision in the list. display nothing |
97 |
+ return [] |
98 |
+ return divisions |
99 |
+ |
100 |
+def _find_changelog_tags(changelog): |
101 |
+ divs = [] |
102 |
+ release = None |
103 |
+ while 1: |
104 |
+ match = re.search(r'^\*\ ?([-a-zA-Z0-9_.+]*)(?:\ .*)?\n',changelog,re.M) |
105 |
+ if match is None: |
106 |
+ if release is not None: |
107 |
+ divs.append((release,changelog)) |
108 |
+ return divs |
109 |
+ if release is not None: |
110 |
+ divs.append((release,changelog[:match.start()])) |
111 |
+ changelog = changelog[match.end():] |
112 |
+ release = match.group(1) |
113 |
+ if release.endswith('.ebuild'): |
114 |
+ release = release[:-7] |
115 |
+ if release.endswith('-r0'): |
116 |
+ release = release[:-3] |
117 |
|
118 |
Modified: main/branches/prefix/pym/_emerge/depgraph.py |
119 |
=================================================================== |
120 |
--- main/branches/prefix/pym/_emerge/depgraph.py 2009-06-27 14:28:34 UTC (rev 13712) |
121 |
+++ main/branches/prefix/pym/_emerge/depgraph.py 2009-06-27 14:31:19 UTC (rev 13713) |
122 |
@@ -26,6 +26,7 @@ |
123 |
from _emerge.Blocker import Blocker |
124 |
from _emerge.BlockerCache import BlockerCache |
125 |
from _emerge.BlockerDepPriority import BlockerDepPriority |
126 |
+from _emerge.changelog import calc_changelog |
127 |
from _emerge.countdown import countdown |
128 |
from _emerge.create_world_atom import create_world_atom |
129 |
from _emerge.Dependency import Dependency |
130 |
@@ -49,12 +50,6 @@ |
131 |
from _emerge.UnmergeDepPriority import UnmergeDepPriority |
132 |
from _emerge.visible import visible |
133 |
|
134 |
-import portage.proxy.lazyimport |
135 |
-import portage.proxy as proxy |
136 |
-proxy.lazyimport.lazyimport(globals(), |
137 |
- '_emerge.Scheduler:Scheduler', |
138 |
-) |
139 |
-#from _emerge.Scheduler import Scheduler |
140 |
class depgraph(object): |
141 |
|
142 |
pkg_tree_map = RootConfig.pkg_tree_map |
143 |
@@ -71,7 +66,8 @@ |
144 |
self.edebug = 1 |
145 |
self.spinner = spinner |
146 |
self._running_root = trees["/"]["root_config"] |
147 |
- self._opts_no_restart = Scheduler._opts_no_restart |
148 |
+ self._opts_no_restart = frozenset(["--buildpkgonly", |
149 |
+ "--fetchonly", "--fetch-all-uri", "--pretend"]) |
150 |
self.pkgsettings = {} |
151 |
# Maps slot atom to package for each Package added to the graph. |
152 |
self._slot_pkg_map = {} |
153 |
@@ -2237,7 +2233,7 @@ |
154 |
self._pkg_cache[pkg] = pkg |
155 |
return pkg |
156 |
|
157 |
- def validate_blockers(self): |
158 |
+ def _validate_blockers(self): |
159 |
"""Remove any blockers from the digraph that do not match any of the |
160 |
packages within the graph. If necessary, create hard deps to ensure |
161 |
correct merge order such that mutually blocking packages are never |
162 |
@@ -2627,7 +2623,7 @@ |
163 |
if not self._complete_graph(): |
164 |
raise self._unknown_internal_error() |
165 |
|
166 |
- if not self.validate_blockers(): |
167 |
+ if not self._validate_blockers(): |
168 |
raise self._unknown_internal_error() |
169 |
|
170 |
if self._slot_collision_info: |
171 |
@@ -3774,7 +3770,7 @@ |
172 |
if "--changelog" in self.myopts: |
173 |
inst_matches = vardb.match(pkg.slot_atom) |
174 |
if inst_matches: |
175 |
- changelogs.extend(self.calc_changelog( |
176 |
+ changelogs.extend(calc_changelog( |
177 |
portdb.findname(pkg_key), |
178 |
inst_matches[0], pkg_key)) |
179 |
else: |
180 |
@@ -4269,58 +4265,6 @@ |
181 |
show_mask_docs() |
182 |
print |
183 |
|
184 |
- def calc_changelog(self,ebuildpath,current,next): |
185 |
- if ebuildpath == None or not os.path.exists(ebuildpath): |
186 |
- return [] |
187 |
- current = '-'.join(portage.catpkgsplit(current)[1:]) |
188 |
- if current.endswith('-r0'): |
189 |
- current = current[:-3] |
190 |
- next = '-'.join(portage.catpkgsplit(next)[1:]) |
191 |
- if next.endswith('-r0'): |
192 |
- next = next[:-3] |
193 |
- changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog') |
194 |
- try: |
195 |
- changelog = open(changelogpath).read() |
196 |
- except SystemExit, e: |
197 |
- raise # Needed else can't exit |
198 |
- except: |
199 |
- return [] |
200 |
- divisions = self.find_changelog_tags(changelog) |
201 |
- #print 'XX from',current,'to',next |
202 |
- #for div,text in divisions: print 'XX',div |
203 |
- # skip entries for all revisions above the one we are about to emerge |
204 |
- for i in range(len(divisions)): |
205 |
- if divisions[i][0]==next: |
206 |
- divisions = divisions[i:] |
207 |
- break |
208 |
- # find out how many entries we are going to display |
209 |
- for i in range(len(divisions)): |
210 |
- if divisions[i][0]==current: |
211 |
- divisions = divisions[:i] |
212 |
- break |
213 |
- else: |
214 |
- # couldnt find the current revision in the list. display nothing |
215 |
- return [] |
216 |
- return divisions |
217 |
- |
218 |
- def find_changelog_tags(self,changelog): |
219 |
- divs = [] |
220 |
- release = None |
221 |
- while 1: |
222 |
- match = re.search(r'^\*\ ?([-a-zA-Z0-9_.+]*)(?:\ .*)?\n',changelog,re.M) |
223 |
- if match is None: |
224 |
- if release is not None: |
225 |
- divs.append((release,changelog)) |
226 |
- return divs |
227 |
- if release is not None: |
228 |
- divs.append((release,changelog[:match.start()])) |
229 |
- changelog = changelog[match.end():] |
230 |
- release = match.group(1) |
231 |
- if release.endswith('.ebuild'): |
232 |
- release = release[:-7] |
233 |
- if release.endswith('-r0'): |
234 |
- release = release[:-3] |
235 |
- |
236 |
def saveNomergeFavorites(self): |
237 |
"""Find atoms in favorites that are not in the mergelist and add them |
238 |
to the world file if necessary.""" |
239 |
@@ -4378,7 +4322,7 @@ |
240 |
if world_locked: |
241 |
world_set.unlock() |
242 |
|
243 |
- def loadResumeCommand(self, resume_data, skip_masked=True, |
244 |
+ def _loadResumeCommand(self, resume_data, skip_masked=True, |
245 |
skip_missing=True): |
246 |
""" |
247 |
Add a resume command to the graph and validate it in the process. This |
248 |
@@ -4804,7 +4748,7 @@ |
249 |
mydepgraph = depgraph(settings, trees, |
250 |
myopts, myparams, spinner) |
251 |
try: |
252 |
- success = mydepgraph.loadResumeCommand(mtimedb["resume"], |
253 |
+ success = mydepgraph._loadResumeCommand(mtimedb["resume"], |
254 |
skip_masked=skip_masked) |
255 |
except depgraph.UnsatisfiedResumeDep, e: |
256 |
if not skip_unsatisfied: |