Hello community, here is the log from the commit of package smart checked in at Tue Jun 27 18:32:48 CEST 2006. -------- --- smart/smart.changes 2006-06-22 19:16:56.000000000 +0200 +++ smart/smart.changes 2006-06-26 07:39:47.000000000 +0200 @@ -1,0 +2,5 @@ +Mon Jun 26 07:35:34 CEST 2006 - cthiel@suse.de + +- update to final 0.42 release + +------------------------------------------------------------------- Old: ---- smart-0.41.99.tar.bz2 New: ---- smart-0.42.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ smart.spec ++++++ --- /var/tmp/diff_new_pack.ZTqvJD/_old 2006-06-27 18:31:55.000000000 +0200 +++ /var/tmp/diff_new_pack.ZTqvJD/_new 2006-06-27 18:31:55.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package smart (Version 0.41.99) +# spec file for package smart (Version 0.42) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -13,8 +13,8 @@ Name: smart BuildRequires: kdelibs3-devel python-devel python-elementtree python-gtk rpm-devel rpm-python update-desktop-files Summary: Smart Package Manager -Version: 0.41.99 -Release: 2 +Version: 0.42 +Release: 1 Source: %{name}-%{version}.tar.bz2 Source1: distro.py Source2: %{name}.desktop @@ -161,6 +161,8 @@ /opt/kde3/share/apps/konqueror %changelog -n smart +* Mon Jun 26 2006 - cthiel@suse.de +- update to final 0.42 release * Thu Jun 22 2006 - cthiel@suse.de - turn rpm-check-signatures=true into a weak default option * Fri Jun 16 2006 - cthiel@suse.de ++++++ smart-0.41.99.tar.bz2 -> smart-0.42.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/PKG-INFO new/smart-0.42/PKG-INFO --- old/smart-0.41.99/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/smart-0.42/PKG-INFO 2006-06-26 03:59:15.000000000 +0200 @@ -0,0 +1,11 @@ +Metadata-Version: 1.0 +Name: smart +Version: 0.42 +Summary: Smart Package Manager is a next generation package handling tool +Home-page: http://smartpm.org +Author: Gustavo Niemeyer +Author-email: gustavo@niemeyer.net +License: GPL +Description: Smart Package Manager is a next generation package handling tool. + +Platform: UNKNOWN diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/README new/smart-0.42/README --- old/smart-0.41.99/README 2006-06-16 13:45:24.000000000 +0200 +++ new/smart-0.42/README 2006-01-24 19:11:45.000000000 +0100 @@ -4,7 +4,7 @@ :Author: Gustavo Niemeyer :Contact: niemeyer@conectiva.com :Revision: $Rev: 689 $ -:Date: $Date: 2006-01-24 19:11:45 +0100 (Di, 24 Jan 2006) $ +:Date: $Date: 2006-01-24 16:11:45 -0200 (Tue, 24 Jan 2006) $ .. contents:: diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/cdproblems.py new/smart-0.42/sandbox/cdproblems.py --- old/smart-0.41.99/sandbox/cdproblems.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/cdproblems.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,64 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') -import user - -# Check if upgrading a package would require upgrading another -# package which is in a higher numbered CD. - -from smart.transaction import * - -set = ChangeSet() - -# Mark every CL9 package as installed, and being removed. -for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl9"): - pkg.installed = True - set[pkg] = REMOVE - -# Now mark for installing every package in CL10 CDs. -for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl10"): - set[pkg] = INSTALL - -#trans = Transaction(cache, PolicyUpgrade) -#trans.setPolicy(PolicyUpgrade) -#trans.upgrade([x for x in cache.getPackages() if x.installed]) -#for pkg in cache.getPackages(): -# if pkg.installed: -# trans.enqueue(pkg, UPGRADE) -#try: -# trans.run() -#except KeyboardInterrupt: -# pass -#trans.install([x for x in cache.getPackages() if not x.installed and x.name == "openssl-devel"][0]) - -# Now build a subset, and check if including each package in the -# first CD would require installing a package in CDs 2 or 3. - -splitter = ChangeSetSplitter(set) -subset = set.copy() - -cl10cd1 = [] -for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName() == "cl10.001": - cl10cd1.append(pkg) -cl10cd2 = [] -for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName() == "cl10.002": - cl10cd2.append(pkg) -cl10cd3 = [] -for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName() == "cl10.003": - cl10cd3.append(pkg) - -krb5 = [x for x in subset if x.name == "krb5"][0] -krb5server = [x for x in subset if x.name == "krb5-server"][0] -coreutils = [x for x in subset if x.name == "coreutils"][0] - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/crossrepository.py new/smart-0.42/sandbox/crossrepository.py --- old/smart-0.41.99/sandbox/crossrepository.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/crossrepository.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,45 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') - -MAIN = "cooker-ciril" -CONTRIB = "contrib-ciril" - -def main(): - for pkg in cache.getPackages(): - for loader in pkg.loaders: - if loader.getChannel().getAlias() == MAIN: - break - else: - continue - firstreq = True - for req in pkg.requires: - foundmain = False - foundcontrib = [] - for prv in req.providedby: - for prvpkg in prv.packages: - for loader in prvpkg.loaders: - name = loader.getChannel().getAlias() - if name == CONTRIB: - foundcontrib.append((prv, prvpkg)) - elif name == MAIN: - foundmain = True - break - else: - continue - break - if not foundmain: - if firstreq: - firstreq = False - print pkg - print " Requires:" - print " ", req - if foundcontrib: - print " Contrib:" - for prv, prvpkg in foundcontrib: - print " ", prvpkg - if not firstreq: - print - -if __name__ == "__main__": - main() diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/fileconflicts.py new/smart-0.42/sandbox/fileconflicts.py --- old/smart-0.41.99/sandbox/fileconflicts.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/fileconflicts.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,212 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') - -# A problem is identified when: -# -# 1) a file has been moved to a different package; -# 2) the new package is not obsoleting nor conflicting with -# the original package; -# 3) the new package does not require any package obsoleting or -# conflicting with the original package; -# -# If there's any package obsoleting the original package at -# all, the problem is reduced, but it still exists since the -# new owner may be installed with the original package in -# the system. -# -# Internal problems occur when two packages have the same file -# in the same distribution version. If one package requires the -# same version of the other package explicitly, then this is -# not considered a problem, as it's expected to be the same file -# in both packages. - -def isRequiringConflictingPackage(cl10pkg, cl9pkg, donemap=None): - if not donemap: - donemap = {} - donemap[cl10pkg] = True - # Is any recursively required package conflicting with it? - for req in cl10pkg.requires: - for prv in req.providedby: - # *All* providing packages must conflict with it. - # Otherwise, it might be installed with one of the - # non-conflicting package satisfying this dependency. - found = False - for pkg in prv.packages: - try: - for cnf in pkg.conflicts: - for prv in cnf.providedby: - if cl9pkg in prv.packages: - raise StopIteration - # This providing package is not conflicting, - # but a package required by it might be. - if (pkg not in donemap and - isRequiringConflictingPackage(pkg, cl9pkg, donemap)): - raise StopIteration - except StopIteration: - found = True - else: - found = False - break - if found: - return True - return False - -def main(): - - cl9dict = {} - cl10dict = {} - cl9pathdict = {} - cl10pathdict = {} - for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl9"): - info = loader.getInfo(pkg) - for path in info.getPathList(): - if info.pathIsDir(path): - continue - cl9dict[pkg] = True - try: - cl9pathdict[path].append(pkg) - except KeyError: - cl9pathdict[path] = [pkg] - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl10"): - info = loader.getInfo(pkg) - for path in info.getPathList(): - if info.pathIsDir(path): - continue - cl10dict[pkg] = True - try: - cl10pathdict[path].append(pkg) - except KeyError: - cl10pathdict[path] = [pkg] - - # A problem is considered serious when no package conflicts with - # the original package at all. - problems = {} - noupgproblems = {} - for path in cl9pathdict: - if path not in cl10pathdict: - continue - - cl9pkgs = cl9pathdict[path] - cl10pkgs = cl10pathdict[path] - - # The same rules apply to every owner in cl9, and - # to every owner in cl10. - for cl9pkg in cl9pkgs: - for cl10pkg in cl10pkgs: - if cl9pkg.name == cl10pkg.name: - continue - try: - # Is it directly conflicted? - for cnf in cl10pkg.conflicts: - for prv in cnf.providedby: - if cl9pkg in prv.packages: - raise StopIteration - - # Is it indirectly conflicted? - if isRequiringConflictingPackage(cl10pkg, cl9pkg): - raise StopIteration - - try: - problems[(cl9pkg, cl10pkg)].append(path) - except KeyError: - problems[(cl9pkg, cl10pkg)] = [path] - - # Check if some package is conflicting and upgrading - # the original package at all. - try: - for prv in cl9pkg.provides: - for cnf in prv.conflictedby: - for cnfpkg in cnf.packages: - # Check if it's also upgrading. - if cnfpkg not in [x for y in prv.upgradedby - for x in y.packages]: - continue - for loader in cnfpkg.loaderinfo: - if loader.getRepository().getName() \ - .startswith("cl10"): - raise StopIteration - except StopIteration: - pass - else: - noupgproblems[(cl9pkg, cl10pkg)] = True - - except StopIteration: - pass - - # Now check for internal conflicts. - for path in cl10pathdict: - cl10pkgs = cl10pathdict[path] - for cl10pkg1 in cl10pkgs: - for cl10pkg2 in cl10pkgs: - if cl10pkg1 is cl10pkg2 or cl10pkg1.name == cl10pkg2.name: - continue - if (cl10pkg2, cl10pkg1) in problems: - continue - try: - - # Is one package requiring another explicitly? - for req in cl10pkg1.requires: - if req.relation == "=": - for prv in req.providedby: - if cl10pkg2 in req.packages: - raise StopIteration - for req in cl10pkg2.requires: - if req.relation == "=": - for prv in req.providedby: - if cl10pkg1 in req.packages: - raise StopIteration - - # Is it directly conflicted? - for cnf in cl10pkg1.conflicts: - for prv in cnf.providedby: - if cl10pkg2 in prv.packages: - raise StopIteration - for cnf in cl10pkg2.conflicts: - for prv in cnf.providedby: - if cl10pkg1 in prv.packages: - raise StopIteration - - # Is it indirectly conflicted? - if isRequiringConflictingPackage(cl10pkg1, cl10pkg2): - raise StopIteration - - except StopIteration: - continue - else: - try: - problems[(cl10pkg1, cl10pkg2)].append(path) - except KeyError: - problems[(cl10pkg1, cl10pkg2)] = [path] - - print "Problem classes:" - print "A) An old package has file conflicts with a new package" - print "B) Same as A, and there's no package upgrading the old package" - print "C) Same as B, with both packages in the same distribution" - print - print "Problems:", len(problems) - print - for problem in problems: - print "Problem class:", - pkg1, pkg2 = problem - if pkg1 in cl10dict and pkg2 in cl10dict: - print "C" - elif problem in noupgproblems: - print "B" - else: - print "A" - cl = pkg1 in cl10dict and "CL10:" or "CL9: " - print cl, pkg1 - cl = pkg2 in cl10dict and "CL10:" or "CL9: " - print cl, pkg2 - for path in problems[problem]: - print path - print - -if __name__ == "__main__": - main() - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/loops.py new/smart-0.42/sandbox/loops.py --- old/smart-0.41.99/sandbox/loops.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/loops.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,105 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') - -from smart.cache import * -from sets import Set - -def forwardRequires(pkg, set): - for req in pkg.requires: - if req not in set: - set.add(req) - for prv in req.providedby: - if prv not in set: - set.add(prv) - for prvpkg in prv.packages: - if prvpkg not in set: - set.add(prvpkg) - forwardRequires(prvpkg, set) - -def backwardRequires(pkg, set): - for prv in pkg.provides: - if prv not in set: - set.add(prv) - for req in prv.requiredby: - if req not in set: - set.add(req) - for reqpkg in req.packages: - if reqpkg not in set: - set.add(reqpkg) - backwardRequires(reqpkg, set) - -def findPkgLoops(pkg): - fwd = Set([pkg]) - forwardRequires(pkg, fwd) - bwd = Set([pkg]) - backwardRequires(pkg, bwd) - set = fwd.intersection(bwd) - pkgs = Set([x for x in set if isinstance(x, Package)]) - prvs = Set([x for x in set if isinstance(x, Provides)]) - reqs = Set([x for x in set if isinstance(x, Requires)]) - for prv in prvs: - prvpkgs = Set([x for x in prv.packages if x in set]) - reqpkgs = Set() - for req in prv.requiredby: - if req in set: - reqpkgs.update([x for x in req.packages if x in set]) - if prvpkgs == reqpkgs: - set.remove(prv) - prvs = Set([x for x in set if isinstance(x, Provides)]) - for req in reqs: - if not Set(req.providedby).intersection(prvs): - set.remove(req) - for pkg in pkgs: - if not Set(pkg.provides).intersection(prvs): - set.remove(pkg) - return set - -def findLoops(): - pkgs = cache.getPackages() - doneset = Set() - loops = [] - for pkg in pkgs: - if pkg not in doneset: - set = findPkgLoops(pkg) - if len([x for x in set if isinstance(x, Package)]) > 1: - loops.append(set) - doneset.update(set) - return [x for x in loops if x] - -def dumpLoops(): - loops = findLoops() - shown = Set() - n = 0 - for set in loops: - n += 1 - file = open("loop%03d.dot" % n, "w") - file.write("digraph Loops {\n") - for pkg in [x for x in set if isinstance(x, Package)]: - if pkg not in shown: - shown.add(pkg) - file.write(' "%s" [ shape=box, style=filled, fillcolor=yellow ];\n' % pkg) - for req in pkg.requires: - if req not in set: - continue - if (pkg, req) not in shown: - shown.add((pkg, req)) - file.write(' "%s" -> "Requires: %s";\n' % (pkg, req)) - for prv in req.providedby: - if prv not in set: - continue - if (req, prv) not in shown: - shown.add((req, prv)) - file.write(' "Requires: %s" -> "Provides: %s";\n' % (req, prv)) - for prvpkg in prv.packages: - if prvpkg not in set: - continue - if (prv, prvpkg) not in shown: - shown.add((prv, prvpkg)) - file.write(' "Provides: %s" -> "%s";\n' % (prv, prvpkg)) - file.write("}\n") - -if __name__ == "__main__": - dumpLoops() - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/notobsoleted.py new/smart-0.42/sandbox/notobsoleted.py --- old/smart-0.41.99/sandbox/notobsoleted.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/notobsoleted.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') - -def main(): - for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl9"): - break - else: - continue - obsoleted = False - for prv in pkg.provides: - for obs in prv.obsoletedby: - for obspkg in obs.packages: - for loader in obspkg.loaderinfo: - if loader.getRepository().getName().startswith("cl10"): - obsoleted = True - break - if not obsoleted: - conflicted = [] - for prv in pkg.provides: - for cnf in prv.conflictedby: - for cnfpkg in cnf.packages: - for loader in cnfpkg.loaderinfo: - if loader.getRepository().getName() == "cl10": - conflicted.append(str(cnfpkg)) - break - if conflicted: - print pkg, "(conflicted by %s)" % ", ".join(conflicted) - else: - print pkg - -if __name__ == "__main__": - main() - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/notobsoleting.py new/smart-0.42/sandbox/notobsoleting.py --- old/smart-0.41.99/sandbox/notobsoleting.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/notobsoleting.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,53 +0,0 @@ -import sys -sys.argv = ["./smart.py", "test"] -execfile('./smart.py') - -def requiredByPackageObsoletingCL9(pkg, donemap=None): - # Is any recursively requiring package obsoleting some package in CL9? - if not donemap: - donemap = {} - donemap[pkg] = True - try: - for prv in pkg.provides: - for req in prv.requiredby: - for reqpkg in req.packages: - for reqpkgobs in reqpkg.obsoletes: - for reqpkgprv in reqpkgobs.providedby: - for reqpkgprvpkg in reqpkgprv.packages: - for loader in reqpkgprvpkg.loaderinfo: - repos = loader.getRepository() - if repos.getName().startswith("cl9"): - raise StopIteration - if (reqpkg not in donemap and - requiredByPackageObsoletingCL9(reqpkg, donemap)): - raise StopIteration - except StopIteration: - return True - return False - -def main(): - for pkg in cache.getPackages(): - for loader in pkg.loaderinfo: - if loader.getRepository().getName().startswith("cl10"): - break - else: - continue - # Check if it is obsoleting a package in CL9. - try: - for obs in pkg.obsoletes: - for prv in obs.providedby: - for prvpkg in prv.packages: - for loader in prvpkg.loaderinfo: - repos = loader.getRepository() - if repos.getName().startswith("cl9"): - raise StopIteration - except StopIteration: - continue - else: - if not requiredByPackageObsoletingCL9(pkg): - print pkg - -if __name__ == "__main__": - main() - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/sandbox/qtprogress.py new/smart-0.42/sandbox/qtprogress.py --- old/smart-0.41.99/sandbox/qtprogress.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/sandbox/qtprogress.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,107 +0,0 @@ -#!/usr/bin/python -from smart.progress import Progress -from qt import * - -import sys, os, time - -class QtProgressSubItem(QListViewItem): - - def __init__(self, listview, index): - self.index = index - - self.progresspm = None - self.subtopic = "" - - QListViewItem.__init__(self, listview) - - self.progress = QProgressBar() - self.progress.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - self.progress.setFixedSize(110, self.height()) - - def update(self, subtopic, percent): - self.progress.setProgress(percent) - self.progresspm = QPixmap.grabWidget(self.progress) - self.subtopic = subtopic - - def text(self, column): - if column == 1: - return self.subtopic - return "" - - def pixmap(self, column): - if column == 0: - return self.progresspm - - def width(self, fm, lv, column): - if column == 0: - return 110+1+lv.itemMargin()*2 - return QListViewItem.width(self, fm, lv, column) - - def compare(self, other, column, ascending): - return cmp(self.index, other.index) - -class QtProgress(Progress, QDialog): - - def __init__(self): - Progress.__init__(self) - QDialog.__init__(self) - - self.setModal(True) - self.setCaption("Operation Progress") - - self.layout = QVBoxLayout(self, 5, 5) - - self.topic = QLabel(self) - self.layout.addWidget(self.topic) - - self.progress = QProgressBar(self) - self.layout.addWidget(self.progress) - - self.listview = QListView(self) - self.listview.addColumn("Progress") - self.listview.addColumn("Description") - self.layout.addWidget(self.listview) - - self.subprogress = {} - self.subindex = 0 - - def expose(self, topic, percent, subkey, subtopic, subpercent, data): - QDialog.show(self) - - self.topic.setText(topic) - self.progress.setProgress(percent) - - if subkey: - if subkey in self.subprogress: - item = self.subprogress[subkey] - else: - item = QtProgressSubItem(self.listview, self.subindex) - self.subindex += 1 - self.subprogress[subkey] = item - item.update(subtopic, subpercent) - else: - self.listview.triggerUpdate() - qApp.processEvents() - -def test(): - a = QApplication(sys.argv) - - prog = QtProgress() - data = {"item-number": 0} - total, subtotal = 100, 100 - prog.start(True) - prog.setTopic("Installing packages...") - for n in range(1,total+1): - data["item-number"] = n - prog.set(n, total) - prog.setSubTopic(n, "package-name%d" % n) - for i in range(0,subtotal+1): - prog.setSub(n, i, subtotal, subdata=data) - prog.show() - time.sleep(0.01) - prog.stop() - -if __name__ == "__main__": - test() - -# vim:ts=4:sw=4:et diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/smart/backends/deb/pm.py new/smart-0.42/smart/backends/deb/pm.py --- old/smart-0.41.99/smart/backends/deb/pm.py 2006-06-16 13:45:20.000000000 +0200 +++ new/smart-0.42/smart/backends/deb/pm.py 2006-06-26 03:48:43.000000000 +0200 @@ -142,6 +142,10 @@ assert changeset.get(upgpkg) is REMOVE, \ "Installing %s while %s is kept?" % \ (pkg, upgpkg) + assert upgpkg not in upgraded, \ + "Two packages (%s and %s) upgrading the " \ + "same installed package (%s)!?" % \ + (pkg, upgraded[upgpkg], upgpkg) upgraded[upgpkg] = pkg try: @@ -172,6 +176,14 @@ if opt: baseargs.append("--instdir=%s" % opt) + PURGE = object() + + if sysconf.get("deb-purge"): + for i in range(len(sorted)): + pkg, op = sorted[i] + if op is REMOVE and not upgraded.get(pkg): + sorted[i] = pkg, PURGE + done = {} while sorted: @@ -183,8 +195,8 @@ if op is REMOVE and upgraded.get(pkg) in done: continue done[pkg] = True - opname = {REMOVE: "remove", CONFIG: "config", UNPACK: "unpack", - INSTALL: "install"} + opname = {REMOVE: "remove", PURGE: "purge", CONFIG: "config", + UNPACK: "unpack", INSTALL: "install"} print "[%s] %s" % (opname[op], pkg) pkgs.append(pkg) @@ -197,6 +209,9 @@ args.append("--force-depends") args.append("--force-remove-essential") args.append("--remove") + elif op is PURGE: + args.append("--force-remove-essential") + args.append("--purge") elif op is UNPACK: args.append("--unpack") elif op is CONFIG: diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/smart/backends/rpm/README new/smart-0.42/smart/backends/rpm/README --- old/smart-0.41.99/smart/backends/rpm/README 2006-06-16 13:45:21.000000000 +0200 +++ new/smart-0.42/smart/backends/rpm/README 1970-01-01 01:00:00.000000000 +0100 @@ -1,46 +0,0 @@ -If you want to implement a new loader for RPM packages, -take care about the following issues: - -- Package versions must have the architecture appended as - @arch. We can't use '.' as the separator because this is - a character present in many package releases, thus we - wouldn't be able to tell if we're looking at an - archiutecture or a part of a release, when dealing with - provides. - -- There's a special RPMNameProvides class that must be used - to provide the package name itself together with the package - version and the architecture appended. We must use a special - class here to be able to match RPMObsoletes against - package names only, since that's the way RPM expects it to - happen. Appending the architecture is necessary for - multilib handling of upgrades. Notice that RPM packages - already provide the name/version explicitly, so instead - of just adding a new provides, it's usually necessary - to catch the existent provides and change the class/append - the arch when matching the package name/version. - -- The equivalent of RPM Obsoletes relation is Upgrades+Conflicts - in Smart, so do not just use upgrades instead of obsoletes. - -- There's a special RPMPreRequires class to handle pre-requires. - If the channel provides this information, you should use - RPMRequires and RPMPreRequires instances as necessary. - -- The way Smart handles upgrades is by introducing Upgrades - relations. Smart will NOT check package names when upgrading. - This way, for RPM it's necessary to introduce explicit - upgrade relations like RPMObsoletes(name, "<", versionarch). - This will match against RPMNameProvides of packages with a - lower version - -- Strip out epochs == 0 everywhere (package version, provide - version, require version, etc). There are some sources of - information which do not differentiate an absent epoch from - a 0 epoch, so the only way to handle that is using epoch 0 - everywhere. - -- When handling dependencies (provides, requires, etc) without - versions, use None as the version/relation, not the empty - string (""). - diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/smart-0.41.99/smart/const.py new/smart-0.42/smart/const.py --- old/smart-0.41.99/smart/const.py 2006-06-16 13:45:22.000000000 +0200 +++ new/smart-0.42/smart/const.py 2006-06-26 03:51:29.000000000 +0200 @@ -21,7 +21,7 @@ # import sys -VERSION = "0.41" +VERSION = "0.42" RECURSIONLIMIT = sys.getrecursionlimit() ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit-unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit-help@opensuse.org