Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 11451:51021f4c80b5 stable
resolve: do not crash on empty mergestate
I managed to get an empty .hg/merge/state file by interrupting a merge
by pressing Control-C. This lead to this error:
TypeError: a2b_hex() argument 1 must be string or read-only buffer,
not None
since localnode is assigned None before the iteration over lines in
the mergestate begins.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sun, 27 Jun 2010 23:12:05 +0200 |
parents | 6f1d1ed3e19a |
children | 9b0406b23be0 |
comparison
equal
deleted
inserted
replaced
11450:6bca9801c92a | 11451:51021f4c80b5 |
---|---|
21 self._local = node | 21 self._local = node |
22 shutil.rmtree(self._repo.join("merge"), True) | 22 shutil.rmtree(self._repo.join("merge"), True) |
23 def _read(self): | 23 def _read(self): |
24 self._state = {} | 24 self._state = {} |
25 try: | 25 try: |
26 localnode = None | |
27 f = self._repo.opener("merge/state") | 26 f = self._repo.opener("merge/state") |
28 for i, l in enumerate(f): | 27 for i, l in enumerate(f): |
29 if i == 0: | 28 if i == 0: |
30 localnode = l[:-1] | 29 self._local = bin(l[:-1]) |
31 else: | 30 else: |
32 bits = l[:-1].split("\0") | 31 bits = l[:-1].split("\0") |
33 self._state[bits[0]] = bits[1:] | 32 self._state[bits[0]] = bits[1:] |
34 self._local = bin(localnode) | |
35 except IOError, err: | 33 except IOError, err: |
36 if err.errno != errno.ENOENT: | 34 if err.errno != errno.ENOENT: |
37 raise | 35 raise |
38 def _write(self): | 36 def _write(self): |
39 f = self._repo.opener("merge/state", "w") | 37 f = self._repo.opener("merge/state", "w") |