Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/swig/python/tests/wc.py view on Meta::CPAN
self.assertEquals(entry.schedule, wc.schedule_normal)
self.assertEquals(entry.cmt_rev, commit_info.revision)
self.assertEquals(entry.cmt_date,
core.svn_time_from_cstring(commit_info.date))
def test_diff_editor4(self):
pool = None
depth = core.svn_depth_infinity
url = self.repos_uri
# cause file_changed: Replace README.txt's contents.
readme_path = '%s/trunk/README.txt' % self.path
fp = open(readme_path, 'w')
fp.write('hello\n')
fp.close()
# cause file_added: Create readme3.
readme3_path = '%s/trunk/readme3' % self.path
fp = open(readme3_path, 'w')
fp.write('hello\n')
fp.close()
wc.add2(readme3_path,
wc.adm_probe_retrieve(self.wc,
os.path.dirname(readme3_path), pool),
None, SVN_INVALID_REVNUM, # copyfrom
None, # cancel_func
None, # notify_func
pool)
# cause file_deleted: Delete README2.txt.
readme2_path = '%s/trunk/README2.txt' % self.path
wc.delete3(readme2_path,
wc.adm_probe_retrieve(self.wc,
os.path.dirname(readme2_path), pool),
None, # cancel_func
None, # notify_func
False, # keep_local
pool)
# cause dir_props_changed: ps testprop testval dir1/dir2
dir2_path = '%s/trunk/dir1/dir2' % self.path
wc.prop_set2('testprop', 'testval', dir2_path,
wc.adm_probe_retrieve(self.wc,
os.path.dirname(dir2_path), pool),
False, # skip_checks
pool)
# TODO: cause dir_added/deleted
# Save prop changes.
got_prop_changes = []
def props_changed(path, propchanges):
for (name, value) in propchanges.items():
(kind, _) = core.svn_property_kind(name)
if kind != core.svn_prop_regular_kind:
continue
got_prop_changes.append((path[len(self.path) + 1:], name, value))
# Save diffs.
got_diffs = {}
def write_diff(path, left, right):
options = svn.diff.file_options_create()
diff = svn.diff.file_diff_2(left, right, options, pool)
original_header = modified_header = ''
encoding = 'utf8'
relative_to_dir = None
sio = StringIO()
svn.diff.file_output_unified3(sio, diff,
left, right,
original_header, modified_header,
encoding, relative_to_dir,
options.show_c_function, pool)
got_diffs[path[len(self.path) + 1:]] = sio.getvalue().splitlines()
# Diff callbacks that call props_changed and write_diff.
contentstate = propstate = state = wc.notify_state_unknown
class Callbacks(wc.DiffCallbacks2):
def file_changed(self, adm_access, path,
tmpfile1, tmpfile2, rev1, rev2,
mimetype1, mimetype2,
propchanges, originalprops):
write_diff(path, tmpfile1, tmpfile2)
return (contentstate, propstate)
def file_added(self, adm_access, path,
tmpfile1, tmpfile2, rev1, rev2,
mimetype1, mimetype2,
propchanges, originalprops):
write_diff(path, tmpfile1, tmpfile2)
return (contentstate, propstate)
def file_deleted(self, adm_access, path, tmpfile1, tmpfile2,
mimetype1, mimetype2, originalprops):
write_diff(path, tmpfile1, tmpfile2)
return state
def dir_props_changed(self, adm_access, path,
propchanges, original_props):
props_changed(path, propchanges)
return state
diff_callbacks = Callbacks()
# Setup wc diff editor.
(editor, edit_baton) = wc.get_diff_editor4(
self.wc, '', diff_callbacks, depth,
False, # ignore_ancestry
False, # use_text_base
False, # reverse_order
None, # cancel_func
None, # changelists
pool)
# Setup ra_ctx.
ra.initialize()
ra_callbacks = ra.Callbacks()
ra_ctx = ra.open2(url, ra_callbacks, None, None)
# Use head rev for do_diff3 and set_path.
head = ra.get_latest_revnum(ra_ctx)
# Get diff reporter.
(reporter, report_baton) = ra.do_diff3(
ra_ctx,
head, # versus_url revision
'', # diff_target
depth,
False, # ignore_ancestry
True, # text_deltas
( run in 2.912 seconds using v1.01-cache-2.11-cpan-d8267643d1d )