Merged from trunk -r13675:13677
authorFabian Groffen <grobian@gentoo.org>
Sat, 27 Jun 2009 14:31:19 +0000 (14:31 -0000)
committerFabian Groffen <grobian@gentoo.org>
Sat, 27 Jun 2009 14:31:19 +0000 (14:31 -0000)
   | 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) <s.mingramm@gmx.de> for this patch.           |

   | 13677   | Bug #275217 - Part 2 - Move changelog stuff stuff out of     |
   | zmedico | depgraph. Thanks to Sebastian Mingramm (few)                 |
   |         | <s.mingramm@gmx.de> for this patch.                          |

svn path=/main/branches/prefix/; revision=13713

pym/_emerge/Scheduler.py
pym/_emerge/changelog.py [new file with mode: 0644]
pym/_emerge/depgraph.py

index c6f5402fa16e3880bf1510ab8766b322350d03bf..800e81cdcf6c59074c77fcbd9bc5c29d4c835b49 100644 (file)
@@ -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 (file)
index 0000000..b3b582b
--- /dev/null
@@ -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]
index 6ad38a88cfec6f35790e0ddda08219cf6298b1dc..14e0552eb1835855d142d95f541ea45d98d3dfe2 100644 (file)
@@ -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: