[PATCH 2 of 5 remotenames-ext] vfs: introduce shareawarecachevfs

Ryan McElroy rm at fb.com
Tue Jul 18 08:54:39 EDT 2017


# HG changeset patch
# User Ryan McElroy <rmcelroy at fb.com>
# Date 1500381555 25200
#      Tue Jul 18 05:39:15 2017 -0700
# Node ID 7c52ae4a24a0ef41de841622916cfe28f15cd89f
# Parent  10c1f58b17bb0990d51be1658f1543a29b9109c5
vfs: introduce shareawarecachevfs

diff --git a/remotenames.py b/remotenames.py
--- a/remotenames.py
+++ b/remotenames.py
@@ -1456,6 +1456,12 @@ def shareawarevfs(repo):
     else:
         return repo.vfs
 
+def shareawarecachevfs(repo):
+    if repo.shared():
+        return vfsmod.vfs(os.path.join(repo.sharedpath, 'cache'))
+    else:
+        return repo.cachevfs
+
 def readbookmarknames(repo, remote):
     for node, nametype, remotename, rname in readremotenames(repo):
         if nametype == 'bookmarks' and remotename == remote:
@@ -1613,8 +1619,8 @@ def calculatenamedistance(repo, fromname
 
 def writedistancecache(repo, distance):
     try:
-        vfs = shareawarevfs(repo)
-        f = vfs('cache/distance', 'w', atomictemp=True)
+        cachevfs = shareawarecachevfs(repo)
+        f = cachevfs('distance', 'w', atomictemp=True)
         for k, v in distance.iteritems():
             f.write('%s %d %d\n' % (k, v[0], v[1]))
     except (IOError, OSError):
@@ -1623,8 +1629,8 @@ def writedistancecache(repo, distance):
 def readdistancecache(repo):
     distances = {}
     try:
-        vfs = shareawarevfs(repo)
-        for line in vfs.read('cache/distance').splitlines():
+        cachevfs = shareawarecachevfs(repo)
+        for line in cachevfs.read('distance').splitlines():
             line = line.rsplit(' ', 2)
             try:
                 d = (int(line[1]), int(line[2]))
@@ -1640,17 +1646,17 @@ def readdistancecache(repo):
 def invalidatedistancecache(repo):
     """Try to invalidate any existing distance caches"""
     error = False
-    vfs = shareawarevfs(repo)
+    cachevfs = shareawarecachevfs(repo)
     try:
-        if vfs.isdir('cache/distance'):
-            shutil.rmtree(vfs.join('cache/distance'))
+        if cachevfs.isdir('distance'):
+            shutil.rmtree(cachevfs.join('distance'))
         else:
-            vfs.unlink('cache/distance')
+            cachevfs.unlink('distance')
     except (OSError, IOError) as inst:
         if inst.errno != errno.ENOENT:
             error = True
     try:
-        vfs.unlink('cache/distance.current')
+        cachevfs.unlink('distance.current')
     except (OSError, IOError) as inst:
         if inst.errno != errno.ENOENT:
             error = True
@@ -1695,9 +1701,8 @@ def precachedistance(repo):
                 # and we'll pick the first one for now
                 bmark = repo[revs[0]].bookmarks()[0]
                 distance = len(repo.revs('only(%d, .)' % revs[0]))
-                vfs = shareawarevfs(repo)
-                vfs.write('cache/distance.current',
-                          '%s %d' % (bmark, distance))
+                cachevfs = shareawarecachevfs(repo)
+                cachevfs.write('distance.current', '%s %d' % (bmark, distance))
 
     finally:
         wlock.release()


More information about the Mercurial-devel mailing list