Exheredludis/paludis/syncers/dodarcs.in
2011-03-19 23:52:27 +00:00

105 lines
2.9 KiB
Bash

#!/usr/bin/env bash
source "${PALUDIS_EBUILD_DIR}/echo_functions.bash"
old_set=$-
set -a
for f in ${PALUDIS_BASHRC_FILES}; do
[[ -f "${f}" ]] && source "${f}"
done
[[ "${old_set}" == *a* ]] || set +a
LOCAL=
REMOTE=
unset LANG ${!LC_*}
export LC_ALL=C
DARCS_GET_OPTIONS=( )
DARCS_PULL_OPTIONS=( )
while [[ $# -gt 0 ]]; do
case "${1}" in
--darcs-get-option=*)
DARCS_GET_OPTIONS[${#DARCS_GET_OPTIONS[@]}]="${1#*=}"
;;
--darcs-pull-option=*)
DARCS_PULL_OPTIONS[${#DARCS_PULL_OPTIONS[@]}]="${1#*=}"
;;
--help)
PROTO="${0##*/do}"
if [[ "${PROTO}" == darcs+ssh ]]; then
echo " URL syntax: darcs+ssh://[USERNAME[:PASSWORD]@]SERVER:/PATH"
elif [[ "${PROTO}" == darcs+http || "${PROTO}" == darcs+https ]]; then
echo " URL syntax: ${PROTO}://[USERNAME[:PASSWORD]@]SERVER[:PORT]/PATH"
elif [[ "${PROTO}" == darcs+file ]]; then
echo " URL syntax: darcs+file:///PATH"
else
# darcs can handle any protocol as long as you define
# environment variables telling it how. The user can
# symlink/copy this syncer to enable support for other
# protocols, but we can't give them much help with the
# syntax....
PROTO="${PROTO#darcs+}"
echo " URL syntax: darcs+${PROTO}://[$( tr [:lower:] [:upper:] <<<"${PROTO}" )-URL]"
fi
echo " Options:"
echo " --darcs-get-option=OPTION Pass OPTION to darcs get"
echo " --darcs-pull-option=OPTION Pass OPTION to darcs pull"
exit 0
;;
--revision=*)
eerror "${0}: --revision unsupported"
exit 1
;;
--*)
ewarn "${0}: unknown option '${1%%=*}'"
;;
*)
if [[ -z "${LOCAL}" ]]; then
LOCAL="${1}"
elif [[ -z "${REMOTE}" ]]; then
REMOTE="${1}"
else
eerror "${0}: extra argument '${1}'"
exit 1
fi
;;
esac
shift
done
if [[ -z "${LOCAL}" ]]; then
eerror "${0}: unspecified local repository directory"
exit 1
elif [[ -z "${REMOTE}" ]]; then
eerror "${0}: unspecified remote repository URL"
exit 1
fi
REMOTE="${REMOTE#darcs+file://}"
REMOTE="${REMOTE#darcs+ssh://}"
REMOTE="${REMOTE#darcs+}"
if [[ -d "${LOCAL}" && ! -d "${LOCAL}/_darcs" ]]; then
eerror "'${LOCAL}' exists but it is not a Darcs repository"
exit 1
fi
if [[ -d "${LOCAL}/_darcs" ]]; then
cd "${LOCAL}" && ${DARCS_WRAPPER} darcs pull --all \
--set-scripts-executable "${DARCS_PULL_OPTIONS[@]}" "${REMOTE}"
else
${DARCS_WRAPPER} darcs get --partial --set-scripts-executable \
"${DARCS_GET_OPTIONS[@]}" --repo-name="${LOCAL}" "${REMOTE}"
fi