Mercurial > hg
comparison hgext/convert/common.py @ 51687:1eab9e40c0c8
convert: fix various leaked file descriptors
Some of these only leaked if an exception occurred between the open and close,
but a lot of these leaked unconditionally.
A type hint is added to `parsesplicemap` because otherwise this change caused
pytype to change the return type from this to `Dict[nothing, nothing]`.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 11 Jul 2024 21:54:02 -0400 |
parents | 39033e7a6e0a |
children | f4733654f144 |
comparison
equal
deleted
inserted
replaced
51686:39033e7a6e0a | 51687:1eab9e40c0c8 |
---|---|
573 return | 573 return |
574 try: | 574 try: |
575 fp = open(self.path, b'rb') | 575 fp = open(self.path, b'rb') |
576 except FileNotFoundError: | 576 except FileNotFoundError: |
577 return | 577 return |
578 for i, line in enumerate(fp): | 578 |
579 line = line.splitlines()[0].rstrip() | 579 try: |
580 if not line: | 580 for i, line in enumerate(fp): |
581 # Ignore blank lines | 581 line = line.splitlines()[0].rstrip() |
582 continue | 582 if not line: |
583 try: | 583 # Ignore blank lines |
584 key, value = line.rsplit(b' ', 1) | 584 continue |
585 except ValueError: | 585 try: |
586 raise error.Abort( | 586 key, value = line.rsplit(b' ', 1) |
587 _(b'syntax error in %s(%d): key/value pair expected') | 587 except ValueError: |
588 % (self.path, i + 1) | 588 raise error.Abort( |
589 ) | 589 _(b'syntax error in %s(%d): key/value pair expected') |
590 if key not in self: | 590 % (self.path, i + 1) |
591 self.order.append(key) | 591 ) |
592 super(mapfile, self).__setitem__(key, value) | 592 if key not in self: |
593 fp.close() | 593 self.order.append(key) |
594 super(mapfile, self).__setitem__(key, value) | |
595 finally: | |
596 fp.close() | |
594 | 597 |
595 def __setitem__(self, key, value) -> None: | 598 def __setitem__(self, key, value) -> None: |
596 if self.fp is None: | 599 if self.fp is None: |
597 try: | 600 try: |
598 self.fp = open(self.path, b'ab') | 601 self.fp = open(self.path, b'ab') |