Mercurial > hgsubversion
comparison svnwrap/svn_swig_wrapper.py @ 46:f30cda3389c2
This appears to fix pushing over both the http and svn protocols.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Wed, 29 Oct 2008 11:48:58 -0500 |
parents | ce00e6ffaa90 |
children | 9738a7c4e3dd |
comparison
equal
deleted
inserted
replaced
45:ce00e6ffaa90 | 46:f30cda3389c2 |
---|---|
11 from svn import ra | 11 from svn import ra |
12 | 12 |
13 svn_config = core.svn_config_get_config(None) | 13 svn_config = core.svn_config_get_config(None) |
14 | 14 |
15 class RaCallbacks(ra.Callbacks): | 15 class RaCallbacks(ra.Callbacks): |
16 def open_tmp_file(self, pool): | |
17 (fd, fn) = tempfile.mkstemp() | |
18 os.close(fd) | |
19 return fn | |
20 | |
16 def get_client_string(self, pool): | 21 def get_client_string(self, pool): |
17 return 'hgsubversion' | 22 return 'hgsubversion' |
18 | 23 |
19 def user_pass_prompt(realm, default_username, ms, pool): | 24 def user_pass_prompt(realm, default_username, ms, pool): |
20 creds = core.svn_auth_cred_simple_t() | 25 creds = core.svn_auth_cred_simple_t() |
268 commit_cb, | 273 commit_cb, |
269 None, | 274 None, |
270 False, | 275 False, |
271 self.pool) | 276 self.pool) |
272 checksum = [] | 277 checksum = [] |
278 # internal dir batons can fall out of scope and get GCed before svn is | |
279 # done with them. This prevents that (credit to gvn for the idea). | |
280 batons = [edit_baton, ] | |
273 def driver_cb(parent, path, pool): | 281 def driver_cb(parent, path, pool): |
282 if not parent: | |
283 bat = editor.open_root(edit_baton, base_revision, self.pool) | |
284 batons.append(bat) | |
285 return bat | |
274 if path in dirs: | 286 if path in dirs: |
275 return editor.add_directory(path, parent, None, -1, pool) | 287 bat = editor.add_directory(path, parent, None, -1, pool) |
288 batons.append(bat) | |
289 return bat | |
276 base_text, new_text, action = file_data[path] | 290 base_text, new_text, action = file_data[path] |
277 compute_delta = True | 291 compute_delta = True |
278 if action == 'modify': | 292 if action == 'modify': |
279 baton = editor.open_file(path, parent, base_revision, pool) | 293 baton = editor.open_file(path, parent, base_revision, pool) |
280 elif action == 'add': | 294 elif action == 'add': |
300 txdelta_stream = delta.svn_txdelta( | 314 txdelta_stream = delta.svn_txdelta( |
301 cStringIO.StringIO(base_text), cStringIO.StringIO(new_text), | 315 cStringIO.StringIO(base_text), cStringIO.StringIO(new_text), |
302 self.pool) | 316 self.pool) |
303 delta.svn_txdelta_send_txstream(txdelta_stream, handler, | 317 delta.svn_txdelta_send_txstream(txdelta_stream, handler, |
304 wh_baton, pool) | 318 wh_baton, pool) |
305 | 319 # TODO pass md5(new_text) instead of None |
306 editor.open_root(edit_baton, base_revision, self.pool) | 320 editor.close_file(baton, None) |
321 | |
307 delta.path_driver(editor, edit_baton, base_revision, paths, driver_cb, | 322 delta.path_driver(editor, edit_baton, base_revision, paths, driver_cb, |
308 self.pool) | 323 self.pool) |
309 editor.close_edit(edit_baton, self.pool) | 324 editor.close_edit(edit_baton, self.pool) |
310 | 325 |
311 def get_replay(self, revision, editor, oldest_rev_i_have=0): | 326 def get_replay(self, revision, editor, oldest_rev_i_have=0): |