Currently, our default branch in tests is "master". This is the Git
default, but the Git default will likely change in the future, so it
makes sense to update our testsuite to be explicit about the branch
name. We'll ensure this continues by building against older versions of
Git as well as newer versions.
We use "main" for the new branch name, since that's the proposed value
upstream.
This commit was made entirely by automated means using the following
command:
git grep -l master t | xargs sed -i -e 's/master/main/g'
It's possible that the final "Downloading objects" message might not be
printed in some cases due to a race condition. (The corresponding
upload message, on the other hand, will always be printed because it
runs before the actual push.)
To avoid spurious failures, don't look for this message in several tests
where this race condition commonly occurs. Instead, use "git lfs fsck"
to verify that we downloaded all the objects we expected to get.
In addition, several of the tests also check that the expected number of
objects is correct, which provides additional confidence that our test
did in fact succeed.
This commit adds a new credential helper, NetrcCredentialHelper,
to retrieve credentials from a .netrc file. This replaces the
old .netrc authorization behaviour, which was done directly from
the `doWithAuth()` code.
Additionally, this commit moves all of the `.netrc` functionality
out of `lfsapi` and into `creds`. This was done both because
`creds` is now the logical place for the `.netrc` functionality,
and to prevent an import cycle between `creds` and `lfsapi`.
In the Basic Download and Basic Upload adapters, retry requests
that failed due to a lack of Authorization. This will allow these
requests to go through the normal auth flow without having to make
another batch request.
For tq requests, use the URL being transferred to for the access
mode instead of the LFS API endpoint. Since these endpoints are
different, this will ensure credentials aren't passed along
needlessly if, for example, the API endpoint requires
authentication and the endpoint being transferred to does not.
The printf(1) command, like it's C cousin, takes a format string as its
first argument. If a shell variable is passed as the first argument, it
will be interpreted as a format string; this can lead to surprising
behavior and can cause the test suite to fail if we accidentally insert
a format string character into the variable.
Modify all the places in the individual tests that we use a plain quoted
variable as the format string by running the following Ruby one-liner:
ruby -i -pe '$_.gsub!(/printf "\$/, %q(printf "%s" "$))' t/t-*.sh
Avoid modifying the test helpers, as there are places (such as calc_oid)
where we want to pass text containing escapes (such as "\n") and have
those be properly interpreted by printf(1).
Lock verification can cause an extra HTTP POST to /locks/verify, which
adds an extra 'git credential fill' output to the log of 'git push',
hence failing a below assertion.