X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/bedb5293c16d105966d9bf48951483af0fbaff2a..24baab5c477bf1e57a0b169a7bac1d2e9ab0c974:/cmdline/apt-mark?ds=inline diff --git a/cmdline/apt-mark b/cmdline/apt-mark index 533ed8715..466a56f27 100755 --- a/cmdline/apt-mark +++ b/cmdline/apt-mark @@ -2,18 +2,66 @@ 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 + sys.exit(1) actions = { "markauto" : 1, "unmarkauto": 0 } +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") + if int(autoInst): + auto.add(pkgname) + print "\n".join(sorted(auto)) + + +def mark_unmark_automatic(filename, action, pkgs): + " mark or unmark automatic flag" + # open the statefile + if os.path.exists(STATE_FILE): + try: + tagfile = apt_pkg.ParseTagFile(open(STATE_FILE)) + outfile = open(STATE_FILE+".tmp","w") + except IOError, msg: + print "%s, are you root?" % (msg) + sys.exit(1) + while tagfile.Step(): + pkgname = tagfile.Section.get("Package") + autoInst = tagfile.Section.get("Auto-Installed") + if pkgname in pkgs: + if options.verbose: + print "changing %s to %s" % (pkgname,action) + newsec = apt_pkg.RewriteSection(tagfile.Section, + [], + [ ("Auto-Installed",str(action)) ]) + pkgs.remove(pkgname) + outfile.write(newsec+"\n") + else: + outfile.write(str(tagfile.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) + os.chmod(STATE_FILE, 0644) + + if __name__ == "__main__": apt_pkg.init() @@ -27,37 +75,22 @@ if __name__ == "__main__": action="store_true", dest="verbose", default=False, help="print verbose status messages to stdout") (options, args) = parser.parse_args() - if len(args) < 2: - parser.error("not enough argument") - - # get pkgs to change - if args[0] not in actions.keys(): - parser.error("first argument must be 'markauto' or 'unmarkauto'") - pkgs = args[1:] - action = actions[args[0]] # get the state-file if not options.filename: STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states" else: - STATE_FILE=options.state_file + STATE_FILE=options.filename - # 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") - if pkgname in pkgs: - if options.verbose: - print "changing %s to %s" % (pkgname,action) - newsec = apt_pkg.RewriteSection(tagfile.Section, - [], - [ ("Auto-Installed",str(action)) ] - ) - outfile.write(newsec+"\n") - else: - outfile.write(str(tagfile.Section)+"\n") - # all done, rename the tmpfile - os.rename(outfile.name, STATE_FILE) + if len(args) == 0: + parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'") + + if args[0] == "showauto": + show_automatic(STATE_FILE) + else: + # get pkgs to change + if args[0] not in actions.keys(): + parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'") + pkgs = args[1:] + action = actions[args[0]] + mark_unmark_automatic(STATE_FILE, action, pkgs)