diff --git a/hgext/eol.py b/hgext/eol.py --- a/hgext/eol.py +++ b/hgext/eol.py @@ -152,7 +152,11 @@ def hook(ui, repo, node, hooktype, **kwa 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 @@ def reposetup(ui, repo): 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 --git a/tests/test-eol.t b/tests/test-eol.t --- a/tests/test-eol.t +++ b/tests/test-eol.t @@ -426,3 +426,17 @@ Check that both files have LF line-endin 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