Index: client/Makefile ================================================================== --- client/Makefile +++ client/Makefile @@ -33,11 +33,11 @@ mkdir teapot-client-tmp.vfs cp -r lib teapot-client.tcl teapot-client-tmp.vfs/ echo 'package require starkit' > teapot-client-tmp.vfs/main.tcl echo 'starkit::startup' >> teapot-client-tmp.vfs/main.tcl echo 'source $$starkit::topdir/teapot-client.tcl' >> teapot-client-tmp.vfs/main.tcl - ./teapot-client.tcl get teapot-client-tmp.vfs/ tcl tcl md5 fileutil + ./teapot-client.tcl get teapot-client-tmp.vfs/ tcl tcl md5 fileutil vfs::zip $(TCLKIT) support/sdx.kit wrap teapot-client-tmp.kit rm -rf teapot-client-tmp.vfs mv teapot-client-tmp.kit teapot-client.kit clean: Index: client/lib/teapotclient0.1/teapotclient.tcl ================================================================== --- client/lib/teapotclient0.1/teapotclient.tcl +++ client/lib/teapotclient0.1/teapotclient.tcl @@ -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