[45949] users/perry/port_cutleaves/port_cutleaves

perry at macports.org perry at macports.org
Sun Jan 25 17:59:07 PST 2009


Revision: 45949
          http://trac.macports.org/changeset/45949
Author:   perry at macports.org
Date:     2009-01-25 17:59:07 -0800 (Sun, 25 Jan 2009)
Log Message:
-----------
perry/port_cutleaves - Cleaned up the code.

Modified Paths:
--------------
    users/perry/port_cutleaves/port_cutleaves

Modified: users/perry/port_cutleaves/port_cutleaves
===================================================================
--- users/perry/port_cutleaves/port_cutleaves	2009-01-26 01:09:00 UTC (rev 45948)
+++ users/perry/port_cutleaves/port_cutleaves	2009-01-26 01:59:07 UTC (rev 45949)
@@ -11,8 +11,14 @@
     return [version $port]_[revision $port][variants $port]
 }
 
-proc cut_leaves {leaves {processed_leaves {}}} {
-    # Filter out already processed leaves.
+proc cut_leaves {{processed_leaves {}}} {
+    global exit_status option
+
+    if {[catch {set leaves [leaves]} result]} {
+        puts stderr "Error: $result"
+        return 1
+    }
+
     set to_process {}
     foreach leaf $leaves {
         set full_name [full_name $leaf]
@@ -23,17 +29,15 @@
         lappend to_process          $leaf
     }
 
-    # Return if there are no new leaves to process.
     set total_leaves [llength $to_process]
     if {$total_leaves < 1} {
         puts "There are no new leaves to process."
-        return 0
+        return $exit_status
     }
 
     set current_leaf    1
     set to_uninstall    {}
 
-    # Process each leaf.
     foreach leaf $to_process {
         set composite_version   [composite_version $leaf]
         set full_name           [full_name $leaf]
@@ -44,15 +48,15 @@
             set status Inactive
         }
 
-        # Execute the specified action.
         puts "\[Leaf $current_leaf of $total_leaves] $full_name ($status):"
         puts -nonewline "  \[keep] / (u)ninstall / (f)lush / (a)bort: "
         flush stdout
+
         gets stdin action
         switch -glob $action {
             a* {
                 puts "\nAborting port_cutleaves..."
-                exit 0
+                return $exit_status
             }
             f* {
                 puts "\nFlushing any uninstallation operations...\n"
@@ -68,55 +72,51 @@
         set current_leaf [expr $current_leaf + 1]
     }
 
-    # Uninstall the specified leaves.
     if {[llength $to_uninstall] < 1} {
         puts "No leaves were marked for uninstallation."
-        return 0
+        return $exit_status
     }
+
     set uninstalled [uninstall $to_uninstall]
     if {[llength $uninstalled] < 1} {
         puts "\nNo leaves were uninstalled."
         return 1
     }
+
     puts "\nThe following ports were uninstalled:"
     foreach port $uninstalled {
         puts "  $port"
     }
 
-    # Search for new leaves.
     puts "\nSearch for new leaves?"
     puts -nonewline "  \[no] / (y)es: "
     flush stdout
+
     gets stdin choice
     if {[regexp {^y} $choice]} {
-        # $option(F) corresponds to the exclusions file.
-        global option
-
         puts {}
-        return [cut_leaves [leaves [exclusions $option(F)]] $processed_leaves]
+        return [cut_leaves $processed_leaves]
     }
 
-    return 0
+    return $exit_status
 }
 
 proc exclusions {file} {
-    # Open the specified exclusions file.
     if {![file exists $file]} {
-        return {}
+        return -code error "'$file' does not exist."
     } elseif {[catch {set exclusions_file [open $file]} result]} {
-        puts stderr "Warning: open failed: $result"
-        return {}
+        return -code error $result
     }
 
     set exclusions {}
     foreach line [split [read -nonewline $exclusions_file] \n] {
-        # Ignore comments and empty lines.
         switch -regexp $line {
             {^\s*#} -
             {^$}    {}
             default { lappend exclusions $line }
         }
     }
+
     close $exclusions_file
     return $exclusions
 }
@@ -129,13 +129,17 @@
     return [lindex $port 4]
 }
 
-proc leaves {{exclusions {}}} {
+proc leaves {} {
+    global option
     registry::open_dep_map
 
-    # Return a list of installed ports with no dependents.
     if {[catch {set installed [registry::installed]} result]} {
-        puts stderr "Error: registry::installed failed: $result"
-        return {}
+        return -code error $result
+    } elseif {[catch {set exclusions [exclusions $option(F)]} result]} {
+        if {![regexp {does not exist} $result]} {
+            return -code error $result
+        }
+        set exclusions {}
     }
 
     set leaves {}
@@ -148,10 +152,16 @@
     return $leaves
 }
 
-proc list_leaves {leaves} {
+proc list_leaves {} {
+    if {[catch {set leaves [leaves]} result]} {
+        puts stderr "Error: $result"
+        return 1
+    }
+
     foreach leaf $leaves {
         puts [full_name $leaf]
     }
+    return 0
 }
 
 proc name {port} {
@@ -165,8 +175,6 @@
 proc should_be_excluded {port exclusions} {
     foreach exclusion $exclusions {
         set full_name [full_name $port]
-        # Return true if the exclusion, considered as a string literal or
-        # regular expression, matches the port's full name.
         if {$exclusion eq $full_name || [regexp $exclusion $full_name]} {
             return 1
         }
@@ -175,12 +183,15 @@
 }
 
 proc uninstall {ports} {
+    global exit_status
+
     set uninstalled {}
     foreach port $ports {
         if {[catch {portuninstall::uninstall [name $port] \
                                              [composite_version $port] {}} \
                    result]} {
-            puts stderr "Error: portuninstall:uninstall failed: $result"
+            set exit_status 1
+            puts stderr "Error: $result"
         } else {
             lappend uninstalled [full_name $port]
         }
@@ -198,7 +209,6 @@
 
 # - Main ---------------------------------------------------------------------
 
-# Parse the command line arguments.
 package require cmdline
 set options {
     { F.arg ~/.port_leaves.exclude \
@@ -214,24 +224,23 @@
     exit 1
 }
 
-# Initialize the MacPorts system.
 if {[catch {source $option(t)/macports1.0/macports_fastload.tcl} \
            result]} {
-    puts stderr "Error: source failed: $result"
+    puts stderr "Error: $result"
     exit 1
 }
 package require macports
 if {[catch {mportinit} result]} {
-    puts stderr "Error: mportinit failed: $result"
+    puts stderr "Error: $result"
     exit 1
 }
 
-# Execute the specified action.
+set exit_status 0
+
 if {$option(V)} {
-    puts port_cutleaves-$VERSION
+    exit [puts port_cutleaves-$VERSION]
 } elseif {$option(l)} {
-    list_leaves [leaves [exclusions $option(F)]]
+    exit [list_leaves]
 } else {
-    exit [cut_leaves [leaves [exclusions $option(F)]]]
+    exit [cut_leaves]
 }
-exit 0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090125/de995acc/attachment-0001.html>


More information about the macports-changes mailing list