@@ -1,13 +1,22 @@ #! /usr/bin/env tclsh # This file has no license. It is in the public domain. # -- Roy Keene [20081025T1400Q] +namespace eval ::teapotclient {} + +package require Tcl package require md5 package require http package require fileutil + +set ::teapotclient::have_vfszip 0 +catch { + package require vfs::zip + set ::teapotclient::have_vfszip 1 +} namespace eval ::teapotclient {} namespace eval ::teapotclient { proc __get_tmpdir {} { foreach checkenv [list TMPDIR TEMP TMP TEMPDIR] { @@ -42,11 +51,24 @@ return $::env(HOME) } proc __unzip {dir file} { - exec unzip -d $dir -n -qq $urlcachefile + file mkdir $dir + if {$::teapotclient::have_vfszip} { + set mntfd [vfs::zip::Mount $file $file] + + foreach filetail [glob -nocomplain -tails -directory $file *] { + set srcfile [file join $file $filetail] + set destdir [file dirname [file join $dir $filetail]] + file copy -force -- $srcfile $destdir + } + + vfs::zip::Unmount $mntfd $file + } else { + exec unzip -d $dir -n -qq $urlcachefile + } } set pkgcachedir [file join [__get_homedir] ".teapot-client" "cachedir"] # Conversions from Teapot-style names to local ones