##// END OF EJS Templates
changelog: make delayopener less intrusive
Matt Mackall -
r8644:c2ef478b default
parent child Browse files
Show More
@@ -89,19 +89,20 b' class appender:'
89
89
90 class changelog(revlog.revlog):
90 class changelog(revlog.revlog):
91 def __init__(self, opener):
91 def __init__(self, opener):
92 revlog.revlog.__init__(self, opener, "00changelog.i")
92 self._realopener = opener
93 self._delayed = False
94 revlog.revlog.__init__(self, self._delayopener, "00changelog.i")
93
95
94 def delayupdate(self):
96 def delayupdate(self):
95 "delay visibility of index updates to other readers"
97 "delay visibility of index updates to other readers"
96 self._realopener = self.opener
98 self._delayed = True
97 self.opener = self._delayopener
98 self._delaycount = len(self)
99 self._delaycount = len(self)
99 self._delaybuf = []
100 self._delaybuf = []
100 self._delayname = None
101 self._delayname = None
101
102
102 def finalize(self, tr):
103 def finalize(self, tr):
103 "finalize index updates"
104 "finalize index updates"
104 self.opener = self._realopener
105 self._delayed = False
105 # move redirected index data back into place
106 # move redirected index data back into place
106 if self._delayname:
107 if self._delayname:
107 util.rename(self._delayname + ".a", self._delayname)
108 util.rename(self._delayname + ".a", self._delayname)
@@ -116,7 +117,7 b' class changelog(revlog.revlog):'
116 def _delayopener(self, name, mode='r'):
117 def _delayopener(self, name, mode='r'):
117 fp = self._realopener(name, mode)
118 fp = self._realopener(name, mode)
118 # only divert the index
119 # only divert the index
119 if not name == self.indexfile:
120 if not self._delayed or not name == self.indexfile:
120 return fp
121 return fp
121 # if we're doing an initial clone, divert to another file
122 # if we're doing an initial clone, divert to another file
122 if self._delaycount == 0:
123 if self._delaycount == 0:
General Comments 0
You need to be logged in to leave comments. Login now