def __getPackages( self ):
        """return package instances for all dependencies"""
        packages = []
        directDependencies = portage.getDependencies( self.category, self.package )

        depList = []
        for ( category, package, _, _ ) in directDependencies:
            # unlike in CollectionPackagerBase, we want all dependencies here
            portage.solveDependencies( category, package, depList = depList )
        depList.reverse()
        for x in depList:
            # Ignore dev-utils that are wrongly set as hard dependencies
            if x.category == "dev-util" or x.package in ['wget', 'patch', 'sed'] or portage.PortageInstance.isVirtualPackage( x.category, x.package ):
                continue
            _package = portage.getPackageInstance( x.category, x.package )

            packages.append( _package )
        return packages
    def __getPackages(self):
        """return package instances for all dependencies"""
        packages = []
        directDependencies = portage.getDependencies(self.category,
                                                     self.package)

        depList = []
        for (category, package, _, _) in directDependencies:
            # unlike in CollectionPackagerBase, we want all dependencies here
            portage.solveDependencies(category, package, depList=depList)
        depList.reverse()
        for x in depList:
            # Ignore dev-utils that are wrongly set as hard dependencies
            if x.category == "dev-util" or x.package in [
                    'wget', 'patch', 'sed'
            ] or portage.PortageInstance.isVirtualPackage(
                    x.category, x.package):
                continue
            _package = portage.getPackageInstance(x.category, x.package)

            packages.append(_package)
        return packages
Example #3
0
if len( sys.argv ) <= 1:
    print("please add the path to the packagelist file as only argument")
    time.sleep( 6 )
    exit( 0 )

listfilename = sys.argv[ 1 ]
packagefile = open( listfilename )

addInfo = dict()
_depList = []
_runtimeDepList = []
for line in packagefile:
    if not line.startswith( '#' ) and len( line.strip().split( ',' ) )  == 4:
        cat, pac, target, patchlvl = line.strip().split( ',' )
        addInfo[ cat + "/" + pac ] = ( target, patchlvl )
        portage.solveDependencies( cat, pac, _depList, dep_type = 'both' )
        portage.solveDependencies( cat, pac, _runtimeDepList, dep_type = 'runtime' )
packagefile.close()

_depList.reverse()
_runtimeDepList.reverse()

runtimeDepList = [x.ident() for x in _runtimeDepList]
depList = [x.ident() for x in _depList]

for [cat, pac, ver, tar] in depList:
    target, patchlvl = '', ''
    if cat + "/" + pac in list(addInfo.keys()):
        target, patchlvl = addInfo[ cat + "/" + pac ]
    p = package( cat, pac, target, patchlvl )
    if not [cat, pac, ver, tar] in runtimeDepList:
Example #4
0
        if portage.PortageInstance.isCategory( packageName ) and ( mainCategory != packageName ):
            continue
        if portage.isInstalled( mainCategory, mainPackage, mainVersion, buildType ) \
                and portage.isPackageUpdateable( mainCategory, mainPackage, mainVersion ):
            categoryList.append( mainCategory )
            packageList.append( mainPackage )
    utils.debug( "Will update packages: " + str (packageList), 1 )
elif packageName:
    packageList, categoryList = portage.getPackagesCategories(packageName)

for entry in packageList:
    utils.debug( "%s" % entry, 1 )
utils.debug_line( 1 )

for mainCategory, entry in zip (categoryList, packageList):
    _deplist = portage.solveDependencies( mainCategory, entry, "", _deplist )

deplist = [p.ident() for p in _deplist]

for item in range( len( deplist ) ):
    if deplist[ item ][ 0 ] in categoryList and deplist[ item ][ 1 ] in packageList:
        deplist[ item ].append( ignoreInstalled )
    else:
        deplist[ item ].append( False )

    utils.debug( "dependency: %s" % deplist[ item ], 1 )

#for item in deplist:
#    cat = item[ 0 ]
#    pac = item[ 1 ]
#    ver = item[ 2 ]
Example #5
0
def handleSinglePackage(packageName, action, args):
    deplist = []
    packageList = []
    originalPackageList = []
    categoryList = []
    targetDict = dict()

    if action == "update-all":
        installedPackages = portage.PortageInstance.getInstallables()
        if portage.PortageInstance.isCategory(packageName):
            EmergeDebug.debug(
                "Updating installed packages from category " + packageName, 1)
        else:
            EmergeDebug.debug("Updating all installed packages", 1)
        packageList = []
        for mainCategory, mainPackage in installedPackages:
            if portage.PortageInstance.isCategory(packageName) and (
                    mainCategory != packageName):
                continue
            if InstallDB.installdb.isInstalled( mainCategory, mainPackage, args.buildType ) \
                    and portage.isPackageUpdateable( mainCategory, mainPackage ):
                categoryList.append(mainCategory)
                packageList.append(mainPackage)
        EmergeDebug.debug("Will update packages: " + str(packageList), 1)
    elif args.list_file:
        listFileObject = open(args.list_file, 'r')
        for line in listFileObject:
            if line.strip().startswith('#'): continue
            try:
                cat, pac, tar, _ = line.split(',')
            except:
                continue
            categoryList.append(cat)
            packageList.append(pac)
            originalPackageList.append(pac)
            targetDict[cat + "/" + pac] = tar
    elif packageName:
        packageList, categoryList = portage.getPackagesCategories(packageName)

    for entry in packageList:
        EmergeDebug.debug("Checking dependencies for: %s" % entry, 1)

    for mainCategory, entry in zip(categoryList, packageList):
        deplist = portage.solveDependencies(mainCategory,
                                            entry,
                                            deplist,
                                            args.dependencyType,
                                            maxDepth=args.dependencydepth)
    # no package found
    if len(deplist) == 0:
        category = ""
        if not packageName.find("/") == -1:
            (category, package) = packageName.split("/")
        portageSearch.printSearch(category, packageName)
        return False

    for item in deplist:
        item.enabled = args.ignoreAllInstalled

        if args.ignoreInstalled and item.category in categoryList and item.package in packageList or packageIsOutdated(
                item.category, item.package):
            item.enabled = True

        if item.category + "/" + item.package in targetDict:
            item.target = targetDict[item.category + "/" + item.package]

        if args.target in list(
                portage.PortageInstance.getAllTargets(item.category,
                                                      item.package).keys()):
            # if no target or a wrong one is defined, simply set the default target here
            item.target = args.target

        EmergeDebug.debug("dependency: %s" % item, 1)
    if not deplist:
        EmergeDebug.debug("<none>", 1)

    EmergeDebug.debug_line(1)

    #for item in deplist:
    #    cat = item[ 0 ]
    #    pac = item[ 1 ]
    #    ver = item[ 2 ]

    #    if portage.isInstalled( cat, pac, ver, buildType) and updateAll and not portage.isPackageUpdateable( cat, pac, ver ):
    #        print "remove:", cat, pac, ver
    #        deplist.remove( item )

    if action == "install-deps":
        # the first dependency is the package itself - ignore it
        # TODO: why are we our own dependency?
        del deplist[0]
    elif action == "update-direct-deps":
        for item in deplist:
            item.enabled = True

    deplist.reverse()

    # package[0] -> category
    # package[1] -> package
    # package[2] -> version

    info = deplist[-1]
    if not portage.PortageInstance.isVirtualPackage( info.category, info.package ) and \
        not action in [ "all", "install-deps"] and\
        not args.list_file or\
        action in ["print-targets"]:#not all commands should be executed on the deps if we are a virtual packages
        # if a buildAction is given, then do not try to build dependencies
        # and do the action although the package might already be installed.
        # This is still a bit problematic since packageName might not be a valid
        # package
        # for list files, we also want to handle fetching & packaging per package
        if not handlePackage(info.category, info.package, action,
                             args.doContinue, args.update_fast):
            return False

    else:
        if args.dumpDepsFile:
            dumpDepsFileObject = open(args.dumpDepsFile, 'w+')
            dumpDepsFileObject.write("# dependency dump of package %s\n" %
                                     (packageName))
        for info in deplist:
            isVCSTarget = False

            if args.dumpDepsFile:
                dumpDepsFileObject.write(
                    ",".join([info.category, info.package, info.target, ""]) +
                    "\n")

            isLastPackage = info == deplist[-1]
            if args.outDateVCS or (args.outDatePackage and isLastPackage):
                isVCSTarget = portage.PortageInstance.getUpdatableVCSTargets(
                    info.category, info.package) != []
            isInstalled = InstallDB.installdb.isInstalled(
                info.category, info.package)
            if args.list_file and action != "all":
                info.enabled = info.package in originalPackageList
            if (isInstalled and not info.enabled) and not (
                    isInstalled and
                (args.outDateVCS or
                 (args.outDatePackage and isLastPackage)) and isVCSTarget):
                if EmergeDebug.verbose() > 1 and info.package == packageName:
                    EmergeDebug.warning("already installed %s/%s" %
                                        (info.category, info.package))
                elif EmergeDebug.verbose(
                ) > 2 and not info.package == packageName:
                    EmergeDebug.warning("already installed %s/%s" %
                                        (info.category, info.package))
            else:
                # in case we only want to see which packages are still to be build, simply return the package name
                if args.probe:
                    EmergeDebug.warning("pretending %s" % info)
                else:
                    if action in ["install-deps", "update-direct-deps"]:
                        action = "all"

                    if not handlePackage(info.category, info.package, action,
                                         args.doContinue, args.update_fast):
                        EmergeDebug.error("fatal error: package %s/%s %s failed" % \
                                          ( info.category, info.package, action ))
                        return False

    EmergeDebug.new_line()
    return True
Example #6
0
def handleSinglePackage( packageName, action, args ):
    deplist = [ ]
    packageList = [ ]
    originalPackageList = [ ]
    categoryList = [ ]
    targetDict = dict( )

    if action == "update-all":
        installedPackages = portage.PortageInstance.getInstallables( )
        if portage.PortageInstance.isCategory( packageName ):
            EmergeDebug.debug("Updating installed packages from category " + packageName, 1)
        else:
            EmergeDebug.debug("Updating all installed packages", 1)
        packageList = [ ]
        for mainCategory, mainPackage in installedPackages:
            if portage.PortageInstance.isCategory( packageName ) and ( mainCategory != packageName ):
                continue
            if InstallDB.installdb.isInstalled( mainCategory, mainPackage, args.buildType ) \
                    and portage.isPackageUpdateable( mainCategory, mainPackage ):
                categoryList.append( mainCategory )
                packageList.append( mainPackage )
        EmergeDebug.debug("Will update packages: " + str(packageList), 1)
    elif args.list_file:
        listFileObject = open( args.list_file, 'r' )
        for line in listFileObject:
            if line.strip( ).startswith( '#' ): continue
            try:
                cat, pac, tar, _ = line.split( ',' )
            except:
                continue
            categoryList.append( cat )
            packageList.append( pac )
            originalPackageList.append( pac )
            targetDict[ cat + "/" + pac ] = tar
    elif packageName:
        packageList, categoryList = portage.getPackagesCategories( packageName )

    for entry in packageList:
        EmergeDebug.debug("Checking dependencies for: %s" % entry, 1)

    for mainCategory, entry in zip( categoryList, packageList ):
        deplist = portage.solveDependencies( mainCategory, entry, deplist, args.dependencyType,
                                              maxDepth = args.dependencydepth )
    # no package found
    if len( deplist ) == 0:
        category = ""
        if not packageName.find( "/" ) == -1:
            (category, package) = packageName.split( "/" )
        portageSearch.printSearch( category, packageName )
        return False

    for item in deplist:
        item.enabled = args.ignoreAllInstalled

        if args.ignoreInstalled and item.category in categoryList and item.package in packageList or packageIsOutdated(
                item.category, item.package ):
            item.enabled = True

        if item.category + "/" + item.package in targetDict:
            item.target = targetDict[ item.category + "/" + item.package ]

        if args.target in list(
                portage.PortageInstance.getAllTargets( item.category, item.package ).keys( ) ):
            # if no target or a wrong one is defined, simply set the default target here
            item.target = args.target

        EmergeDebug.debug("dependency: %s" % item, 1)
    if not deplist:
        EmergeDebug.debug("<none>", 1)

    EmergeDebug.debug_line(1)

    #for item in deplist:
    #    cat = item[ 0 ]
    #    pac = item[ 1 ]
    #    ver = item[ 2 ]

    #    if portage.isInstalled( cat, pac, ver, buildType) and updateAll and not portage.isPackageUpdateable( cat, pac, ver ):
    #        print "remove:", cat, pac, ver
    #        deplist.remove( item )

    if action == "install-deps":
        # the first dependency is the package itself - ignore it
        # TODO: why are we our own dependency?
        del deplist[ 0 ]
    elif action == "update-direct-deps":
        for item in deplist:
            item.enabled = True

    deplist.reverse( )

    # package[0] -> category
    # package[1] -> package
    # package[2] -> version

    info = deplist[ -1 ]
    if not portage.PortageInstance.isVirtualPackage( info.category, info.package ) and \
        not action in [ "all", "install-deps" ,"generate-jenkins-job"] and\
        not args.list_file or\
        action in ["print-targets"]:#not all commands should be executed on the deps if we are a virtual packages
        # if a buildAction is given, then do not try to build dependencies
        # and do the action although the package might already be installed.
        # This is still a bit problematic since packageName might not be a valid
        # package
        # for list files, we also want to handle fetching & packaging per package

        if not handlePackage( info.category, info.package, action, args.doContinue, args.update_fast ):
            utils.notify( "Emerge %s failed" % action, "%s of %s/%s failed" % (
                action, info.category, info.package), action )
            return False
        utils.notify( "Emerge %s finished" % action,
                      "%s of %s/%s finished" % ( action, info.category, info.package),
                      action )

    else:
        if args.dumpDepsFile:
            dumpDepsFileObject = open( args.dumpDepsFile, 'w+' )
            dumpDepsFileObject.write( "# dependency dump of package %s\n" % ( packageName ) )
        for info in deplist:
            isVCSTarget = False

            if args.dumpDepsFile:
                dumpDepsFileObject.write( ",".join( [ info.category, info.package, info.target, "" ] ) + "\n" )

            isLastPackage = info == deplist[ -1 ]
            if args.outDateVCS or (args.outDatePackage and isLastPackage):
                isVCSTarget = portage.PortageInstance.getUpdatableVCSTargets( info.category, info.package ) != [ ]
            isInstalled = InstallDB.installdb.isInstalled( info.category, info.package )
            if args.list_file and action != "all":
                info.enabled = info.package in originalPackageList
            if ( isInstalled and not info.enabled ) and not (
                            isInstalled and (args.outDateVCS or (
                                    args.outDatePackage and isLastPackage) ) and isVCSTarget ):
                if EmergeDebug.verbose() > 1 and info.package == packageName:
                    EmergeDebug.warning("already installed %s/%s" % (info.category, info.package))
                elif EmergeDebug.verbose() > 2 and not info.package == packageName:
                    EmergeDebug.warning("already installed %s/%s" % (info.category, info.package))
            else:
                # in case we only want to see which packages are still to be build, simply return the package name
                if args.probe:
                    if EmergeDebug.verbose() > 0:
                        EmergeDebug.warning("pretending %s" % info)
                else:
                    if action in [ "install-deps", "update-direct-deps" ]:
                        action = "all"

                    if not handlePackage( info.category, info.package, action, args.doContinue, args.update_fast ):
                        EmergeDebug.error("fatal error: package %s/%s %s failed" % \
                                          ( info.category, info.package, action ))
                        utils.notify( "Emerge build failed",
                                      "Build of %s/%s failed" % ( info.category, info.package),
                                      action )
                        return False
                    utils.notify( "Emerge build finished",
                                  "Build of %s/%s finished" % ( info.category, info.package),
                                  action )

    EmergeDebug.new_line()
    return True
Example #7
0
if len( sys.argv ) <= 1:
    print("please add the path to the packagelist file as only argument")
    time.sleep( 6 )
    exit( 0 )

listfilename = sys.argv[ 1 ]
packagefile = open( listfilename )

addInfo = dict()
_depList = []
_runtimeDepList = []
for line in packagefile:
    if not line.startswith( '#' ) and len( line.strip().split( ',' ) )  == 4:
        cat, pac, target, patchlvl = line.strip().split( ',' )
        addInfo[ cat + "/" + pac ] = ( target, patchlvl )
        portage.solveDependencies( cat, pac, _depList, depType = DependencyType.Both )
        portage.solveDependencies( cat, pac, _runtimeDepList, depType =  DependencyType.Runtime )
packagefile.close()

_depList.reverse()
_runtimeDepList.reverse()

runtimeDepList = [x.ident() for x in _runtimeDepList]
depList = [x.ident() for x in _depList]

for [cat, pac, ver, tar] in depList:
    target, patchlvl = '', ''
    if cat + "/" + pac in list(addInfo.keys()):
        target, patchlvl = addInfo[ cat + "/" + pac ]
    p = package( cat, pac, target, patchlvl )
    if not [cat, pac, ver, tar] in runtimeDepList:
Example #8
0
    print("please add the path to the packagelist file as only argument")
    time.sleep(6)
    exit(0)

listfilename = sys.argv[1]
packagefile = open(listfilename)

addInfo = dict()
_depList = []
_runtimeDepList = []
for line in packagefile:
    if not line.startswith('#') and len(line.strip().split(',')) == 4:
        cat, pac, target, patchlvl = line.strip().split(',')
        addInfo[cat + "/" + pac] = (target, patchlvl)
        portage.solveDependencies(cat,
                                  pac,
                                  _depList,
                                  depType=DependencyType.Both)
        portage.solveDependencies(cat,
                                  pac,
                                  _runtimeDepList,
                                  depType=DependencyType.Runtime)
packagefile.close()

_depList.reverse()
_runtimeDepList.reverse()

runtimeDepList = [x.ident() for x in _runtimeDepList]
depList = [x.ident() for x in _depList]

for [cat, pac, ver, tar] in depList:
    target, patchlvl = '', ''