[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/emerge/bin
From:       Patrick Spendrin <ps_ml () gmx ! de>
Date:       2011-06-24 22:26:05
Message-ID: 20110624222605.7C915AC7E8 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1238254 by sengels:

add the possibility to add subpackages
example:
kdeedu \
- parley
- marble
- kalgegra
- etc.

only downside so far: one cannot package the complete package anymore

 M  +53 -9     portage.py  


--- trunk/kdesupport/emerge/bin/portage.py #1238253:1238254
@@ -150,15 +150,26 @@
 def rootDirForPackage( category, package ):
     # this function should return the portage directory where it finds the
     # first occurance of a package or the default value
+    package, subpackage = getSubPackage( category, package )
+    if category and package:
+        if subpackage:
     for i in rootDirectories():
-        if category and package and os.path.exists( os.path.join( i, category, \
package ) ): +                if os.path.exists( os.path.join( i, category, package, \
subpackage ) ):  return i
+        else:
+            for i in rootDirectories():
+                if os.path.exists( os.path.join( i, category, package ) ):
+                    return i
     # as a fall back return the default even if it might be wrong
     return os.path.join( os.getenv( "KDEROOT" ), "emerge", "portage" )
 
 def getDirname( category, package ):
     """ return absolute pathname for a given category and package """
-    if category and package:
+    _package, _subpackage = getSubPackage( category, package )
+    if category and _package:
+        if _subpackage:
+            return os.path.join( rootDirForPackage( category, package ), category, \
_package, _subpackage ) +        else:
         return os.path.join( rootDirForPackage( category, package ), category, \
package )  else:
         return ""
@@ -178,10 +189,14 @@
     utils.debug( "category: %s, package: %s, version: %s" % ( category, package, \
                version ), 1 )
     return [ category, package, version ] # TODO: why a list and not a tuple?
 
+def VCSDirs():
+    return [ '.svn', 'CVS', '.hg', '.git' ]
+
 class Portage:
     def __init__( self ):
         """ """
         self.categories = {}
+        self.subpackages = {}
         self.portages = {}
 
     def addPortageDir( self, directory ):
@@ -192,7 +207,7 @@
         categoryList = os.listdir( directory )
 
         # remove vcs directories
-        for vcsdir in [ '.svn', 'CVS', '.hg', '.git' ]:
+        for vcsdir in VCSDirs():
             if vcsdir in categoryList:
                 categoryList.remove( vcsdir )
 
@@ -206,7 +221,7 @@
             packageList = os.listdir( os.path.join( directory, category ) )
 
             # remove vcs directories
-            for vcsdir in [ '.svn', 'CVS', '.hg', '.git' ]:
+            for vcsdir in VCSDirs():
                 if vcsdir in packageList:
                     packageList.remove( vcsdir )
 
@@ -218,7 +233,17 @@
                 if not package in self.categories[ category ]:
                     self.categories[ category ].append( package )
 
+                subPackageList = os.listdir( os.path.join( directory, category, \
package ) ) +                for subPackage in subPackageList:
+                    if not os.path.isdir( os.path.join( directory, category, \
package, subPackage ) ) or subPackage in VCSDirs(): +                        continue
+                    if not subPackage in self.subpackages.keys():
+                        self.subpackages[ subPackage ] = []
+                    if not subPackage in self.categories[ category ]:
+                        self.categories[ category ].append( subPackage )
+                    self.subpackages[ subPackage ].append( category + "/" + package \
)  
+
     def getCategory( self, package ):
         """ returns the category of this package """
         utils.debug( "getCategory: %s" % package, 2 )
@@ -418,6 +443,15 @@
 for _dir in rootDirectories():
     PortageInstance.addPortageDir( _dir )
 
+def getSubPackage( category, package ):
+    """ returns package and subpackage names """
+    """ in case no subpackage could be found, None is returned """
+    if package in PortageInstance.subpackages:
+        for entry in PortageInstance.subpackages[ package ]:
+            cat, pac = entry.split("/")
+            if cat == category: return pac, package
+    return package, None
+
 def findPossibleTargets( category, package, version, buildtype=''): # pylint: \
                disable=W0613
     """ this function tries to guess which target got used by looking at the \
                different image directories """
     target = PortageInstance.getDefaultTarget( category, package, version )
@@ -454,6 +488,11 @@
     if not os.path.isfile( getFilename( category, package, version ) ):
         utils.die( "package name %s/%s-%s unknown" % ( category, package, version ) \
)  
+    package, subpackage = getSubPackage( category, package )
+    print "getDependencies:", package, subpackage
+    if subpackage:
+        utils.debug( "solving package %s/%s/%s-%s %s" % ( category, subpackage, \
package, version, getFilename( category, package, version ) ), 2 ) +    else:
     utils.debug( "solving package %s/%s-%s %s" % ( category, package, version, \
getFilename( category, package, version ) ), 2 )  mod = __import__( getFilename( \
category, package, version ) )  
@@ -482,12 +521,14 @@
             category = sp[ 0 ]
             package = sp[ 1 ]
             version = PortageInstance.getNewestVersion( category, package )
+            utils.debug( "found corresponding source package for %s" % package, 1 )
 
     if ( category == "" ):
         category = PortageInstance.getCategory( package )
-
+        utils.debug( "found package in category %s" % category, 2 )
     if ( version == "" ):
         version = PortageInstance.getNewestVersion( category, package )
+        utils.debug( "found package with newest version %s" % version, 2 )
 
     pac = DependencyPackage( category, package, version )
     depList = pac.getDependencies( depList, dep_type=dep_type )
@@ -518,7 +559,11 @@
     # To avoid possible endless recursion this may be also make sense for all \
packages  if category == internalCategory and identFileName in modDict.keys():
         return dict(), dict()
-    utils.debug( "solving package %s/%s-%s %s" % ( category, package, version, \
identFileName ), 2 ) +    package, subpackage = getSubPackage( category, package )
+    if subpackage:
+        utils.debug( "solving package %s/%s/%s-%s %s" % ( category, subpackage, \
package, version, getFilename( category, package, version ) ), 2 ) +    else:
+        utils.debug( "solving package %s/%s-%s %s" % ( category, package, version, \
getFilename( category, package, version ) ), 2 )  if not identFileName in \
modDict.keys():  mod = __import__( identFileName )
         modDict[ identFileName ] = mod
@@ -754,7 +799,7 @@
     return found
 
 def getPackagesCategories(packageName, defaultCategory = None):
-
+    utils.debug( "getPackagesCategories for package name %s" % packageName, 1 )
     if defaultCategory is None:
         if "EMERGE_DEFAULTCATEGORY" in os.environ:
             defaultCategory = os.environ["EMERGE_DEFAULTCATEGORY"]
@@ -762,14 +807,13 @@
             defaultCategory = "kde"
 
     packageList, categoryList = [], []
-
     if len( packageName.split( "/" ) ) == 1:
         if PortageInstance.isCategory( packageName ):
             utils.debug( "isCategory=True", 2 )
             packageList = PortageInstance.getAllPackages( packageName )
             categoryList = [ packageName ] * len(packageList)
         else:
-
+            utils.debug( "isCategory=False", 2 )
             if PortageInstance.isCategory( defaultCategory ) and \
PortageInstance.isPackage( defaultCategory, packageName ):  # prefer the default \
category  packageList = [ packageName ]


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic