1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
|
#!/bin/sh
#
# Copyright (c) 2006 Eric Wong
#
test_description='git svn property tests'
. ./lib-git-svn.sh
mkdir import
a_crlf=
a_lf=
a_cr=
a_ne_crlf=
a_ne_lf=
a_ne_cr=
a_empty=
a_empty_lf=
a_empty_cr=
a_empty_crlf=
cd import
cat >> kw.c <<\EOF
/* Somebody prematurely put a keyword into this file */
/* $Id$ */
EOF
printf "Hello\r\nWorld\r\n" > crlf
a_crlf=`git hash-object -w crlf`
printf "Hello\rWorld\r" > cr
a_cr=`git hash-object -w cr`
printf "Hello\nWorld\n" > lf
a_lf=`git hash-object -w lf`
printf "Hello\r\nWorld" > ne_crlf
a_ne_crlf=`git hash-object -w ne_crlf`
printf "Hello\nWorld" > ne_lf
a_ne_lf=`git hash-object -w ne_lf`
printf "Hello\rWorld" > ne_cr
a_ne_cr=`git hash-object -w ne_cr`
touch empty
a_empty=`git hash-object -w empty`
printf "\n" > empty_lf
a_empty_lf=`git hash-object -w empty_lf`
printf "\r" > empty_cr
a_empty_cr=`git hash-object -w empty_cr`
printf "\r\n" > empty_crlf
a_empty_crlf=`git hash-object -w empty_crlf`
svn_cmd import --no-auto-props -m 'import for git svn' . "$svnrepo" >/dev/null
cd ..
rm -rf import
test_expect_success 'checkout working copy from svn' 'svn co "$svnrepo" test_wc'
test_expect_success 'setup some commits to svn' '
(
cd test_wc &&
echo Greetings >> kw.c &&
poke kw.c &&
svn_cmd commit -m "Not yet an Id" &&
echo Hello world >> kw.c &&
poke kw.c &&
svn_cmd commit -m "Modified file, but still not yet an Id" &&
svn_cmd propset svn:keywords Id kw.c &&
poke kw.c &&
svn_cmd commit -m "Propset Id"
)
'
test_expect_success 'initialize git svn' 'git svn init "$svnrepo"'
test_expect_success 'fetch revisions from svn' 'git svn fetch'
name='test svn:keywords ignoring'
test_expect_success "$name" \
'git checkout -b mybranch ${remotes_git_svn} &&
echo Hi again >> kw.c &&
git commit -a -m "test keywords ignoring" &&
git svn set-tree ${remotes_git_svn}..mybranch &&
git pull . ${remotes_git_svn}'
expect='/* $Id$ */'
got="`sed -ne 2p kw.c`"
test_expect_success 'raw $Id$ found in kw.c' "test '$expect' = '$got'"
test_expect_success "propset CR on crlf files" '
(
cd test_wc &&
svn_cmd propset svn:eol-style CR empty &&
svn_cmd propset svn:eol-style CR crlf &&
svn_cmd propset svn:eol-style CR ne_crlf &&
svn_cmd commit -m "propset CR on crlf files"
)
'
test_expect_success 'fetch and pull latest from svn and checkout a new wc' \
'git svn fetch &&
git pull . ${remotes_git_svn} &&
svn_cmd co "$svnrepo" new_wc'
for i in crlf ne_crlf lf ne_lf cr ne_cr empty_cr empty_lf empty empty_crlf
do
test_expect_success "Comparing $i" "cmp $i new_wc/$i"
done
cd test_wc
printf '$Id$\rHello\rWorld\r' > cr
printf '$Id$\rHello\rWorld' > ne_cr
a_cr=`printf '$Id$\r\nHello\r\nWorld\r\n' | git hash-object --stdin`
a_ne_cr=`printf '$Id$\r\nHello\r\nWorld' | git hash-object --stdin`
test_expect_success 'Set CRLF on cr files' \
'svn_cmd propset svn:eol-style CRLF cr &&
svn_cmd propset svn:eol-style CRLF ne_cr &&
svn_cmd propset svn:keywords Id cr &&
svn_cmd propset svn:keywords Id ne_cr &&
svn_cmd commit -m "propset CRLF on cr files"'
cd ..
test_expect_success 'fetch and pull latest from svn' \
'git svn fetch && git pull . ${remotes_git_svn}'
b_cr="`git hash-object cr`"
b_ne_cr="`git hash-object ne_cr`"
test_expect_success 'CRLF + $Id$' "test '$a_cr' = '$b_cr'"
test_expect_success 'CRLF + $Id$ (no newline)' "test '$a_ne_cr' = '$b_ne_cr'"
cat > show-ignore.expect <<\EOF
# /
/no-such-file*
# /deeply/
/deeply/no-such-file*
# /deeply/nested/
/deeply/nested/no-such-file*
# /deeply/nested/directory/
/deeply/nested/directory/no-such-file*
EOF
test_expect_success 'test show-ignore' "
(
cd test_wc &&
mkdir -p deeply/nested/directory &&
touch deeply/nested/directory/.keep &&
svn_cmd add deeply &&
svn_cmd up &&
svn_cmd propset -R svn:ignore '
no-such-file*
' .
svn_cmd commit -m 'propset svn:ignore'
) &&
git svn show-ignore > show-ignore.got &&
cmp show-ignore.expect show-ignore.got
"
cat >create-ignore.expect <<\EOF
/no-such-file*
EOF
cat >create-ignore-index.expect <<\EOF
100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0 .gitignore
100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0 deeply/.gitignore
100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0 deeply/nested/.gitignore
100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0 deeply/nested/directory/.gitignore
EOF
test_expect_success 'test create-ignore' "
git svn fetch && git pull . ${remotes_git_svn} &&
git svn create-ignore &&
cmp ./.gitignore create-ignore.expect &&
cmp ./deeply/.gitignore create-ignore.expect &&
cmp ./deeply/nested/.gitignore create-ignore.expect &&
cmp ./deeply/nested/directory/.gitignore create-ignore.expect &&
git ls-files -s | grep gitignore | cmp - create-ignore-index.expect
"
cat >prop.expect <<\EOF
no-such-file*
EOF
cat >prop2.expect <<\EOF
8
EOF
# This test can be improved: since all the svn:ignore contain the same
# pattern, it can pass even though the propget did not execute on the
# right directory.
test_expect_success 'test propget' "
git svn propget svn:ignore . | cmp - prop.expect &&
cd deeply &&
git svn propget svn:ignore . | cmp - ../prop.expect &&
git svn propget svn:entry:committed-rev nested/directory/.keep \
| cmp - ../prop2.expect &&
git svn propget svn:ignore .. | cmp - ../prop.expect &&
git svn propget svn:ignore nested/ | cmp - ../prop.expect &&
git svn propget svn:ignore ./nested | cmp - ../prop.expect &&
git svn propget svn:ignore .././deeply/nested | cmp - ../prop.expect
"
cat >prop.expect <<\EOF
Properties on '.':
svn:entry:committed-date
svn:entry:committed-rev
svn:entry:last-author
svn:entry:uuid
svn:ignore
EOF
cat >prop2.expect <<\EOF
Properties on 'nested/directory/.keep':
svn:entry:committed-date
svn:entry:committed-rev
svn:entry:last-author
svn:entry:uuid
EOF
test_expect_success 'test proplist' "
git svn proplist . | cmp - prop.expect &&
git svn proplist nested/directory/.keep | cmp - prop2.expect
"
test_done
|