# HG changeset patch # User Martin von Zweigbergk # Date 2019-01-19 07:32:26 # Node ID 88a7c211b21e98e543af4dbe88a48a0d4f55549f # Parent b1ea90613af3dd1b58a22253678ddf68e17c85db 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 diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py --- a/mercurial/narrowspec.py +++ b/mercurial/narrowspec.py @@ -190,12 +190,14 @@ def savewcbackup(repo, backupname): 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, diff --git a/tests/test-narrow-share.t b/tests/test-narrow-share.t --- a/tests/test-narrow-share.t +++ b/tests/test-narrow-share.t @@ -166,7 +166,7 @@ Dirstate should be left alone when upgra 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]