Mercurial > hgsubversion
comparison svnwrap/svn_swig_wrapper.py @ 81:85dcea81f22b
SubversionRepo: close files before rmtree() in diff3
Open files cannot be removed if open (by default) under Windows.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Fri, 14 Nov 2008 16:18:24 -0600 |
parents | ed3dd5bf45da |
children | 6c9b7cf1c5aa |
comparison
equal
deleted
inserted
replaced
80:83179a183927 | 81:85dcea81f22b |
---|---|
360 """ | 360 """ |
361 # works around an svn server keeping too many open files (observed | 361 # works around an svn server keeping too many open files (observed |
362 # in an svnserve from the 1.2 era) | 362 # in an svnserve from the 1.2 era) |
363 self.init_ra_and_client() | 363 self.init_ra_and_client() |
364 | 364 |
365 old_cwd = os.getcwd() | |
366 assert path[0] != '/' | 365 assert path[0] != '/' |
367 url = self.svn_url + '/' + path | 366 url = self.svn_url + '/' + path |
368 url2 = url | 367 url2 = url |
369 if other_path is not None: | 368 if other_path is not None: |
370 url2 = self.svn_url + '/' + other_path | 369 url2 = self.svn_url + '/' + other_path |
371 if other_rev is None: | 370 if other_rev is None: |
372 other_rev = revision - 1 | 371 other_rev = revision - 1 |
372 old_cwd = os.getcwd() | |
373 tmpdir = tempfile.mkdtemp('svnwrap_temp') | 373 tmpdir = tempfile.mkdtemp('svnwrap_temp') |
374 try: | 374 try: |
375 # hot tip: the swig bridge doesn't like StringIO for these bad boys | 375 # hot tip: the swig bridge doesn't like StringIO for these bad boys |
376 out_path = os.path.join(tmpdir, 'diffout') | 376 out_path = os.path.join(tmpdir, 'diffout') |
377 error_path = os.path.join(tmpdir, 'differr') | 377 error_path = os.path.join(tmpdir, 'differr') |
378 out = open(out_path, 'w') | 378 out, err = None, None |
379 err = open(error_path, 'w') | 379 try: |
380 client.diff3([], url2, optrev(other_rev), url, optrev(revision), | 380 out = open(out_path, 'w') |
381 True, True, deleted, ignore_type, 'UTF-8', out, err, | 381 err = open(error_path, 'w') |
382 self.client_context, self.pool) | 382 client.diff3([], url2, optrev(other_rev), url, optrev(revision), |
383 out.close() | 383 True, True, deleted, ignore_type, 'UTF-8', out, err, |
384 err.close() | 384 self.client_context, self.pool) |
385 finally: | |
386 if out: out.close() | |
387 if err: err.close() | |
385 assert len(open(error_path).read()) == 0 | 388 assert len(open(error_path).read()) == 0 |
386 diff = open(out_path).read() | 389 diff = open(out_path).read() |
387 os.chdir(old_cwd) | |
388 return diff | 390 return diff |
389 finally: | 391 finally: |
390 shutil.rmtree(tmpdir) | 392 shutil.rmtree(tmpdir) |
393 os.chdir(old_cwd) | |
391 | 394 |
392 def get_file(self, path, revision): | 395 def get_file(self, path, revision): |
393 """Return content and mode of file at given path and revision. | 396 """Return content and mode of file at given path and revision. |
394 | 397 |
395 Content is raw svn content, symlinks content is still prefixed | 398 Content is raw svn content, symlinks content is still prefixed |