Mercurial > hg
changeset 41298:88a7c211b21e stable
narrow: fix crash when restoring backup in legacy repo
Using --addremove when committing in an old repo (before we started
keeping .hg/narrowspec.dirstate) results in a crash. The test
case modified in this patch would crash like this:
abort: $ENOENT$
The issue is that when the dirstateguard is aborted, it tries to
restore the backup of .hg/narrowspec.dirstate. However, since we were
in an old repo, that file did not get created when the dirstateguard
was created. Note that the dirstateguard is not used unless
--addremove is passed.
This patch fixes the bug by making restorewcbackup() not fail if the
backup doesn't exist. I also made clearwcbackup() safe, just in case.
Differential Revision: https://phab.mercurial-scm.org/D5634
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 18 Jan 2019 23:32:26 -0800 |
parents | b1ea90613af3 |
children | ff1222a7d714 |
files | mercurial/narrowspec.py tests/test-narrow-share.t |
diffstat | 2 files changed, 5 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/narrowspec.py Fri Jan 18 14:21:47 2019 +0100 +++ b/mercurial/narrowspec.py Fri Jan 18 23:32:26 2019 -0800 @@ -190,12 +190,14 @@ def restorewcbackup(repo, backupname): if repository.NARROW_REQUIREMENT not in repo.requirements: return - util.rename(repo.vfs.join(backupname), repo.vfs.join(DIRSTATE_FILENAME)) + # It may not exist in old repos + if repo.vfs.exists(backupname): + util.rename(repo.vfs.join(backupname), repo.vfs.join(DIRSTATE_FILENAME)) def clearwcbackup(repo, backupname): if repository.NARROW_REQUIREMENT not in repo.requirements: return - repo.vfs.unlink(backupname) + repo.vfs.tryunlink(backupname) def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): r""" Restricts the patterns according to repo settings,
--- a/tests/test-narrow-share.t Fri Jan 18 14:21:47 2019 +0100 +++ b/tests/test-narrow-share.t Fri Jan 18 23:32:26 2019 -0800 @@ -166,7 +166,7 @@ R d7/f Make it look like a repo from before narrow+share was supported $ rm .hg/narrowspec.dirstate - $ hg st + $ hg ci -Am test abort: working copy's narrowspec is stale (run 'hg tracked --update-working-copy') [255]