X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/4b2de6720d65c9e7a2cfded0da7d04d758a8e1e2..f7cbd1fbc57bc13dfc2ebc246453ab0875d4151a:/cmdline/apt-mark diff --git a/cmdline/apt-mark b/cmdline/apt-mark index 226d2079b..c64d4356c 100755 --- a/cmdline/apt-mark +++ b/cmdline/apt-mark @@ -2,13 +2,14 @@ from optparse import OptionParser +import sys +import os.path + try: import apt_pkg except ImportError: - print "Error importing apt_pkg, is python-apt installed?" - -import sys -import os.path + print >> sys.stderr, "Error importing apt_pkg, is python-apt installed?" + sys.exit(1) actions = { "markauto" : 1, "unmarkauto": 0 @@ -18,10 +19,10 @@ def show_automatic(filename): if not os.path.exists(STATE_FILE): return auto = set() - tagfile = apt_pkg.ParseTagFile(open(STATE_FILE)) - while tagfile.Step(): - pkgname = tagfile.Section.get("Package") - autoInst = tagfile.Section.get("Auto-Installed") + tagfile = apt_pkg.TagFile(open(STATE_FILE)) + for section in tagfile: + pkgname = section.get("Package") + autoInst = section.get("Auto-Installed") if int(autoInst): auto.add(pkgname) print "\n".join(sorted(auto)) @@ -31,21 +32,30 @@ def mark_unmark_automatic(filename, action, pkgs): " mark or unmark automatic flag" # open the statefile if os.path.exists(STATE_FILE): - tagfile = apt_pkg.ParseTagFile(open(STATE_FILE)) - outfile = open(STATE_FILE+".tmp","w") - while tagfile.Step(): - pkgname = tagfile.Section.get("Package") - autoInst = tagfile.Section.get("Auto-Installed") + try: + tagfile = apt_pkg.TagFile(open(STATE_FILE)) + outfile = open(STATE_FILE+".tmp","w") + except IOError, msg: + print "%s, are you root?" % (msg) + sys.exit(1) + for section in tagfile: + pkgname = section.get("Package") + autoInst = section.get("Auto-Installed") if pkgname in pkgs: if options.verbose: print "changing %s to %s" % (pkgname,action) - newsec = apt_pkg.RewriteSection(tagfile.Section, + newsec = apt_pkg.rewrite_section(section, [], - [ ("Auto-Installed",str(action)) ] - ) + [ ("Auto-Installed",str(action)) ]) + pkgs.remove(pkgname) outfile.write(newsec+"\n") else: - outfile.write(str(tagfile.Section)+"\n") + outfile.write(str(section)+"\n") + if action == 1: + for pkgname in pkgs: + if options.verbose: + print "changing %s to %s" % (pkgname,action) + outfile.write("Package: %s\nAuto-Installed: %d\n\n" % (pkgname, action)) # all done, rename the tmpfile os.chmod(outfile.name, 0644) os.rename(outfile.name, STATE_FILE) @@ -58,6 +68,7 @@ if __name__ == "__main__": # option parsing parser = OptionParser() parser.usage = "%prog [options] {markauto|unmarkauto} packages..." + parser.epilog = "apt-mark is deprecated, use apt-get markauto/unmarkauto." parser.add_option("-f", "--file", action="store", type="string", dest="filename", help="read/write a different file") @@ -66,12 +77,19 @@ if __name__ == "__main__": help="print verbose status messages to stdout") (options, args) = parser.parse_args() + if not args: + parser.print_help() + sys.exit(1) + # get the state-file if not options.filename: - STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states" + STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states" else: STATE_FILE=options.filename + if len(args) == 0: + parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'") + if args[0] == "showauto": show_automatic(STATE_FILE) else: