Patchwork [2,of,2,sqldirstate] sqldirstate: write fake dirstate always to detect changes correctly

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Oct. 14, 2016, 7:10 p.m.
Message ID <681b0442741642fb0a83.1476472253@feefifofum>
Download mbox | patch
Permalink /patch/17088/
State Accepted
Headers show

Comments

Katsunori FUJIWARA - Oct. 14, 2016, 7:10 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1476456913 -32400
#      Fri Oct 14 23:55:13 2016 +0900
# Node ID 681b0442741642fb0a8300b2be72150422c0ea83
# Parent  72486917916f6d47525f721cd5b27012091122ed
# Available At https://foozy@bitbucket.org/foozy/hg-experimental
#              hg pull https://foozy@bitbucket.org/foozy/hg-experimental -r 681b04427416
sqldirstate: write fake dirstate always to detect changes correctly

Before this patch, if sqldirstate.fakedirstate configuration is false
value, (fake) dirstate isn't written out (or explicitly unlinked),

In such case, @filecache never detects change of dirstate by another
process/thread, because not-existing file never change its file stat.

To achieve checking cache validity without existence of .hg/dirstate
file, we should use another cache annotation instead of @filecache.

This patch removes code paths to avoid writing (or unlinking) fake
dirstate, and writes fake dirstate always to detect changes correctly.

Just removing these code paths seems reasonable enough, because it was
already confirmed at Mercurial 4.0 sprint that there is no concrete
usecase for sqldirstate.fakedirstate configuration.

Patch

diff --git a/sqldirstate/__init__.py b/sqldirstate/__init__.py
--- a/sqldirstate/__init__.py
+++ b/sqldirstate/__init__.py
@@ -67,10 +67,7 @@  def upgrade(ui, repo):
         tosql(repo.dirstate)
         repo.requirements.add('sqldirstate')
         repo._writerequirements()
-        if ui.configbool('sqldirstate', 'fakedirstate', True):
-            writefakedirstate(repo.dirstate)
-        else:
-            repo.dirstate._opener.unlink('dirstate')
+        writefakedirstate(repo.dirstate)
         del repo.dirstate
 
     finally:
diff --git a/sqldirstate/sqldirstate.py b/sqldirstate/sqldirstate.py
--- a/sqldirstate/sqldirstate.py
+++ b/sqldirstate/sqldirstate.py
@@ -485,8 +485,7 @@  def makedirstate(cls):
             if '_nonnormalset' in self.__dict__:
                 delattr(self, '_nonnormalset')
 
-            if self._ui.configbool('sqldirstate', 'fakedirstate', True):
-                writefakedirstate(self)
+            writefakedirstate(self)
 
         def _backupandwrite(self, tr):
             if not self.skipbackups: