#!/bin/sh
set -u
. tests/lib.sh
TESTDIR="$(mkdtemp)"
cp -R . "$TESTDIR"
cd "$TESTDIR" || exit
TEST_PREFIX="$PWD/tests/prefix/$(uuid)"
make clean >/dev/null
make PREFIX="$TEST_PREFIX" install >/dev/null
PATH="$PWD/tests:$TEST_PREFIX/bin:$PATH"
if ! git config --global user.email > /dev/null; then
git config --global user.email email@example.com
fi
if ! git config --global user.name > /dev/null; then
git config --global user.name Example
fi
new_repo() {
REPO="$PWD/tests/remotes/$(uuid)"
mkdir -p "$REPO"
cd "$REPO" || exit 1
git init 1>/dev/null 2>/dev/null || {
git config --global init.defaultBranch
}
git remote add origin "$1"
echo '' > f.txt
git add f.txt
git commit -qam f.txt
}
test_supported_remotes() {
testing 'supported remotes'
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo git://euandreh.xyz/remembering
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_empty_stdout
assert_fgrep_stderr 'Opening https://euandreh.xyz'
assert_fgrep_stderr 'xdg-open: https://euandreh.xyz'
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://git.sr.ht/~sircmpwn/ctools
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_fgrep_stdout 'https://git.sr.ht'
assert_empty_stderr
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://git.kernel.org/pub/scm/git/git.git
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_empty_stdout
assert_fgrep_stderr 'Opening https://git.kernel.org'
assert_fgrep_stderr 'xdg-open: https://git.kernel.org'
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://git.savannah.gnu.org/guix.git
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_fgrep_stdout 'https://git.savannah.gnu.org'
assert_empty_stderr
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://notabug.org/cwebber/guile-gcrypt
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_empty_stdout
assert_fgrep_stderr 'Opening https://notabug.org'
assert_fgrep_stderr 'xdg-open: https://notabug.org'
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://codeberg.org/dnkl/yambar
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_fgrep_stdout 'https://codeberg.org'
assert_empty_stderr
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://bitbucket.org/uprojects/jsmn
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_empty_stdout
assert_fgrep_stderr 'Opening https://bitbucket.org'
assert_fgrep_stderr 'xdg-open: https://bitbucket.org'
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://pagure.io/aquedoc
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_fgrep_stdout 'https://pagure.io'
assert_empty_stderr
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://gitlab.com/nonguix/nonguix
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_empty_stdout
assert_fgrep_stderr 'Opening https://gitlab.com/nonguix/nonguix'
assert_fgrep_stderr 'xdg-open: https://gitlab.com/nonguix/nonguix'
cd - > /dev/null || exit 1
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://github.com/skeeto/elfeed
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_fgrep_stdout 'https://github.com'
assert_empty_stderr
cd - > /dev/null || exit 1
test_ok
}
test_unsupported_remote() {
testing 'unsupported remotes'
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
new_repo https://example.com/a/b
LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 1
assert_empty_stdout
assert_fgrep_stderr 'Unsupported origin: https://example.com'
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
git config git-permalink.template-commit-file \
'before %s middle %s after'
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_grep_stdout 'before .+ middle README.md after'
assert_empty_stderr
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
git config --unset git-permalink.template-commit-file
git config git-permalink.template-file-commit \
'before %s middle %s after'
git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 0
assert_grep_stdout 'before README.md middle .+ after'
assert_empty_stderr
N="$LINENO"
OUT="$(mkstemp)"
ERR="$(mkstemp)"
git config --unset git-permalink.template-file-commit
LANG=POSIX git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
STATUS=$?
assert_status 1
assert_empty_stdout
assert_fgrep_stderr 'Unsupported origin: https://example.com'
test_ok
}
test_supported_remotes
test_unsupported_remote