53a50892be
Before implementing a way to fetch bundles into a repository, create the basic logic. Assume that the URI is actually a file path. Future logic will make this more careful to other protocols. For now, we also only succeed if the content at the URI is a bundle file, not a bundle list. Bundle lists will be implemented in a future change. Note that the discovery of a temporary filename is slightly racy because the odb_mkstemp() relies on the temporary file not existing. With the current implementation being limited to file copies, we could replace the copy_file() with copy_fd(). The tricky part comes in future changes that send the filename to 'git remote-https' and its 'get' capability. At that point, we need the file descriptor closed _and_ the file unlinked. If we were to keep the file descriptor open for the sake of normal file copies, then we would pollute the rest of the code for little benefit. This is especially the case because we expect that most bundle URI use will be based on HTTPS instead of file copies. Reviewed-by: Josh Steadmon <steadmon@google.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
40 lines
742 B
Bash
Executable File
40 lines
742 B
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='test downloading a file by URL'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
|
|
. ./test-lib.sh
|
|
|
|
. "$TEST_DIRECTORY"/lib-httpd.sh
|
|
start_httpd
|
|
|
|
test_expect_success 'get by URL: 404' '
|
|
test_when_finished "rm -f file.temp" &&
|
|
url="$HTTPD_URL/none.txt" &&
|
|
cat >input <<-EOF &&
|
|
capabilities
|
|
get $url file1
|
|
EOF
|
|
|
|
test_must_fail git remote-http $url <input 2>err &&
|
|
test_path_is_missing file1 &&
|
|
grep "failed to download file at URL" err
|
|
'
|
|
|
|
test_expect_success 'get by URL: 200' '
|
|
echo data >"$HTTPD_DOCUMENT_ROOT_PATH/exists.txt" &&
|
|
|
|
url="$HTTPD_URL/exists.txt" &&
|
|
cat >input <<-EOF &&
|
|
capabilities
|
|
get $url file2
|
|
|
|
EOF
|
|
|
|
git remote-http $url <input &&
|
|
test_cmp "$HTTPD_DOCUMENT_ROOT_PATH/exists.txt" file2
|
|
'
|
|
|
|
test_done
|