more bugfixes

git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@615 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
(no author)
2007-11-05 14:48:29 +00:00
parent 67a8d5b89b
commit 97886f8f8b
5 changed files with 161 additions and 127 deletions
+2 -2
View File
@@ -104,7 +104,7 @@ def update():
if not os.path.isfile(scandata[key]['source']):
scandata = removefromcache(scandata,key)
continue
print_info(darkred("Configuration file: ")+darkgreen(scandata[key]['source']))
print_info(darkred("Configuration file: ")+darkgreen(scandata[key]['destination']))
if cmd == -3:
rc = entropyTools.askquestion(">> Overwrite ?")
if rc == "No":
@@ -121,7 +121,7 @@ def update():
if not os.path.isfile(scandata[key]['source']):
scandata = removefromcache(scandata,key)
continue
print_info(darkred("Configuration file: ")+darkgreen(scandata[key]['source']))
print_info(darkred("Configuration file: ")+darkgreen(scandata[key]['destination']))
if cmd == -7:
rc = entropyTools.askquestion(">> Discard ?")
if rc == "No":
+1 -1
View File
@@ -199,7 +199,7 @@ try:
except SystemExit:
pass
except KeyboardInterrupt:
pass
sys.exit(0)
#except Timeout:
# pass
except:
+48 -78
View File
@@ -870,65 +870,6 @@ def getRequiredPackages(foundAtoms, emptydeps = False, deepdeps = False, spinnin
deptree = {}
depcount = -1
# order foundAtoms
'''
if len(foundAtoms) > 1:
foundAtoms = list(foundAtoms)
rc = False
testCache = {}
while not rc:
swap = False
for x in range(len(foundAtoms)):
pkgA = foundAtoms[x]
try:
pkgB = foundAtoms[x+1]
except:
continue
cached = testCache.get((pkgA,pkgB))
if cached:
print "cached"
y,z = cached['result']
if pkgA != y:
foundAtoms[x] = y
foundAtoms[x+1] = z
swap = True
continue
testCache[(pkgA,pkgB)] = {}
odbconn = openRepositoryDatabase(pkgA[1])
odeps = generateDependencyTree(pkgA, emptydeps = True)
# FIXME: remove conflict ignorance
if odeps[1] != 0:
continue
odeps[0][0] = [] # reset conflicts
for odep in odeps[0]:
br = False
#print odeps[0][0]
dlist = odeps[0][odep]
#print dlist
for y in dlist:
#print y
if y == pkgB:
print str(y)+" reverse -> "+str(pkgA)
foundAtoms[x] = pkgB
foundAtoms[x+1] = pkgA
swap = True
br = True
break
if br: break
if br: break
testCache[(pkgA,pkgB)]['result'] = (foundAtoms[x],foundAtoms[x+1])
odbconn.closeDB()
if (not swap):
rc = True
'''
if spinning: atomlen = len(foundAtoms); count = 0
for atomInfo in foundAtoms:
if spinning: count += 1; print_info(":: "+str(round((float(count)/atomlen)*100,1))+"% ::", back = True)
@@ -1304,7 +1245,6 @@ def removePackage(infoDict):
except:
#print "debug: the dir wasn't empty? -> "+str(file)
pass
return 0
@@ -1525,7 +1465,7 @@ def removePackageFromGentooDatabase(atom):
_portage_avail = True
except:
return -1 # no Portage support
if (_portage_avail):
portDbDir = _portage_getPortageAppDbPath()
removePath = portDbDir+atom
@@ -1535,7 +1475,7 @@ def removePackageFromGentooDatabase(atom):
except:
pass
key = dep_getkey(atom)
othersInstalled = _portage_getInstalledAtoms(key)
othersInstalled = _portage_getInstalledAtoms(key) #FIXME: really slow
if othersInstalled == None:
# safest way (error free) is to use sed without loading the file
# escape /
@@ -1593,14 +1533,18 @@ def installPackageIntoGentooDatabase(infoDict,packageFile):
#print "removing -> "+removePath
### INSTALL NEW
extractPath = os.path.dirname(packageFile)
extractPath += "/xpak"
extractPath = etpConst['entropyunpackdir']+"/"+os.path.basename(packageFile)+"/xpak"
if os.path.isdir(extractPath):
shutil.rmtree(extractPath)
else:
os.makedirs(extractPath)
extractXpak(packageFile,extractPath)
if not os.path.isdir(portDbDir+infoDict['category']):
os.makedirs(portDbDir+infoDict['category'])
destination = portDbDir+infoDict['category']+"/"+infoDict['name']+"-"+infoDict['version']
if os.path.isdir(destination):
shutil.rmtree(destination)
os.rename(extractPath,destination)
return 0
@@ -2170,6 +2114,7 @@ def worldUpdate(ask = False, pretend = False, verbose = False, onlyfetch = False
print_info(red(" @@ ")+blue("Packages matching already up to date:\t")+bold(str(len(fineList))))
# disable collisions protection, better
oldcollprotect = etpConst['collisionprotect']
etpConst['collisionprotect'] = 0
if (updateList):
@@ -2180,6 +2125,8 @@ def worldUpdate(ask = False, pretend = False, verbose = False, onlyfetch = False
else:
print_info(red(" @@ ")+blue("Nothing to update."))
etpConst['collisionprotect'] = oldcollprotect
if (removedList):
removedList = list(removedList)
removedList.sort()
@@ -2316,6 +2263,7 @@ def installPackages(packages = [], atomsdata = [], ask = False, pretend = False,
if (deps):
treepackages, result = getRequiredPackages(foundAtoms, emptydeps, deepdeps, spinning = True)
# add dependencies, explode them
if (result == -2):
print_error(red(" @@ ")+blue("Cannot find needed dependencies: ")+str(treepackages))
for atom in treepackages:
@@ -2331,9 +2279,11 @@ def installPackages(packages = [], atomsdata = [], ask = False, pretend = False,
print_error(red(" # ")+" [from:"+repo+"] "+darkred(iatom))
rdbconn.closeDB()
return 130, -1
elif (result == -1): # no database connection
print_error(red(" @@ ")+blue("Cannot find the Installed Packages Database. It's needed to accomplish dependency resolving. Try to run ")+bold("equo database generate"))
return 200, -1
for x in range(len(treepackages))[::-1]:
for z in range(len(treepackages[x]))[::-1]:
if z == 0:
@@ -2343,6 +2293,10 @@ def installPackages(packages = [], atomsdata = [], ask = False, pretend = False,
else:
for a in treepackages[x][z]:
runQueue.append(a)
else:
for atomInfo in foundAtoms:
runQueue.append(atomInfo)
downloadSize = 0
onDiskUsedSize = 0
@@ -2540,15 +2494,15 @@ def installPackages(packages = [], atomsdata = [], ask = False, pretend = False,
if (actionQueue[pkgatom]['removeidpackage'] != -1):
oldcontent = clientDbconn.retrieveContent(actionQueue[pkgatom]['removeidpackage'])
newcontent = dbconn.retrieveContent(idpackage)
actionQueue[pkgatom]['removecontent'] = [x for x in oldcontent if x not in newcontent]
oldcontent.difference_update(newcontent)
actionQueue[pkgatom]['removecontent'] = oldcontent
actionQueue[pkgatom]['diffremoval'] = True
etpRemovalTriggers[pkgatom] = clientDbconn.getPackageData(actionQueue[pkgatom]['removeidpackage'])
etpRemovalTriggers[pkgatom]['removecontent'] = actionQueue[pkgatom]['removecontent'][:]
etpRemovalTriggers[pkgatom]['removecontent'] = actionQueue[pkgatom]['removecontent'].copy()
# get data for triggerring tool
etpInstallTriggers[pkgatom] = dbconn.getPackageData(idpackage)
dbconn.closeDB()
if (not onlyfetch):
@@ -2726,10 +2680,10 @@ def removePackages(packages = [], atomsdata = [], ask = False, pretend = False,
infoDict['removeidpackage'] = idpackage
infoDict['removeatom'] = clientDbconn.retrieveAtom(idpackage)
infoDict['removecontent'] = clientDbconn.retrieveContent(idpackage)
actionQueue[pkgatom]['diffremoval'] = False
infoDict['diffremoval'] = False
infoDict['removeconfig'] = configFiles
etpRemovalTriggers[infoDict['removeatom']] = clientDbconn.getPackageData(idpackage)
etpRemovalTriggers[infoDict['removeatom']]['removecontent'] = infoDict['removecontent'][:]
etpRemovalTriggers[infoDict['removeatom']]['removecontent'] = infoDict['removecontent'].copy()
steps = []
steps.append("preremove")
steps.append("remove")
@@ -2874,7 +2828,7 @@ def stepExecutor(step,infoDict):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"Message from "+infoDict['atom']+" :")
for msg in infoDict['messages']: # FIXME: add logging support
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,msg)
print_warning(brown(' ## ')+msg)
print_warning(brown(' ## ')+msg)
if infoDict['messages']:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"End message.")
@@ -2896,19 +2850,35 @@ def stepExecutor(step,infoDict):
elif step == "preremove":
# analyze atom
pkgdata = etpRemovalTriggers.get(infoDict['removeatom'])
if pkgdata:
triggers = triggerTools.preremove(pkgdata)
remdata = etpRemovalTriggers.get(infoDict['removeatom'])
if remdata:
triggers = triggerTools.preremove(remdata)
if infoDict['diffremoval']: # diffremoval is true only when the remove action is triggered by installPackages()
pkgdata = etpRemovalTriggers.get(infoDict['atom'])
if pkgdata:
# preinstall script shouldn't doulbe run on preremove
itriggers = triggerTools.preinstall(pkgdata)
triggers.difference_update(itriggers)
for trigger in triggers: # code reuse, we'll fetch triggers list on the GUI client and run each trigger by itself
eval("triggerTools."+trigger)(pkgdata)
eval("triggerTools."+trigger)(remdata)
elif step == "postremove":
# analyze atom
pkgdata = etpRemovalTriggers.get(infoDict['removeatom'])
if pkgdata:
triggers = triggerTools.postremove(pkgdata)
remdata = etpRemovalTriggers.get(infoDict['removeatom'])
if remdata:
triggers = triggerTools.postremove(remdata)
if infoDict['diffremoval']: # diffremoval is true only when the remove action is triggered by installPackages()
pkgdata = etpRemovalTriggers.get(infoDict['atom'])
if pkgdata:
# postinstall script shouldn't doulbe run on postremove
itriggers = triggerTools.postinstall(pkgdata)
triggers.difference_update(itriggers)
for trigger in triggers: # code reuse, we'll fetch triggers list on the GUI client and run each trigger by itself
eval("triggerTools."+trigger)(pkgdata)
eval("triggerTools."+trigger)(remdata)
clientDbconn.closeDB()
+48 -33
View File
@@ -99,12 +99,14 @@ def postinstall(pkgdata):
functions.add('scrollkeeper')
if x.startswith("/etc/gconf/schemas"):
functions.add('gconfreload')
if x.startswith('/lib/modules/') and x.endswith('.ko') and (pkgdata['category'] != 'sys-kernel'):
if x.startswith('/lib/modules/'):
functions.add('kernelmod')
if x.startswith('/boot/kernel-'):
functions.add('addbootablekernel')
#if x.startswith("/etc/init.d/"): do it externally
# functions.add('initadd')
return list(functions)
return functions
'''
@description: pkgdata parser that collects pre-install scripts that would be run
@@ -122,7 +124,7 @@ def preinstall(pkgdata):
if x.startswith("/boot"):
functions.add('mountboot')
return list(functions)
return functions
'''
@description: pkgdata parser that collects post-remove scripts that would be run
@@ -169,8 +171,10 @@ def postremove(pkgdata):
functions.add('gconfreload')
if x.startswith('/boot/kernel-'):
functions.add('removebootablekernel')
if x.startswith('/etc/init.d/'):
functions.add('removeinit')
return list(functions)
return functions
'''
@description: pkgdata parser that collects pre-remove scripts that would be run
@@ -187,7 +191,7 @@ def preremove(pkgdata):
if x.startswith("/boot"):
functions.add('mountboot')
return list(functions)
return functions
########################################################
####
@@ -206,14 +210,14 @@ def fontconfig(pkgdata):
fontdirs.add(xdir[:16]+"/"+origdir)
if (fontdirs):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring fonts directory...")
print_info(" "+brown("[POST] Configuring fonts directory..."))
print_info(red(" ##")+brown(" [POST] Configuring fonts directory..."))
for fontdir in fontdirs:
setup_font_dir(fontdir)
setup_font_cache(fontdir)
def gccswitch(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring GCC Profile...")
print_info(" "+brown("[POST] Configuring GCC Profile..."))
print_info(red(" ##")+brown(" [POST] Configuring GCC Profile..."))
# get gcc profile
pkgsplit = entropyTools.catpkgsplit(pkgdata['category']+"/"+pkgdata['name']+"-"+pkgdata['version'])
profile = pkgdata['chost']+"-"+pkgsplit[2]
@@ -221,7 +225,7 @@ def gccswitch(pkgdata):
def iconscache(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating icons cache...")
print_info(" "+brown("[POST] Updating icons cache..."))
print_info(red(" ##")+brown(" [POST] Updating icons cache..."))
mycnt = set(pkgdata['content'])
for file in mycnt:
if file.startswith("/usr/share/icons") and file.endswith("index.theme"):
@@ -230,49 +234,49 @@ def iconscache(pkgdata):
def mimeupdate(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating shared mime info database...")
print_info(" "+brown("[POST] Updating shared mime info database..."))
print_info(red(" ##")+brown(" [POST] Updating shared mime info database..."))
update_mime_db()
def mimedesktopupdate(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating desktop mime database...")
print_info(" "+brown("[POST] Updating desktop mime database..."))
print_info(red(" ##")+brown(" [POST] Updating desktop mime database..."))
update_mime_desktop_db()
def scrollkeeper(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating scrollkeeper database...")
print_info(" "+brown("[POST] Updating scrollkeeper database..."))
print_info(red(" ##")+brown(" [POST] Updating scrollkeeper database..."))
update_scrollkeeper_db()
def gconfreload(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Reloading GConf2 database...")
print_info(" "+brown("[POST] Reloading GConf2 database..."))
print_info(red(" ##")+brown(" [POST] Reloading GConf2 database..."))
reload_gconf_db()
def binutilsswitch(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring Binutils Profile...")
print_info(" "+brown("[POST] Configuring Binutils Profile..."))
print_info(red(" ##")+brown(" [POST] Configuring Binutils Profile..."))
# get binutils profile
pkgsplit = entropyTools.catpkgsplit(pkgdata['category']+"/"+pkgdata['name']+"-"+pkgdata['version'])
profile = pkgdata['chost']+"-"+pkgsplit[2]
set_binutils_profile(profile)
def kernelmod(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating moduledb...")
print_info(" "+brown("[POST] Updating moduledb..."))
item = 'a:1:'+pkgdata['category']+"/"+pkgdata['name']+"-"+pkgdata['version']
update_moduledb(item)
print_info(" "+brown("[POST] Running depmod..."))
kos = [x for x in pkgdata['content'] if x.startswith("/lib/modules") and x.endswith(".ko")]
if pkgdata['category'] != "sys-kernel":
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Updating moduledb...")
print_info(red(" ##")+brown(" [POST] Updating moduledb..."))
item = 'a:1:'+pkgdata['category']+"/"+pkgdata['name']+"-"+pkgdata['version']
update_moduledb(item)
print_info(red(" ##")+brown(" [POST] Running depmod..."))
run_depmod()
def pythoninst(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring Python...")
print_info(" "+brown("[POST] Configuring Python..."))
print_info(red(" ##")+brown(" [POST] Configuring Python..."))
python_update_symlink()
def sqliteinst(pkgdata):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring SQLite...")
print_info(" "+brown("[POST] Configuring SQLite..."))
print_info(red(" ##")+brown(" [POST] Configuring SQLite..."))
sqlite_update_symlink()
def initdisable(pkgdata):
@@ -289,7 +293,18 @@ def initinform(pkgdata):
for file in mycnt:
if file.startswith("/etc/init.d/") and not os.path.isfile(file):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[PRE] A new service will be installed: "+file)
print_info(" "+brown("[PRE] A new service will be installed: ")+file)
print_info(red(" ##")+brown(" [PRE] A new service will be installed: ")+file)
def removeinit(pkgdata):
mycnt = set(pkgdata['content'])
for file in mycnt:
if file.startswith("/etc/init.d/") and os.path.isfile(file):
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Removing boot service: "+os.path.basename(file))
print_info(red(" ##")+brown(" [POST] Removing boot service: ")+os.path.basename(file))
try:
os.system('rc-update del '+os.path.basename(file)+' &> /dev/null')
except:
pass
def openglsetup(pkgdata):
opengl = "xorg-x11"
@@ -301,21 +316,21 @@ def openglsetup(pkgdata):
eselect = os.system("eselect opengl &> /dev/null")
if eselect == 0:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Reconfiguring OpenGL to "+opengl+" ...")
print_info(" "+brown("[POST] Reconfiguring OpenGL..."))
print_info(red(" ##")+brown(" [POST] Reconfiguring OpenGL..."))
os.system("eselect opengl set --use-old "+opengl)
else:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Eselect NOT found, cannot run OpenGL trigger")
print_info(" "+brown("[POST] Eselect NOT found, cannot run OpenGL trigger"))
print_info(red(" ##")+brown(" [POST] Eselect NOT found, cannot run OpenGL trigger"))
def openglsetup_xorg(pkgdata):
eselect = os.system("eselect opengl &> /dev/null")
if eselect == 0:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Reconfiguring OpenGL to fallback xorg-x11 ...")
print_info(" "+brown("[POST] Reconfiguring OpenGL..."))
print_info(red(" ##")+brown(" [POST] Reconfiguring OpenGL..."))
os.system("eselect opengl set xorg-x11")
else:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Eselect NOT found, cannot run OpenGL trigger")
print_info(" "+brown("[POST] Eselect NOT found, cannot run OpenGL trigger"))
print_info(red(" ##")+brown(" [POST] Eselect NOT found, cannot run OpenGL trigger"))
# FIXME: this only supports grub (no lilo support)
def addbootablekernel(pkgdata):
@@ -326,7 +341,7 @@ def addbootablekernel(pkgdata):
initramfs = ''
# configure GRUB
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring GRUB bootloader. Adding the new kernel...")
print_info(" "+brown("[POST] Configuring GRUB bootloader. Adding the new kernel..."))
print_info(red(" ##")+brown(" [POST] Configuring GRUB bootloader. Adding the new kernel..."))
configure_boot_grub(kernel,initramfs)
@@ -339,7 +354,7 @@ def removebootablekernel(pkgdata):
initramfs = ''
# configure GRUB
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Configuring GRUB bootloader. Removing the selected kernel...")
print_info(" "+brown("[POST] Configuring GRUB bootloader. Removing the selected kernel..."))
print_info(red(" ##")+brown(" [POST] Configuring GRUB bootloader. Removing the selected kernel..."))
remove_boot_grub(kernel,initramfs)
def mountboot(pkgdata):
@@ -356,10 +371,10 @@ def mountboot(pkgdata):
rc = os.system("mount /boot &> /dev/null")
if rc == 0:
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[PRE] Mounted /boot successfully")
print_info(" "+brown("[PRE] Mounted /boot successfully"))
print_info(red(" ##")+brown(" [PRE] Mounted /boot successfully"))
elif rc != 8192: # already mounted
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[PRE] Cannot mount /boot automatically !!")
print_info(" "+brown("[PRE] Cannot mount /boot automatically !!"))
print_info(red(" ##")+brown(" [PRE] Cannot mount /boot automatically !!"))
break
def kbuildsycoca(pkgdata):
@@ -377,14 +392,14 @@ def kbuildsycoca(pkgdata):
os.chown("/usr/share/services",0,0)
os.chmod("/usr/share/services",0755)
equoLog.log(ETP_LOGPRI_INFO,ETP_LOGLEVEL_NORMAL,"[POST] Running kbuildsycoca to build global KDE database")
print_info(" "+brown("[POST] Running kbuildsycoca to build global KDE database"))
print_info(red(" ##")+brown(" [POST] Running kbuildsycoca to build global KDE database"))
os.system(builddir+"/bin/kbuildsycoca --global --noincremental &> /dev/null")
def gconfinstallschemas(pkgdata):
gtest = os.system("which gconftool-2 &> /dev/null")
if gtest == 0:
schemas = [x for x in pkgdata['content'] if x.startswith("/etc/gconf/schemas") and x.endswith(".schemas")]
print_info(" "+brown("[POST] Installing GConf2 schemas..."))
print_info(red(" ##")+brown(" [POST] Installing GConf2 schemas..."))
for schema in schemas:
os.system("""
unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
@@ -429,7 +444,7 @@ def setup_font_dir(fontdir):
def setup_font_cache(fontdir):
# fc-cache -f gooooo!
if os.access('/usr/bin/fc-cache',os.X_OK):
os.system('HOME="/root" /usr/bin/fc-cache -f '+unicode(fontdir))
os.system('/usr/bin/fc-cache -f '+unicode(fontdir))
return 0
'''
+62 -13
View File
@@ -603,24 +603,73 @@ def quickpkg(atom,dirpath):
os.makedirs(tmpdirpath)
dbdir = "/var/db/pkg/"+pkgcat+"/"+pkgname+"/"
# crate file list
import tarfile
import stat
tar = tarfile.open(dirpath,"w:bz2")
# load content
f = open(dbdir+dbCONTENTS,"r")
pkgcontent = f.readlines()
f.close()
_pkgcontent = []
content = {}
id_strings = {}
for line in pkgcontent:
line = line.strip().split()[1]
if not ((os.path.isdir(line)) and (os.path.islink(line))):
_pkgcontent.append(line)
pkgcontent = _pkgcontent
f = open(tmpdirpath+"/"+dbCONTENTS,"w")
for i in pkgcontent:
f.write(i+"\n")
f.flush()
f.close()
line = line.strip()
data = line.split()
ftype = data[0]
# package them into a file
rc = entropyTools.spawnCommand("tar cjf "+dirpath+" -C / --files-from='"+tmpdirpath+"/"+dbCONTENTS+"' --no-recursion", redirect = "&>/dev/null")
if ftype == "dir":
file = string.join(data[1:]," ")
content[file] = [] # do not use sets!
content[file].append(ftype)
elif ftype == "sym":
timestamp = data[-1]
symlink = data[-2]
file = string.join(data[1:-3]," ")
content[file] = []
content[file].append(ftype)
content[file].append(timestamp)
content[file].append(symlink)
else: # == "obj"
# add timestamp
timestamp = data[-1]
checksum = data[-2]
file = string.join(data[1:-2]," ")
content[file] = []
content[file].append(ftype)
content[file].append(timestamp)
content[file].append(checksum)
paths = content.keys()
paths.sort()
for path in paths:
try:
exist = os.lstat(path)
except OSError:
continue # skip file
ftype = content[path][0]
lpath = path
arcname = path[1:]
if ftype == "dir" and stat.S_ISDIR(exist.st_mode) and os.path.isdir(lpath):
lpath = os.path.realpath(lpath)
tarinfo = tar.gettarinfo(lpath, arcname)
tarinfo.uname = id_strings.setdefault(tarinfo.uid, str(tarinfo.uid))
tarinfo.gname = id_strings.setdefault(tarinfo.gid, str(tarinfo.gid))
if stat.S_ISREG(exist.st_mode):
tarinfo.type = tarfile.REGTYPE
f = open(path)
try:
tar.addfile(tarinfo, f)
finally:
f.close()
else:
tar.addfile(tarinfo)
tar.close()
# appending xpak informations
import xpak