[Assorted-commits] SF.net SVN: assorted: [556] shell-tools/trunk/src/bash-commons/assorted. bash
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-03-02 16:46:14
|
Revision: 556 http://assorted.svn.sourceforge.net/assorted/?rev=556&view=rev Author: yangzhang Date: 2008-03-02 08:46:12 -0800 (Sun, 02 Mar 2008) Log Message: ----------- newer assorted.bash does packaging, releasing, readme-munging Modified Paths: -------------- shell-tools/trunk/src/bash-commons/assorted.bash Modified: shell-tools/trunk/src/bash-commons/assorted.bash =================================================================== --- shell-tools/trunk/src/bash-commons/assorted.bash 2008-03-02 16:45:53 UTC (rev 555) +++ shell-tools/trunk/src/bash-commons/assorted.bash 2008-03-02 16:46:12 UTC (rev 556) @@ -3,43 +3,144 @@ # This is a common include file for all project configuration scripts for # Assorted Projects. +# This takes an argument specifying the operation, which can be: +# +# - publish: generate the website and upload it +# - stage: just stage; don't upload +# - package: create a package (i.e. stage a release) +# - release: package and upload release to google code + . common.bash || exit 1 -root_site_dir="$( parent-dir named assorted )/assorted-site/trunk" -: ${clean:=false} +# Required variables + +: $fullname $version $license $websrcs $webfiles $rels + +projdir="$( dirname "$0" )" +cd $projdir + +project="$( basename "$( realpath "$projdir/.." )" )" +root_site_dir="$( parent-dir named assorted )/assorted-site/trunk" || + die 'could not find project root dir' +: ${clean:=false} ${nodl:=false} prof=shell-sf base_web_dir=assorted/htdocs webdir=$base_web_dir/$project stagedir="$( mktemp -d )" +package=$project-$version -if (( ${#webfiles} > 0 )) ; then - for inp in "${webfiles[@]}" ; do - if [[ "${inp%:*}" == "$inp" ]] ; then - cp -r "$inp" "$stagedir/" - else - mkdir -p "$stagedir/${inp%:*}" - cp -r $( eval ls "${inp#*:}" ) "$stagedir/${inp%:*}" - fi - done -fi +dllinks() { + if ! $nodl ; then + python -c " +from sys import * +def f(): + for arg in argv[2:]: + kind, _ = arg.split(':') + if kind == 'src-tgz': + yield ( '[download src tgz $version]', + 'http://assorted.googlecode.com/files/$package.tar.gz' ) +if argv[1] == 'links': + print ' | '.join( tup[0] for tup in f() ) +else: + print '\\n'.join( tup[0] + ': ' + tup[1] for tup in f() ) +" "$@" "${rels[@]}" + fi +} -if (( ${#websrcs} > 0 )) ; then - for src in "${websrcs[@]}" ; do - if [[ $src == README ]] - then out=index.html - else out="$( basename "${src%.*}.html" )" - fi - pandoc -s -S --tab-stop=2 \ - -c http://assorted.sf.net/main.css \ - -H "$root_site_dir/header.html" \ - -A "$root_site_dir/footer.html" \ - -o "$stagedir/$out" "$src" - done -fi +mkreadme() { + { + # Header. -if [[ "${1:-}" == pretend ]] ; then - echo "$stagedir" -else + cat << EOF +% $fullname +% Yang Zhang +% gmail:yaaang + +EOF + + # Download links. + + local dllinks="`dllinks links`" dlurls="`dllinks urls`" + + # Body. + + sed " + 1,1 { + s/\(\[.*\]\)/\1 | $dllinks | [more downloads] | [browse svn] | [SF project page]/ + s/^$/$dllinks | [more downloads] | [browse svn] | [SF project page]/ + } + 2,2 { + a\\ +$dlurls\\ +[more downloads]: http://code.google.com/p/assorted/downloads/list\\ +[browse svn]: http://assorted.svn.sourceforge.net/viewvc/assorted/$project/trunk/\\ +[SF project page]: http://www.sourceforge.net/projects/assorted/ + } + " README + + # Footer. + + case $license in + gpl3 ) echo " +License +------- + +The $fullname is released under the [GNU GPL3]. + +[GNU GPL3]: http://www.gnu.org/licenses/gpl.html +" ;; + * ) die "unknown license: $license" ;; + esac + + echo " +Contact +------- + +Copyright 2008 [Yang Zhang]. +All rights reserved. + +Back to [assorted.sf.net]. + +[Yang Zhang]: http://www.mit.edu/~y_z/ +[assorted.sf.net]: http://assorted.sourceforge.net/ +" + } +} + +stage() { + local gendir="$( mktemp -d )" + if (( ${#webfiles} > 0 )) ; then + for inp in "${webfiles[@]}" ; do + if [[ "${inp%:*}" == "$inp" ]] ; then + cp -r "$inp" "$stagedir/" + else + mkdir -p "$stagedir/${inp%:*}" + cp -r $( eval ls -d "${inp#*:}" ) "$stagedir/${inp%:*}" + fi + done + fi + + local src out + if (( ${#websrcs} > 0 )) ; then + for src in "${websrcs[@]}" ; do + if [[ $src == README ]] + then src=$gendir/README out=index.html ; mkreadme > $src + else out="$( basename "${src%.*}.html" )" + fi + pandoc -s -S --tab-stop=2 \ + -c http://assorted.sf.net/main.css \ + -H "$root_site_dir/header.html" \ + -A "$root_site_dir/footer.html" \ + -o "$stagedir/$out" "$src" + done + fi + + echo "gendir $gendir stagedir $stagedir" +} + +publish() { + stage + tar czf - -C "$stagedir" . | ssh $prof " set -o errexit -o nounset @@ -49,4 +150,52 @@ tar xzmf - chmod -R +rX . " -fi +} + +# TODO: insert license header into source files (intelligently, without +# displacing modelines) +package() { + for rel in "${rels[@]}" ; do + if [[ ${rel%:*} == $rel ]] ; then + die "invalid release spec: $rel" + else + local exportdir="$( mktemp -d )" dst=${rel%:*} src=${rel#*:} + case $dst in + src-tgz ) + svn -q export . $exportdir/$package + rm -f $exportdir/$package/publish.bash + tar czf $stagedir/$package.tar.gz -C $exportdir $package ;; + #jar ) + # cd $exportdir/ + # simple-build $projdir/build + # make -s + # jar cf $package.jar -C $exportdir $package ;; + * ) die "unknown dst type: $dst" ;; + esac + fi + done + + echo "exportdir $exportdir stagedir $stagedir" +} + +release() { + package + + for rel in "${rels[@]}" ; do + local dst=${rel%:*} src=${rel#*:} summary labels file + case $dst in + src-tgz ) + summary="Source tarball for $fullname $version" + labels='Featured,Type-Source' + file=$stagedir/$package.tar.gz ;; + jar ) + summary="JAR archive for $fullname $version" + labels=Featured + file=$stagedir/$package.jar ;; + * ) die "unknown dst type: $dst" ;; + esac + googlecode_upload -p assorted -s "$summary" -l "$labels" $file + done +} + +"$@" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |