antidote/tests/functions/mockgit

74 lines
2.5 KiB
Bash

#!/bin/zsh
#function mockgit {
# handle these commands:
# - `git -C "$dir" config remote.origin.url`
# - `git -C "$dir" pull --quiet --ff --rebase --autostash`
# - `git -C "$dir" rev-parse --short HEAD`
# - `git clone --quiet --depth 1 --recurse-submodules --shallow-submodules --branch branch $url $dir`
# - `git --version`
emulate -L zsh; setopt local_options extended_glob
local MATCH MBEGIN MEND; local -a match mbegin mend # appease 'warn_create_global'
0=${(%):-%x}
local prjdir="${0:A:h:h:h}"
local args=("$@[@]")
local o_path o_quiet o_ff o_rebase o_autostash o_short
local o_depth o_recurse_submodules o_shallow_submodules o_branch
local o_init o_recursive
zparseopts -D -E -- \
C:=o_path \
-short=o_short \
-quiet=o_quiet \
-ff=o_ff \
-rebase=o_rebase \
-autostash=o_autostash \
-recurse-submodules=o_recurse_submodules \
-shallow-submodules=o_shallow_submodules \
-depth:=o_depth \
-branch:=o_branch \
-init=o_init \
-recursive=o_recursive ||
return 1
if [[ "$@" = "--version" ]]; then
echo "mockgit version 0.0.0"
elif [[ "$1" = "clone" ]]; then
local giturl="$2"
local repo="${giturl:h:t}/${${giturl:t}%.git}"
local bundledir="${3:-.}"
local gitsite_repodir="$prjdir/tests/fakegitsite.com/${repo}"
if [[ -d "$gitsite_repodir" ]]; then
[[ -d "${bundledir:A}" ]] || mkdir -p "${bundledir:A}"
cp -r -- "$gitsite_repodir" "${bundledir:A}"
elif ! (( $#o_quiet )); then
echo "MOCKGIT: Cloning into '${repo:t}'..."
echo "MOCKGIT: Repository not found."
echo "MOCKGIT: repository '$giturl' not found"
fi
elif [[ "$@" = "config remote.origin.url" ]]; then
if [[ -e $bundledir/.git/config/remote.origin.url ]]; then
cat $bundledir/.git/config/remote.origin.url
else
# un-sanitize dir into URL
local url=$o_path[-1]
url=${url:t}
url=${url:gs/-AT-/\@}
url=${url:gs/-COLON-/\:}
url=${url:gs/-SLASH-/\/}
echo "$url"
fi
elif [[ "$@" = "pull" ]]; then
(( $#o_quiet )) || echo "MOCKGIT: Already up to date."
elif [[ "$@" = "rev-parse HEAD" ]]; then
if (( $#o_short )); then
echo "abcd123"
else
echo "abcd1230abcd1230abcd1230abcd1230abcd1230"
fi
elif [[ "$1" == (submodule|fetch) ]]; then
# nothing to do
else
echo >&2 "mocking not implemented for git command: git $@"
return 1
fi
#}