Test "t0300-credentials" is failing on Arch/Artix: asks to enter the Username/Password in an infinite loop
From: Ivan Ivanov <hidden>
Date: 2026-03-06 00:42:25
Good day! While trying to rebuild git for Arch/Artix, I run into the
following problem: shortly after "*** prove (shell & unit tests) ***"
I get asked the Username/Password in an endless loop. Below are the
full logs, as well as the contents of
./test-results/t0300-credentials.out file, hope this is helpful for
debugging. Please note that I have all the dependencies installed,
even the optional ones like Apache HTTPD (some online manuals
suggested doing that, but didn't help to pass this test)
==> Starting check()...
GEN git-difftool--helper
GEN git-filter-branch
GEN git-merge-octopus
GEN git-merge-one-file
GEN git-merge-resolve
GEN git-mergetool
GEN git-quiltimport
GEN git-request-pull
GEN git-submodule
GEN git-web--browse
GEN git-archimport
GEN git-cvsexportcommit
GEN git-cvsimport
GEN git-cvsserver
GEN git-send-email
GEN git-svn
GEN git-p4
GEN git-instaweb
GEN git-mergetool--lib
GEN git-sh-i18n
GEN git-sh-setup
SUBDIR git-gui
SUBDIR gitk-git
SUBDIR templates
GEN perl/build/lib/Git.pm
GEN perl/build/lib/Git/I18N.pm
GEN perl/build/lib/Git/IndexInfo.pm
GEN perl/build/lib/Git/LoadCPAN.pm
GEN perl/build/lib/Git/Packet.pm
GEN perl/build/lib/Git/SVN.pm
GEN perl/build/lib/Git/LoadCPAN/Error.pm
GEN perl/build/lib/Git/SVN/Editor.pm
GEN perl/build/lib/Git/SVN/Fetcher.pm
GEN perl/build/lib/Git/SVN/GlobSpec.pm
GEN perl/build/lib/Git/SVN/Log.pm
GEN perl/build/lib/Git/SVN/Migration.pm
GEN perl/build/lib/Git/SVN/Prompt.pm
GEN perl/build/lib/Git/SVN/Ra.pm
GEN perl/build/lib/Git/SVN/Utils.pm
GEN perl/build/lib/Git/LoadCPAN/Mail/Address.pm
GEN perl/build/lib/Git/SVN/Memoize/YAML.pm
make -C t/ all
make[1]: Entering directory '/home/username/artix_git/src/git/t'
rm -f -r 'test-results'
*** prove (shell & unit tests) ***
Username for 'http://example.com':
Password for 'http://example.com':
Username for 'http://example.com':
Password for 'http://example.com':
/src/git/t$ cat ./test-results/t0300-credentials.out
Initialized empty Git repository in /dev/shm/git-test/trash
directory.t0300-credentials/.git/
expecting success of 0300.1 'setup helper scripts':
cat >dump <<-\EOF &&
whoami=$(echo $0 | sed s/.*git-credential-//)
echo >&2 "$whoami: $*"
OIFS=$IFS
IFS==
while read key value; do
echo >&2 "$whoami: $key=$value"
if test -z "${key%%*\[\]}"
then
key=${key%%\[\]}
eval "$key=\"\$$key $value\""
else
eval "$key=$value"
fi
done
IFS=$OIFS
EOF
write_script git-credential-useless <<-\EOF &&
. ./dump
exit 0
EOF
write_script git-credential-quit <<-\EOF &&
. ./dump
echo quit=1
EOF
write_script git-credential-verbatim <<-\EOF &&
user=$1; shift
pass=$1; shift
. ./dump
test -z "$user" || echo username=$user
test -z "$pass" || echo password=$pass
EOF
write_script git-credential-verbatim-cred <<-\EOF &&
authtype=$1; shift
credential=$1; shift
. ./dump
echo capability[]=authtype
echo capability[]=state
test -z "${capability##*authtype*}" || exit 0
test -z "$authtype" || echo authtype=$authtype
test -z "$credential" || echo credential=$credential
test -z "${capability##*state*}" || exit 0
echo state[]=verbatim-cred:foo
EOF
write_script git-credential-verbatim-ephemeral <<-\EOF &&
authtype=$1; shift
credential=$1; shift
. ./dump
echo capability[]=authtype
test -z "${capability##*authtype*}" || exit 0
test -z "$authtype" || echo authtype=$authtype
test -z "$credential" || echo credential=$credential
echo "ephemeral=1"
EOF
write_script git-credential-verbatim-with-expiry <<-\EOF &&
user=$1; shift
pass=$1; shift
pexpiry=$1; shift
. ./dump
test -z "$user" || echo username=$user
test -z "$pass" || echo password=$pass
test -z "$pexpiry" || echo password_expiry_utc=$pexpiry
EOF
write_script git-credential-cntrl-in-username <<-\EOF &&
printf "username=\\007latrix Lestrange\\n"
EOF
PATH="$PWD:$PATH"
ok 1 - setup helper scripts
expecting success of 0300.2 'credential_fill invokes helper':
check fill "verbatim foo bar" <<-\EOF
protocol=http
host=example.com
--
protocol=http
host=example.com
username=foo
password=bar
--
verbatim: get
verbatim: protocol=http
verbatim: host=example.com
EOF
--- expect-stdout 2026-03-06 00:33:02.009338195 +0000
+++ stdout 2026-03-06 00:33:07.569338321 +0000@@ -1,4 +1,4 @@ protocol=http host=example.com -username=foo -password=bar +username= +password=
not ok 2 - credential_fill invokes helper
#
# check fill "verbatim foo bar" <<-\EOF
# protocol=http
# host=example.com
# --
# protocol=http
# host=example.com
# username=foo
# password=bar
# --
# verbatim: get
# verbatim: protocol=http
# verbatim: host=example.com
# EOF
#
expecting success of 0300.3 'credential_fill invokes helper with credential':
check fill "verbatim-cred Bearer token" <<-\EOF
capability[]=authtype
protocol=http
host=example.com
--
capability[]=authtype
authtype=Bearer
credential=token
protocol=http
host=example.com
--
verbatim-cred: get
verbatim-cred: capability[]=authtype
verbatim-cred: protocol=http
verbatim-cred: host=example.com
EOF
--- expect-stdout 2026-03-06 00:33:07.581338322 +0000
+++ stdout 2026-03-06 00:33:08.191338336 +0000@@ -1,5 +1,4 @@ -capability[]=authtype -authtype=Bearer -credential=token protocol=http host=example.com +username= +password=
not ok 3 - credential_fill invokes helper with credential
#
# check fill "verbatim-cred Bearer token" <<-\EOF
# capability[]=authtype
# protocol=http
# host=example.com
# --
# capability[]=authtype
# authtype=Bearer
# credential=token
# protocol=http
# host=example.com
# --
# verbatim-cred: get
# verbatim-cred: capability[]=authtype
# verbatim-cred: protocol=http
# verbatim-cred: host=example.com
# EOF
#
expecting success of 0300.4 'credential_fill invokes helper with
ephemeral credential':
check fill "verbatim-ephemeral Bearer token" <<-\EOF
capability[]=authtype
protocol=http
host=example.com
--
capability[]=authtype
authtype=Bearer
credential=token
ephemeral=1
protocol=http
host=example.com
--
verbatim-ephemeral: get
verbatim-ephemeral: capability[]=authtype
verbatim-ephemeral: protocol=http
verbatim-ephemeral: host=example.com
EOF