git/t/t9119-git-svn-info.sh
Ævar Arnfjörð Bjarmason 8f788eb8b7 t: create test harness for 'bundle-uri' command
The previous change allowed for a Git server to advertise the
'bundle-uri' command as a capability based on the
uploadPack.advertiseBundleURIs config option. Create a set of tests that
check that this capability is advertised using 'git ls-remote'.

In order to test this functionality across three protocols (file, git,
and http), create lib-bundle-uri-protocol.sh to generalize the tests,
allowing the other test scripts to set an environment variable and
otherwise inherit the setup and tests from this script.

The tests currently only test that the 'bundle-uri' command is
advertised or not. Other actions will be tested as the Git client learns
to request the 'bundle-uri' command and parse its response.

To help with URI escaping, specifically for file paths with a space in
them, extract a 'sed' invocation from t9199-git-svn-info.sh into a
helper function for use here, too.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-12-25 16:24:23 +09:00

392 lines
12 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2007 David D. Kilzer
test_description='git svn info'
. ./lib-git-svn.sh
# Tested with: svn, version 1.4.4 (r25188)
# Tested with: svn, version 1.6.[12345689]
v=$(svn_cmd --version | sed -n -e 's/^svn, version \(1\.[0-9]*\.[0-9]*\).*$/\1/p')
case $v in
1.[456].*)
;;
*)
skip_all="skipping svn-info test (SVN version: $v not supported)"
test_done
;;
esac
# On the "Text Last Updated" line, "git svn info" does not return the
# same value as "svn info" (i.e. the commit timestamp that touched the
# path most recently); do not expect that field to match.
test_cmp_info () {
sed -e '/^Text Last Updated:/d' "$1" >tmp.expect &&
sed -e '/^Text Last Updated:/d' "$2" >tmp.actual &&
test_cmp tmp.expect tmp.actual &&
rm -f tmp.expect tmp.actual
}
quoted_svnrepo="$(echo $svnrepo | test_uri_escape)"
test_expect_success 'setup repository and import' '
mkdir info &&
(
cd info &&
echo FIRST >A &&
echo one >file &&
ln -s file symlink-file &&
mkdir directory &&
touch directory/.placeholder &&
ln -s directory symlink-directory &&
svn_cmd import -m "initial" . "$svnrepo"
) &&
svn_cmd co "$svnrepo" svnwc &&
(
cd svnwc &&
echo foo >foo &&
svn_cmd add foo &&
svn_cmd commit -m "change outside directory" &&
svn_cmd update
) &&
mkdir gitwc &&
(
cd gitwc &&
git svn init "$svnrepo" &&
git svn fetch
)
'
test_expect_success 'info' "
(cd svnwc && svn info) > expected.info &&
(cd gitwc && git svn info) > actual.info &&
test_cmp_info expected.info actual.info
"
test_expect_success 'info --url' '
test "$(cd gitwc && git svn info --url)" = "$quoted_svnrepo"
'
test_expect_success 'info .' "
(cd svnwc && svn info .) > expected.info-dot &&
(cd gitwc && git svn info .) > actual.info-dot &&
test_cmp_info expected.info-dot actual.info-dot
"
test_expect_success 'info $(pwd)' '
(cd svnwc && svn info "$(pwd)") >expected.info-pwd &&
(cd gitwc && git svn info "$(pwd)") >actual.info-pwd &&
grep -v ^Path: <expected.info-pwd >expected.info-np &&
grep -v ^Path: <actual.info-pwd >actual.info-np &&
test_cmp_info expected.info-np actual.info-np &&
test "$(sed -ne \"/^Path:/ s!/svnwc!!\" <expected.info-pwd)" = \
"$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
'
test_expect_success 'info $(pwd)/../___wc' '
(cd svnwc && svn info "$(pwd)/../svnwc") >expected.info-pwd &&
(cd gitwc && git svn info "$(pwd)/../gitwc") >actual.info-pwd &&
grep -v ^Path: <expected.info-pwd >expected.info-np &&
grep -v ^Path: <actual.info-pwd >actual.info-np &&
test_cmp_info expected.info-np actual.info-np &&
test "$(sed -ne \"/^Path:/ s!/svnwc!!\" <expected.info-pwd)" = \
"$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
'
test_expect_success 'info $(pwd)/../___wc//file' '
(cd svnwc && svn info "$(pwd)/../svnwc//file") >expected.info-pwd &&
(cd gitwc && git svn info "$(pwd)/../gitwc//file") >actual.info-pwd &&
grep -v ^Path: <expected.info-pwd >expected.info-np &&
grep -v ^Path: <actual.info-pwd >actual.info-np &&
test_cmp_info expected.info-np actual.info-np &&
test "$(sed -ne \"/^Path:/ s!/svnwc!!\" <expected.info-pwd)" = \
"$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
'
test_expect_success 'info --url .' '
test "$(cd gitwc && git svn info --url .)" = "$quoted_svnrepo"
'
test_expect_success 'info file' "
(cd svnwc && svn info file) > expected.info-file &&
(cd gitwc && git svn info file) > actual.info-file &&
test_cmp_info expected.info-file actual.info-file
"
test_expect_success 'info --url file' '
test "$(cd gitwc && git svn info --url file)" = "$quoted_svnrepo/file"
'
test_expect_success 'info directory' "
(cd svnwc && svn info directory) > expected.info-directory &&
(cd gitwc && git svn info directory) > actual.info-directory &&
test_cmp_info expected.info-directory actual.info-directory
"
test_expect_success 'info inside directory' "
(cd svnwc/directory && svn info) > expected.info-inside-directory &&
(cd gitwc/directory && git svn info) > actual.info-inside-directory &&
test_cmp_info expected.info-inside-directory actual.info-inside-directory
"
test_expect_success 'info --url directory' '
test "$(cd gitwc && git svn info --url directory)" = "$quoted_svnrepo/directory"
'
test_expect_success 'info symlink-file' "
(cd svnwc && svn info symlink-file) > expected.info-symlink-file &&
(cd gitwc && git svn info symlink-file) > actual.info-symlink-file &&
test_cmp_info expected.info-symlink-file actual.info-symlink-file
"
test_expect_success 'info --url symlink-file' '
test "$(cd gitwc && git svn info --url symlink-file)" \
= "$quoted_svnrepo/symlink-file"
'
test_expect_success 'info symlink-directory' "
(cd svnwc && svn info symlink-directory) \
> expected.info-symlink-directory &&
(cd gitwc && git svn info symlink-directory) \
> actual.info-symlink-directory &&
test_cmp_info expected.info-symlink-directory actual.info-symlink-directory
"
test_expect_success 'info --url symlink-directory' '
test "$(cd gitwc && git svn info --url symlink-directory)" \
= "$quoted_svnrepo/symlink-directory"
'
test_expect_success 'info added-file' "
echo two > gitwc/added-file &&
(
cd gitwc &&
git add added-file
) &&
cp gitwc/added-file svnwc/added-file &&
(
cd svnwc &&
svn_cmd add added-file > /dev/null
) &&
(cd svnwc && svn info added-file) > expected.info-added-file &&
(cd gitwc && git svn info added-file) > actual.info-added-file &&
test_cmp_info expected.info-added-file actual.info-added-file
"
test_expect_success 'info --url added-file' '
test "$(cd gitwc && git svn info --url added-file)" \
= "$quoted_svnrepo/added-file"
'
test_expect_success 'info added-directory' "
mkdir gitwc/added-directory svnwc/added-directory &&
touch gitwc/added-directory/.placeholder &&
(
cd svnwc &&
svn_cmd add added-directory > /dev/null
) &&
(
cd gitwc &&
git add added-directory
) &&
(cd svnwc && svn info added-directory) \
> expected.info-added-directory &&
(cd gitwc && git svn info added-directory) \
> actual.info-added-directory &&
test_cmp_info expected.info-added-directory actual.info-added-directory
"
test_expect_success 'info --url added-directory' '
test "$(cd gitwc && git svn info --url added-directory)" \
= "$quoted_svnrepo/added-directory"
'
test_expect_success 'info added-symlink-file' "
(
cd gitwc &&
ln -s added-file added-symlink-file &&
git add added-symlink-file
) &&
(
cd svnwc &&
ln -s added-file added-symlink-file &&
svn_cmd add added-symlink-file > /dev/null
) &&
(cd svnwc && svn info added-symlink-file) \
> expected.info-added-symlink-file &&
(cd gitwc && git svn info added-symlink-file) \
> actual.info-added-symlink-file &&
test_cmp_info expected.info-added-symlink-file \
actual.info-added-symlink-file
"
test_expect_success 'info --url added-symlink-file' '
test "$(cd gitwc && git svn info --url added-symlink-file)" \
= "$quoted_svnrepo/added-symlink-file"
'
test_expect_success 'info added-symlink-directory' "
(
cd gitwc &&
ln -s added-directory added-symlink-directory &&
git add added-symlink-directory
) &&
(
cd svnwc &&
ln -s added-directory added-symlink-directory &&
svn_cmd add added-symlink-directory > /dev/null
) &&
(cd svnwc && svn info added-symlink-directory) \
> expected.info-added-symlink-directory &&
(cd gitwc && git svn info added-symlink-directory) \
> actual.info-added-symlink-directory &&
test_cmp_info expected.info-added-symlink-directory \
actual.info-added-symlink-directory
"
test_expect_success 'info --url added-symlink-directory' '
test "$(cd gitwc && git svn info --url added-symlink-directory)" \
= "$quoted_svnrepo/added-symlink-directory"
'
test_expect_success 'info deleted-file' "
(
cd gitwc &&
git rm -f file > /dev/null
) &&
(
cd svnwc &&
svn_cmd rm --force file > /dev/null
) &&
(cd svnwc && svn info file) >expected.info-deleted-file &&
(cd gitwc && git svn info file) >actual.info-deleted-file &&
test_cmp_info expected.info-deleted-file actual.info-deleted-file
"
test_expect_success 'info --url file (deleted)' '
test "$(cd gitwc && git svn info --url file)" \
= "$quoted_svnrepo/file"
'
test_expect_success 'info deleted-directory' "
(
cd gitwc &&
git rm -r -f directory > /dev/null
) &&
(
cd svnwc &&
svn_cmd rm --force directory > /dev/null
) &&
(cd svnwc && svn info directory) >expected.info-deleted-directory &&
(cd gitwc && git svn info directory) >actual.info-deleted-directory &&
test_cmp_info expected.info-deleted-directory actual.info-deleted-directory
"
test_expect_success 'info --url directory (deleted)' '
test "$(cd gitwc && git svn info --url directory)" \
= "$quoted_svnrepo/directory"
'
test_expect_success 'info deleted-symlink-file' "
(
cd gitwc &&
git rm -f symlink-file > /dev/null
) &&
(
cd svnwc &&
svn_cmd rm --force symlink-file > /dev/null
) &&
(cd svnwc && svn info symlink-file) >expected.info-deleted-symlink-file &&
(cd gitwc && git svn info symlink-file) >actual.info-deleted-symlink-file &&
test_cmp_info expected.info-deleted-symlink-file actual.info-deleted-symlink-file
"
test_expect_success 'info --url symlink-file (deleted)' '
test "$(cd gitwc && git svn info --url symlink-file)" \
= "$quoted_svnrepo/symlink-file"
'
test_expect_success 'info deleted-symlink-directory' "
(
cd gitwc &&
git rm -f symlink-directory > /dev/null
) &&
(
cd svnwc &&
svn_cmd rm --force symlink-directory > /dev/null
) &&
(cd svnwc && svn info symlink-directory) >expected.info-deleted-symlink-directory &&
(cd gitwc && git svn info symlink-directory) >actual.info-deleted-symlink-directory &&
test_cmp_info expected.info-deleted-symlink-directory actual.info-deleted-symlink-directory
"
test_expect_success 'info --url symlink-directory (deleted)' '
test "$(cd gitwc && git svn info --url symlink-directory)" \
= "$quoted_svnrepo/symlink-directory"
'
# NOTE: git does not have the concept of replaced objects,
# so we can't test for files in that state.
test_expect_success 'info unknown-file' "
echo two > gitwc/unknown-file &&
(cd gitwc && test_must_fail git svn info unknown-file) \
2> actual.info-unknown-file &&
grep unknown-file actual.info-unknown-file
"
test_expect_success 'info --url unknown-file' '
echo two > gitwc/unknown-file &&
(cd gitwc && test_must_fail git svn info --url unknown-file) \
2> actual.info-url-unknown-file &&
grep unknown-file actual.info-url-unknown-file
'
test_expect_success 'info unknown-directory' "
mkdir gitwc/unknown-directory svnwc/unknown-directory &&
(cd gitwc && test_must_fail git svn info unknown-directory) \
2> actual.info-unknown-directory &&
grep unknown-directory actual.info-unknown-directory
"
test_expect_success 'info --url unknown-directory' '
(cd gitwc && test_must_fail git svn info --url unknown-directory) \
2> actual.info-url-unknown-directory &&
grep unknown-directory actual.info-url-unknown-directory
'
test_expect_success 'info unknown-symlink-file' "
(
cd gitwc &&
ln -s unknown-file unknown-symlink-file
) &&
(cd gitwc && test_must_fail git svn info unknown-symlink-file) \
2> actual.info-unknown-symlink-file &&
grep unknown-symlink-file actual.info-unknown-symlink-file
"
test_expect_success 'info --url unknown-symlink-file' '
(cd gitwc && test_must_fail git svn info --url unknown-symlink-file) \
2> actual.info-url-unknown-symlink-file &&
grep unknown-symlink-file actual.info-url-unknown-symlink-file
'
test_expect_success 'info unknown-symlink-directory' "
(
cd gitwc &&
ln -s unknown-directory unknown-symlink-directory
) &&
(cd gitwc && test_must_fail git svn info unknown-symlink-directory) \
2> actual.info-unknown-symlink-directory &&
grep unknown-symlink-directory actual.info-unknown-symlink-directory
"
test_expect_success 'info --url unknown-symlink-directory' '
(cd gitwc && test_must_fail git svn info --url unknown-symlink-directory) \
2> actual.info-url-unknown-symlink-directory &&
grep unknown-symlink-directory actual.info-url-unknown-symlink-directory
'
test_done