ref: b83af1b4771da71841bc4f3a94f831d4d16a724e
dir: /syspatch/
#!/bin/rc argv0=$0 fn usage { echo 'usage:' $argv0 '[-u] [-f sources]' >[1=2] exit 'usage' } fn fetch { dir=() src=() type=() patch=() echo Fetching $1 dir=`{ndb/query -f $2 pkg $1 path} src=`{ndb/query -f $2 pkg $1 src} type=`{ndb/query -f $2 pkg $1 type} patch=`{ndb/query -f $2 pkg $1 patch} switch($type){ case git git/clone $src $dir cd $dir ~ $#patch 1 && hget $patch | patch case mkfs mkdir -p $dir hget $src | gunzip | disk/mkext -d $dir cd $dir ~ $#patch 1 && hget $patch | patch case patch cd $dir hget $patch | patch case patch5 cd $dir hget $patch | patch -p5 } } fn revert { dir=() type=() base=() dir=`{ndb/query -f $2 pkg $1 path} type=`{ndb/query -f $2 pkg $1 type} echo Reverting $1 base=`{basename -d $dir} if(~ $type patch){ git/revert $dir } if not { # TODO: git/walk -f UMR --> loop + switch, just rm/revert the files that were changed git/walk -f U $base | grep -s $1 && rm -rf $dir git/walk -f MR $base | grep -s $1 && git/revert $dir } } pkgs=() sourcesfile=$home/lib/sources undo=0 while (~ $1 -*) { switch ($1) { case -f sourcesfile=$2 shift case -u undo=1 case -* usage } shift } pkgs=`{awk '/pkg=/{print $1}' $sourcesfile | sed 's/pkg=//'} if (~ $#pkgs 0){ echo 'no entries in lib/sources' exit 'entries' } ~ $#* 0 || usage if (~ $undo 0) { webfs for(pkg in $pkgs){ fetch $pkg $sourcesfile } } if not { # Give us a git view cd / if(! test -d ,git) bind -ac /dist/plan9front / git/fs for(pkg in $pkgs){ revert $pkg $sourcesfile } }