home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/python
-
- from optparse import OptionParser
-
- try:
- import apt_pkg
- except ImportError:
- print "Error importing apt_pkg, is python-apt installed?"
-
- import sys
- import os.path
-
- actions = { "markauto" : 1,
- "unmarkauto": 0
- }
-
- if __name__ == "__main__":
- apt_pkg.init()
-
- # option parsing
- parser = OptionParser()
- parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
- parser.add_option("-f", "--file", action="store", type="string",
- dest="filename",
- help="read/write a different file")
- parser.add_option("-v", "--verbose",
- 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
-
- # 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.chmod(outfile.name, 0644)
- os.rename(outfile.name, STATE_FILE)
-