Subversion Repositories DevTools

Rev

Rev 6475 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#
#   Receive a package version into dpkg_archive
#   Script run by ssh to receive a compressed package and to save it
#   Works in bash and dash
#
#   Assumes that compressed tar output as stdin
#
#set -x
set -e

error() {
    echo ERROR: $*
    exit 1;
}

delete_dir() {
    if [ -d "$1" ] ; then
            chmod -R u+w "$1"
            rm -rf "$1"
    fi
}

# User options
LinkName=
while getopts DL: arg ; do
    case $arg in
        D) set -x ;;
        L) LinkName="$OPTARG" ;;
        *) error Unknown option: $arg ;;
    esac
done
shift $(($OPTIND - 1))

# User arguments
pname=${1:?Need package name}
pver=${2:?Need package version}

dpkg="dpkg_archive"
[ -d $dpkg ] || error dpkg_archive not found

#
#   Names of working directories
#
newdir="$dpkg/${pname}/${pver}.NEW.TMPDIR"
olddir="$dpkg/${pname}/${pver}.OLD.TMPDIR"
realdir="$dpkg/${pname}/${pver}"
pkgdir="$dpkg/${pname}"

#
#   Create package directory
#   Ensure its writable
mkdir -p "$pkgdir"
chmod u+w "$pkgdir"

#
#   Delete possible tmp directory
delete_dir "$newdir"
delete_dir "$olddir"
mkdir -p "$newdir"
chmod u+w "$newdir"

#
#   De-tar the input stream into a working space
#   The tarZip contains 2 directory elements that need to be discarded
tar -zx --strip-components=2 -C "$newdir"
if [ ! -f "$newdir/descpkg" ] ; then
    delete_dir "$newdir"
    error Received package does not have descpkg file
fi

#
#   Swap in the new directory - minimize disruption
#   Then delete the old
#
if [ -d "$realdir" ] ; then
    mv "$realdir" "$olddir"
fi
mv "$newdir" "$realdir"

#   Delete the original directory
delete_dir "$olddir"

# Process possible link
if [ "$LinkName" ] ; then
    rm -f "$pkgdir/$LinkName"
    ln -s "$pver" "$pkgdir/$LinkName"
fi

# Fix up permissions on the package and package-version
chmod a-w "$pkgdir"
chmod a-w "$realdir"