diff --git a/installsystems/database.py b/installsystems/database.py index 604330843c7a76418732dec4415a0d473a971fe4..e5a2092cff96da61ded526479f9273916f633b17 100644 --- a/installsystems/database.py +++ b/installsystems/database.py @@ -58,6 +58,7 @@ class Database(object): '''Deltete a packaged image''' arrow("Removing metadata from db", 1, self.verbose) newdb_path = "%s.new" % self.path + fname = "%s-%s.json" % (name, version) try: db = Tarball.open(self.path, mode='r:bz2') newdb = Tarball.open(newdb_path, mode='w:bz2') @@ -70,6 +71,16 @@ class Database(object): except Exception as e: raise Exception("Removing metadata fail: %s" % e) + def databalls(self, name, version): + '''List data tarballs filenames''' + try: + db = Tarball.open(self.path, mode='r:bz2') + jdesc = json.loads(db.get_str("%s-%s.json" % (name, version))) + db.close() + return jdesc["data"] + except Exception as e: + raise Exception("Listing data tarballs fail: %s" % e) + def find(self, name, version=None): '''Find last version of an image''' try: diff --git a/installsystems/repository.py b/installsystems/repository.py index faec6bd2c1ebc3d32374ed6be66f7bbb09e9e1e0..fa095de43823726199020f024ce4588df5e67e5d 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -9,7 +9,6 @@ Repository stuff import os import time import shutil -import json import installsystems import installsystems.tools as istools from installsystems.printer import * @@ -82,33 +81,28 @@ class Repository(object): def delete(self, name, version): '''Delete an image from repository''' - name = "%s-%s" % (name, version) - fname = "%s.json" % name - # FIXME: check tarball exists before doing this - tbs = self.tarballs(name) + if self.db.find(name, version) is None: + error("Unable to find %s version %s in database" % (name, version)) + # removing script tarballs + arrow("Removing script tarball", 1, self.verbose) + tpath = os.path.join(self.image_path, "%s-%s%s" % (name, version, + Image.image_extension)) + if os.path.exists(tpath): + os.unlink(tpath) + arrow("%s removed" % os.path.basename(tpath), 2, self.verbose) + # removing data tarballs + arrow("Removing data tarballs", 1, self.verbose) + for tb in self.db.databalls(name, version): + tpath = os.path.join(self.data_path, tb) + if os.path.exists(tpath): + os.unlink(tpath) + arrow("%s removed" % tb, 2, self.verbose) # removing metadata self.db.delete(name, version) - # removing tarballs - arrow("Removing tarballs", 1, self.verbose) - for tb in tbs: - arrow("Removing %s" % os.path.basename(tb), 2, self.verbose) - os.unlink(tb) # update last file arrow("Updating last file", 1, self.verbose) self.update_last() - def tarballs(self, name): - '''List all tarballs (script + data)''' - ts = list() - # add script tarballs - ts.append(os.path.abspath(os.path.join(self.image_path, - "%s%s" % (name, Image.image_extension)))) - tempdb = Tarball.open(self.db_path, mode='r:bz2') - jdesc = json.loads(tempdb.get_str("%s.json" % name)) - for dt in jdesc["data"]: - ts.append(os.path.abspath(os.path.join(self.data_path, dt))) - return ts - class RepositoryCache(object): '''Local repository cache class'''