* cmdline/apt-mark:
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 3 Jun 2009 10:05:20 +0000 (12:05 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 3 Jun 2009 10:05:20 +0000 (12:05 +0200)
  - add "showauto" option to show automatically installed packages

cmdline/apt-mark
debian/changelog

index f6e749e..226d207 100755 (executable)
@@ -14,34 +14,21 @@ 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.filename
+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):
         tagfile = apt_pkg.ParseTagFile(open(STATE_FILE))
@@ -63,3 +50,34 @@ if __name__ == "__main__":
         os.chmod(outfile.name, 0644)
         os.rename(outfile.name, STATE_FILE)
         os.chmod(STATE_FILE, 0644)
+
+
+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()
+
+    # get the state-file
+    if not options.filename:
+        STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states"
+    else:
+        STATE_FILE=options.filename
+
+    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)
index 7e953aa..3678e33 100644 (file)
@@ -52,6 +52,8 @@ apt (0.7.21) UNRELEASED; urgency=low
     hash by using locale independant tolower_ascii() function. 
     Thanks to M. Vefa Bicakci (LP: #80248)
   * build fixes for g++-4.4
+  * cmdline/apt-mark:
+    - add "showauto" option to show automatically installed packages
 
   [ Dereck Wonnacott ]
   * apt-ftparchive might write corrupt Release files (LP: #46439)