85 lines
1.7 KiB
Bash
Executable File
85 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# httpup-repgen - One way sync from an http server to a local directory
|
|
#
|
|
# Copyright 2003-2005 (c) Johannes Winkelmann, # jw@tks6.net
|
|
#
|
|
# - Filtering code adapted from Per Liden's pkgmk
|
|
# - optimized and made portable (sh-compliant) by Han Boetes
|
|
|
|
|
|
# The repo file is place on the server. httpup downloads it,
|
|
# makes the update and afterwards moves it to the REPOCURRENTFILE
|
|
# which keeps track of the files which have been checked out. The
|
|
# REPOCURRENTFILE contains only file names
|
|
REPOFILE=REPO
|
|
REPOCURRENTFILE=REPO.CURRENT
|
|
|
|
VERSION=0.8
|
|
|
|
info()
|
|
{
|
|
echo $*
|
|
}
|
|
|
|
debug()
|
|
{
|
|
return # echo $*
|
|
}
|
|
|
|
printUsage()
|
|
{
|
|
cat << EOF
|
|
httpup-repgen $VERSION
|
|
Copyright (c) 2003 Johannes Winkelmann
|
|
|
|
Usage:
|
|
httpup-repgen [directory]
|
|
EOF
|
|
exit -1
|
|
}
|
|
|
|
generateRepoFile()
|
|
{
|
|
dir=${1:-.}
|
|
if [ ! -d $dir ]; then
|
|
echo "Can't generate repository for '$dir': No such directory"
|
|
exit -2
|
|
fi
|
|
echo "Generating repository for directory '$dir'"
|
|
|
|
OLDPWD=$PWD
|
|
cd $dir
|
|
rm -f $REPOFILE || exit -3
|
|
|
|
IGNORE_FILE=.httpup-repgen-ignore
|
|
if [ -r $HOME/$IGNORE_FILE ]; then
|
|
FILTER="grep -E -v -f $HOME/$IGNORE_FILE"
|
|
else
|
|
FILTER="cat"
|
|
fi
|
|
if [ -r $IGNORE_FILE ]; then
|
|
FILTER_LOCAL="grep -E -v -f $IGNORE_FILE"
|
|
else
|
|
FILTER_LOCAL="cat"
|
|
fi
|
|
FILTER_OWN="grep -E -v ($REPOFILE|$REPOCURRENTFILE|$IGNORE_FILE)"
|
|
|
|
find . -type d ! -name . -printf "%P\n"|$FILTER|$FILTER_LOCAL|$FILTER_OWN|\
|
|
awk '{print "d:"$1}' > $REPOFILE
|
|
files="$(find . -type f -printf "%P\n"|$FILTER|$FILTER_LOCAL|$FILTER_OWN)"
|
|
if [ -n "$files" ]; then
|
|
echo $files|xargs md5sum|awk '{print "f:"$1":"$2}' >> $REPOFILE
|
|
fi
|
|
|
|
cd $OLDPWD
|
|
}
|
|
|
|
case $1 in
|
|
-*)
|
|
printUsage
|
|
;;
|
|
*)
|
|
generateRepoFile $1
|
|
;;
|
|
esac
|