Mercurial > hgsubversion
comparison svnwrap/svn_swig_wrapper.py @ 66:a31968146f3c
svnwrap: Fix leakage of temp dirs by using try/finally blocks.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Sun, 09 Nov 2008 17:08:09 -0600 |
| parents | 2e30b59a9c19 |
| children | 49b7cbe4c8e3 |
comparison
equal
deleted
inserted
replaced
| 65:b33940d54fe2 | 66:a31968146f3c |
|---|---|
| 360 if other_path is not None: | 360 if other_path is not None: |
| 361 url2 = self.svn_url + '/' + other_path | 361 url2 = self.svn_url + '/' + other_path |
| 362 if other_rev is None: | 362 if other_rev is None: |
| 363 other_rev = revision - 1 | 363 other_rev = revision - 1 |
| 364 tmpdir = tempfile.mkdtemp('svnwrap_temp') | 364 tmpdir = tempfile.mkdtemp('svnwrap_temp') |
| 365 # hot tip: the swig bridge doesn't like StringIO for these bad boys | 365 try: |
| 366 out_path = os.path.join(tmpdir, 'diffout') | 366 # hot tip: the swig bridge doesn't like StringIO for these bad boys |
| 367 error_path = os.path.join(tmpdir, 'differr') | 367 out_path = os.path.join(tmpdir, 'diffout') |
| 368 out = open(out_path, 'w') | 368 error_path = os.path.join(tmpdir, 'differr') |
| 369 err = open(error_path, 'w') | 369 out = open(out_path, 'w') |
| 370 rev_old = core.svn_opt_revision_t() | 370 err = open(error_path, 'w') |
| 371 rev_old.kind = core.svn_opt_revision_number | 371 rev_old = core.svn_opt_revision_t() |
| 372 rev_old.value.number = other_rev | 372 rev_old.kind = core.svn_opt_revision_number |
| 373 rev_new = core.svn_opt_revision_t() | 373 rev_old.value.number = other_rev |
| 374 rev_new.kind = core.svn_opt_revision_number | 374 rev_new = core.svn_opt_revision_t() |
| 375 rev_new.value.number = revision | 375 rev_new.kind = core.svn_opt_revision_number |
| 376 client.diff3([], url2, rev_old, url, rev_new, True, True, | 376 rev_new.value.number = revision |
| 377 deleted, ignore_type, 'UTF-8', out, err, | 377 client.diff3([], url2, rev_old, url, rev_new, True, True, |
| 378 self.client_context, self.pool) | 378 deleted, ignore_type, 'UTF-8', out, err, |
| 379 out.close() | 379 self.client_context, self.pool) |
| 380 err.close() | 380 out.close() |
| 381 assert len(open(error_path).read()) == 0 | 381 err.close() |
| 382 diff = open(out_path).read() | 382 assert len(open(error_path).read()) == 0 |
| 383 os.chdir(old_cwd) | 383 diff = open(out_path).read() |
| 384 shutil.rmtree(tmpdir) | 384 os.chdir(old_cwd) |
| 385 return diff | 385 return diff |
| 386 finally: | |
| 387 shutil.rmtree(tmpdir) | |
| 386 | 388 |
| 387 def get_file(self, path, revision): | 389 def get_file(self, path, revision): |
| 388 out = cStringIO.StringIO() | 390 out = cStringIO.StringIO() |
| 389 tmpdir = tempfile.mkdtemp('svnwrap_temp') | 391 tmpdir = tempfile.mkdtemp('svnwrap_temp') |
| 390 # hot tip: the swig bridge doesn't like StringIO for these bad boys | 392 try: |
| 391 out_path = os.path.join(tmpdir, 'diffout') | 393 # hot tip: the swig bridge doesn't like StringIO for these bad boys |
| 392 out = open(out_path, 'w') | 394 out_path = os.path.join(tmpdir, 'diffout') |
| 393 ra.get_file(self.ra, path,revision, out , None) | 395 out = open(out_path, 'w') |
| 394 out.close() | 396 ra.get_file(self.ra, path,revision, out , None) |
| 395 x = open(out_path).read() | 397 out.close() |
| 396 shutil.rmtree(tmpdir) | 398 x = open(out_path).read() |
| 397 return x | 399 return x |
| 400 finally: | |
| 401 shutil.rmtree(tmpdir) | |
| 398 | 402 |
| 399 def proplist(self, path, revision, recurse=False): | 403 def proplist(self, path, revision, recurse=False): |
| 400 rev = core.svn_opt_revision_t() | 404 rev = core.svn_opt_revision_t() |
| 401 rev.kind = core.svn_opt_revision_number | 405 rev.kind = core.svn_opt_revision_number |
| 402 rev.value.number = revision | 406 rev.value.number = revision |
