@@ -45,10 +45,11 @@ namespace eval ::appfs { variable cachedir "/tmp/appfs-cache" variable ttl 3600 variable nttl 60 variable trusted_cas [list] + variable platform [::platform::generic] proc _hash_sep {hash {seps 4}} { for {set idx 0} {$idx < $seps} {incr idx} { append retval "[string range $hash [expr {$idx * 2}] [expr {($idx * 2) + 1}]]/" } @@ -141,11 +142,11 @@ } return true } - proc _normalizeOS {os} { + proc _normalizeOS {os {tolerant 0}} { set os [string tolower [string trim $os]] switch -- $os { "linux" - "freebsd" - "openbsd" - "netbsd" { return $os @@ -155,15 +156,19 @@ } "noarch" - "none" - "any" - "all" { return "noarch" } } + + if {$tolerant} { + return $os + } return -code error "Unable to normalize OS: $os" } - proc _normalizeCPU {cpu} { + proc _normalizeCPU {cpu {tolerant 0}} { set cpu [string tolower [string trim $cpu]] switch -glob -- $cpu { "i?86" { return "ix86" @@ -173,10 +178,14 @@ } "noarch" - "none" - "any" - "all" { return "noarch" } } + + if {$tolerant} { + return $cpu + } return -code error "Unable to normalize CPU: $cpu" } proc _as_user {code} { @@ -526,12 +535,12 @@ if {$pathlen > 2} { set os_cpu [lindex $path 2] set os_cpu [split $os_cpu "-"] - set retval(os) [lindex $os_cpu 0] - set retval(cpu) [lindex $os_cpu 1] + set retval(os) [_normalizeOS [lindex $os_cpu 0] 1] + set retval(cpu) [_normalizeCPU [lindex $os_cpu 1] 1] set retval(_children) versions set retval(_type) os-cpu if {$pathlen > 3} { set retval(version) [lindex $path 3] @@ -672,12 +681,21 @@ set retval(childcount) [llength [getchildren $path]] } } "os-cpu" { if {$pathinfo(os) == "platform" && $pathinfo(cpu) == ""} { + set check [::appfs::db eval { + SELECT DISTINCT os, cpuArch FROM packages WHERE hostname = $pathinfo(hostname) AND package = $pathinfo(package); + }] + set retval(type) symlink - set retval(source) [platform::generic] + + if {$check == [list "noarch" "noarch"]} { + set retval(source) "noarch-noarch" + } else { + set retval(source) $::appfs::platform + } } else { set check [::appfs::db onecolumn { SELECT 1 FROM packages WHERE hostname = $pathinfo(hostname) AND package = $pathinfo(package) AND os = $pathinfo(os) AND cpuArch = $pathinfo(cpu); }] if {$check == "1"} {