Changeset 59836


Ignore:
Timestamp:
Oct 23, 2009, 8:58:55 PM (11 years ago)
Author:
jmr@…
Message:

new mportlistall proc, various slight efficiency improvements

Location:
trunk/base
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/portmgr/autosubmit.tcl

    r26177 r59836  
    3535        global prefix submit_options verbose
    3636
    37         if {[catch {set res [mportsearch "^.*\$"]} result]} {
     37        if {[catch {set res [mportlistall]} result]} {
    3838                puts "port search failed: $result"
    3939                exit 1
  • trunk/base/portmgr/jobs/PortIndex2MySQL.tcl

    r56620 r59836  
    231231
    232232# Load every port in the index through a search that matches everything.
    233 if {[catch {set ports [mportsearch ".+"]} errstr]} {
     233if {[catch {set ports [mportlistall]} errstr]} {
    234234    ui_error "${::errorInfo}"
    235235    ui_error "port search failed: $errstr"
  • trunk/base/portmgr/packaging/dpkgall.tcl

    r51780 r59836  
    348348        # If no portlist file was specified, create a portlist that includes all ports
    349349        if {[llength $portlist] == 0 || "$buildall_flag" == "true"} {
    350                 set res [mportsearch {.*}]
     350                set res [mportlistall]
    351351                foreach {name array} $res {
    352352                        lappend portlist $name
     
    758758proc get_portinfo {port} {
    759759        set searchstring [regex_escape_portname $port]
    760         set res [mportsearch "^${searchstring}\$"]
     760        set res [mportlookup ${searchstring}]
    761761
    762762        if {[llength $res] < 2} {
  • trunk/base/src/macports1.0/macports.tcl

    r59833 r59836  
    976976# mports:// sources).
    977977proc macports::getportdir {url {destdir "."}} {
    978     if {[regexp {(?x)([^:]+)://(.+)} $url match protocol string] == 1} {
    979         switch -regexp -- ${protocol} {
    980             {^file$} {
    981                 return [file normalize $string]
    982             }
    983             {^mports$} {
    984                 return [macports::index::fetch_port $url $destdir]
    985             }
    986             {^https?$|^ftp$} {
    987                 return [macports::fetch_port $url]
    988             }
    989             default {
    990                 return -code error "Unsupported protocol $protocol"
    991             }
    992         }
    993     } else {
    994         return -code error "Can't parse url $url"
     978    set protocol [macports::getprotocol $url]
     979    switch ${protocol} {
     980        file {
     981            return [file normalize [string range $url [expr [string length $protocol] + 3] end]]
     982        }
     983        mports {
     984            return [macports::index::fetch_port $url $destdir]
     985        }
     986        https -
     987        http -
     988        ftp {
     989            return [macports::fetch_port $url]
     990        }
     991        default {
     992            return -code error "Unsupported protocol $protocol"
     993        }
    995994    }
    996995}
     
    17541753    set found 0
    17551754    foreach source $sources {
    1756         set flags [lrange $source 1 end]
    17571755        set source [lindex $source 0]
    1758         if {[macports::getprotocol $source] == "mports"} {
    1759             array set attrs [list name $pattern]
    1760             set res [macports::index::search $macports::portdbpath $source [array get attrs]]
     1756        set protocol [macports::getprotocol $source]
     1757        if {$protocol == "mports"} {
     1758            set res [macports::index::search $macports::portdbpath $source [list name $pattern]]
    17611759            eval lappend matches $res
    17621760        } else {
     
    17971795                                array set portinfo $line
    17981796                            }
    1799                             switch -regexp -- [macports::getprotocol ${source}] {
    1800                                 {^rsync$} {
     1797                            switch $protocol {
     1798                                rsync {
    18011799                                    # Rsync files are local
    18021800                                    set source_url "file://[macports::getsourcepath $source]"
    18031801                                }
    1804                                 {^https?$|^ftp$} {
     1802                                https -
     1803                                http -
     1804                                ftp {
    18051805                                    if {[_source_is_snapshot $source filename extension]} {
    18061806                                        # daily snapshot tarball
     
    18581858    foreach source $sources {
    18591859        set source [lindex $source 0]
    1860         if {[macports::getprotocol $source] != "mports"} {
     1860        set protocol [macports::getprotocol $source]
     1861        if {$protocol != "mports"} {
    18611862            global macports::quick_index
    18621863            if {![info exists quick_index($sourceno,[string tolower $name])]} {
     
    18811882                    array set portinfo $line
    18821883
    1883                     switch -regexp -- [macports::getprotocol ${source}] {
    1884                         {^rsync$} {
    1885                             # Rsync files are local
     1884                    switch $protocol {
     1885                        rsync {
    18861886                            set source_url "file://[macports::getsourcepath $source]"
    18871887                        }
    1888                         {^https?$|^ftp$} {
     1888                        https -
     1889                        http -
     1890                        ftp {
    18891891                            if {[_source_is_snapshot $source filename extension]} {
    1890                                 # daily snapshot tarball
    18911892                                set source_url "file://[macports::getsourcepath $source]"
    18921893                             } else {
    1893                                 # default action
    18941894                                set source_url $source
    18951895                             }
     
    19061906                    if {[info exists porturl]} {
    19071907                        lappend line porturl $porturl
    1908                         ui_debug "Found port in $porturl"
    1909                     } else {
    1910                         ui_debug "Found port info: $line"
    19111908                    }
    19121909                    lappend matches $name
     
    19261923            }
    19271924        } else {
    1928             array set attrs [list name $name]
    1929             set res [macports::index::search $macports::portdbpath $source [array get attrs]]
     1925            set res [macports::index::search $macports::portdbpath $source [list name $name]]
    19301926            if {[llength $res] > 0} {
    19311927                eval lappend matches $res
     
    19371933    return $matches
    19381934}
     1935
     1936# Returns all ports in the indices. Faster than 'mportsearch .*'
     1937proc mportlistall {args} {
     1938    global macports::portdbpath macports::sources
     1939    set matches [list]
     1940
     1941    set found 0
     1942    foreach source $sources {
     1943        set source [lindex $source 0]
     1944        set protocol [macports::getprotocol $source]
     1945        if {$protocol != "mports"} {
     1946            if {![catch {set fd [open [macports::getindex $source] r]} result]} {
     1947                try {
     1948                    incr found 1
     1949                    while {[gets $fd line] >= 0} {
     1950                        array unset portinfo
     1951                        set name [lindex $line 0]
     1952                        set len [lindex $line 1]
     1953                        set line [read $fd $len]
     1954
     1955                        array set portinfo $line
     1956
     1957                        switch $protocol {
     1958                            rsync {
     1959                                set source_url "file://[macports::getsourcepath $source]"
     1960                            }
     1961                            https -
     1962                            http -
     1963                            ftp {
     1964                                if {[_source_is_snapshot $source filename extension]} {
     1965                                    set source_url "file://[macports::getsourcepath $source]"
     1966                                } else {
     1967                                    set source_url $source
     1968                                }
     1969                            }
     1970                            default {
     1971                                set source_url $source
     1972                            }
     1973                        }
     1974                        if {[info exists portinfo(portdir)]} {
     1975                            set porturl ${source_url}/$portinfo(portdir)
     1976                        } elseif {[info exists portinfo(portarchive)]} {
     1977                            set porturl ${source_url}/$portinfo(portarchive)
     1978                        }
     1979                        if {[info exists porturl]} {
     1980                            lappend line porturl $porturl
     1981                        }
     1982                        lappend matches $name $line
     1983                    }
     1984                } catch {*} {
     1985                    ui_warn "It looks like your PortIndex file for $source may be corrupt."
     1986                    throw
     1987                } finally {
     1988                    close $fd
     1989                }
     1990            } else {
     1991                ui_warn "Can't open index file for source: $source"
     1992            }
     1993        } else {
     1994            set res [macports::index::search $macports::portdbpath $source [list name .*]]
     1995            eval lappend matches $res
     1996        }
     1997    }
     1998    if {!$found} {
     1999        return -code error "No index(es) found! Have you synced your source indexes?"
     2000    }
     2001
     2002    return $matches
     2003}
     2004
    19392005
    19402006# Loads PortIndex.quick from each source into the quick_index, generating
  • trunk/base/src/port/port.tcl

    r59585 r59836  
    589589
    590590    if {![info exists all_ports_cache]} {
    591         set all_ports_cache [get_matching_ports "*"]
     591         if {[catch {set res [mportlistall]} result]} {
     592            global errorInfo
     593            ui_debug "$errorInfo"
     594            fatal "listing all ports failed: $result"
     595        }
     596        set results {}
     597        foreach {name info} $res {
     598            array unset portinfo
     599            array set portinfo $info
     600            add_to_portlist results [list url $portinfo(porturl) name $name]
     601        }
     602
     603        set all_ports_cache [portlist_sort $results]
    592604    }
    593605    return $all_ports_cache
     
    26172629    foreachport $portlist {
    26182630        if {$portname == "-all-"} {
    2619             set search_string ".+"
     2631           if {[catch {set res [mportlistall]} result]} {
     2632                global errorInfo
     2633                ui_debug "$errorInfo"
     2634                break_softcontinue "listing all ports failed: $result" 1 status
     2635            }
    26202636        } else {
    26212637            set search_string [regex_pat_sanitize $portname]
    2622         }
    2623        
    2624         if {[catch {set res [mportsearch ^$search_string\$ no]} result]} {
    2625             global errorInfo
    2626             ui_debug "$errorInfo"
    2627             break_softcontinue "search for portname $search_string failed: $result" 1 status
     2638            if {[catch {set res [mportsearch ^$search_string\$ no]} result]} {
     2639                global errorInfo
     2640                ui_debug "$errorInfo"
     2641                break_softcontinue "search for portname $search_string failed: $result" 1 status
     2642            }
    26282643        }
    26292644
Note: See TracChangeset for help on using the changeset viewer.