Commit d38b8d58 authored by Seblu's avatar Seblu
Browse files

Fix repository deletion

Now use databases function to delete files from repository
parent 184b64a2
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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:
+16 −22
Original line number Diff line number Diff line
@@ -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'''