Author: schoenfeld Date: 2009-01-09 22:06:39 +0000 (Fri, 09 Jan 2009) New Revision: 1785
Modified: trunk/scripts/debsnap.1 trunk/scripts/debsnap.sh Log: Fix files with duplicated content Modified: trunk/scripts/debsnap.1 =================================================================== --- trunk/scripts/debsnap.1 2009-01-09 22:02:55 UTC (rev 1784) +++ trunk/scripts/debsnap.1 2009-01-09 22:06:39 UTC (rev 1785) @@ -142,147 +142,3 @@ The program is part of the devscripts package. Please report bugs using `\fBreportbug devscripts\fP` -.\" for manpage-specific macros, see man(7) -.TH DEBSNAP 1 "January 8, 2009" "Debian devscripts" "DebSnap User Manual" -.SH NAME -debsnap \- retrieve old snapshots of Debian packages - -.SH SYNOPSIS -.B debsnap -.RI [ options ] " package " [ version ] - -.B debsnap -.RB [ -h " | " \-\-help ] " " [ \-\-version ] - - -.SH DESCRIPTION -\fBdebsnap\fP is a tool to help with retrieving snapshots of old packages from -a daily archive repository. - -The only publicly available snapshot archive is currently located at -\fIhttp://snapshot.debian.net\fP - -By default, debsnap will download all the available versions for \fIpackage\fP -that are found in the snapshot archive. If a \fIversion\fP is specified, only -that particular version will be downloaded, if available. - - -.SH OPTIONS -The following options are available: - -.TP -.BI -d " destination\fR,\fP " \-\-destdir " destination" -Directory to place retrieved packages. - -.TP -.BR \-f ", " \-\-force -Force overwriting an existing \fIdestination\fP. By default \fBdebsnap\fP will -insist the destination directory does not exist yet unless it is explicitly -specified to be '.' (the current working directory). This is to avoid files -being accidentally overwritten by what is fetched from the archive and to -provide a guarantee for other scripts that only the files fetched will be -present there upon completion. Note that this option will remove the -\fIdestination\fP directory and all of its contents prior to beginning the -download. - -.TP -.BR \-v ", " \-\-verbose -Report on the \fBdebsnap\fP configuration being used and progress during the -download operation. Please always use this option when reporting bugs. - -.TP -.BR \-h ", " \-\-help -Show a summary of these options. - -.TP -.B \-\-version -Show the version of \fBdebsnap\fP. - - -.SH CONFIGURATION OPTIONS -\fBdebsnap\fP may also be configured through the use of the following options -in the devscripts configuration files: - -.TP -.B DEBSNAP_VERBOSE -Same as the command line option \fB\-\-verbose\fP. Set to "yes" to enable. - -.TP -.B DEBSNAP_DESTDIR -Set a default path for the destination directory. If unset -\fI./source\-<package_name>\fP will be used. The command line option -\fB\-\-destdir\fP will override this. - -.TP -.B DEBSNAP_BASE_URL -The base url for the snapshots archive. This is the root of a directory tree -such as \fIpool/<initial>/<package>/\fP under which a \fISources.gz\fP may be -found, and the root for the location of the packages specified in the -\fISources.gz\fP file found there. - -If unset this defaults to \fIhttp://snapshot.debian.net/archive/\fP - -.TP -.B DEBSNAP_CLEAN_REGEX -A sed regular expression to transform the directory returned by -`\fBapt\-cache showsrc\fP \fIpackage\fP \fB| grep ^Directory\fP` to a suitable -path to be put between \fBDEBSNAP_BASE_URL\fP and \fBDEBSNAP_SOURCES_GZ_PATH\fP. - -If unset it will default to s...@\e([^/]*\e)/[^/]*/\e(\&.*\e)@\e1/\e2@ -.br -i.e. it transforms \fIpool/<component>/<initial>/<package>\fP into -\fIpool/<initial>/<package>\fP - -.TP -.B DEBSNAP_SOURCES_GZ_PATH -The final path to the \fISources.gz\fP file. This is appended after the -\fBDEBSNAP_BASE_URL\fP and the path modified by \fBDEBSNAP_CLEAN_REGEX\fP to -locate the \fISources.gz\fP file for the package to download. - -If unset it will default to \fIsource/Sources.gz\fP - - -.SH EXIT STATUS -\fBdebsnap\fP will return an exit status of 0 if all operations succeeded, -1 if a fatal error occurred, and 2 if some packages failed to be downloaded -but operations otherwise succeeded as expected. In some cases packages may -fail to be downloaded because they are no longer available on the snapshot -mirror, so any caller should expect this may occur in normal use. - - -.SH FILES -.TP -.I /etc/devscripts.conf -Global devscripts configuration options. Will override hardcoded defaults. -.TP -.I ~/.devscripts -Per\-user configuration options. Will override any global configuration. - - -.SH SEE ALSO -.BR devscripts (1), -.BR devscripts.conf (5), -.BR git-debimport (1) - - -.SH AUTHORS -David Paleino <[email protected]> -.br -Ron Lee <[email protected]> - -.SH COPYRIGHT -Copyright \(co 2009 David Paleino, Ron Lee - -Permission is granted to copy, distribute and/or modify this document under -the terms of the GNU General Public License, Version 3 or (at your option) -any later version published by the Free Software Foundation. - -On Debian systems, the complete text of the GNU General Public License can -be found in \fI/usr/share/common\-licenses/GPL\fP. - - -.SH BUGS -.SS Reporting bugs -The program is part of the devscripts package. Please report bugs using -`\fBreportbug devscripts\fP` - Modified: trunk/scripts/debsnap.sh =================================================================== --- trunk/scripts/debsnap.sh 2009-01-09 22:02:55 UTC (rev 1784) +++ trunk/scripts/debsnap.sh 2009-01-09 22:06:39 UTC (rev 1785) @@ -322,327 +322,3 @@ rm -rf "$tmpdir" [ -z "$missing_package" ] || exit 2 -#!/bin/bash - -# Copyright © 2009, David Paleino <[email protected]>, -# Ron <[email protected]> -# -# 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/>. -# -# Thanks to Ron Lee and Patrick Schoenfeld for helping during -# the development process! :) - -#set -x -set -e - -## -# Rationale for variables naming: -# DEBSNAP_FOO : means it directly comes from the config file, which can be edited by the user -# foo : means we assigned it, also combining data coming from the user -## - -OPTS=$(getopt -ao d:fvh --long destdir:,force,verbose,version,help -n $0 -- "$@") -if [ $? -ne 0 ]; then - echo "Terminating." >&2 - exit 1 -fi -eval set -- "$OPTS" - -PROGNAME="$(basename $0)" - -version() { - echo \ -"This is $PROGNAME, from the Debian devscripts package, version ###VERSION### -This code is copyright 2009 by David Paleino <[email protected]> and -Ron <[email protected]> -- all rights reserved. -This program comes with ABSOLUTELY NO WARRANTY. -You are free to redistribute this code under the terms of the GNU -General Public License v3 or, at your option, any later version." - exit 0 -} - -usage() { - cat 1>&2 <<EOF -$PROGNAME [options] <package name> [package version] - - Automatically downloads packages from snapshot.debian.net - - The following options are supported: - -h, --help Shows this help message - --version Shows information about version - -v, --verbose Be verbose - -d <destination directory>, - --destdir <destination directory> Directory for retrieved packages - Default is ./source-<package name> - -f, --force Force overwriting an existing - destdir - -EOF - exit 0 -} - -debug() { - if [ "$DEBSNAP_VERBOSE" = "yes" ]; then - echo "$@" - fi -} - -start_download() { - quiet="$1" - destdir="$2" - package="$3" - version="$4" - directory="$5" - suffix="$6" - - dsc="$DEBSNAP_BASE_URL/$directory/${package}_$version.dsc" - diff="$DEBSNAP_BASE_URL/$directory/${package}_$version.diff.gz" - orig="$DEBSNAP_BASE_URL/$directory/${package}_$upversion.$suffix" - - printf "Downloading %s... " $version - [ -n "$quiet" ] || echo - - # I don't really like dget's output with missing files :) -# ( cd sources / ; \ -# dget -d --quiet $base_url/$directory/${package}_$version.dsc ) - - # the "continue" annidated here mean "go to the next stanza of Sources.gz" - if ! wget $quiet -P "$destdir" -nH -nc "$dsc"; then - echo "missing .dsc." - debug "Url: $dsc" - return 1 - else - if ! wget $quiet -P "$destdir" -nH -nc "$orig"; then - echo "missing .$suffix." - debug "Url: $orig" - return 1 - else - if [ "$suffix" = "orig.tar.gz" ]; then - if ! wget $quiet -P "$destdir" -nH -nc "$diff"; then - echo "missing .diff.gz." - debug "Url: $diff" - return 1 - else - echo "done." - fi - else - echo "done." - fi - fi - fi -} - -# these are our defaults -DEFAULT_DEBSNAP_VERBOSE=no -DEFAULT_DEBSNAP_DESTDIR= -DEFAULT_DEBSNAP_BASE_URL=http://snapshot.debian.net/archive -DEFAULT_DEBSNAP_CLEAN_REGEX="s...@\([^/]*\)/[^/]*/\(.*\)@\1/\2@" -DEFAULT_DEBSNAP_SOURCES_GZ_PATH=source/Sources.gz -VARS="DEBSNAP_VERBOSE DEBSNAP_DESTDIR DEBSNAP_BASE_URL DEBSNAP_CLEAN_REGEX DEBSNAP_SOURCES_GZ_PATH" - -# read configuration from devscripts -eval $( - set +e - for var in $VARS; do - eval "$var=\$DEFAULT_$var" - done - [ -r "/etc/devscripts.conf" ] && . /etc/devscripts.conf - [ -r "~/.devscripts" ] && . ~/.devscripts - set | egrep "^(DEBSNAP|DEVSCRIPTS)_" -) - -# sanitize variables -case "$DEBSNAP_VERBOSE" in - yes|no) ;; - *) DEBSNAP_VERBOSE=no ;; -esac - -while true; do - case "$1" in - -v|--verbose) - DEBSNAP_VERBOSE=yes - shift - ;; - -d|--destdir) - DEBSNAP_DESTDIR="$2" - shift 2 - ;; - -f|--force) - force_overwrite=yes - shift - ;; - --version) - version - shift - ;; - -h|--help) - usage - shift - ;; - --) - shift - break - ;; - *) - echo "Internal error in option parsing." >&2 - ;; - esac -done - -package="$1" -_version="${2//*:/}" # remove the Epoch - -if [ -z "$package" ]; then - usage -fi - -if [ "$DEBSNAP_VERBOSE" = "yes" ]; then - echo "Using these values:" - for var in $VARS; do - eval "echo $var=\$$var" - done - echo "Requested package: $package" - if [ -z "$_version" ]; then - echo "Requested version: all" - else - echo "Requested version: $_version" - fi -else - quiet="--quiet" -fi - -source_pkg=$(apt-cache showsrc $package | grep -m1 ^Package | cut -f2 -d\ ) -cache_dir=$(apt-cache showsrc $package | grep -m1 ^Directory | cut -f2 -d\ ) - -# make it pool/f/foo from pool/<section>/f/foo -clean_dir=$(echo "$cache_dir" | sed -e "$DEBSNAP_CLEAN_REGEX") - -[ -n "$DEBSNAP_DESTDIR" ] || DEBSNAP_DESTDIR="source-$source_pkg" -if [ "$DEBSNAP_DESTDIR" != "." ]; then - if [ -d "$DEBSNAP_DESTDIR" ]; then - if [ -z "$force_overwrite" ]; then - echo "Destination dir $DEBSNAP_DESTDIR already exists." - echo "Please (re)move it first, or use --force to overwrite." - exit 1 - fi - echo "Removing exiting destination dir $DEBSNAP_DESTDIR as requested." - rm -rf "$DEBSNAP_DESTDIR" - fi - mkdir -p "$DEBSNAP_DESTDIR" -fi - - -# download the Sources.gz -tmpdir=$(mktemp -d /tmp/$PROGNAME.XXXX) -trap "rm -rf \"$tmpdir\"; exit 1" 0 SIGHUP SIGINT SIGTERM -sources_url="$DEBSNAP_BASE_URL/$clean_dir/$DEBSNAP_SOURCES_GZ_PATH" -sources_path="$tmpdir/Sources.gz" - -echo -n "Downloading Sources.gz... " -[ -n "$quiet" ] || echo - -if ! wget $quiet "$sources_url" -O "$sources_path"; then - echo "failed." - debug "Url: $sources_url" - exit 1 -else - echo "done." -fi - -while read field value -do - case $field in - Package:) - if [ "$value" != "$source_pkg" ]; then - echo "Source package names not matching! Exiting." - exit 1 - fi - have_package=yes - ;; - Version:) - if [ -n "$version" ]; then - echo "Version already set. Exiting." - exit 1 - else - # remove the Epoch - version=${value//*:/} - # remove everything after a - - upversion=${version%-*} - if [ "$upversion" = "$version" ]; then - # this is a native package, so the original tarball has - # just "tar.gz" as suffix. - suffix="tar.gz" - else - # this is not a native package, use "orig.tar.gz" - suffix="orig.tar.gz" - fi - fi - ;; - Directory:) - if [ -n "$directory" ]; then - echo "Directory already set. Exiting." - exit 1 - else - directory=$value - fi - ;; - "") - # the blank line always comes last (unless it comes first) - # bail out with errors if directory and version are not set, - # (but only if we have seen a Package line already). - if [ -z "$have_package" ]; then - echo "No Package name before empty Sources.gz line. Skipping stanza." - elif [ -z "$version" ] || [ -z "$directory" ]; then - echo "Couldn't parse version/directory. Skipping stanza." - debug "Version: $version" - debug "Directory: $directory" -# exit 1 - else - # if the user requested a specific version, - # skip the download step until we find it, - # then break from the loop and let the outer - # call deal with this case for us. - if [ -z "$_version" ]; then - if ! start_download "$quiet" "$DEBSNAP_DESTDIR" \ - "$package" "$version" \ - "$directory" "$suffix"; then - # Keep trying if some files were missing, - # but report that to the caller at exit. - missing_package=yes - fi - elif [ "$_version" = "$version" ]; then - break - fi - fi - have_package= - version= - directory= - ;; - esac -done < <(zcat "$sources_path") - -# We need this if there isn't an empty line following the last (or only) stanza -# and we also perform the download here if just a single version was requested. -if [ -n "$version" ] && [ -n "$directory" ]; then - if ! start_download "$quiet" "$DEBSNAP_DESTDIR" "$package" \ - "$version" "$directory" "$suffix"; then - missing_package=yes - fi -fi - -# Disable the trap on exit so we can take back control of the exit code -trap - 0 -rm -rf "$tmpdir" - -[ -z "$missing_package" ] || exit 2 -- To unsubscribe, send mail to [email protected].
