Skip to content
Snippets Groups Projects
  • Matt Harbison's avatar
    92892dff03f3
    revlog: use the user facing filename as the display_id for filelogs · 92892dff03f3
    Matt Harbison authored
    I had trouble isolating some LFS blob corruption detected by `hg verify` because
    the traceback referenced a file, but with the `data/` prefix in the `.hg/store`
    path, so it couldn't be located with the `file()` revset:
    
    ```
        Traceback (most recent call last):
          File "/mnt/d/mercurial/mercurial/revlog.py", line 3209, in verifyintegrity
            _verify_revision(self, skipflags, state, node)
          File "/mnt/d/mercurial/hgext/lfs/wrapper.py", line 246, in _verify_revision
            orig(rl, skipflags, state, node)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 158, in _verify_revision
            rl.revision(node)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1816, in revision
            return self._revisiondata(nodeorrev, _df)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1870, in _revisiondata
            self.checkhash(text, node, rev=rev)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1996, in checkhash
            % (self.display_id, pycompat.bytestr(revornode))
        mercurial.error.RevlogError: integrity check failed on data/EXE/PPC/shrinksrec.exe:0
    ```
    
    (I'm a little surprised it resulted in a stacktrace instead of just a message,
    but that's a different issue.  I'm also not sure how to trigger the simplestore
    case, since IIUC, it's also a revlog based store.)
    
    It's not clear how to handle the changelog and manifest (because the user
    doesn't interact with them as a file), so those cases are left alone.  The other
    thing that would be nice to improve somehow is to indicate that the ":0" is a
    revlog revision, not the changeset revision that users are used to.  I'm not
    sure how to handle the "or node" part though.
    92892dff03f3
    History
    revlog: use the user facing filename as the display_id for filelogs
    Matt Harbison authored
    I had trouble isolating some LFS blob corruption detected by `hg verify` because
    the traceback referenced a file, but with the `data/` prefix in the `.hg/store`
    path, so it couldn't be located with the `file()` revset:
    
    ```
        Traceback (most recent call last):
          File "/mnt/d/mercurial/mercurial/revlog.py", line 3209, in verifyintegrity
            _verify_revision(self, skipflags, state, node)
          File "/mnt/d/mercurial/hgext/lfs/wrapper.py", line 246, in _verify_revision
            orig(rl, skipflags, state, node)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 158, in _verify_revision
            rl.revision(node)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1816, in revision
            return self._revisiondata(nodeorrev, _df)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1870, in _revisiondata
            self.checkhash(text, node, rev=rev)
          File "/mnt/d/mercurial/mercurial/revlog.py", line 1996, in checkhash
            % (self.display_id, pycompat.bytestr(revornode))
        mercurial.error.RevlogError: integrity check failed on data/EXE/PPC/shrinksrec.exe:0
    ```
    
    (I'm a little surprised it resulted in a stacktrace instead of just a message,
    but that's a different issue.  I'm also not sure how to trigger the simplestore
    case, since IIUC, it's also a revlog based store.)
    
    It's not clear how to handle the changelog and manifest (because the user
    doesn't interact with them as a file), so those cases are left alone.  The other
    thing that would be nice to improve somehow is to indicate that the ":0" is a
    revlog revision, not the changeset revision that users are used to.  I'm not
    sure how to handle the "or node" part though.