# HG changeset patch # User Martin Geisler # Date 1298904408 -3600 # Node ID 9b617c56eb651a7f9d19290b0918f4982871298b # Parent 85840c4ae2ad9bdb2f9fd1f59e72a44922bc6a85 eol: do not abort on parse error Handle parse errors in the .hgeol similarly to how parse errors in the .hgtags file are handled: by issuing a warning. This allows the user to revert the file using 'hg revert' or 'hg update -C'. diff -r 85840c4ae2ad -r 9b617c56eb65 hgext/eol.py --- a/hgext/eol.py Mon Feb 28 11:34:51 2011 +0100 +++ b/hgext/eol.py Mon Feb 28 15:46:48 2011 +0100 @@ -152,7 +152,11 @@ def preupdate(ui, repo, hooktype, parent1, parent2): #print "preupdate for %s: %s -> %s" % (repo.root, parent1, parent2) - repo.readhgeol(parent1) + try: + repo.readhgeol(parent1) + except error.ParseError, inst: + ui.warn(_("warning: ignoring .hgeol file due to parse error " + "at %s: %s\n") % (inst.args[1], inst.args[0])) return False def uisetup(ui): @@ -233,7 +237,12 @@ return match.match(self.root, '', [], include, exclude) def _hgcleardirstate(self): - self._eolfile = self.readhgeol() or self.readhgeol('tip') + try: + self._eolfile = self.readhgeol() or self.readhgeol('tip') + except error.ParseError, inst: + ui.warn(_("warning: ignoring .hgeol file due to parse error " + "at %s: %s\n") % (inst.args[1], inst.args[0])) + self._eolfile = None if not self._eolfile: self._eolfile = util.never diff -r 85840c4ae2ad -r 9b617c56eb65 tests/test-eol.t --- a/tests/test-eol.t Mon Feb 28 11:34:51 2011 +0100 +++ b/tests/test-eol.t Mon Feb 28 15:46:48 2011 +0100 @@ -426,3 +426,17 @@ foo bar baz + +Test handling of a broken .hgeol file: + + $ touch .hgeol + $ hg add .hgeol + $ hg commit -m 'clean version' + $ echo "bad" > .hgeol + $ hg status + warning: ignoring .hgeol file due to parse error at .hgeol:1: bad + M .hgeol + $ hg revert .hgeol + warning: ignoring .hgeol file due to parse error at .hgeol:1: bad + $ hg status + ? .hgeol.orig