Example #1
0
def remInstalled(category, package, version, buildtype=""):
    """ deprecated, use InstallDB.installdb.remInstalled() instead """
    utils.debug("remInstalled called", 2)
    if buildtype != "":
        fileName = "installed-" + buildtype
    else:
        fileName = "installed"
    utils.debug("removing package %s - %s from %s" % (package, version, fileName), 2)
    dbFileName = os.path.join(utils.etcDir(), fileName)
    tmpdbfile = os.path.join(utils.etcDir(), "TMPinstalled")
    found = False
    if os.path.exists(dbFileName):
        with open(dbFileName, "rb") as dbFile:
            with open(tmpdbfile, "wb") as tfile:
                for line in dbFile:
                    ## \todo the category should not be part of the search string
                    ## because otherwise it is not possible to unmerge package using
                    ## the same name but living in different categories
                    if not line.startswith("%s/%s" % (category, package)):
                        tfile.write(line)
                    else:
                        found = True
        os.remove(dbFileName)
        os.rename(tmpdbfile, dbFileName)
    return found
Example #2
0
 def __init__( self, filename = os.path.join( utils.etcDir(), 'install.db' ) ):
     self.dbfilename = filename
     if not os.path.exists( filename ):
         if not os.path.exists( utils.etcDir() ):
             os.makedirs( utils.etcDir() )
         utils.debug( "database does not exist yet: creating database & importing old data" )
         self._prepareDatabase()
     else:
         utils.debug( "found database", 1 )
         self.connection = sqlite3.connect( self.dbfilename )
Example #3
0
    def isPkgInstalled( self, category, package, version, buildType='' ):
        # TODO: we have self.isPkgInstalled (formerly self._isInstalled) and self.isInstalled. Clarify names.
        """ check if a package with a certain category, package and version is installed (used for import) """

        # find in old style database
        path = utils.etcDir()
        fileName = os.path.join( path, 'installed' )
        if not os.path.isfile( fileName ):
            return False

        with open( fileName, "rb" ) as f:
            for line in f.read().splitlines():
                ( _category, _packageVersion ) = line.split( "/" )
                ( _package, _version ) = utils.packageSplit(_packageVersion)
                if category != '' and version != '' and category == _category and package == _package \
                                  and version == _version:
                    return True
                elif category == '' and version == '' and package == _package:
                    return True

        # find in release mode database
        if buildType != '':
            fileName = os.path.join( path,'installed-' + buildType )
            if os.path.isfile( fileName ):
                with open( fileName, "rb" ) as f:
                    for line in f.read().splitlines():
                        ( _category, _packageVersion ) = line.split( "/" )
                        ( _package, _version ) = utils.packageSplit( _packageVersion )
                        if category != '' and version != '' and category == _category and package == _package and version == _version:
                            return True
                        elif category == '' and version == '' and package == _package:
                            return True
        return False
def isInstalled( category, package, version, buildtype='' ):
    """ deprecated, use InstallDB.installdb.isInstalled() instead """
    utils.debug( "isInstalled(%s, %s, %s, %s)" % (category, package, version, buildtype), 2 )
    # find in old style database
    path = utils.etcDir()
    fileName = os.path.join(path,'installed')
    found = False
    if os.path.isfile( fileName ):
        with open( fileName, "rb" ) as f:
            for line in f.read().splitlines():
                (_category, _packageVersion) = line.split( "/" )
                (_package, _version) = utils.packageSplit(_packageVersion)
                if category != '' and version != '' and category == _category and package == _package and version == _version:
                    found = True
                    break
                elif category == '' and version == '' and package == _package:
                    found = True
                    break
        utils.debug("...%s found in main database" % (' ' if found else ' not'), 2 )
        if found:
            return True

    # find in release mode database
    if buildtype != '':
        fileName = os.path.join(path,'installed-' + buildtype )
        if os.path.isfile( fileName ):
            with open( fileName, "rb" ) as f:
                for line in f.read().splitlines():
                    (_category, _packageVersion) = line.split( "/" )
                    (_package, _version) = utils.packageSplit(_packageVersion)
                    if category != '' and version != '' and category == _category and package == _package and version == _version:
                        found = True
                        break
                    elif category == '' and version == '' and package == _package:
                        found = True
                        break
            utils.debug( "...%s found in %s database" % ( (' ' if found else ' not'), buildtype), 2 )
            if found:
                return True

    # try to detect packages from the installer
    binary = utils.checkManifestFile( os.path.join( os.getenv( "KDEROOT" ), "manifest",
            package + "-" + version + "-bin.ver"), category, package, version )
    lib = utils.checkManifestFile( os.path.join( os.getenv( "KDEROOT" ), "manifest",
            package + "-" + version + "-lib.ver"), category, package, version )
    found = found or binary or lib

    if not utils.envAsBool("EMERGE_VERSIONING", default=True) or utils.isSourceOnly():
        # check for any installation except data packages
        if not os.path.exists(os.path.join( os.getenv( "KDEROOT" ), "manifest" ) ):
            return False
        if package.endswith( "-src" ):
            package = package[:-4]
        for filename in os.listdir( os.path.join( os.getenv( "KDEROOT" ), "manifest" ) ):
            if filename.startswith( package ) and not \
                    filename.startswith( package + "-data" ):
                return True
    return False
Example #5
0
def findInstalled(category, package):
    """ deprecated, use InstallDB.installdb.findInstalled() instead """
    fileName = os.path.join(utils.etcDir(), "installed")
    if not os.path.isfile(fileName):
        return None

    ret = None
    regexStr = "^%s/%s-(.*)$" % (category, re.escape(package))
    regex = re.compile(regexStr)
    with open(fileName, "rb") as f:
        for line in f.read().splitlines():
            match = regex.match(line)
            if match:
                utils.debug("found: " + match.group(1), 2)
                ret = match.group(1)
    return ret
Example #6
0
def addInstalled(category, package, version, buildtype=""):
    """ deprecated, use InstallDB.installdb.addInstalled() instead """
    utils.debug("addInstalled called", 2)
    # write a line to etc/portage/installed,
    # that contains category/package-version
    path = os.path.join(utils.etcDir())
    if not os.path.isdir(path):
        os.makedirs(path)
    if buildtype != "":
        fileName = "installed-" + buildtype
    else:
        fileName = "installed"
    utils.debug("installing package %s - %s into %s" % (package, version, fileName), 2)
    if os.path.isfile(os.path.join(path, fileName)):
        with open(os.path.join(path, fileName), "rb") as f:
            for line in f:
                if line.startswith("%s/%s-%s" % (category, package, version)):
                    utils.warning("version already installed")
                    return
                elif line.startswith("%s/%s-" % (category, package)):
                    utils.die("already installed, this should no happen")
    with open(os.path.join(path, fileName), "ab") as f:
        f.write("%s/%s-%s\r\n" % (category, package, version))