comparison svnwrap/svn_swig_wrapper.py @ 122:04c92c2c4501

SubversionRepo: work around ra.get_files() not releasing input buffer
author Patrick Mezard <pmezard@gmail.com>
date Tue, 02 Dec 2008 20:13:13 -0600
parents 0d3a2a7cefa3
children ba801f44d240
comparison
equal deleted inserted replaced
121:5438cc2d7ed7 122:04c92c2c4501
435 file is executable, 'l' if a symlink, the empty string 435 file is executable, 'l' if a symlink, the empty string
436 otherwise. If the file does not exist at this revision, raise 436 otherwise. If the file does not exist at this revision, raise
437 IOError. 437 IOError.
438 """ 438 """
439 mode = '' 439 mode = ''
440 out = cStringIO.StringIO()
441 try: 440 try:
441 out = cStringIO.StringIO()
442 info = ra.get_file(self.ra, path, revision, out) 442 info = ra.get_file(self.ra, path, revision, out)
443 data = out.getvalue()
444 out.close()
443 if isinstance(info, list): 445 if isinstance(info, list):
444 info = info[-1] 446 info = info[-1]
445 mode = ("svn:executable" in info) and 'x' or '' 447 mode = ("svn:executable" in info) and 'x' or ''
446 mode = ("svn:special" in info) and 'l' or mode 448 mode = ("svn:special" in info) and 'l' or mode
447 except core.SubversionException, e: 449 except core.SubversionException, e:
448 notfound = (core.SVN_ERR_FS_NOT_FOUND, 450 notfound = (core.SVN_ERR_FS_NOT_FOUND,
449 core.SVN_ERR_RA_DAV_PATH_NOT_FOUND) 451 core.SVN_ERR_RA_DAV_PATH_NOT_FOUND)
450 if e.apr_err in notfound: # File not found 452 if e.apr_err in notfound: # File not found
451 raise IOError() 453 raise IOError()
452 raise 454 raise
453 data = out.getvalue()
454 if mode == 'l': 455 if mode == 'l':
455 linkprefix = "link " 456 linkprefix = "link "
456 if data.startswith(linkprefix): 457 if data.startswith(linkprefix):
457 data = data[len(linkprefix):] 458 data = data[len(linkprefix):]
458 return data, mode 459 return data, mode