From 54a84e969ff3a5316c5d7d66840d215fe6a6bf84 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Sat, 27 Jun 2009 14:31:19 +0000 Subject: [PATCH] Merged from trunk -r13675:13677 | 13676 | Bu #275217 - Part 1 - Resolve the circular dep between | | zmedico | Scheduler and depgraph; mark all functions as local that | | | aren't used outside of depgraph. Thanks to Sebastian | | | Mingramm (few) for this patch. | | 13677 | Bug #275217 - Part 2 - Move changelog stuff stuff out of | | zmedico | depgraph. Thanks to Sebastian Mingramm (few) | | | for this patch. | svn path=/main/branches/prefix/; revision=13713 --- pym/_emerge/Scheduler.py | 7 +--- pym/_emerge/changelog.py | 63 +++++++++++++++++++++++++++++++++++ pym/_emerge/depgraph.py | 72 +++++----------------------------------- 3 files changed, 72 insertions(+), 70 deletions(-) create mode 100644 pym/_emerge/changelog.py diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index c6f5402fa..800e81cdc 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -29,6 +29,7 @@ from _emerge.clear_caches import clear_caches from _emerge.create_depgraph_params import create_depgraph_params from _emerge.create_world_atom import create_world_atom from _emerge.DepPriority import DepPriority +from _emerge.depgraph import depgraph from _emerge.EbuildFetcher import EbuildFetcher from _emerge.EbuildPhase import EbuildPhase from _emerge.emergelog import emergelog, _emerge_log_dir @@ -44,12 +45,6 @@ from _emerge.SlotObject import SlotObject from _emerge.SequentialTaskQueue import SequentialTaskQueue from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice -import portage.proxy.lazyimport -import portage.proxy as proxy -proxy.lazyimport.lazyimport(globals(), - '_emerge.depgraph:depgraph', -) - class Scheduler(PollScheduler): _opts_ignore_blockers = \ diff --git a/pym/_emerge/changelog.py b/pym/_emerge/changelog.py new file mode 100644 index 000000000..b3b582b18 --- /dev/null +++ b/pym/_emerge/changelog.py @@ -0,0 +1,63 @@ +import os +import re + +# for an explanation on this logic, see pym/_emerge/__init__.py +import os +import sys +if os.environ.__contains__("PORTAGE_PYTHONPATH"): + sys.path.insert(0, os.environ["PORTAGE_PYTHONPATH"]) +else: + sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym")) +import portage + +def calc_changelog(ebuildpath,current,next): + if ebuildpath == None or not os.path.exists(ebuildpath): + return [] + current = '-'.join(portage.catpkgsplit(current)[1:]) + if current.endswith('-r0'): + current = current[:-3] + next = '-'.join(portage.catpkgsplit(next)[1:]) + if next.endswith('-r0'): + next = next[:-3] + changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog') + try: + changelog = open(changelogpath).read() + except SystemExit, e: + raise # Needed else can't exit + except: + return [] + divisions = _find_changelog_tags(changelog) + #print 'XX from',current,'to',next + #for div,text in divisions: print 'XX',div + # skip entries for all revisions above the one we are about to emerge + for i in range(len(divisions)): + if divisions[i][0]==next: + divisions = divisions[i:] + break + # find out how many entries we are going to display + for i in range(len(divisions)): + if divisions[i][0]==current: + divisions = divisions[:i] + break + else: + # couldnt find the current revision in the list. display nothing + return [] + return divisions + +def _find_changelog_tags(changelog): + divs = [] + release = None + while 1: + match = re.search(r'^\*\ ?([-a-zA-Z0-9_.+]*)(?:\ .*)?\n',changelog,re.M) + if match is None: + if release is not None: + divs.append((release,changelog)) + return divs + if release is not None: + divs.append((release,changelog[:match.start()])) + changelog = changelog[match.end():] + release = match.group(1) + if release.endswith('.ebuild'): + release = release[:-7] + if release.endswith('-r0'): + release = release[:-3] diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 6ad38a88c..14e0552eb 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -26,6 +26,7 @@ from _emerge.AtomArg import AtomArg from _emerge.Blocker import Blocker from _emerge.BlockerCache import BlockerCache from _emerge.BlockerDepPriority import BlockerDepPriority +from _emerge.changelog import calc_changelog from _emerge.countdown import countdown from _emerge.create_world_atom import create_world_atom from _emerge.Dependency import Dependency @@ -49,12 +50,6 @@ from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice from _emerge.UnmergeDepPriority import UnmergeDepPriority from _emerge.visible import visible -import portage.proxy.lazyimport -import portage.proxy as proxy -proxy.lazyimport.lazyimport(globals(), - '_emerge.Scheduler:Scheduler', -) -#from _emerge.Scheduler import Scheduler class depgraph(object): pkg_tree_map = RootConfig.pkg_tree_map @@ -71,7 +66,8 @@ class depgraph(object): self.edebug = 1 self.spinner = spinner self._running_root = trees["/"]["root_config"] - self._opts_no_restart = Scheduler._opts_no_restart + self._opts_no_restart = frozenset(["--buildpkgonly", + "--fetchonly", "--fetch-all-uri", "--pretend"]) self.pkgsettings = {} # Maps slot atom to package for each Package added to the graph. self._slot_pkg_map = {} @@ -2237,7 +2233,7 @@ class depgraph(object): self._pkg_cache[pkg] = pkg return pkg - def validate_blockers(self): + def _validate_blockers(self): """Remove any blockers from the digraph that do not match any of the packages within the graph. If necessary, create hard deps to ensure correct merge order such that mutually blocking packages are never @@ -2627,7 +2623,7 @@ class depgraph(object): if not self._complete_graph(): raise self._unknown_internal_error() - if not self.validate_blockers(): + if not self._validate_blockers(): raise self._unknown_internal_error() if self._slot_collision_info: @@ -3774,7 +3770,7 @@ class depgraph(object): if "--changelog" in self.myopts: inst_matches = vardb.match(pkg.slot_atom) if inst_matches: - changelogs.extend(self.calc_changelog( + changelogs.extend(calc_changelog( portdb.findname(pkg_key), inst_matches[0], pkg_key)) else: @@ -4269,58 +4265,6 @@ class depgraph(object): show_mask_docs() print - def calc_changelog(self,ebuildpath,current,next): - if ebuildpath == None or not os.path.exists(ebuildpath): - return [] - current = '-'.join(portage.catpkgsplit(current)[1:]) - if current.endswith('-r0'): - current = current[:-3] - next = '-'.join(portage.catpkgsplit(next)[1:]) - if next.endswith('-r0'): - next = next[:-3] - changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog') - try: - changelog = open(changelogpath).read() - except SystemExit, e: - raise # Needed else can't exit - except: - return [] - divisions = self.find_changelog_tags(changelog) - #print 'XX from',current,'to',next - #for div,text in divisions: print 'XX',div - # skip entries for all revisions above the one we are about to emerge - for i in range(len(divisions)): - if divisions[i][0]==next: - divisions = divisions[i:] - break - # find out how many entries we are going to display - for i in range(len(divisions)): - if divisions[i][0]==current: - divisions = divisions[:i] - break - else: - # couldnt find the current revision in the list. display nothing - return [] - return divisions - - def find_changelog_tags(self,changelog): - divs = [] - release = None - while 1: - match = re.search(r'^\*\ ?([-a-zA-Z0-9_.+]*)(?:\ .*)?\n',changelog,re.M) - if match is None: - if release is not None: - divs.append((release,changelog)) - return divs - if release is not None: - divs.append((release,changelog[:match.start()])) - changelog = changelog[match.end():] - release = match.group(1) - if release.endswith('.ebuild'): - release = release[:-7] - if release.endswith('-r0'): - release = release[:-3] - def saveNomergeFavorites(self): """Find atoms in favorites that are not in the mergelist and add them to the world file if necessary.""" @@ -4378,7 +4322,7 @@ class depgraph(object): if world_locked: world_set.unlock() - def loadResumeCommand(self, resume_data, skip_masked=True, + def _loadResumeCommand(self, resume_data, skip_masked=True, skip_missing=True): """ Add a resume command to the graph and validate it in the process. This @@ -4804,7 +4748,7 @@ def resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner): mydepgraph = depgraph(settings, trees, myopts, myparams, spinner) try: - success = mydepgraph.loadResumeCommand(mtimedb["resume"], + success = mydepgraph._loadResumeCommand(mtimedb["resume"], skip_masked=skip_masked) except depgraph.UnsatisfiedResumeDep, e: if not skip_unsatisfied: -- 2.26.2