Skip to content
Snippets Groups Projects
Commit d38b8d58 authored by Seblu's avatar Seblu
Browse files

Fix repository deletion

Now use databases function to delete files from repository
parent 184b64a2
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,7 @@ class Database(object): ...@@ -58,6 +58,7 @@ class Database(object):
'''Deltete a packaged image''' '''Deltete a packaged image'''
arrow("Removing metadata from db", 1, self.verbose) arrow("Removing metadata from db", 1, self.verbose)
newdb_path = "%s.new" % self.path newdb_path = "%s.new" % self.path
fname = "%s-%s.json" % (name, version)
try: try:
db = Tarball.open(self.path, mode='r:bz2') db = Tarball.open(self.path, mode='r:bz2')
newdb = Tarball.open(newdb_path, mode='w:bz2') newdb = Tarball.open(newdb_path, mode='w:bz2')
...@@ -70,6 +71,16 @@ class Database(object): ...@@ -70,6 +71,16 @@ class Database(object):
except Exception as e: except Exception as e:
raise Exception("Removing metadata fail: %s" % 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): def find(self, name, version=None):
'''Find last version of an image''' '''Find last version of an image'''
try: try:
......
...@@ -9,7 +9,6 @@ Repository stuff ...@@ -9,7 +9,6 @@ Repository stuff
import os import os
import time import time
import shutil import shutil
import json
import installsystems import installsystems
import installsystems.tools as istools import installsystems.tools as istools
from installsystems.printer import * from installsystems.printer import *
...@@ -82,33 +81,28 @@ class Repository(object): ...@@ -82,33 +81,28 @@ class Repository(object):
def delete(self, name, version): def delete(self, name, version):
'''Delete an image from repository''' '''Delete an image from repository'''
name = "%s-%s" % (name, version) if self.db.find(name, version) is None:
fname = "%s.json" % name error("Unable to find %s version %s in database" % (name, version))
# FIXME: check tarball exists before doing this # removing script tarballs
tbs = self.tarballs(name) 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 # removing metadata
self.db.delete(name, version) 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 # update last file
arrow("Updating last file", 1, self.verbose) arrow("Updating last file", 1, self.verbose)
self.update_last() 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): class RepositoryCache(object):
'''Local repository cache class''' '''Local repository cache class'''
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment