Mercurial > hgsubversion
changeset 74:450d5d9d3b80
SubversionRepo: do not use temporary file in get_file()
Existing code says swig bindings do not support StringIO objects as output for
svn.ra.get_file(). This issue was never reported in the convert extension.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sun, 09 Nov 2008 18:08:35 -0600 |
parents | 9c1b53abefcb |
children | cca31b6b1318 |
files | fetch_command.py svnwrap/svn_swig_wrapper.py |
diffstat | 2 files changed, 11 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/fetch_command.py +++ b/fetch_command.py @@ -349,12 +349,8 @@ def stupid_svn_server_pull_rev(ui, svn, f = open(file_path, 'w') f.write(svn.get_file(diff_path+'/'+m, r.revnum)) f.close() - except core.SubversionException, e: - if (e.message.endswith("' path not found") - or e.message.startswith("File not found: revision")): - pass - else: - raise + except IOError: + pass d2 = empty_file_patch_wont_make_re.sub('', d) d2 = property_exec_set_re.sub('', d2) d2 = property_exec_removed_re.sub('', d2)
--- a/svnwrap/svn_swig_wrapper.py +++ b/svnwrap/svn_swig_wrapper.py @@ -391,17 +391,16 @@ class SubversionRepo(object): def get_file(self, path, revision): out = cStringIO.StringIO() - tmpdir = tempfile.mkdtemp('svnwrap_temp') try: - # hot tip: the swig bridge doesn't like StringIO for these bad boys - out_path = os.path.join(tmpdir, 'diffout') - out = open(out_path, 'w') - ra.get_file(self.ra, path,revision, out , None) - out.close() - x = open(out_path).read() - return x - finally: - shutil.rmtree(tmpdir) + ra.get_file(self.ra, path, revision, out) + except core.SubversionException, e: + notfound = (core.SVN_ERR_FS_NOT_FOUND, + core.SVN_ERR_RA_DAV_PATH_NOT_FOUND) + if e.apr_err in notfound: # File not found + raise IOError() + raise + data = out.getvalue() + return data def proplist(self, path, revision, recurse=False): rev = core.svn_opt_revision_t()