- 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
This commit is contained in:
(no author)
2008-02-08 23:49:36 +00:00
parent f5ba05cc0f
commit e7c523ef1e
2 changed files with 55 additions and 25 deletions
+25 -22
View File
@@ -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
+30 -3
View File
@@ -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: