[geany/plugins.geany.org] 7281c6: Changed plugin pages generation concept
Volodymyr Kononenko
git-noreply at xxxxx
Mon Apr 15 11:22:54 UTC 2013
Branch: refs/heads/master
Author: Volodymyr Kononenko <vm at kononenko.ws>
Committer: Volodymyr Kononenko <volodymyr.kononenko at globallogic.com>
Date: Mon, 15 Apr 2013 11:22:54 UTC
Commit: 7281c688cd4fb9d5fc9be6b4e13dfdb0e341db07
https://github.com/geany/plugins.geany.org/commit/7281c688cd4fb9d5fc9be6b4e13dfdb0e341db07
Log Message:
-----------
Changed plugin pages generation concept
* the plugin listing (left side navigation bar) is now being generated
from all plugins, available in master branch
* if the plugin had different page in previous Geany versions, these
pages are also being generated. Links to them are included in the
bottom of plugin page
* fixed checking exceptions in EXCLUDE_PLUGINS
Modified Paths:
--------------
gencontent.sh
Modified: gencontent.sh
398 files changed, 264 insertions(+), 134 deletions(-)
===================================================================
@@ -8,8 +8,8 @@
# plugins.geany.org website
#
# (C) Copyright 2010 by Dominic Hopf <dmaphy at googlemail.com>
-# Version: 1.1.1
-# Last Change: 2011-12-17
+# Version: 1.2.0
+# Last Change: 2013-04-15
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,6 +25,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# ChangeLog:
+# 2013-04-15 Volodymyr Kononenko <vm at kononenko.ws>
+# * the plugin listing (left side navigation bar) is now being generated
+# from all plugins, available in master branch
+# * if the plugin had different page in previous Geany versions, these
+# pages are also being generated. Links to them are included in the
+# bottom of plugin page
+# * fixed checking exceptions in EXCLUDE_PLUGINS
+#
# 2011-12-17 Dominic Hopf <dmaphy at googlemail.com>
# * generate .html files from READMEs for the latest Geany-Plugins version
# instead of git master
@@ -47,169 +55,291 @@
# missing!
# SOURCESDIR is the directory, where the README files will be found
-SOURCESDIR=$HOME"/.tmp/geany-plugins/"
+SOURCESDIR=${HOME}"/.tmp/geany-plugins/"
+
+WORKDIR=$(pwd)"/"
# CONTENTDIR is the directory, where the generated HTML files will be put
-CONTENTDIR="./content/"
+CONTENTDIR=${WORKDIR}"content/"
# LOGDIR is the directory where to put any logfiles and information about the
# generation of the content files
-LOGDIR="./gencontent_logs/"
+LOGDIR=${WORKDIR}"gencontent_logs/"
# plugins to exclude from the nightly re-generation via rst2html because they
# have a separate HTML page not generated from the README file
-EXCLUDE_PLUGINS=( geanylatex geanysendmail geanylua )
+declare -a EXCLUDE_PLUGINS=( geanylatex geanysendmail geanylua )
+
+RST2HTML=$(which rst2html)
+TIDY=$(which tidy)
+
+# List of plugins, available in the letest release
+declare -a RELEASE_PLUGIN_LIST
-RST2HTML="/usr/bin/rst2html"
-TIDY="/usr/bin/tidy"
+# List of plugins, available in the letest release
+declare -a MASTER_PLUGIN_LIST
if [ ! -x "$RST2HTML" ]
then
- echo "rst2html not found. Exiting."
- exit 127
+ echo "rst2html not found. Exiting."
+ exit 127
fi
if [ ! -x "$TIDY" ]
then
- echo "tidy not found. Exiting."
- exit 127
+ echo "tidy not found. Exiting."
+ exit 127
fi
-# small function to check an array if an element is included
in_array()
{
- NEEDLE=$1
- shift
-
- # search for the NEEDLE $1 in the haystack $@
- for j in $@;
- do
- if [ $NEEDLE == $j ]; then
- return 0;
- fi;
- done;
-
- return 1;
+ declare -a arr=("${!2}")
+ found=0
+
+ for i in "${arr[@]}"
+ do
+ if [ "${i}" == "$1" ]; then
+ found=1
+ fi
+ done
+
+ return ${found}
}
-if [ ! -d $SOURCESDIR ]; then
- echo -e "Directory containing sources $SOURCESDIR could not be found. Trying to clone from git...\n"
- git clone git://github.com/geany/geany-plugins.git $SOURCESDIR
-fi
+function prepare_source_dir()
+{
+ if [ ! -d "${SOURCESDIR}" ]; then
+ echo -e "Directory containing sources $SOURCESDIR could not be found.\nTrying to clone from git...\n"
+ git clone git://github.com/geany/geany-plugins.git ${SOURCESDIR}
+ fi
+
+ if [ $? -ne 0 ]; then
+ echo "git clone failed. Exiting..."
+ exit 1
+ fi
+}
-cd $SOURCESDIR
-
-echo "Checking out master branch..."
-git checkout master
-echo "Updating master branch..."
-git pull
-
-VERSION=`git tag -l | tail -n1`
-echo "Found latest Geany-Plugins version: $VERSION."
-
-git branch | grep $VERSION
-
-if [ $? -ne 0 ]; then
- echo "A local branch does not exist for $VERSION."
- echo "Checking if $VERSION exists remote.."
- UPSTREAM=`git branch -r | grep $VERSION`
-
- if [ $? -eq 0 ]; then
- echo "Remote branch $UPSTREAM found. Checking out..."
- git checkout -b $VERSION $UPSTREAM
- else
- echo "Could not find a remote branch. Checking out the tag $VERSION..."
- git checkout $VERSION > /dev/null
- fi
-else
- echo "A local branch exists for $VERSION. Updating..."
- git checkout $VERSION && git pull
-fi
-cd - > /dev/null
+function prepare_content_dir()
+{
+ if [ ! -d "${CONTENTDIR}" ]; then
+ echo -e "Directory containing contents $CONTENTDIR could not be found!\n"
+ exit 1
+ fi
+}
-if [ ! -d $CONTENTDIR ]; then
- echo -e "Directory containing contents $CONTENTDIR could not be found!\n"
- exit 1
-fi
+function prepare_log_dir()
+{
+ mkdir -p ${LOGDIR}
+}
+
+
+function add_to_navigation()
+{
+ dir=$1
+ title=$(echo ${dir} | sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g')
+ echo "<li><a href=\"${dir}.html\">${title}</a></li>" >> "${CONTENTDIR}geany-plugins-listing.html"
+}
-mkdir -p $LOGDIR
-
-
-# reset geany-plugins-listing.html, the file which is included as navigation
-rm -f $CONTENTDIR"geany-plugins-listing.html"
-touch $CONTENTDIR"geany-plugins-listing.html"
-
-for i in `ls $SOURCESDIR`;
-do
- if [ -d $SOURCESDIR$i -a $i"x" != "buildx" -a $i"x" != "pox" ]; then
- # check if the current plugin is included in the exclusion-list...
- in_array $i ${EXCLUDE_PLUGINS[@]}
-
- if [ $? -eq 0 ]; then # ... if yes, ...
- # ... add it to the navigation ...
- title=`echo ${i} | sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g'`
- echo "<li><a href=\"$i.html\">${title}</a></li>" >> $CONTENTDIR"geany-plugins-listing.html"
- continue # ... and jump to the next one
- fi;
-
- LOGFILE=$LOGDIR$i"_log_"`date "+%Y-%m-%d"`
-
- echo -e "Generating content file $i.html...\n\n" > $LOGFILE
-
- if [ -s $SOURCESDIR$i/README ]; then
- # TODO: there is still output from rst2html to the shell, that ideally should'nt be
- # TODO: newer versions of rst2html may face problems with the configuration files encoding
- $RST2HTML -s --config=$CONTENTDIR"rst2html_config.conf" $SOURCESDIR$i/README > .README.html 2> $LOGFILE
- title=`echo ${i} | sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g'`
- echo "<li><a href=\"$i.html\">${title}</a></li>" >> $CONTENTDIR"geany-plugins-listing.html"
-
- if [ $? -ne 0 ]; then
- echo -e "$RST2HTML exited with $?.\n\n"
- continue
- fi
- else
- echo -e "File $SOURCESDIR$i/README not found.\nYou might want to have a look whats up there.\nCopying no-readme-template instead.."
- cp "./templates/no-readme-template.html" $CONTENTDIR$i.html
- sed -i "s/{plugin_name}/$i/g" $CONTENTDIR$i.html
- continue
- fi
- echo -e "\n\n" >> $LOGFILE
-
-
- $TIDY -config $CONTENTDIR"tidy.conf" .README.html >> $LOGFILE 2>&1
- case "$?" in
- 1)
- echo -e "$TIDY exited with 1, There were warnings."
- ;;
- 2)
- echo "$TIDY exited with 2. There were errors.\n\n"
- continue
- ;;
- *)
- echo -e "$TIDY exited with $?. Everything should be fine.\n"
- ;;
- esac
- echo -e "Result:\t$CONTENTDIR$i.html\nLog:\t$LOGFILE\n"
- echo -e "\n\n" >> $LOGFILE
-
- # since tidy just outputs spaces, not tabs, we'll replace those spaces
- # with tabs again ourself
- sed -i "s/ /\t/g" .README.html
- cp .README.html $CONTENTDIR$i.html
- echo -e "\n\n" >> $LOGFILE
-
- fi # if [ -d $SOURCESDIR$i -a $i"x" != "buildx" -a $i"x" != "pox" ];
-done
-
-echo "Switching back to master branch..."
-git checkout master
+function is_plugin()
+{
+ f=$1
+ cd ${SOURCESDIR}
+ if [ -d "${f}" ] && [ "${f}x" != "buildx" ] && [ "${f}x" != "pox" ]; then
+ return 1
+ else
+ return 0
+ fi
+}
+
+
+# Generates geany-plugins-listing.html - the file which is included as navigation
+function gen_plugins_listing_html()
+{
+ cd ${SOURCESDIR}
+
+ echo "Checking out master branch..."
+ git checkout master
+ echo "Updating master branch..."
+ git pull
+
+ cd ${WORKDIR}
+
+ # reset old geany-plugins-listing.html
+ rm -f ${CONTENTDIR}"geany-plugins-listing.html"
+
+ for dir in $(ls ${SOURCESDIR})
+ do
+ is_plugin ${dir}
+ if [ $? -eq 1 ]; then
+ add_to_navigation ${dir}
+ MASTER_PLUGIN_LIST+=("${dir}")
+ fi
+ done
+}
+
+
+function gen_html_from_readme()
+{
+ plugin="$1"
+ dir="$2"
+ LOGFILE="${LOGDIR}${plugin}_log_"$(date "+%Y-%m-%d")
+
+ cd ${CONTENTDIR}
+ # TODO: newer versions of rst2html may face problems with the configuration files encoding
+ $RST2HTML -s --config=${CONTENTDIR}"rst2html_config.conf" ${SOURCESDIR}${plugin}/README ${SOURCESDIR}.README.html 2> $LOGFILE
+ cd - > /dev/null
+
+ retcode=$?
+ if [ ${retcode} -ne 0 ]; then
+ echo -e "$RST2HTML exited with ${retcode}.\n\n"
+ fi
+
+ $TIDY -config ${WORKDIR}tidy.conf .README.html >> $LOGFILE 2>&1
+ case "$?" in
+ 1)
+ echo -e "$TIDY exited with 1. There were warnings."
+ ;;
+ 2)
+ echo "$TIDY exited with 2. There were errors.\n\n"
+ ;;
+ *)
+ echo -e "$TIDY exited with $?. Everything should be fine.\n"
+ ;;
+ esac
+ echo -e "Result:\t${dir}${plugin}.html\nLog:\t${LOGFILE}\n"
+ echo -e "\n\n" >> $LOGFILE
+
+ # since tidy just outputs spaces, not tabs, we'll replace those spaces
+ # with tabs again ourself
+ sed -i "s/ /\t/g" .README.html
+ cp .README.html ${dir}${plugin}.html
+ echo -e "\n\n" >> ${LOGFILE}
+}
+
+
+function gen_plugin_pages()
+{
+ cd $SOURCESDIR
+ for fname in $(ls ${SOURCESDIR})
+ do
+ is_plugin ${fname}
+ if [ $? -ne 1 ]; then
+ continue
+ fi
+
+ RELEASE_PLUGIN_LIST+=(${fname})
+
+ in_array ${fname} EXCLUDE_PLUGINS[@]
+ if [ $? -eq 1 ]; then
+ continue
+ fi
+
+ prevtag=""
+ for tag in $(git tag | tac)
+ do
+ git checkout -q ${tag}
+ if [ ${tag} == $(git tag | tail -n 1) ]; then
+ if [ -s ${SOURCESDIR}${fname}/README ]; then
+ gen_html_from_readme ${fname} ${CONTENTDIR}
+ else
+ echo -e "File ${SOURCESDIR}${fname}/README not found.\nYou might want to have a look whats up there.\nCopying no-readme-template instead."
+ cp ${WORKDIR}/templates/no-readme-template.html ${CONTENTDIR}${fname}.html
+ sed -i "s/{plugin_name}/${fname}/g" ${CONTENTDIR}${fname}.html
+ prevtag=${tag}
+ continue
+ fi
+ else
+ diff=$(git diff ${prevtag} -- ${fname}/README)
+ if [ -n "${diff}" ]; then
+ # diff output is not empty
+ mkdir -p ${CONTENTDIR}${tag}
+ gen_html_from_readme ${fname} ${CONTENTDIR}${tag}"/"
+ fi
+ fi
+ prevtag=${tag}
+ done
+
+ git checkout -q $(git tag | tail -n 1)
+ done
+}
+
+
+# The function generates pages for plugins, which are missing in release
+# but are present in master branch
+function gen_new_plugins_pages()
+{
+ git checkout master
+ for plugin in ${MASTER_PLUGIN_LIST[@]}
+ do
+ in_array ${plugin} RELEASE_PLUGIN_LIST[@]
+ if [ $? -eq 0 ]; then
+ gen_html_from_readme ${plugin} ${CONTENTDIR}
+ fi
+ done
+}
+
+
+function add_links_to_old_pages()
+{
+ declare -A header_added
+ for plugin in ${RELEASE_PLUGIN_LIST[@]}
+ do
+ header_added["${plugin}"]=0
+ done
+
+ for tag in $(ls ${CONTENTDIR})
+ do
+ if [ ! -d ${CONTENTDIR}${tag} ]; then
+ # this is not dir with old pages. Skip it
+ continue
+ fi
+ for plugin in $(ls ${CONTENTDIR}${tag} | awk -F'.' '{print $1}')
+ do
+ if [ ${header_added[${plugin}]} -eq 0 ]; then
+ # Adding header
+ echo -e "<div class=\"section\" id=\"docs-for-previous-versions\">\n<h3>\nDocs for previous versions\n</h3>\n<p>\n<ul>\n" >> ${CONTENTDIR}${plugin}.html
+ header_added["${plugin}"]=1
+ fi
+ echo -e "<li><a href=\"index.php?site=${tag}/${plugin}\">${tag}</a></li>\n" >> ${CONTENTDIR}${plugin}.html
+ done
+ done
+
+ # closing opened tags
+ for plugin in "${!header_added[@]}"
+ do
+ if [ ${header_added[${plugin}]} -eq 1 ]; then
+ echo -e "</ul>\n</p>\n</div>" >> ${CONTENTDIR}${plugin}.html
+ $TIDY -config ${WORKDIR}tidy.conf ${CONTENTDIR}${plugin}.html > /dev/null 2>&1
+ fi
+ done
+}
+
# clean up any unneccessary files
-find $LOGDIR -mtime +7 -delete # delete logfiles older than 7 days
+function clean_up()
+{
+ # delete logfiles older than 7 days
+ find $LOGDIR -mtime +7 -delete
+}
+
+
+function main()
+{
+ prepare_source_dir
+ prepare_content_dir
+ prepare_log_dir
+ gen_plugins_listing_html
+ gen_plugin_pages
+ gen_new_plugins_pages
+ add_links_to_old_pages
+ clean_up
+}
+
+main
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list