2019-05-20 | Paul Boddie | raw annotate files changeset graph | Experiment with a temporary attribute on objects. This attribute must be cleared when assignments occur, but it should also be cleared when objects escape from functions (which is not yet done). Since the motivation for marking objects as temporary is their re-use in certain operations, the objective is to avoid objects being used in multiple places and still being marked as temporary and potentially undergoing re-use/mutation. Perhaps the only way of guaranteeing exclusive access to an object is if it is provided as a function result and is immediately passed to a function or operation, with this function either mutating the object or ensuring its direct propagation to another such function. | temporary-object-experiment |
1 #!/bin/sh 2 3 DIRNAME=`dirname $0` 4 PROGNAME=`basename $0` 5 OUTDIR=$1 6 7 if [ ! "$OUTDIR" ] || [ "$1" = '--help' ] ; then 8 cat 1>&2 <<EOF 9 Usage: $PROGNAME <output directory> [ <page prefix> ] [ --releases [ --sign ] ] 10 EOF 11 exit 1 12 fi 13 14 if [ -e "$OUTDIR" ]; then 15 echo "Please remove $OUTDIR before generating a new package." 1>&2 16 exit 1 17 fi 18 19 if [ "$2" = '--releases' ]; then 20 PREFIX= 21 RELEASES=$2 22 SIGN=$3 23 else 24 PREFIX=$2 25 RELEASES=$3 26 SIGN=$4 27 fi 28 29 # Generate release archives. These are held in a separate, semi-permanent 30 # place so that archives and signatures are not regenerated unnecessarily. 31 32 if [ "$RELEASES" ]; then 33 "$DIRNAME/make_releases.sh" releases 34 fi 35 36 if [ "$SIGN" ]; then 37 "$DIRNAME/sign_releases.sh" releases 38 fi 39 40 # Generate a manifest for the page package. 41 42 MANIFEST="$OUTDIR/MOIN_PACKAGE" 43 44 mkdir "$OUTDIR" 45 cat > "$MANIFEST" <<EOF 46 MoinMoinPackage|1 47 EOF 48 49 # Add the pages to the manifest. 50 51 DOCS="$DIRNAME/../wiki" 52 53 cp "$DOCS/"* "$OUTDIR" 54 55 for FILENAME in "$DOCS/"* ; do 56 BASENAME=`basename "$FILENAME"` 57 PAGENAME=`echo "$BASENAME" | sed 's/--/\//g'` 58 if [ "$PREFIX" ]; then 59 if [ "$PAGENAME" = "FrontPage" ]; then 60 PAGENAME="$PREFIX" 61 else 62 PAGENAME="$PREFIX/$PAGENAME" 63 fi 64 fi 65 echo "AddRevision|$BASENAME|$PAGENAME" >> "$MANIFEST" 66 done 67 68 if [ ! -e "releases" ]; then 69 echo "No releases to add to the page package!" 1>&2 70 else 71 # Combine the releases with the pages. 72 73 ATTACHMENT="attachment_" 74 75 for FILENAME in releases/* ; do 76 BASENAME=`basename "$FILENAME"` 77 cp "$FILENAME" "$OUTDIR/$ATTACHMENT$BASENAME" 78 done 79 80 # Add the releases to the manifest. 81 82 for FILENAME in releases/* ; do 83 BASENAME=`basename "$FILENAME"` 84 PAGENAME="Downloads" 85 if [ "$PREFIX" ]; then 86 PAGENAME="$PREFIX/$PAGENAME" 87 fi 88 echo "AddAttachment|$ATTACHMENT$BASENAME|$BASENAME|$PAGENAME" >> "$MANIFEST" 89 done 90 fi 91 92 zip -j "$OUTDIR" "$OUTDIR/"*