# HG changeset patch # User Martin Geisler # Date 2010-06-27 21:12:05 # Node ID 51021f4c80b5dcf608626ddc24b21c155df2cae8 # Parent 6bca9801c92a3ee4c9399ca7452ea1e648fea19f 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. diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -23,15 +23,13 @@ class mergestate(object): def _read(self): self._state = {} try: - localnode = None f = self._repo.opener("merge/state") for i, l in enumerate(f): if i == 0: - localnode = l[:-1] + self._local = bin(l[:-1]) else: bits = l[:-1].split("\0") self._state[bits[0]] = bits[1:] - self._local = bin(localnode) except IOError, err: if err.errno != errno.ENOENT: raise diff --git a/tests/test-resolve b/tests/test-resolve --- a/tests/test-resolve +++ b/tests/test-resolve @@ -25,3 +25,9 @@ hg commit -m 'resolved' echo % resolve -l, should be empty hg resolve -l + +# test crashed merge with empty mergestate +mkdir .hg/merge +touch .hg/merge/state +echo % resolve -l, should be empty +hg resolve -l diff --git a/tests/test-resolve.out b/tests/test-resolve.out --- a/tests/test-resolve.out +++ b/tests/test-resolve.out @@ -6,3 +6,4 @@ created new head 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon % resolve -l, should be empty +% resolve -l, should be empty