[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