From e7c523ef1ec017e89f45a4969c8188b019c9cf46 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@cd1c1023-2f26-0410-ae45-c471fc1f0318> Date: Fri, 8 Feb 2008 23:49:36 +0000 Subject: [PATCH] - adding support for transforming packages into injected, useful for tagged ones git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1176 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- libraries/databaseTools.py | 47 ++++++++++++++++++++------------------ libraries/reagentTools.py | 33 +++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/libraries/databaseTools.py b/libraries/databaseTools.py index c02d8c0b8..1ebd34592 100644 --- a/libraries/databaseTools.py +++ b/libraries/databaseTools.py @@ -925,16 +925,7 @@ class etpDatabase(TextInterface): if etpData['counter'] <= -2: # special cases - - try: - mycounters = list(self.listAllCounters(onlycounters = True)) - mycounter = min(mycounters) - if mycounter >= -1: - etpData['counter'] = -2 - else: - etpData['counter'] = mycounter-1 - except: - etpData['counter'] = -2 + etpData['counter'] = self.getNewNegativeCounter() try: self.cursor.execute( @@ -1034,19 +1025,9 @@ class etpDatabase(TextInterface): # injected? if etpData['injected']: - try: - self.cursor.execute( - 'INSERT into injected VALUES ' - '(?)' - , ( idpackage, ) - ) - except: # FIXME: remove this before 1.0 + if not self.doesTableExist("injected"): self.createInjectedTable() - self.cursor.execute( - 'INSERT into injected VALUES ' - '(?)' - , ( idpackage, ) - ) + self.setInjected(idpackage) # compile messages if not self.doesTableExist("messages"): @@ -1505,6 +1486,15 @@ class etpDatabase(TextInterface): raise exceptionTools.CorruptionError("CorruptionError: I tried to insert compile flags but then, fetching it returned -1. There's something broken.") self.commitChanges() + def setInjected(self, idpackage): + self.checkReadOnly() + if not self.isInjected(idpackage): + self.cursor.execute( + 'INSERT into injected VALUES ' + '(?)' + , ( idpackage, ) + ) + # date expressed the unix way def setDateCreation(self, idpackage, date): self.checkReadOnly() @@ -1797,6 +1787,19 @@ class etpDatabase(TextInterface): self.cursor.execute('DELETE FROM dependenciesreference WHERE iddependency = '+str(iddep)) self.commitChanges() + def getNewNegativeCounter(self): + counter = -2 + try: + mycounters = list(self.listAllCounters(onlycounters = True)) + mycounter = min(mycounters) + if mycounter >= -1: + counter = -2 + else: + counter = mycounter-1 + except: + pass + return counter + def getIDPackage(self, atom, branch = etpConst['branch']): self.cursor.execute('SELECT "IDPACKAGE" FROM baseinfo WHERE atom = "'+atom+'" AND branch = "'+branch+'"') idpackage = -1 diff --git a/libraries/reagentTools.py b/libraries/reagentTools.py index 68a043fd9..aa0d6a346 100644 --- a/libraries/reagentTools.py +++ b/libraries/reagentTools.py @@ -137,6 +137,7 @@ def update(options): installedCounters = set() toBeAdded = set() toBeRemoved = set() + toBeInjected = set() # packages to be added for x in installedPackages[0]: @@ -153,13 +154,14 @@ def update(options): if x[0] not in installedCounters: # check if the package is in toBeAdded if (toBeAdded): - #print x + atom = dbconn.retrieveAtom(x[1]) atomkey = Entropy.entropyTools.dep_getkey(atom) atomtag = Entropy.entropyTools.dep_gettag(atom) atomslot = dbconn.retrieveSlot(x[1]) add = True + tagfound = False for pkgdata in toBeAdded: addslot = getPackageSlot(pkgdata[0]) addkey = Entropy.entropyTools.dep_getkey(pkgdata[0]) @@ -173,13 +175,38 @@ def update(options): if add: toBeRemoved.add(x[1]) else: - toBeRemoved.add(x[1]) + if dbconn.retrieveVersionTag(x[1]) != None: + if not dbconn.isInjected(x[1]): + toBeInjected.add(x[1]) + else: + toBeRemoved.add(x[1]) - if (not toBeRemoved) and (not toBeAdded): + if (not toBeRemoved) and (not toBeAdded) and (not toBeInjected): print_info(brown(" * ")+red("Nothing to do, check later.")) # then exit gracefully return 0 + if (toBeInjected): + print_info(brown(" @@ ")+blue("These are the packages that would be changed to injected status:")) + for x in toBeInjected: + atom = dbconn.retrieveAtom(x) + print_info(brown(" # ")+red(atom)) + if reagentRequestAsk: + rc = Entropy.askQuestion(">> Would you like to transform them now ?") + else: + rc = "Yes" + if rc == "Yes": + rwdbconn = Entropy.databaseTools.openServerDatabase(readOnly = False, noUpload = True) + for x in toBeInjected: + atom = rwdbconn.retrieveAtom(x) + print_info(brown(" <> ")+blue("Transforming from database: ")+red(atom)) + # get new counter + counter = rwdbconn.getNewNegativeCounter() + rwdbconn.setCounter(x,counter) + rwdbconn.setInjected(x) + rwdbconn.closeDB() + print_info(brown(" @@ ")+blue("Database transform complete.")) + if (toBeRemoved): print_info(brown(" @@ ")+blue("These are the packages that would be removed from the database:")) for x in toBeRemoved: