* installdb files'i guzel dondursun
* eger yeniden kurumsa, eski paketi once remove edelim, aha! * upgrade mi downgrade mi info'lar confirm'ler cabasi * dunyanin en dandik installation seysi degil artik :) ama daha calismadi
This commit is contained in:
+48
-4
@@ -48,6 +48,17 @@ def get_pkg_info(package_fn):
|
||||
|
||||
return metadata, files
|
||||
|
||||
|
||||
def remove(package_name):
|
||||
"""Remove a goddamn package"""
|
||||
ui.info('Removing package ' + package_name)
|
||||
if not installdb.is_installed(package_name):
|
||||
raise InstallError('Trying to remove nonexistent package '
|
||||
+ package_name)
|
||||
for fileinfo in installdb.files(package_name):
|
||||
os.unlink(fileinfo.path)
|
||||
installdb.remove(package_name)
|
||||
|
||||
def install(package_fn):
|
||||
|
||||
metadata, files = get_pkg_info(package_fn)
|
||||
@@ -59,19 +70,52 @@ def install(package_fn):
|
||||
# check file system requirements
|
||||
# what to do if / is split into /usr, /var, etc.?
|
||||
|
||||
package = metadata.package
|
||||
|
||||
# check if package is in database
|
||||
if not packagedb.has_package(metadata.package.name):
|
||||
packagedb.add_package(metadata.package) # terrible solution it seems
|
||||
if not packagedb.has_package(package.name):
|
||||
packagedb.add_package(package) # terrible solution it seems
|
||||
|
||||
# check conflicts
|
||||
for pkg in metadata.package.conflicts:
|
||||
if installdb.has_package(pkg):
|
||||
if installdb.has_package(package):
|
||||
raise InstallError("Package conflicts " + pkg)
|
||||
|
||||
# check dependencies
|
||||
if not dependency.installable(metadata.package.name):
|
||||
if not dependency.installable(package.name):
|
||||
raise InstallError("Package not installable")
|
||||
|
||||
#TODO:
|
||||
if installdb.is_installed(package.name): # is this a reinstallation?
|
||||
|
||||
(iversion, irelease) = installdb.get_version(package.name)
|
||||
|
||||
if package.version == iversion and package.release == irelease:
|
||||
if not ui.confirm('Re-install same version package?'):
|
||||
raise InstallError('Package re-install declined')
|
||||
|
||||
upgrade = False
|
||||
# is this an upgrade?
|
||||
# determine and report the kind of upgrade: version, release, build
|
||||
if package.version > iversion:
|
||||
ui.info('Upgrading to new upstream version')
|
||||
upgrade = True
|
||||
elif package.release > irelease:
|
||||
ui.info('Upgrading to new distribution release')
|
||||
upgrade = True
|
||||
|
||||
# is this a downgrade? confirm this action.
|
||||
if not upgrade:
|
||||
if package.version < iversion:
|
||||
x = 'Downgrade to old upstream version?'
|
||||
elif package.release < irelease:
|
||||
x = 'Downgrade to old distribution release?'
|
||||
if not ui.confirm(x):
|
||||
raise InstallError('Package downgrade declined')
|
||||
|
||||
# remove old package then
|
||||
remove(package.name)
|
||||
|
||||
# unzip package in place
|
||||
ui.info('Extracting files\n')
|
||||
package.extract_dir_flat('install', config.destdir)
|
||||
|
||||
+4
-1
@@ -7,6 +7,7 @@ import os, fcntl
|
||||
import bsddb.dbshelve as shelve
|
||||
|
||||
from config import config
|
||||
from files import Files
|
||||
import util
|
||||
|
||||
class InstallDBError(Exception):
|
||||
@@ -33,7 +34,9 @@ class InstallDB:
|
||||
def files(self, pkg):
|
||||
pkg = str(pkg)
|
||||
(status, version, release) = self.d[pkg]
|
||||
return file(self.files_name(pkg,version,release))
|
||||
files = Files()
|
||||
files.read(self.files_name(pkg,version,release))
|
||||
return files
|
||||
|
||||
def is_recorded(self, pkg):
|
||||
pkg = str(pkg)
|
||||
|
||||
@@ -29,3 +29,4 @@ class Version:
|
||||
|
||||
def ge(self,rhs):
|
||||
return self.pred(rhs, lambda x,y: x>=y)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user