import re, os.path
import svntest
from svntest import wc
Skip = svntest.testcase.Skip_deco
SkipUnless = svntest.testcase.SkipUnless_deco
XFail = svntest.testcase.XFail_deco
Issues = svntest.testcase.Issues_deco
Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = wc.StateItem
exp_noop_up_out = svntest.actions.expected_noop_update_output
@SkipUnless(svntest.main.is_posix_os)
def import_executable(sbox):
"import of executable files"
sbox.build()
wc_dir = sbox.wc_dir
xt_path = os.path.join(wc_dir, "XT")
os.makedirs(xt_path)
all_path = os.path.join(wc_dir, "XT/all_exe")
none_path = os.path.join(wc_dir, "XT/none_exe")
user_path = os.path.join(wc_dir, "XT/user_exe")
group_path = os.path.join(wc_dir, "XT/group_exe")
other_path = os.path.join(wc_dir, "XT/other_exe")
for path in [all_path, none_path, user_path, group_path, other_path]:
svntest.main.file_append(path, "some text")
os.chmod(all_path, 0777)
os.chmod(none_path, 0666)
os.chmod(user_path, 0766)
os.chmod(group_path, 0676)
os.chmod(other_path, 0667)
url = sbox.repo_url
exit_code, output, errput = svntest.actions.run_and_verify_svn(
None, None, [], 'import',
'-m', 'Log message for new import', xt_path, url)
lastline = output.pop().strip()
cm = re.compile ("(Committed|Imported) revision [0-9]+.")
match = cm.search (lastline)
if not match:
raise svntest.Failure
svntest.main.safe_rmtree(xt_path)
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'all_exe' : Item('some text', props={'svn:executable' : ''}),
'none_exe' : Item('some text'),
'user_exe' : Item('some text', props={'svn:executable' : ''}),
'group_exe' : Item('some text'),
'other_exe' : Item('some text'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'all_exe' : Item(status=' ', wc_rev=2),
'none_exe' : Item(status=' ', wc_rev=2),
'user_exe' : Item(status=' ', wc_rev=2),
'group_exe' : Item(status=' ', wc_rev=2),
'other_exe' : Item(status=' ', wc_rev=2),
})
expected_output = svntest.wc.State(wc_dir, {
'all_exe' : Item(status='A '),
'none_exe' : Item(status='A '),
'user_exe' : Item(status='A '),
'group_exe' : Item(status='A '),
'other_exe' : Item(status='A '),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None,
None, None, 1)
def import_ignores(sbox):
'do not import ignored files in imported dirs'
sbox.build()
wc_dir = sbox.wc_dir
dir_path = os.path.join(wc_dir, 'dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
foo_o_path = os.path.join(dir_path, 'foo.o')
os.mkdir(dir_path, 0755)
open(foo_c_path, 'w')
open(foo_o_path, 'w')
url = sbox.repo_url + '/dir'
exit_code, output, errput = svntest.actions.run_and_verify_svn(
None, None, [], 'import',
'-m', 'Log message for new import',
dir_path, url)
lastline = output.pop().strip()
cm = re.compile ("(Committed|Imported) revision [0-9]+.")
match = cm.search (lastline)
if not match:
raise svntest.verify.SVNUnexpectedOutput
svntest.main.safe_rmtree(dir_path)
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'dir/foo.c' : Item(''),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'dir' : Item(status=' ', wc_rev=2),
'dir/foo.c' : Item(status=' ', wc_rev=2),
})
expected_output = svntest.wc.State(wc_dir, {
'dir' : Item(status='A '),
'dir/foo.c' : Item(status='A '),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None,
None, None, 1)
def import_no_ignores(sbox):
'import ignored files in imported dirs'
sbox.build()
wc_dir = sbox.wc_dir
dir_path = os.path.join(wc_dir, 'dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
foo_o_path = os.path.join(dir_path, 'foo.o')
foo_lo_path = os.path.join(dir_path, 'foo.lo')
foo_rej_path = os.path.join(dir_path, 'foo.rej')
os.mkdir(dir_path, 0755)
open(foo_c_path, 'w')
open(foo_o_path, 'w')
open(foo_lo_path, 'w')
open(foo_rej_path, 'w')
url = sbox.repo_url + '/dir'
exit_code, output, errput = svntest.actions.run_and_verify_svn(
None, None, [], 'import',
'-m', 'Log message for new import', '--no-ignore',
dir_path, url)
lastline = output.pop().strip()
cm = re.compile ("(Committed|Imported) revision [0-9]+.")
match = cm.search (lastline)
if not match:
raise svntest.Failure
svntest.main.safe_rmtree(dir_path)
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'dir/foo.c' : Item(''),
'dir/foo.o' : Item(''),
'dir/foo.lo' : Item(''),
'dir/foo.rej' : Item(''),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'dir' : Item(status=' ', wc_rev=2),
'dir/foo.c' : Item(status=' ', wc_rev=2),
'dir/foo.o' : Item(status=' ', wc_rev=2),
'dir/foo.lo' : Item(status=' ', wc_rev=2),
'dir/foo.rej' : Item(status=' ', wc_rev=2),
})
expected_output = svntest.wc.State(wc_dir, {
'dir' : Item(status='A '),
'dir/foo.c' : Item(status='A '),
'dir/foo.o' : Item(status='A '),
'dir/foo.lo' : Item(status='A '),
'dir/foo.rej' : Item(status='A '),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None,
None, None, 1)
def import_avoid_empty_revision(sbox):
"avoid creating empty revisions with import"
sbox.build()
wc_dir = sbox.wc_dir
empty_dir = os.path.join(wc_dir, "empty_dir")
os.makedirs(empty_dir)
url = sbox.repo_url
svntest.actions.run_and_verify_svn(None, None, [], 'import',
'-m', 'Log message for new import',
empty_dir, url)
svntest.main.safe_rmtree(empty_dir)
svntest.actions.run_and_verify_svn(None,
exp_noop_up_out(1),
[], "update",
empty_dir)
@Issue(2433)
def import_eol_style(sbox):
"import should honor the eol-style property"
sbox.build()
os.chdir(sbox.wc_dir)
config_contents = '''\
[auth]
password-stores =
[miscellany]
enable-auto-props = yes
[auto-props]
*.dsp = svn:eol-style=CRLF
'''
tmp_dir = os.path.abspath(svntest.main.temp_dir)
config_dir = os.path.join(tmp_dir, 'autoprops_config')
svntest.main.create_config_dir(config_dir, config_contents)
file_name = "test.dsp"
file_path = file_name
imp_dir_path = 'dir'
imp_file_path = os.path.join(imp_dir_path, file_name)
os.mkdir(imp_dir_path, 0755)
svntest.main.file_write(imp_file_path, "This is file test.dsp.\n")
svntest.actions.run_and_verify_svn(None, None, [], 'import',
'-m', 'Log message for new import',
imp_dir_path,
sbox.repo_url,
'--config-dir', config_dir)
svntest.main.run_svn(None, 'update', '.', '--config-dir', config_dir)
svntest.main.file_append(file_path, "Extra line\n")
if os.name == 'nt':
crlf = '\n'
else:
crlf = '\r\n'
expected_output = [
"Index: test.dsp\n",
"===================================================================\n",
"--- test.dsp\t(revision 2)\n",
"+++ test.dsp\t(working copy)\n",
"@@ -1 +1,2 @@\n",
" This is file test.dsp." + crlf,
"+Extra line" + crlf
]
svntest.actions.run_and_verify_svn(None, expected_output, [],
'diff',
file_path,
'--config-dir', config_dir)
@Issue(3983)
def import_into_foreign_repo(sbox):
"import into a foreign repo"
sbox.build(read_only=True)
other_repo_dir, other_repo_url = sbox.add_repo_path('other')
svntest.main.safe_rmtree(other_repo_dir, 1)
svntest.main.create_repos(other_repo_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'import',
'-m', 'Log message for new import',
sbox.ospath('A/mu'), other_repo_url + '/f')
test_list = [ None,
import_executable,
import_ignores,
import_avoid_empty_revision,
import_no_ignores,
import_eol_style,
import_into_foreign_repo,
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)