From d38b8d58fb877719cf57b0f39b2c52a22cf48fe6 Mon Sep 17 00:00:00 2001
From: Seblu <sebastien.luttringer@smartjog.com>
Date: Mon, 30 May 2011 12:56:20 +0200
Subject: [PATCH] Fix repository deletion

Now use databases function to delete files from repository
---
 installsystems/database.py   | 11 +++++++++++
 installsystems/repository.py | 38 +++++++++++++++---------------------
 2 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/installsystems/database.py b/installsystems/database.py
index 6043308..e5a2092 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 faec6bd..fa095de 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'''
-- 
GitLab