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
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 )
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
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
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))