Changeset 16451


Ignore:
Timestamp:
Feb 16, 2006, 8:28:17 PM (14 years ago)
Author:
jberry
Message:

Add to port(1) the ability to query for specific meta-data fields.

This is added to the info action, by means of per-action options.

For instance:

port info --maintainer --name category:java

When specific options are given, the legacy generalized info is not presented, and vis-versa.

By default, the fields for each port are listed one-per-line, with a field label
in front of each. (The field label is omitted if the global -q option is given).

% port info --name --maintainer tomcat5 apache2
maintainer: jberry@…
name: tomcat5
maintainer: james@…
name: apache2

If the --line option is given, the fields are presented on one line, tab separated,
and with no field label.

% port info --name --maintainer --line tomcat5 apache2
jberry@… tomcat5
james@… apache2

Note that the --line mode is particularly nice for later processing by sort, cut,
paste, etc.

Caveats:

  • Due to the way in which option processing is done, fields are always emitted

in order alphabetically by field name. Sorry about that ;)

Other Notes:

  • Field names are those from the PortIndex, plus some convenience versions of

those: (such as allowing category instead of categories).

  • Fields which are actually lists (such as depends_lib) are displayed comma-separated.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/src/port/port.tcl

    r15871 r16451  
    33exec @TCLSH@ "$0" "$@"
    44# port.tcl
    5 # $Id: port.tcl,v 1.155 2006/01/16 04:11:30 jberry Exp $
     5# $Id: port.tcl,v 1.156 2006/02/16 20:28:17 jberry Exp $
    66#
    77# Copyright (c) 2002-2006 DarwinPorts organization
     
    11421142                        }
    11431143                        array set portinfo [lindex $result 1]
    1144 
    1145                         puts -nonewline "$portinfo(name) $portinfo(version)"
    1146                         if {[info exists portinfo(revision)] && $portinfo(revision) > 0} {
    1147                                 puts -nonewline ", Revision $portinfo(revision)"
    1148                         }
    1149                         puts -nonewline ", $portinfo(portdir)"
    1150                         if {[info exists portinfo(variants)]} {
    1151                                 puts -nonewline " (Variants: "
    1152                                 for {set i 0} {$i < [llength $portinfo(variants)]} {incr i} {
    1153                                         if {$i > 0} { puts -nonewline ", " }
    1154                                         puts -nonewline "[lindex $portinfo(variants) $i]"
    1155                                 }
    1156                                 puts -nonewline ")"
    1157                         }
    1158                         puts ""
    1159                         if {[info exists portinfo(homepage)]} {
    1160                                 puts "$portinfo(homepage)"
    1161                         }
    1162        
    1163                         if {[info exists portinfo(long_description)]} {
    1164                                 puts "\n$portinfo(long_description)\n"
    1165                         }
    1166 
    1167                         # find build dependencies
    1168                         if {[info exists portinfo(depends_build)]} {
    1169                                 puts -nonewline "Build Dependencies: "
    1170                                 for {set i 0} {$i < [llength $portinfo(depends_build)]} {incr i} {
    1171                                         if {$i > 0} { puts -nonewline ", " }
    1172                                         puts -nonewline "[lindex [split [lindex $portinfo(depends_build) $i] :] end]"
    1173                                 }
    1174                                 set nodeps false
     1144                       
     1145                       
     1146                        # Map from friendly to less-friendly but real names
     1147                        array set name_map "
     1148                                        category                categories
     1149                                        maintainer              maintainers
     1150                                        platform                platforms
     1151                                        variant                 variants
     1152                                        "
     1153                                       
     1154                        # Understand which info items are actually lists
     1155                        # (this could be overloaded to provide a generic formatting code to
     1156                        # allow us to, say, split off the prefix on libs)
     1157                        array set list_map "
     1158                                        categories              1
     1159                                        depends_build   1
     1160                                        depends_lib             1
     1161                                        maintainers             1
     1162                                        platforms               1
     1163                                        variants                1
     1164                                        "
     1165                                       
     1166                        # Set up our field separators
     1167                        set show_label 1
     1168                        set field_sep "\n"
     1169                        set subfield_sep ", "
     1170                       
     1171                        # Tune for sort(1)
     1172                        if {[info exists options(ports_info_line)]} {
     1173                                array unset options ports_info_line
     1174                                set show_label 0
     1175                                set field_sep "\t"
     1176                                set subfield_sep ","
     1177                        }
     1178
     1179                        # Figure out whether to show field name
     1180                        set quiet [ui_isset ports_quiet]
     1181                        if {$quiet} {
     1182                                set show_label 0
     1183                        }
     1184                       
     1185                        # Spin through action options, emitting information for any found
     1186                        set fields {}
     1187                        foreach { option } [array names options ports_info_*] {
     1188                                set opt [string range $option 11 end]
     1189                               
     1190                                # Map from friendly name
     1191                                set ropt $opt
     1192                                if {[info exists name_map($opt)]} {
     1193                                        set ropt $name_map($opt)
     1194                                }
     1195                               
     1196                                # If there's no such info, move on
     1197                                if {![info exists portinfo($ropt)]} {
     1198                                        if {!$quiet} {
     1199                                                puts "no info for '$opt'"
     1200                                        }
     1201                                        continue
     1202                                }
     1203                               
     1204                                # Calculate field label
     1205                                set label ""
     1206                                if {$show_label} {
     1207                                        set label "$opt: "
     1208                                }
     1209                               
     1210                                # Format the data
     1211                                set inf $portinfo($ropt)
     1212                                if [info exists list_map($ropt)] {
     1213                                        set field [join $inf $subfield_sep]
     1214                                } else {
     1215                                        set field $inf
     1216                                }
     1217                               
     1218                                lappend fields "$label$field"
     1219                        }
     1220                       
     1221                        if {[llength $fields]} {
     1222                                # Show specific fields
     1223                                puts [join $fields $field_sep]
     1224                        } else {
     1225                       
     1226                                # If we weren't asked to show any specific fields, then show general information
     1227                                puts -nonewline "$portinfo(name) $portinfo(version)"
     1228                                if {[info exists portinfo(revision)] && $portinfo(revision) > 0} {
     1229                                        puts -nonewline ", Revision $portinfo(revision)"
     1230                                }
     1231                                puts -nonewline ", $portinfo(portdir)"
     1232                                if {[info exists portinfo(variants)]} {
     1233                                        puts -nonewline " (Variants: "
     1234                                        for {set i 0} {$i < [llength $portinfo(variants)]} {incr i} {
     1235                                                if {$i > 0} { puts -nonewline ", " }
     1236                                                puts -nonewline "[lindex $portinfo(variants) $i]"
     1237                                        }
     1238                                        puts -nonewline ")"
     1239                                }
    11751240                                puts ""
    1176                         }
    1177        
    1178                         # find library dependencies
    1179                         if {[info exists portinfo(depends_lib)]} {
    1180                                 puts -nonewline "Library Dependencies: "
    1181                                 for {set i 0} {$i < [llength $portinfo(depends_lib)]} {incr i} {
    1182                                         if {$i > 0} { puts -nonewline ", " }
    1183                                         puts -nonewline "[lindex [split [lindex $portinfo(depends_lib) $i] :] end]"
    1184                                 }
    1185                                 set nodeps false
    1186                                 puts ""
    1187                         }
    1188        
    1189                         # find runtime dependencies
    1190                         if {[info exists portinfo(depends_run)]} {
    1191                                 puts -nonewline "Runtime Dependencies: "
    1192                                 for {set i 0} {$i < [llength $portinfo(depends_run)]} {incr i} {
    1193                                         if {$i > 0} { puts -nonewline ", " }
    1194                                         puts -nonewline "[lindex [split [lindex $portinfo(depends_run) $i] :] end]"
    1195                                 }
    1196                                 set nodeps false
    1197                                 puts ""
    1198                         }
    1199                         if {[info exists portinfo(platforms)]} { puts "Platforms: $portinfo(platforms)"}
    1200                         if {[info exists portinfo(maintainers)]} { puts "Maintainers: $portinfo(maintainers)"}
     1241                                if {[info exists portinfo(homepage)]} {
     1242                                        puts "$portinfo(homepage)"
     1243                                }
     1244               
     1245                                if {[info exists portinfo(long_description)]} {
     1246                                        puts "\n$portinfo(long_description)\n"
     1247                                }
     1248       
     1249                                # find build dependencies
     1250                                if {[info exists portinfo(depends_build)]} {
     1251                                        puts -nonewline "Build Dependencies: "
     1252                                        for {set i 0} {$i < [llength $portinfo(depends_build)]} {incr i} {
     1253                                                if {$i > 0} { puts -nonewline ", " }
     1254                                                puts -nonewline "[lindex [split [lindex $portinfo(depends_build) $i] :] end]"
     1255                                        }
     1256                                        set nodeps false
     1257                                        puts ""
     1258                                }
     1259               
     1260                                # find library dependencies
     1261                                if {[info exists portinfo(depends_lib)]} {
     1262                                        puts -nonewline "Library Dependencies: "
     1263                                        for {set i 0} {$i < [llength $portinfo(depends_lib)]} {incr i} {
     1264                                                if {$i > 0} { puts -nonewline ", " }
     1265                                                puts -nonewline "[lindex [split [lindex $portinfo(depends_lib) $i] :] end]"
     1266                                        }
     1267                                        set nodeps false
     1268                                        puts ""
     1269                                }
     1270               
     1271                                # find runtime dependencies
     1272                                if {[info exists portinfo(depends_run)]} {
     1273                                        puts -nonewline "Runtime Dependencies: "
     1274                                        for {set i 0} {$i < [llength $portinfo(depends_run)]} {incr i} {
     1275                                                if {$i > 0} { puts -nonewline ", " }
     1276                                                puts -nonewline "[lindex [split [lindex $portinfo(depends_run) $i] :] end]"
     1277                                        }
     1278                                        set nodeps false
     1279                                        puts ""
     1280                                }
     1281                                if {[info exists portinfo(platforms)]} { puts "Platforms: $portinfo(platforms)"}
     1282                                if {[info exists portinfo(maintainers)]} { puts "Maintainers: $portinfo(maintainers)"}
     1283                        }
    12011284                }
    12021285        }
     
    20812164                                                          advance; break
    20822165                                                        }
    2083                                 --version       { ui_warn "(please use \"$cmdname version\" to get version information)" }
    20842166                                default         {
    20852167                                                          set key [string range $arg 2 end]
Note: See TracChangeset for help on using the changeset viewer.