Hello community, here is the log from the commit of package duply for openSUSE:Factory checked in at 2014-07-12 17:14:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/duply (Old) and /work/SRC/openSUSE:Factory/.duply.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "duply" Changes: -------- --- /work/SRC/openSUSE:Factory/duply/duply.changes 2014-02-02 07:50:37.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.duply.new/duply.changes 2014-07-12 17:14:50.000000000 +0200 @@ -1,0 +2,27 @@ +Wed Jul 9 14:54:52 UTC 2014 - [email protected] + +- Update to version 1.7.4: + + remove ubuntu one support, service is discontinued + + featreq 31: add authenticated swift (contributed by Justus Seifert) +- Update to version 1.7.3: + + bugfix: test routines, gpg2 asked for passphrase although GPG_PW was set +- Update to version 1.7.2: + + bugfix: debian Bug#743190 "duply no longer allows restoration without + gpg passphrase in conf file" + GPG_AGENT_INFO env var is now needed to trigger --use-agent + + bugfix: gpg keyenc test routines didn't work if GPG_PW was not set +- Update to version 1.7.1: + + bugfix: purge-* commands renamed to purgeFull, purgeIncr due to + incompatibility with new minus batch separator +- Update to version 1.7.0: + + disabled gpg key id plausibility check, too many valid possibilities + + featreq 7 "Halt if precondition fails": + added and(+), or(-) batch command(separator) support + + featreq 26 "pre/post script with shebang line": + if a script is flagged executable it's executed in a subshell + now as opposed to sourced to bash, which is the default + + bugfix: do not check if dpbx, swift credentials are set anymore + + bugfix: properly escape profile name, archdir if used as arguments + + add DUPL_PRECMD conf setting for use with e.g. trickle + +------------------------------------------------------------------- Old: ---- duply_1.6.0.tgz New: ---- duply_1.7.4.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ duply.spec ++++++ --- /var/tmp/diff_new_pack.gDiYn2/_old 2014-07-12 17:14:51.000000000 +0200 +++ /var/tmp/diff_new_pack.gDiYn2/_new 2014-07-12 17:14:51.000000000 +0200 @@ -18,13 +18,13 @@ Name: duply -Version: 1.6.0 +Version: 1.7.4 Release: 0 Summary: A frontend for the mighty duplicity magic License: GPL-2.0 Group: Productivity/Archiving/Compression Url: http://duply.net/ -Source0: http://surfnet.dl.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.6.x/duply_1.6.0.tgz +Source0: http://downloads.sourceforge.net/ftplicity/duply%20%28simple%20duplicity%29/1.7.x/%{name}_%{version}.tgz Requires: duplicity BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ duply_1.6.0.tgz -> duply_1.7.4.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/duply_1.6.0/duply new/duply_1.7.4/duply --- old/duply_1.6.0/duply 2014-01-04 18:34:51.000000000 +0100 +++ new/duply_1.7.4/duply 2014-06-24 20:55:59.000000000 +0200 @@ -9,7 +9,7 @@ # changed from ftplicity to duply. # # See http://duply.net or http://ftplicity.sourceforge.net/ for more info. # # (c) 2006 Christiane Ruetten, Heise Zeitschriften Verlag, Germany # -# (c) 2008-2012 Edgar Soldin (changes since version 1.3) # +# (c) 2008-2014 Edgar Soldin (changes since version 1.3) # ############################################################################### # LICENSE: # # This program is licensed under GPLv2. # @@ -30,13 +30,38 @@ # - add 'exclude_<command>' list usage eg. exclude_verify # - featreq 25: a download/install duplicity option # - hint on install software if a piece is missing -# - featreq 5: Prevent concurrent runs for same profile -# - featreq 7: check success of commands and react in batches -# e.g. backup_AND_verify_AND_purge, pre_and_bkp_and_post # - import/export profile from/to .tgz function !!! # # # CHANGELOG: +# 1.7.4 (24.6.2014) +# - remove ubuntu one support, service is discontinued +# - featreq 31: add authenticated swift (contributed by Justus Seifert) +# +# 1.7.3 (3.4.2014) +# - bugfix: test routines, gpg2 asked for passphrase although GPG_PW was set +# +# 1.7.2 (1.4.2014 "April,April") +# - bugfix: debian Bug#743190 "duply no longer allows restoration without +# gpg passphrase in conf file" +# GPG_AGENT_INFO env var is now needed to trigger --use-agent +# - bugfix: gpg keyenc test routines didn't work if GPG_PW was not set +# +# 1.7.1 (30.3.2014) +# - bugfix: purge-* commands renamed to purgeFull, purgeIncr due to +# incompatibility with new minus batch separator +# +# 1.7.0 (20.3.2014) +# - disabled gpg key id plausibility check, too many valid possibilities +# - featreq 7 "Halt if precondition fails": +# added and(+), or(-) batch command(separator) support +# - featreq 26 "pre/post script with shebang line": +# if a script is flagged executable it's executed in a subshell +# now as opposed to sourced to bash, which is the default +# - bugfix: do not check if dpbx, swift credentials are set anymore +# - bugfix: properly escape profile name, archdir if used as arguments +# - add DUPL_PRECMD conf setting for use with e.g. trickle +# # 1.6.0 (1.1.2014) # - support gs backend # - support dropbox backend @@ -324,7 +349,7 @@ ME_LONG="$0" ME="$(basename $0)" ME_NAME="${ME%%.*}" -ME_VERSION="1.6.0" +ME_VERSION="1.7.4" ME_WEBSITE="http://duply.net" # default config values @@ -431,7 +456,10 @@ $ME <profile> create general usage in single or batch mode (see EXAMPLES): - $ME <profile> <command>[_<command>_...] [<options> ...] + $ME <profile> <command>[[_|+|-]<command>[_|+|-]...] [<options> ...] + + For batches the conditional separators can also be written as pseudo commands + and(+), or(-). See SEPARATORS for details. Non $ME options are passed on to duplicity (see OPTIONS). All conf parameters can also be defined in the environment instead. @@ -456,9 +484,23 @@ example 2: $ME ~/.${ME_NAME}/humbug backup +SEPARATORS: + _ (underscore) + neutral separator + + (plus sign), _and_ + conditional AND + the next command will only be executed if the previous succeeded + - (minus sign), _or_ + conditional OR + the next command will only be executed if the previous failed + + example: + 'pre_and_bkp_or_verify_post' translates to 'pre+bkp-verify_post + COMMANDS: usage get usage help text + and/or pseudo commands for better batch cmd readability (see SEPARATORS) create creates a configuration profile backup backup with pre/post script execution (batch: pre_bkp_post), full (if full_if_older matches or no earlier backup is found) @@ -478,12 +520,12 @@ purge [<max_age>] [--force] list outdated backup files (older than \$MAX_AGE) [use --force to actually delete these files] - purge-full [<max_full_backups>] [--force] + purgeFull [<max_full_backups>] [--force] list outdated backup files (\$MAX_FULL_BACKUPS being the number of full backups and associated incrementals to keep, counting in reverse chronological order) [use --force to actually delete these files] - purge-incr [<max_fulls_with_incrs>] [--force] + purgeIncr [<max_fulls_with_incrs>] [--force] list outdated incremental backups (\$MAX_FULLS_WITH_INCRS being the number of full backups which associated incrementals will be kept, counting in reverse chronological order) @@ -629,15 +671,14 @@ # s3+http://[user:password@]bucket_name[/prefix] # # scp and sftp are aliases for the ssh backend # ssh://user[:password]@other.host[:port]/[/]some_dir +# # for authenticated swift define TARGET_USER or SWIFT_USERNAME, +# # TARGET_PASS or SWIFT_PASSWORD, SWIFT_AUTHURL (mandatory, the path to +# # your identity service, omitting leads to an error with swift), +# # optionally SWIFT_AUTHVERSION (which defaults to "1") # swift://container_name # tahoe://alias/directory -# # for Ubuntu One set TARGET_PASS to oauth access token -# # "consumer_key:consumer_secret:token:token_secret" -# # if non given credentials will be prompted for and one will be created -# u1://host_is_ignored/volume_path -# u1+http:///volume_path # webdav[s]://user[:password]@other.host/some_dir -# ATTENTION: characters other than A-Za-z0-9.-_.~ in user,password,path have +# ATTENTION: characters other than A-Za-z0-9.-_.~ in the URL have # to be replaced by their url encoded pendants, see # http://en.wikipedia.org/wiki/Url_encoding # if you define the credentials as TARGET_USER, TARGET_PASS below @@ -651,6 +692,11 @@ # base directory to backup SOURCE='${DEFAULT_SOURCE}' +# a command that runs duplicity e.g. +# shape bandwidth use via trickle +# "trickle -s -u 640 -d 5120" # 5Mb up, 40Mb down" +#DUPL_PRECMD="" + # exclude folders containing exclusion file (since duplicity 0.5.14) # Uncomment the following two lines to enable this setting. #FILENAME='.duplicity-ignore' @@ -896,10 +942,16 @@ local ERR=0 local SCRIPT="$1" if [ ! -z "$PREVIEW" ] ; then - echo $SCRIPT + echo "$([ ! -x "$SCRIPT" ] && echo ". ")$SCRIPT" elif [ -r "$SCRIPT" ] ; then echo -n "Running '$SCRIPT' " - OUT=`. "$SCRIPT" 2>&1`; ERR=$? + if [ -x "$SCRIPT" ]; then + OUT=$("$SCRIPT" 2>&1) + ERR=$? + else + OUT=$(. "$SCRIPT" 2>&1) + ERR=$? + fi [ $ERR -eq "0" ] && echo "- OK" || echo "- FAILED (code $ERR)" echo -en ${OUT:+"Output: $OUT\n"} ; else @@ -968,9 +1020,9 @@ if duplicity_version_ge 601; then local DUPL_ARCHDIR='' if var_isset 'ARCH_DIR'; then - DUPL_ARCHDIR="--archive-dir '${ARCH_DIR}'" + DUPL_ARCHDIR="--archive-dir $(qw "${ARCH_DIR}")" fi - DUPL_ARCHDIR="${DUPL_ARCHDIR} --name 'duply_${NAME}'" + DUPL_ARCHDIR="${DUPL_ARCHDIR} --name $(qw "duply_${NAME}")" fi DUPL_PARAMS_GLOBAL="${DUPL_ARCHDIR} ${DUPL_PARAM_ENC} \ @@ -1016,7 +1068,7 @@ var_isset 'PREVIEW' && local RUN=echo || local RUN=eval $RUN ${DUPL_VARS_GLOBAL} ${BACKEND_PARAMS} \ - duplicity $DUPL_CMD $DUPL_PARAMS_GLOBAL $(duplicity_params_conf)\ + ${DUPL_PRECMD} duplicity $DUPL_CMD $DUPL_PARAMS_GLOBAL $(duplicity_params_conf)\ $GPG_USEAGENT $DUPL_CMD_PARAMS ${PREVIEW:+} local ERR=$? @@ -1302,7 +1354,7 @@ var_isset GPG_USEAGENT && exit 1 if ( [ -n "$1" ] && var_isset "$1" ) || ( [ -n "$2" ] && var_isset "$2" ); then - echo "--passphrase-fd 0" + echo "--passphrase-fd 0 --batch" fi } @@ -1321,6 +1373,20 @@ return 1 } +# checks if gpg-agent is available, returns error code +# 0 on success +# 1 if GPG_AGENT_INFO is not set +# 2 if GPG_AGENT_INFO is stale +function gpg_agent_avail { + local ERR=1 + if var_isset GPG_AGENT_INFO; then + ps -p $(echo $GPG_AGENT_INFO|awk -F: '{print $2}') > /dev/null 2>&1 &&\ + ERR=0 || ERR=2 + fi + + return $ERR +} + # start of script ####################################################################### # confidentiality first, all we create is only readable by us @@ -1549,8 +1615,7 @@ # ok here some exceptions: # protocols that do not need passwords # s3[+http] only needs password for write operations - # u1[+http] can ask for creds and create an oauth token - if [ -n "$(tolower "${TARGET_URL_PROT}" | grep -e '^\(file\|tahoe\|ssh\|scp\|sftp\|u1\(\+http\)\?\)://$')" ]; then + if [ -n "$( tolower "${TARGET_URL_PROT}" | grep -e '^\(dpbx\|file\|tahoe\|ssh\|scp\|sftp\|swift\)://$' )" ]; then : # all is well file/tahoe do not need passwords, ssh might use key auth elif [ -n "$(tolower "${TARGET_URL_PROT}" | grep -e '^s3\(\+http\)\?://$')" ] && \ [ -z "$(echo ${cmds} | grep -e '\(bkp\|incr\|full\|purge\|cleanup\)')" ]; then @@ -1606,15 +1671,16 @@ '$CONF'." fi -# check gpg keys format -for KEY_SET_NAME in GPG_KEY GPG_KEYS_ENC $(gpg_signing && echo -n GPG_KEY_SIGN); do - eval KEY_SET="\${${KEY_SET_NAME}}" - for KEY_ID in $(gpg_split_keyset "$KEY_SET"); do - # test format [ ! $(echo $GPG_KEY | grep '^[0-9a-fA-F]\{8\}$') ] not set correct (8 digit ID) or - gpg_key_format ${KEY_ID} || \ - error_gpg "GPG key '${KEY_ID}' set in '${KEY_SET_NAME}' is not \na valid 8 character hex digit string e.g. '012345AB'." - done -done +# disabled as keys can really be given in too many forms e.g. short/long id, fingerprint, email, name ... +## check gpg keys format +#for KEY_SET_NAME in GPG_KEY GPG_KEYS_ENC $(gpg_signing && echo -n GPG_KEY_SIGN); do +# eval KEY_SET="\${${KEY_SET_NAME}}" +# for KEY_ID in $(gpg_split_keyset "$KEY_SET"); do +# # test format [ ! $(echo $GPG_KEY | grep '^[0-9a-fA-F]\{8\}$') ] not set correct (8 digit ID) or +# gpg_key_format ${KEY_ID} || \ +# error_gpg "GPG key '${KEY_ID}' set in '${KEY_SET_NAME}' is not \na valid 8 character hex digit string e.g. '012345AB'." +# done +#done # create enc gpg keys array, for further processing GPG_KEYS_ENC=( $(gpg_split_keyset ${GPG_KEY}) $(gpg_split_keyset ${GPG_KEYS_ENC}) ) @@ -1638,7 +1704,7 @@ # try first key, if one set elif ! var_isset 'GPG_KEY_SIGN'; then KEY_ID=${GPG_KEYS_ENC[0]} - if ! gpg_key_format "${KEY_ID}"; then + if [ -z "${KEY_ID}" ]; then echo "Signing disabled. Not GPG_KEY entries in config." GPG_KEY_SIGN='disabled' else @@ -1698,9 +1764,16 @@ if ! gpg_symmetric && \ ( ! var_isset GPG_PW || \ ( gpg_signing && ! var_isset GPG_PW_SIGN && [ "$GPG_KEY_SIGN" != "${GPG_KEYS_ENC[0]}" ] ) ); then - echo "Autoenable use of gpg-agent. GPG_PW or GPG_PW_SIGN (enc != sign key) not set." - GPG_USEAGENT="--use-agent" + GPG_AGENT_ERR=$(gpg_agent_avail ; echo $?) + if [ "$GPG_AGENT_ERR" -eq 1 ]; then + echo "Cannot use gpg-agent. GPG_AGENT_INFO not set." + elif [ "$GPG_AGENT_ERR" -eq 2 ]; then + echo "Cannot use gpg-agent! GPG_AGENT_INFO contains stale pid." + else + echo "Autoenable use of gpg-agent. GPG_PW or GPG_PW_SIGN (enc != sign key) not set." + GPG_USEAGENT="--use-agent" + fi fi # end GPG config plausibility check2 @@ -1764,7 +1837,7 @@ done # check encrypting CMD_MSG="Test - Encrypt to $(gpg_join_keyset ${GPG_KEYS_ENC[@]})${CMD_MSG_SIGN:+ & $CMD_MSG_SIGN}" - run_cmd $(gpg_pass_pipein GPG_PW_SIGN GPG_PW) $GPG $CMD_PARAM_SIGN $(gpg_param_passwd GPG_PW_SIGN GPG_PW) $CMD_PARAMS $GPG_USEAGENT --batch --status-fd 1 $GPG_OPTS -o "${GPG_TEST}_ENC" -e "$ME_LONG" + run_cmd $(gpg_pass_pipein GPG_PW_SIGN GPG_PW) $GPG $CMD_PARAM_SIGN $(gpg_param_passwd GPG_PW_SIGN GPG_PW) $CMD_PARAMS $GPG_USEAGENT --status-fd 1 $GPG_OPTS -o "${GPG_TEST}_ENC" -e "$ME_LONG" if [ "$CMD_ERR" != "0" ]; then KEY_NOTRUST=$(echo "$CMD_OUT"|awk '/^\[GNUPG:\] INV_RECP 10/ { print $4 }') @@ -1777,7 +1850,7 @@ # check decrypting CMD_MSG="Test - Decrypt" gpg_key_decryptable || CMD_DISABLED="No matching secret key or GPG_PW not set." - run_cmd $(gpg_pass_pipein GPG_PW) "$GPG" $(gpg_param_passwd GPG_PW) $GPG_OPTS -o "${GPG_TEST}_DEC" $GPG_USEAGENT --batch -d "${GPG_TEST}_ENC" + run_cmd $(gpg_pass_pipein GPG_PW) "$GPG" $(gpg_param_passwd GPG_PW) $GPG_OPTS -o "${GPG_TEST}_DEC" $GPG_USEAGENT -d "${GPG_TEST}_ENC" if [ "$CMD_ERR" != "0" ]; then error_gpg_test "Decryption failed.${CMD_OUT:+\n$CMD_OUT}" @@ -1861,9 +1934,27 @@ BACKEND_PARAMS="$BACKEND_PARAMS CLOUDFILES_AUTHURL=$(qw "${CLOUDFILES_AUTHURL}")" fi ;; - 'file'|'tahoe'|'dpbx'|'swift') - BACKEND_URL="${TARGET_URL_PROT}${TARGET_URL_HOSTPATH}" - ;; + 'file'|'tahoe'|'dpbx') + BACKEND_URL="${TARGET_URL_PROT}${TARGET_URL_HOSTPATH}" + ;; + 'swift') + BACKEND_URL="${TARGET_URL_PROT}${TARGET_URL_HOSTPATH}" + # respect possibly set swift env vars + var_isset 'SWIFT_USERNAME' && TARGET_URL_USER="$SWIFT_USERNAME" + var_isset 'SWIFT_PASSWORD' && TARGET_URL_PASS="$SWIFT_PASSWORD" + # add them to duplicity params like with cloudfile to make it look standardized + var_isset 'TARGET_URL_USER' && \ + BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_USERNAME=$(qw "${TARGET_URL_USER}")" + var_isset 'SWIFT_AUTHURL' && \ + BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_AUTHURL=$(qw "${SWIFT_AUTHURL}")" + ( var_isset 'TARGET_URL_USER' && ! var_isset 'SWIFT_AUTHURL' ) &&\ + warning "\ +Swift will probably fail because the conf var SWIFT_AUTHURL was not defined!" + var_isset 'SWIFT_AUTHVERSION' && \ + BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_AUTHVERSION=$(qw "${SWIFT_AUTHVERSION}")" + var_isset 'TARGET_URL_PASS' && \ + BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_PASSWORD=$(qw "${TARGET_URL_PASS}")" + ;; 'rsync') # everything in url (this backend does not support pass in env var) # this is obsolete from version 0.6.10 (buggy), hopefully fixed in 0.6.11 @@ -1913,6 +2004,8 @@ BACKEND_URL="$BACKEND_URL" EXCLUDE="$EXCLUDE" +# replace magic separators to condition command equivalents (+=and,-=or) +cmds=$(awk -v cmds="$cmds" "BEGIN{ gsub(/\+/,\"_and_\",cmds); gsub(/\-/,\"_or_\",cmds); print cmds}") # convert cmds to array, lowercase for safety CMDS=( $(awk "BEGIN{ cmds=tolower(\"$cmds\"); gsub(/_/,\" \",cmds); print cmds }") ) @@ -1923,10 +2016,6 @@ ## init # raise index in cmd array for pre/post param var_isset 'CMD_NO' && CMD_NO=$((++CMD_NO)) || CMD_NO=0 -# save start time -RUN_START=$(date_fix %s)$(nsecs) -# user info -echo; separator "Start running command $(echo $cmd|awk '$0=toupper($0)') at $(date_from_nsecs $RUN_START)" # get prev/nextcmd vars nextno=$(($CMD_NO+1)) @@ -1934,8 +2023,29 @@ prevno=$(($CMD_NO-1)) [ "$prevno" -ge 0 ] && CMD_PREV=${CMDS[$prevno]} || CMD_PREV='START' -case "$cmd" in - pre|post) +# deal with condition "commands" +if var_isset 'CMD_SKIP' && [ $CMD_SKIP -gt 0 ]; then + echo -e "\n--- Skipping command $(toupper $cmd) ! ---" + CMD_SKIP=$(($CMD_SKIP - 1)) + continue +elif [ "$cmd" == 'and' ] && [ "$CMD_ERR" -ne "0" ]; then + CMD_SKIP=1 + continue +elif [ "$cmd" == 'or' ] && [ "$CMD_ERR" -eq "0" ]; then + CMD_SKIP=1 + continue +elif [ "$cmd" == 'and' ] || [ "$cmd" == 'or' ]; then + unset 'CMD_SKIP'; + continue +fi + +# save start time +RUN_START=$(date_fix %s)$(nsecs) +# user info +echo; separator "Start running command $(toupper $cmd) at $(date_from_nsecs $RUN_START)" + +case "$(tolower $cmd)" in + 'pre'|'post') if [ "$cmd" == 'pre' ]; then script=$PRE else @@ -1944,52 +2054,52 @@ # script execution in a subshell, protect us from failures/var overwrites ( run_script "$script" ) ;; - bkp) + 'bkp') duplify -- "${dupl_opts[@]}" --exclude-globbing-filelist "$EXCLUDE" \ "$SOURCE" "$BACKEND_URL" ;; - incr) + 'incr') duplify incr -- "${dupl_opts[@]}" --exclude-globbing-filelist "$EXCLUDE" \ "$SOURCE" "$BACKEND_URL" ;; - full) + 'full') duplify full -- "${dupl_opts[@]}" --exclude-globbing-filelist "$EXCLUDE" \ "$SOURCE" "$BACKEND_URL" ;; - verify) + 'verify') duplify verify -- "${dupl_opts[@]}" --exclude-globbing-filelist "$EXCLUDE" \ "$BACKEND_URL" "$SOURCE" ;; - list) + 'list') # time param exists since 0.5.10+ TIME="${ftpl_pars[0]:-now}" duplify list-current-files -- -t "$TIME" "${dupl_opts[@]}" "$BACKEND_URL" ;; - cleanup) + 'cleanup') duplify cleanup -- "${dupl_opts[@]}" "$BACKEND_URL" ;; - purge) + 'purge') MAX_AGE=${ftpl_pars[0]:-$MAX_AGE} [ -z "$MAX_AGE" ] && error " Missing parameter <max_age>. Can be set in profile or as command line parameter." duplify remove-older-than "${MAX_AGE}" \ -- "${dupl_opts[@]}" "$BACKEND_URL" ;; - purge-full) + 'purgefull') MAX_FULL_BACKUPS=${ftpl_pars[0]:-$MAX_FULL_BACKUPS} [ -z "$MAX_FULL_BACKUPS" ] && error " Missing parameter <max_full_backups>. Can be set in profile or as command line parameter." duplify remove-all-but-n-full "${MAX_FULL_BACKUPS}" \ -- "${dupl_opts[@]}" "$BACKEND_URL" ;; - purge-incr) + 'purgeincr') MAX_FULLS_WITH_INCRS=${ftpl_pars[0]:-$MAX_FULLS_WITH_INCRS} [ -z "$MAX_FULLS_WITH_INCRS" ] && error " Missing parameter <max_fulls_with_incrs>. Can be set in profile or as command line parameter." duplify remove-all-inc-of-but-n-full "${MAX_FULLS_WITH_INCRS}" \ -- "${dupl_opts[@]}" "$BACKEND_URL" ;; - restore) + 'restore') OUT_PATH="${ftpl_pars[0]}"; TIME="${ftpl_pars[1]:-now}"; [ -z "$OUT_PATH" ] && error " Missing parameter target_path for restore. @@ -1998,7 +2108,7 @@ duplify -- -t "$TIME" "${dupl_opts[@]}" "$BACKEND_URL" "$OUT_PATH" ;; - fetch) + 'fetch') IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}"; TIME="${ftpl_pars[2]:-now}"; ( [ -z "$IN_PATH" ] || [ -z "$OUT_PATH" ] ) && error " Missing parameter <src_path> or <target_path> for fetch. @@ -2010,7 +2120,7 @@ duplify -- --restore-time "$TIME" "${dupl_opts[@]}" \ --file-to-restore "$IN_PATH" "$BACKEND_URL" "$OUT_PATH" ;; - status) + 'status') duplify collection-status -- "${dupl_opts[@]}" "$BACKEND_URL" ;; *) -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
