#!/bin/sh #$Id$ #Copyright (c) 2008-2020 Pierre Pronchery #This file is part of DeforaOS Devel scripts # #Redistribution and use in source and binary forms, with or without #modification, are permitted provided that the following conditions #are met: #1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. #2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # #THIS SOFTWARE IS PROVIDED BY THE EDGEBSD PROJECT AND CONTRIBUTORS #``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED #TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR #PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS #BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR #CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF #SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS #INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN #CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) #ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE #POSSIBILITY OF SUCH DAMAGE. #environment umask 022 #variables #executables CONFIGURE="configure" CVS="cvs -q" DATE="date" FIND="find" GIT="git" LN="ln -f" MAIL="mail" MAKE="make" MKDIR="mkdir -m 0755 -p" MKTEMP="mktemp" RM="rm -f" RMDIR="rmdir" TAR="tar" TOUCH="touch" XARGS="xargs" #settings CVSMODULE="DeforaOS" [ -n "$CVSROOT" ] || CVSROOT=":pserver:anonymous@anoncvs.defora.org:/home/cvs" DATE_TODAY=$($DATE '+%Y%m%d') DESTDIR="/var/www" DEVNULL="/dev/null" EMAIL="devel@lists.defora.org" [ -n "$GITROOT" ] || GITROOT="https://git.defora.org/git/DeforaOS.git" HOMEPAGE="https://www.defora.org" PREFIX="/usr/local" PROGNAME="deforaos-update" ROOT= SRC="$HOME/$CVSMODULE" SYSCONFDIR="$PREFIX/etc" #load local settings [ -f "$SYSCONFDIR/DeforaOS/$PROGNAME.conf" ] && . "$SYSCONFDIR/DeforaOS/$PROGNAME.conf" [ -f "$HOME/.config/DeforaOS/$PROGNAME.conf" ] && . "$HOME/.config/DeforaOS/$PROGNAME.conf" #functions #deforaos_update_cvs _deforaos_update_cvs() { [ -n "$SRC" ] || SRC="$ROOT/$CVSMODULE" #configure cvs if necessary $MKDIR -- "$HOME" || exit 2 if [ ! -f "$HOME/.cvspass" ]; then $TOUCH "$HOME/.cvspass" || exit 2 fi #checkout tree if necessary if [ ! -d "$SRC" ]; then $MKDIR -- "$ROOT" || exit 2 echo "" echo "Checking out CVS module $CVSMODULE:" (cd "$ROOT" && $CVS "-d$CVSROOT" co "$CVSMODULE") \ || exit 2 fi #update tree echo "" echo "Updating CVS module $CVSMODULE:" (cd "$SRC" && $CVS update -dPA) || exit 2 #make archive echo "" echo "Archiving CVS module $CVSMODULE:" for i in *; do echo "DeforaOS-$DATE_TODAY/$i" done | ($LN -s . "DeforaOS-$DATE_TODAY" \ && $XARGS $TAR -czf "$DESTDIR/htdocs/download/snapshots/DeforaOS-daily.tar.gz") $RM "DeforaOS-$DATE_TODAY" echo "$HOMEPAGE/download/snapshots/DeforaOS-daily.tar.gz" } #deforaos_update_git _deforaos_update_git() { SRC="DeforaOS.git" #checkout tree if necessary if [ ! -d "$ROOT/$SRC" ]; then $MKDIR -- "$ROOT" || exit 2 echo "" echo "Checking out Git repository $SRC:" $GIT clone "$GITROOT" "$ROOT/$SRC" > "$DEVNULL" || exit 2 fi #update tree echo "" echo "Updating Git repository $SRC:" (cd "$ROOT/$SRC" && $GIT checkout -f && $GIT pull) > "$DEVNULL" \ || exit 2 #re-generate makefiles echo "" echo "Re-generating the Makefiles:" $CONFIGURE "$ROOT/$SRC/System/src" "$ROOT/$SRC/Apps" \ "$ROOT/$SRC/Library" || exit 2 #update the sub-repositories echo "" echo "Updating the sub-repositories:" $FIND "$ROOT/$SRC" -name script.sh | while read script; do parent="${script%%/script.sh}" #XXX read project.conf instead for i in "$parent/"*; do [ -f "$i/Makefile" ] || continue (cd "$i" && $MAKE download) > "$DEVNULL" done done #make archive echo "" echo "Archiving DeforaOS from Git repository $GITROOT:" for i in "$ROOT/$SRC/.git" "$ROOT/$SRC/"*; do i=${i##$ROOT/$SRC/} echo "DeforaOS-$DATE_TODAY/$i" done | (cd "$ROOT" && $LN -s "$SRC" "DeforaOS-$DATE_TODAY" \ && $XARGS $TAR -czf "$DESTDIR/htdocs/download/snapshots/DeforaOS-daily.tar.gz") $RM "$ROOT/DeforaOS-$DATE_TODAY" echo "$HOMEPAGE/download/snapshots/DeforaOS-daily.tar.gz" } #usage _usage() { echo "Usage: $PROGNAME [-C | -G]" 1>&2 echo " $PROGNAME -m [-C | -G]" 1>&2 return 1 } #main delete=0 email=0 #parse options update=_deforaos_update_cvs scm="CVS" while getopts "CGO:m" name; do case "$name" in C) update=_deforaos_update_cvs scm="CVS" ;; G) update=_deforaos_update_git scm="Git" ;; O) export "${OPTARG%%=*}"="${OPTARG#*=}" ;; m) email=1 ;; *) _usage exit $? ;; esac done shift $((OPTIND - 1)) if [ $# -ne 0 ]; then _usage exit $? fi if [ -z "$ROOT" ]; then ROOT=$($MKTEMP -d -p "$HOME" "temp.XXXXXX") delete=1 fi [ -n "$ROOT" ] || exit 2 if [ $email -eq 1 ]; then $update 2>&1 | $MAIL -s "Daily $scm update: $DATE_TODAY" "$EMAIL" else $update fi [ $delete -eq 1 ] && $RMDIR -- "$ROOT"