Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/tests/cmdline/upgrade_tests.py view on Meta::CPAN
from svntest import wc
Item = svntest.wc.StateItem
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
wc_is_too_old_regex = (".*is too old \(format \d+.*\).*")
def get_current_format():
# Get current format from subversion/libsvn_wc/wc.h
format_file = open(os.path.join(os.path.dirname(__file__), "..", "..", "libsvn_wc", "wc.h")).read()
return int(re.search("\n#define SVN_WC__VERSION (\d+)\n", format_file).group(1))
def replace_sbox_with_tarfile(sbox, tar_filename,
dir=None):
try:
svntest.main.safe_rmtree(sbox.wc_dir)
except OSError, e:
pass
if not dir:
dir = tar_filename.split('.')[0]
tarpath = os.path.join(os.path.dirname(sys.argv[0]), 'upgrade_tests_data',
tar_filename)
t = tarfile.open(tarpath, 'r:bz2')
extract_dir = tempfile.mkdtemp(dir=svntest.main.temp_dir)
for member in t.getmembers():
t.extract(member, extract_dir)
shutil.move(os.path.join(extract_dir, dir), sbox.wc_dir)
def replace_sbox_repo_with_tarfile(sbox, tar_filename, dir=None):
try:
svntest.main.safe_rmtree(sbox.repo_dir)
except OSError, e:
pass
if not dir:
dir = tar_filename.split('.')[0]
tarpath = os.path.join(os.path.dirname(sys.argv[0]), 'upgrade_tests_data',
tar_filename)
t = tarfile.open(tarpath, 'r:bz2')
extract_dir = tempfile.mkdtemp(dir=svntest.main.temp_dir)
for member in t.getmembers():
t.extract(member, extract_dir)
shutil.move(os.path.join(extract_dir, dir), sbox.repo_dir)
def check_format(sbox, expected_format):
dot_svn = svntest.main.get_admin_name()
for root, dirs, files in os.walk(sbox.wc_dir):
db = svntest.sqlite3.connect(os.path.join(root, dot_svn, 'wc.db'))
c = db.cursor()
c.execute('pragma user_version;')
found_format = c.fetchone()[0]
db.close()
if found_format != expected_format:
raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" %
(found_format, expected_format, root))
if svntest.main.wc_is_singledb(sbox.wc_dir):
dirs[:] = []
if dot_svn in dirs:
dirs.remove(dot_svn)
def check_pristine(sbox, files):
for file in files:
file_path = sbox.ospath(file)
file_text = open(file_path, 'r').read()
file_pristine = open(svntest.wc.text_base_path(file_path), 'r').read()
if (file_text != file_pristine):
raise svntest.Failure("pristine mismatch for '%s'" % (file))
def check_dav_cache(dir_path, wc_id, expected_dav_caches):
dot_svn = svntest.main.get_admin_name()
db = svntest.sqlite3.connect(os.path.join(dir_path, dot_svn, 'wc.db'))
c = db.cursor()
# Check if python's sqlite can read our db
c.execute('select sqlite_version()')
sqlite_ver = map(int, c.fetchone()[0].split('.'))
# SQLite versions have 3 or 4 number groups
major = sqlite_ver[0]
minor = sqlite_ver[1]
patch = sqlite_ver[2]
if major < 3 or (major == 3 and minor < 6) \
or (major == 3 and minor == 6 and patch < 18):
return # We need a newer SQLite
for local_relpath, expected_dav_cache in expected_dav_caches.items():
# NODES conversion is complete enough that we can use it if it exists
c.execute("""pragma table_info(nodes)""")
if c.fetchone():
c.execute('select dav_cache from nodes ' +
'where wc_id=? and local_relpath=? and op_depth = 0',
(wc_id, local_relpath))
row = c.fetchone()
else:
c.execute('select dav_cache from base_node ' +
'where wc_id=? and local_relpath=?',
(wc_id, local_relpath))
row = c.fetchone()
if row is None:
raise svntest.Failure("no dav cache for '%s'" % (local_relpath))
dav_cache = str(row[0])
if dav_cache != expected_dav_cache:
raise svntest.Failure(
"wrong dav cache for '%s'\n Found: '%s'\n Expected: '%s'" %
(local_relpath, dav_cache, expected_dav_cache))
db.close()
# Very simple working copy property diff handler for single line textual properties
# Should probably be moved to svntest/actions.py after some major refactoring.
def simple_property_verify(dir_path, expected_props):
# Shows all items in dict1 that are not also in dict2
def diff_props(dict1, dict2, name, match):
equal = True;
for key in dict1:
node = dict1[key]
node2 = dict2.get(key, None)
if node2:
for prop in node:
v1 = node[prop]
v2 = node2.get(prop, None)
if not v2:
logger.warn('\'%s\' property on \'%s\' not found in %s',
prop, key, name)
equal = False
if match and v1 != v2:
logger.warn('Expected \'%s\' on \'%s\' to be \'%s\', but found \'%s\'',
prop, key, v1, v2)
( run in 0.531 second using v1.01-cache-2.11-cpan-f5b5a18a01a )