Hello gnulib developers,

I'm experimenting with GIT-based repositories for the web pages at 
http://www.gnu.org/software/XXX .

For details see here:
 http://lists.gnu.org/archive/html/savannah-hackers-public/2014-11/msg00001.html

The current gnulib script 'build-aux/gnu-web-update-doc-update' provides 
auto-update for manual pages using the current CVS repositories.

I'd like to ask for your feedback regarding the attached script, which does the 
same but pushes updates to the GIT repositories.

The repositories are already in place, and this script can be used.

Updated repositories will appear on the mock-up sever at:
    http://gnu.housegordon.org/software/<PROJECT>/manual/

You are welcomed to experiment and push changes using the script - before going to 
"production" the repositories will be reset to their current CVS state.

This is a separate script because only project wishing to switch to GIT will do 
so.
Other projects will keep using CVS.


Thanks,
 - Assaf


The differences between the CVS and GIT scripts are:
====
--- build-aux/gnu-web-doc-update        2014-07-09 19:10:24.681544245 -0400
+++ build-aux/gnu-web-doc-update-git    2014-11-06 16:00:19.833259408 -0500
@@ -167,23 +167,13 @@ cd "$srcdir"
 set +e
tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
-( cd $tmp \
-    && $CVS -d $u...@cvs.sv.gnu.org:/webcvs/$pkg co $pkg )
-$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
-
+$GIT clone --quiet $u...@git.sv.gnu.org:/srv/git/web/$pkg $tmp/$pkg || exit 1
+$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/$pkg/manual || exit 1
 (
-  cd $tmp/$pkg/manual
-
-  # Add all the files.  This is simpler than trying to add only the
-  # new ones because of new directories: it would require iterating on
-  # adding the outer directories, and then their contents.
-  #
-  # find guarantees that we add outer directories first.
-  find . -name CVS -prune -o -print             \
-    | $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
-
-  $dryrun $CVS ci -m $version
-)
+  cd $tmp/$pkg
+  $dryrun $GIT commit --quiet --all -m "Updated Manual for $version" \
+      && $dryrun $GIT push
+) || exit 1

 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
====
>From a99ab981b213b9bd679cfec084a43be2358b3e8d Mon Sep 17 00:00:00 2001
From: "A. Gordon" <assafgor...@gmail.com>
Date: Thu, 6 Nov 2014 16:00:50 -0500
Subject: [PATCH] maint: new script 'gnu-web-doc-update-git'

* build-aux/gnu-web-doc-update-git - similar to 'gnu-web-doc-update',
rebuilds the project's manual and pushes changes to the WebGit
repositories.

--EXPERIMENTAL--
See here for details:
http://lists.gnu.org/archive/html/savannah-hackers-public/2014-11/msg00001.html
Pushed commits will appear on:
   http://gnu.housegordon.org/software/<PROJECT>/manual/
---
 build-aux/gnu-web-doc-update-git | 184 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 184 insertions(+)
 create mode 100755 build-aux/gnu-web-doc-update-git

diff --git a/build-aux/gnu-web-doc-update-git b/build-aux/gnu-web-doc-update-git
new file mode 100755
index 0000000..ceb7996
--- /dev/null
+++ b/build-aux/gnu-web-doc-update-git
@@ -0,0 +1,184 @@
+#!/bin/sh
+# Run this after each non-alpha release, to update the web documentation at
+# http://www.gnu.org/software/$pkg/manual/
+
+VERSION=2012-12-16.14; # UTC
+
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+# 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
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help()
+{
+  cat <<EOF
+Usage: $ME
+
+Run this script from top_srcdir (no arguments) after each non-alpha
+release, to update the web documentation at
+http://www.gnu.org/software/\$pkg/manual/
+
+This script assumes you're using git for revision control, and
+requires a .prev-version file as well as a Makefile, from which it
+extracts the version number and package name, respectively.  Also, it
+assumes all documentation is in the doc/ sub-directory.
+
+Options:
+  -C, --builddir=DIR  location of (configured) Makefile (default: .)
+  -n, --dry-run       don't actually commit anything
+  --help              print this help, then exit
+  --version           print version number, then exit
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+  exit
+}
+
+version()
+{
+  year=$(echo "$VERSION" | sed 's/[^0-9].*//')
+  cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+  exit
+}
+
+# find_tool ENVVAR NAMES...
+# -------------------------
+# Search for a required program.  Use the value of ENVVAR, if set,
+# otherwise find the first of the NAMES that can be run (i.e.,
+# supports --version).  If found, set ENVVAR to the program name,
+# die otherwise.
+#
+# FIXME: code duplication, see also bootstrap.
+find_tool ()
+{
+  find_tool_envvar=$1
+  shift
+  find_tool_names=$@
+  eval "find_tool_res=\$$find_tool_envvar"
+  if test x"$find_tool_res" = x; then
+    for i
+    do
+      if ($i --version </dev/null) >/dev/null 2>&1; then
+       find_tool_res=$i
+       break
+      fi
+    done
+  else
+    find_tool_error_prefix="\$$find_tool_envvar: "
+  fi
+  test x"$find_tool_res" != x \
+    || die "one of these is required: $find_tool_names"
+  ($find_tool_res --version </dev/null) >/dev/null 2>&1 \
+    || die "${find_tool_error_prefix}cannot run $find_tool_res --version"
+  eval "$find_tool_envvar=\$find_tool_res"
+  eval "export $find_tool_envvar"
+}
+
+## ------ ##
+## Main.  ##
+## ------ ##
+
+# Requirements: everything required to bootstrap your package, plus
+# these.
+find_tool CVS cvs
+find_tool GIT git
+find_tool RSYNC rsync
+find_tool XARGS gxargs xargs
+
+builddir=.
+dryrun=
+while test $# != 0
+do
+  # Handle --option=value by splitting apart and putting back on argv.
+  case $1 in
+    --*=*)
+      opt=$(echo "$1" | sed -e 's/=.*//')
+      val=$(echo "$1" | sed -e 's/[^=]*=//')
+      shift
+      set dummy "$opt" "$val" ${1+"$@"}; shift
+      ;;
+  esac
+
+  case $1 in
+    --help|--version) ${1#--};;
+    -C|--builddir) shift; builddir=$1; shift ;;
+    -n|--dry-run) dryrun=echo; shift;;
+    --*) die "unrecognized option: $1";;
+    *) break;;
+  esac
+done
+
+test $# = 0 \
+  || die "too many arguments"
+
+prev=.prev-version
+version=$(cat $prev) || die "no $prev file?"
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
+  || die "no Makefile?"
+tmp_branch=web-doc-$version-$$
+current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
+
+cleanup()
+{
+  __st=$?
+  $dryrun rm -rf "$tmp"
+  $GIT checkout "$current_branch"
+  $GIT submodule update --recursive
+  $GIT branch -d $tmp_branch
+  exit $__st
+}
+trap cleanup 0
+trap 'exit $?' 1 2 13 15
+
+# We must build using sources for which --version reports the
+# just-released version number, not some string like 7.6.18-20761.
+# That version string propagates into all documentation.
+set -e
+$GIT checkout -b $tmp_branch v$version
+$GIT submodule update --recursive
+./bootstrap
+srcdir=$(pwd)
+cd "$builddir"
+  ./config.status --recheck
+  ./config.status
+  make
+  make web-manual
+cd "$srcdir"
+set +e
+
+tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
+$GIT clone --quiet $u...@git.sv.gnu.org:/srv/git/web/$pkg $tmp/$pkg || exit 1
+$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/$pkg/manual || exit 1
+(
+  cd $tmp/$pkg
+  $dryrun $GIT commit --quiet --all -m "Updated Manual for $version" \
+      && $dryrun $GIT push
+) || exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
-- 
1.9.1

Reply via email to