]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-mark
apt-pkg/cdrom.h: move new member to the end to minimize ABI risk
[apt.git] / cmdline / apt-mark
index 226d2079b6d6f0bb1603c6d12339cab08988bc43..c64d4356cc101e3c6dafcc7c0d04f646d7cad9b4 100755 (executable)
@@ -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: