sapling/hgext/fsmonitor
Jun Wu b5cd2be169 fsmonitor: ignore errors when calculating update distance
Summary:
I got errors running `histedit --abort` in the code path:

  quark [1] % hg histedit --abort
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  saved backup bundle to .hg/strip-backup/098a5bf950b2-78da64d6-backup.hg
  saved backup bundle to .hg/strip-backup/accd7866dec2-599f621b-backup.hg
  Traceback (most recent call last):
    File "/usr/lib/python2.7/site-packages/mercurial/scmutil.py", line 159, in callcatch
      return func()
    File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line 340, in _runcatchfunc
      return _dispatch(req)
    File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line 944, in _dispatch
      cmdpats, cmdoptions)
    File "/usr/lib/python2.7/site-packages/hgext/remotefilelog/__init__.py", line 458, in runcommand
      return orig(lui, repo, *args, **kwargs)
    File "/usr/lib/python2.7/site-packages/hgext/journal.py", line 85, in runcommand
      return orig(lui, repo, cmd, fullargs, *args)
    File "/usr/lib/python2.7/site-packages/hgext/undo.py", line 118, in _runcommandwrapper
      result = orig(lui, repo, cmd, fullargs, *args)
    File "/usr/lib/python2.7/site-packages/hgext/fastmanifest/__init__.py", line 202, in _logonexit
      r = orig(ui, repo, cmd, fullargs, *args)
    File "/usr/lib/python2.7/site-packages/hgext/perftweaks.py", line 326, in _tracksparseprofiles
      res = runcommand(lui, repo, *args)
    File "/usr/lib/python2.7/site-packages/hgext/perftweaks.py", line 313, in _trackdirstatesizes
      res = runcommand(lui, repo, *args)
    File "/usr/lib/python2.7/site-packages/hgext/fbamend/hiddenoverride.py", line 92, in runcommand
      result = orig(lui, repo, cmd, fullargs, *args)
    File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line 693, in runcommand
      ret = _runcommand(ui, options, cmd, d)
    File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line 952, in _runcommand
      return cmdfunc()
    File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line 941, in <lambda>
      d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
    File "/usr/lib/python2.7/site-packages/hgext/remotenames.py", line 698, in exhistedit
      ret = orig(ui, repo, *args, **opts)
    File "/usr/lib/python2.7/site-packages/hgext/histedit.py", line 1033, in histedit
      release(state.lock, state.wlock)
    File "/usr/lib/python2.7/site-packages/mercurial/lock.py", line 329, in release
      lock.release()
    File "/usr/lib/python2.7/site-packages/mercurial/lock.py", line 311, in release
      self.releasefn()
    File "/usr/lib/python2.7/site-packages/hgext/fsmonitor/__init__.py", line 878, in staterelease
      l.stateupdate.exit()
    File "/usr/lib/python2.7/site-packages/hgext/fsmonitor/__init__.py", line 751, in exit
      self.repo, self.oldnode, self.newnode)
    File "/usr/lib/python2.7/site-packages/hgext/fsmonitor/__init__.py", line 787, in calcdistance
      anc = repo.changelog.ancestor(oldnode, newnode)
    File "/usr/lib/python2.7/site-packages/mercurial/revlog.py", line 1139, in ancestor
      a, b = self.rev(a), self.rev(b)
    File "/usr/lib/python2.7/site-packages/mercurial/changelog.py", line 360, in rev
      r = super(changelog, self).rev(node)
    File "/usr/lib/python2.7/site-packages/mercurial/revlog.py", line 559, in rev
      raise LookupError(node, self.indexfile, _('no node'))
  LookupError: 00changelog.i@67b8abf62104: no node
  abort: 00changelog.i@67b8abf62104: no node!

In case real strip happens, and we are in some nested "update state" situation, the
nodes might be gone:

  enter lock state with src: node1, dest: node2
    real strip node1 or node2 <- this is possible
  exit lock state - node2 is missing

Reviewed By: wez

Differential Revision: D7462306

fbshipit-source-id: 133252583519bc6916a00df4a4a82b36591fb8a5
2018-04-13 21:51:41 -07:00
..
pywatchman codemod: use single blank line 2018-04-13 21:51:08 -07:00
__init__.py fsmonitor: ignore errors when calculating update distance 2018-04-13 21:51:41 -07:00
state.py fsmonitor: use configitem 2017-10-01 22:26:24 +01:00
watchmanclient.py fsmonitor: use progress.spinner when querying watchman 2018-04-13 21:51:08 -07:00