commit 65fb6fb74cb14afcc8b7040fcc6f253dec622fd0 from: rsc date: Thu Mar 24 05:17:01 2005 UTC Be a bit more resilient to errors. commit - ed8dfe37dbd4470bbb9ce487e78b1d6ae365fb85 commit + 65fb6fb74cb14afcc8b7040fcc6f253dec622fd0 blob - bb388c5f96f013b94da9e8f3eb11a9407ee9f9a2 blob + d7ee27a8f7e4fbc1808b8788008c3ed67904d43a --- src/cmd/netfiles/main.c +++ src/cmd/netfiles/main.c @@ -462,7 +462,7 @@ do3(Win *w, char *text) cleanname(name); cprint("b3 \t=> name=%s addr=%s\n", name, addr); if(strcmp(name, lastfail) == 0){ - cprint("b3 \t=> non-existant (cached)\n"); + cprint("b3 \t=> nonexistent (cached)\n"); free(name); return -1; } blob - ad2d626598ef798adf453f067cc50c93e4e31779 blob + be13371301b8c5d2e4e6a44b26e0eb71562b7284 --- src/cmd/netfiles/netfileget +++ src/cmd/netfiles/netfileget @@ -13,33 +13,34 @@ if(! ~ $#* 2){ . netfilelib.rc $1 -fn getfile { - rm -f $t - if(! 9 echo -get $2 $t | mysftp $1 >$t.e >[2=1]) - exit 1 - egrep -v '^Fetching' $t.e >$t.e2 - if(test -s $t.e2){ - cat $t.e >[1=2] - exit 1 - } - cat $t -} - fn getfile9p { if(! 9p read $1/$2) exit 1 } -fn getdir { - if(! {echo cd $2; echo ls -l} | mysftp $1 | sed '1,2d; s/sftp> //g; /^$/d' >$t) - exit 1 - cat $t | awk '$NF == "." || $NF == ".." { next } {s = $NF; if($0 ~ /^d/) s = s "/"; print s}' -} - fn getdir9p { 9p ls -l $1/$2 | awk '{s=$NF; if($0 ~ /^d/) s=s"/"; print s}' } +fn getfile { + rm -f $t + echo get $2 $t | runsftp -e $1 + cat $t +} + +fn getdir { + {echo cd $2; echo ls -l} | runsftp $1 + awk ' + $NF == "." || $NF == ".." { next } + { + s = $NF + if($0 ~ /^d/) + s = s "/" + print s + } + ' $t.sftp +} + $f $1 $2 exit 0 blob - f610ccd01f780386bfc13ab3dd970cb1b7c4117d blob + 13af8440cb6535416aab103e207f92c598499ef3 --- src/cmd/netfiles/netfilelib.rc +++ src/cmd/netfiles/netfilelib.rc @@ -3,19 +3,43 @@ ns=`{namespace} if([2]/dev/null) f=$f^9p -fn mysftp { - if(! [2]/dev/null){ - echo 'caching sftp' $1 >[1=2] - sftpcache -D $1 +t=/tmp/netfilexxx.$pid.$USER +fn sigexit { rm -f $t $t.* } + +fn runsftp { + eflag=no + if(~ $1 -e){ + eflag=yes + shift } if(! [2]/dev/null){ - sftp -b /dev/stdin $1 + sftpcache -D $1 >/dev/tty } - if not{ - {cat; echo DONE} | dial -e 'unix!'^$ns/$1.sftp + { + if(! [2]/dev/null){ + sed 's/^/-/' | sftp -b /dev/stdin $1 && echo DONE + } + if not{ + {cat; echo DONE} | dial -e 'unix!'^$ns/$1.sftp + } + } >$t.sftp1 >[2=1] + sed 's/^/1 /' $t.sftp1 + sed '/^sftp> /d + /^Connecting to /d + /^Fetching /d + /^Uploading /d + /^DONE$/d + ' $t.sftp1 >$t.sftp + if(! 9 grep -s '^DONE$' $t.sftp1){ + echo sftp did not finish: >[1=2] + sed 's/^/ /g' $t.sftp1 >[1=2] + exit 1 } + if(~ $eflag yes && test -s $t.sftp){ + echo sftp error output: >[1=2] + sed '/^DONE$/d; s/^/ /g' $t.sftp1 >[1=2] + exit 1 + } + status='' } -t=/tmp/netfilexxx.$pid.$USER -fn sigexit { rm -f $t $t.e $t.e2 } - blob - 84cdf610aa94660a003387eb82deccea145f5297 blob + c8a0ee3f45005b27f2a1c4254272ceab64823722 --- src/cmd/netfiles/netfileput +++ src/cmd/netfiles/netfileput @@ -11,13 +11,7 @@ f=putfile fn putfile{ cat >$t - if(! 9 echo -put $t $2 | mysftp $1 >$t.e >[2=1]) - exit 1 - egrep -v '^Uploading' $t.e >$t.e2 - if(test -s $t.e2){ - cat $t.e >[1=2] - exit 1 - } + echo put $t $2 | runsftp -e $1 } fn putfile9p{ if(! 9p write $1/$2) blob - f01c5de6aa8ce8d8eaf279e477504b408af2fb0d blob + d27448d72feed25430636a3a30f89d65e19cb324 --- src/cmd/netfiles/netfilestat +++ src/cmd/netfiles/netfilestat @@ -10,23 +10,23 @@ f=dostat . netfilelib.rc $1 fn dostat { - { - 9 echo -cd $2 - } | mysftp $1 >$t - if(9 test -e $t -a ! -s $t){ + echo cd $2 | runsftp $1 + if(9 test -e $t.sftp -a ! -s $t.sftp){ echo directory exit 0 } - if(9 grep -s 'Can''t change directory|is not a directory' $t){ + if(9 grep -s 'Can''t change directory|is not a directory' $t.sftp){ echo file exit 0 } - if(9 grep -s 'Couldn''t stat remote file|such file' $t){ + if(9 grep -s 'Couldn''t stat remote file|such file' $t.sftp){ echo nonexistent exit 0 } - cat $t >[1=2] - echo unknown error + { + echo unknown error: + sed 's/^/ /' $t.sftp + } >[1=2] exit 0 }