Branched r1161 trunk for 0.3.5 release

This commit is contained in:
frisco 2009-06-25 02:11:30 +00:00
parent d0ed91ffa8
commit 1d1139428b
802 changed files with 135155 additions and 0 deletions

View file

@ -0,0 +1,88 @@
#!/bin/sh
#
# this script symlinks all cbx po files to a language directory structure, as
# it is used by the pootle translation server
#
# all language files are chgrp'ed to the 'pootle' group and group write
# permissions are added
#
# call this script whenever you add _new_ languages to your translation server
#
# it is useful to be root while calling it - otherwise chgrp will fail
#
#
# Copyright 2006 sense.lab e.V.
#
# This file is part of the CryptoBox.
#
# The CryptoBox is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# The CryptoBox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the CryptoBox; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
set -eu
test $# -ne 1 && echo "Usage: $(basename $0) TARGET_DIR" && exit 1
test ! -d "$1" && echo "target directory does not exist: '$1'" && exit 1
if test "$(id -u)" == 0
then is_root=1
else is_root=0
echo "$(basename $0) not running as root: the language files will not be writeable for pootle" >&2
echo " run this script as root to change the permissions of the language files appropriately" >&2
fi
DEST_GROUP=pootle
TARGETPATH=${1%/}
BASEPATH=$(cd $(dirname "$0")/..; pwd)
############# functions ###############
# symlink a language file and chgrp if possible
# Paramters: LANG_FILE LANGUAGE
process_language_file()
{
test ! -d "${TARGETPATH}/$2" && mkdir -p "${TARGETPATH}/$2"
ln -sfn "$1" "${TARGETPATH}/$2/"
if test "$is_root" == 1
then chgrp "$DEST_GROUP" "$1" "$TARGETPATH/$2"
chmod g+w "$1" "$TARGETPATH/$2"
fi
}
############# main #################
for language in $(ls ${BASEPATH}/intl/) ; do
test ! -d "${BASEPATH}/intl/${language}" && continue
echo "Processing $language ..."
[ ! -d ${TARGETPATH}/${language} ] && mkdir -p ${TARGETPATH}/${language}
## base translation
find "${BASEPATH}/intl/${language}" -name \*.po | while read fname
do process_language_file "$fname" "$language"
done
## plugin translations
find "${BASEPATH}/plugins/" -name \*.po | \
grep "/intl/$language/" | while read fname
do process_language_file "$fname" "$language"
done
done
echo "Processing template files ..."
find ${BASEPATH}/intl ${BASEPATH}/plugins -type f -name \*.pot | while read fname
do process_language_file "$fname" "template"
done

View file

@ -0,0 +1,99 @@
#!/bin/bash
#mk_pydocs.sh
#
#This script creates new or updated browsable documentation from the Python
#docstrings in CryptoNAS. It must be run from the "trunk" directory.
#In addition, SVN must know about the "trunk/src" directory (i.e
#"trunk/src" or one of its parents must have been checked out previously).
#
#epydoc 3.0.1 or later is required for proper operation.
set -e
PYTHONPATH="src"
##Define variables which name programs
EPYDOC="epydoc"
RM="rm"
MV="mv"
MKDIR="mkdir"
LFTP="/usr/bin/lftp" ##must provide complete pathname here
TAR="tar"
SVN="svn"
##Output directory (note that this appears to require an absolute path name)
DOCTREE="${HOME}/src/pydoc/"
TAR_STRIP_DIRS="4"
##Location of a svn tree that it's ok to update and revert
SVN_SANDBOX="${HOME}/src/trunk"
##Top of the directory tree for Python libraries being tested
export PYTHONPATH="${HOME}/src/trunk/src"
PLUGINPATH="${HOME}/src/trunk/plugins"
##Capture the svn revision number corresponding to the pydoc docs
REVISION="`svn info src | grep -E 'Last Changed Rev: [[:digit:]]' | grep -o -E '[[:digit:]]+'`"
##Version string for html doc output
DOC_VSTRING="cnas-html_r${REVISION}"
##Name of temporary directory used for epydoc output
TEMP_HTML_PATH="${DOCTREE}cnas-html.tmp"
##Final name of epydoc output directory
HTML_PATH="${DOCTREE}html"
## Assume we are being run from the "trunk" directory
##Type(s) of documentation to create
PYDOC_ACTIONS="--html"
PYDOC_PROJNAME=CryptoNAS
PYDOC_URL="http://devel.cryptobox.org/"
PYDOC_OPTIONS="--show-sourcecode --verbose "
# --include-log
##Make sure sandbox is up-to-date
${SVN} revert ${SVN_SANDBOX}
${SVN} update ${SVN_SANDBOX}
#TODO: I bet there's a way to do this more cleanly using find -exec '{}' or something
## (or maybe not. Bash isn't Python.)
##Find source files to document. Look in src and plugin directories,
##but skip unittests and root_action files because they are not unique.
SOURCES="`find ${PYTHONPATH} -name '*.py'` \
`find ${PLUGINPATH} -name '*.py' ! -name '*unittests.py' ! -name '*root_action.py'`"
##Make a temporary directory in the doc tree
$MKDIR -p "${TEMP_HTML_PATH}"
##Generate pydocs in the temp directory
$EPYDOC $PYDOC_ACTIONS $PYDOC_OPTIONS --output=${TEMP_HTML_PATH} ${SOURCES}
##Remove the old docs directory
$RM -rf "${HTML_PATH}"
##Rename the new temp doc directory
$MV "${TEMP_HTML_PATH}" "${HTML_PATH}"
$RM -f ${DOCTREE}*.tgz
##Create compressed archive of newly-created docs
#use --strip-components to strip leading directories from paths in tar
$TAR --strip-components ${TAR_STRIP_DIRS} -czf "${DOCTREE}/${DOC_VSTRING}.tgz" "${HTML_PATH}"
#LFTP_OPTIONS=""
LFTP_HOST="sftp://systemausfall.org"
LFTP_DIR="/home/frisco/public_html/pydoc"
##If LFTP is enabled, perform upload to server
if [ -x ${LFTP} ]; then
${LFTP} -p 2222 -u frisco, ${LFTP_OPTIONS} -e "mirror -R --delete ${DOCTREE} ${LFTP_DIR}" ${LFTP_HOST}
fi

View file

@ -0,0 +1,9 @@
#!/bin/sh
#
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
#
# License: This script is distributed under the terms of version 2
# of the GNU GPL. See the LICENSE file included with the package.
#
grep "TODO" $(find "$(dirname $0)/.." -type f | grep -v "\.svn" | grep -v "$(basename $0)")

View file

@ -0,0 +1,207 @@
#!/usr/bin/env python
#
# Copyright 2006-2007 sense.lab e.V. <info@senselab.org>
#
# This file is part of the CryptoBox.
#
# All available hdf language files are parsed for creating pot (po-template) files.
# All existing po-file are merged with these templates to remove obsolete msgids.
# Additionally every msgstr of the english original is set to the value of the
# respective msgid.
# All resulting po files are chmod'ed to 0666 - this is useful if you locally use
# services like pootle.
# If there were no changes besides the "POT-Creation-Date" header, then the file
# is reverted via svn to avoid unnecessary commits.
#
#
# The CryptoBox is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# The CryptoBox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the CryptoBox; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import os
import sys
try:
import translate.storage.po, translate.convert.pot2po, translate.tools.pocompile
except ImportError, errMsg:
sys.stderr.write("Failed to import a python module of the 'translate' package!\n")
sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install translate-toolkit'.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
try:
import neo_cgi, neo_util
except ImportError, errMsg:
sys.stderr.write("Failed to import a python module of the 'clearsilver' package!\n")
sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install python-clearsilver'.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
try:
import subprocess
except ImportError, errMsg:
sys.stderr.write("Failed to import the python module 'subprocess'!\n")
sys.stderr.write("Please install python v2.4 or higher.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
LANGUAGE_FILE = 'language.hdf'
## name of the main domain and prefix for all plugin domains
GETTEXT_DOMAIN = 'cryptobox-server'
## set the msgstrs for this language to the value of the respective msgids
DEFAULT_LANG = 'en'
LANG_DIR = 'intl'
## mail adress for translation bugs
MAIL_ADDRESS = 'info@cryptobox.org'
## the complete list of languages wastes a lot of space - for now we use only a few
#ALL_LANGUAGES = "af aka am ar bn ca cs da de el en es et eu fa fi fr fur gl he hi hr hu hy is it ja ka kg ko ku lt lv mr ms mt nb ne nl nn ns pa pl pt ru sl sr st sv tr uk ve vi xh".split(" ")
ALL_LANGUAGES = "cs da de et en es fi fr hr hu it ja nl pl pt ru sl sv ur".split(" ")
# --------------=-=-=- functions -=-=-=--------------------
def revert_if_unchanged(po_file):
try:
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [ "svn", "diff", po_file ] )
except OSError, err_msg:
sys.stderr.write("Failed to execute subversion's diff: %s\n" % err_msg)
return
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
sys.stderr.write("Subversion returned an error: %d\n" % proc.returncode)
return
## no changes at all?
if not stdout:
return
lines = [ l for l in stdout.splitlines()
if ((l.find("POT-Creation-Date:") < 0 ) and \
((l.startswith("+") and (not l.startswith("+++"))) or \
(l.startswith("-") and (not l.startswith("---"))))) ]
## are there relevant changes? then we should not revert ...
if lines:
return
## revert to previous state
proc = subprocess.Popen(
shell = False,
args = [ "svn", "revert", po_file ] )
proc.wait()
def process_language_file(hdf_file, po_dir, textDomain):
## prepare hdf
if not os.path.isfile(hdf_file) or not os.access(hdf_file, os.R_OK):
sys.stderr.write("Unable to read the hdf file: %s" % hdf_file)
return
if not os.path.isdir(po_dir):
os.mkdir(po_dir)
pot_file = os.path.join(po_dir, "%s.pot" % textDomain)
hdf = neo_util.HDF()
hdf.readFile(hdf_file)
## update pot
if not os.path.isfile(pot_file):
sys.stdout.write("Creating: %s\n" % pot_file)
pot = translate.storage.po.pofile(encoding="utf-8")
pot.makeheader(pot_creation_date=True)
pot.updateheader(add=True, Project_Id_Version='CryptoBox-Server 0.3', pot_creation_date=True, language_team='sense.lab <%s>' % MAIL_ADDRESS, Report_Msgid_Bugs_To=MAIL_ADDRESS, encoding='utf-8', Plural_Forms=['nplurals=2','plural=(n != 1)'])
#TODO: somehow we need 'updateheaderplural'
else:
sys.stdout.write("Loading: %s\n" % pot_file)
pot = translate.storage.po.pofile.parsefile(pot_file)
## remove all msgids - we will add them later
pot.units = []
## add new entries
def walk_hdf(prefix, node):
def addPoItem(hdf_node):
## ignore hdf values with a "LINK" attribute
for (key,value) in hdf_node.attrs():
if key == "LINK":
return
if not hdf_node.value():
return
item = pot.findunit(hdf_node.value())
if not item:
item = pot.addsourceunit(hdf_node.value())
item.addlocation("%s%s" % (prefix, hdf_node.name()))
while node:
if node.name():
new_prefix = prefix + node.name() + '.'
else:
new_prefix = prefix
## as the attribute feature of clearsilver does not work yet, we
## have to rely on magic names to prevent the translation of links
if not (new_prefix.endswith(".Link.Rel.") \
or new_prefix.endswith(".Link.Prot.") \
or new_prefix.endswith(".Link.Abs.") \
or new_prefix.endswith(".Link.Attr1.name.") \
or new_prefix.endswith(".Link.Attr1.value.") \
or new_prefix.endswith(".Link.Attr2.name.") \
or new_prefix.endswith(".Link.Attr2.value.")):
addPoItem(node)
walk_hdf(new_prefix, node.child())
node = node.next()
walk_hdf("",hdf)
pot.savefile(pot_file)
p = translate.storage.po.pofile(pot_file)
for ld in ALL_LANGUAGES:
if not os.path.isdir(os.path.join(po_dir,ld)):
os.mkdir(os.path.join(po_dir, ld))
po_file = os.path.join(po_dir, ld, "%s.po" % textDomain)
if not os.path.isfile(po_file):
translate.convert.pot2po.convertpot(file(pot_file), file(po_file,'w'), None)
else:
po2_file = po_file + '.new'
translate.convert.pot2po.convertpot(file(pot_file), file(po2_file,'w'), file(po_file))
os.rename(po2_file, po_file)
if ld == DEFAULT_LANG:
## set every msgstr to the respective msgid
po_data = translate.storage.po.pofile.parsefile(po_file)
for po_unit in po_data.units:
po_unit.settarget(po_unit.getsource())
po_data.removeduplicates()
po_data.savefile(po_file)
else:
po_content = translate.storage.po.pofile.parsefile(po_file)
po_content.removeduplicates()
po_content.savefile(po_file)
revert_if_unchanged(po_file)
## make it writeable for pootle
os.chmod(po_file, 0666)
## compile po file
mo_file = po_file[:-3] + '.mo'
translate.tools.pocompile.convertmo(file(po_file), file(mo_file,'w'), file(pot_file))
# ----------------=-=-=- main -=-=-=-----------------------
if __name__ == "__main__":
## the project directory is the parent of the directory of this script
PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),os.path.pardir))
process_language_file(
os.path.join(PROJECT_DIR, 'templates', LANGUAGE_FILE),
os.path.join(PROJECT_DIR, LANG_DIR),
GETTEXT_DOMAIN)
for root, dirs, files in os.walk(os.path.join(PROJECT_DIR, 'plugins')):
if LANGUAGE_FILE in files:
process_language_file(
os.path.join(root,LANGUAGE_FILE),
os.path.join(root,LANG_DIR),
"%s-feature-%s" % (GETTEXT_DOMAIN,os.path.basename(root)))

View file

@ -0,0 +1,135 @@
#!/bin/sh
#
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
#
# License: This script is distributed under the terms of version 2
# of the GNU GPL. See the LICENSE file included with the package.
#
# $Id$
#
# export wiki pages to the cryptobox development tree
# this creates static and integrated pages
#
set -ue
# root directory of the cryptobox development environment
ROOT_DIR="$(dirname $0)/.."
# retrieve these pages from the wiki
PAGES="CryptoBox CryptoBoxUser CryptoBoxUserGettingStarted
CryptoBoxUserConfiguration CryptoBoxUserDailyUse CryptoBoxDev
CryptoBoxDevPreparation CryptoBoxDevCustomBuild CryptoBoxDevWorkFlow
CryptoBoxDevValidation CryptoBoxDevCustomConfigure CryptoBoxDevBackground
CryptoBoxDevKnownProblems"
#PAGES="CryptoBox"
# base URL
WIKI_HOST="https://systemausfall.org"
# the trailing slash is important
WIKI_URL=/trac/cryptobox/wiki/
CBOX_CGI="/doc?page="
LANGUAGES="de en"
DEST_DIR="$ROOT_DIR/doc/html"
OFFLINE_DIR="$ROOT_DIR/../live-cd/live-cd-tree.d/_offline/doc"
IMAGE_DIR="$ROOT_DIR/cbox-tree.d/var/www/cryptobox-misc"
TMP_DIR=/tmp/$(basename $0)-$$.d
HEADER_FILE=doc_header.inc
FOOTER_FILE=doc_footer.inc
WGET_OPTS="--quiet --no-check-certificate"
[ ! -e "$DEST_DIR" ] && echo "$DEST_DIR does not exist" && exit 1
for LANG in $LANGUAGES; do
for PAGE in $PAGES; do
PAGE_SRC="$WIKI_HOST$WIKI_URL$PAGE/$LANG"
echo "Importing $PAGE/$LANG:"
# replace sub-page-style '/' like moin does it (by '_2f')
TMP_FILE=$TMP_DIR/${PAGE}.html
mkdir -p "$TMP_DIR"
echo " downloading the page ..."
wget $WGET_OPTS --output-document="$TMP_FILE" "$PAGE_SRC" || { echo "Downloading ($PAGE_SRC) failed!"; exit 1; }
# check if this page exists
if grep -q "^describe $PAGE/$LANG here$" "$TMP_FILE"
then rm "$TMP_FILE"
PAGE_SRC=$(dirname $PAGE_SRC)
echo " trying to download default language page instead"
wget $WGET_OPTS --output-document="$TMP_FILE" "$PAGE_SRC" || { echo "Downloading ($PAGE_SRC) failed!" >&2; exit 1; }
# check, if there is even no default page
grep -q "^describe $PAGE/$LANG here$" "$TMP_FILE" && echo "This page ($PAGE_SRC) was not found!" >&2 && exit 1
fi
echo " removing header and footer ..."
# break lines before start of content
sed -i 's#<div id="content" class="wiki">#_END_OF_HEADER_\n#' "$TMP_FILE"
# the 'edit' buttons mark the end of the page
sed -i 's#<div class="buttons">#\n_START_OF_FOOTER_#' "$TMP_FILE"
# cut off a possible comment - section
sed -i "s#<form action=[^>]*\#commentpreview#\n_START_OF_FOOTER_#" "$TMP_FILE"
# remove all lines before and after "body"
sed -i '1,/_END_OF_HEADER_/d; /_START_OF_FOOTER_/,$d' "$TMP_FILE"
# close open divs
while [ "$(grep '<div' "$TMP_FILE" | wc -l)" -gt "$(grep '</div>' "$TMP_FILE" | wc -l)" ]
do echo "</div>" >>"$TMP_FILE"
done
#echo " removing link images (moin specific) ..."
# remove inter-wiki images
#sed -i 's#<[^<]*moin-inter.png[^>]*>##g' "$TMP_FILE"
# remove moin-www images
#sed -i 's#<[^<]*moin-www.png[^>]*> ##g' "$TMP_FILE"
# not necessary, because everything is a part of the repository
#echo " downloading requisites ..."
#wget --quiet --ignore-tags=a --no-clobber --page-requisites --convert-links --no-directories --base="$WIKI_HOST$WIKI_URL" --directory-prefix="$TMP_DIR" --html-extension --force-html --input-file="$TMP_FILE" || { echo "Downloading requisites for ($PAGE_SRC) failed!"; exit 1; }
echo " adjusting links for images ..."
sed -i "s#='[^']*/cryptobox-misc/\([^']*\)'#='/cryptobox-misc/\1'#g" "$TMP_FILE"
echo " adjusting wiki links ..."
# redirect wiki links to cryptobox cgi
sed -i "s#=\"$WIKI_URL\([^\.]*\)\"#=\"$CBOX_CGI\1\"#g" "$TMP_FILE"
# do it twice - somehow, the "g" flag does not work (it should replace multiple occurrences on a line)
sed -i "s#=\"$WIKI_URL\([^\.]*\)\"#=\"$CBOX_CGI\1\"#g" "$TMP_FILE"
# remove language specific part of moin link
for TLANG in $LANGUAGES
do sed -i "s#=\"$CBOX_CGI\([^\"]*\)/$TLANG#=\"$CBOX_CGI\1#g" "$TMP_FILE"
done
# build the static pages
echo " building static doc page"
offline_file=$OFFLINE_DIR/$LANG/$(basename $TMP_FILE)
mkdir -p "$OFFLINE_DIR/$LANG"
cat "$OFFLINE_DIR/$HEADER_FILE" "$OFFLINE_DIR/$LANG/$HEADER_FILE" "$TMP_FILE" "$OFFLINE_DIR/$LANG/$FOOTER_FILE" "$OFFLINE_DIR/$FOOTER_FILE" >"$offline_file"
sed -i "s%=\"$CBOX_CGI\([^\"#]*\)%=\"\1.html%g" "$offline_file"
# do it twice - this should not be necessary
sed -i "s%=\"$CBOX_CGI\([^#\"]*\)%=\"\1.html%g" "$offline_file"
sed -i "s#='/cryptobox-misc#='../../../var/www/cryptobox-misc#g" "$offline_file"
# split language specific part of moin link and replace it by current language
for TLANG in $LANGUAGES
do sed -i "s#=\"\([^/]*\)/${TLANG}.html\"#=\"\1.html\"#g" "$offline_file"
done
# some last changes to the dynamic pages (must be done _after_ the static pages)
# add weblang for current language to query string
sed -i "s;=\"$CBOX_CGI\([^#\"]*\)\([#\"]\);=\"$CBOX_CGI\1\&weblang=$LANG\2;g" "$TMP_FILE"
# move cgi-doc
mv "$TMP_FILE" "$DEST_DIR/$LANG"
echo " finished!"
done
done
[ -n "$(find "$TMP_DIR" -type f)" ] && mv "$TMP_DIR"/* "$IMAGE_DIR"
rmdir "$TMP_DIR"