#!/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