Mercurial > public > mercurial-scm > hg
comparison mercurial/changelog.py @ 9164:b0d995b6b0a6
changelog: factor out _delayname
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 18 Jul 2009 11:25:55 -0500 |
parents | f193b643d1b1 |
children | 07f9b2f4a9aa |
comparison
equal
deleted
inserted
replaced
9163:f193b643d1b1 | 9164:b0d995b6b0a6 |
---|---|
92 self._realopener = opener | 92 self._realopener = opener |
93 self._delayed = False | 93 self._delayed = False |
94 self._divert = False | 94 self._divert = False |
95 revlog.revlog.__init__(self, self._delayopener, "00changelog.i") | 95 revlog.revlog.__init__(self, self._delayopener, "00changelog.i") |
96 | 96 |
97 | |
98 def delayupdate(self): | 97 def delayupdate(self): |
99 "delay visibility of index updates to other readers" | 98 "delay visibility of index updates to other readers" |
100 self._delayed = True | 99 self._delayed = True |
101 self._divert = (len(self) == 0) | 100 self._divert = (len(self) == 0) |
102 self._delaybuf = [] | 101 self._delaybuf = [] |
103 self._delayname = None | |
104 | 102 |
105 def finalize(self, tr): | 103 def finalize(self, tr): |
106 "finalize index updates" | 104 "finalize index updates" |
107 self._delayed = False | 105 self._delayed = False |
108 # move redirected index data back into place | 106 # move redirected index data back into place |
109 if self._delayname: | 107 if self._divert: |
110 util.rename(self._delayname + ".a", self._delayname) | 108 n = self._realopener(self.indexfile).name |
109 util.rename(n + ".a", n) | |
111 elif self._delaybuf: | 110 elif self._delaybuf: |
112 fp = self.opener(self.indexfile, 'a') | 111 fp = self.opener(self.indexfile, 'a') |
113 fp.write("".join(self._delaybuf)) | 112 fp.write("".join(self._delaybuf)) |
114 fp.close() | 113 fp.close() |
115 self._delaybuf = [] | 114 self._delaybuf = [] |
121 # only divert the index | 120 # only divert the index |
122 if not self._delayed or not name == self.indexfile: | 121 if not self._delayed or not name == self.indexfile: |
123 return fp | 122 return fp |
124 # if we're doing an initial clone, divert to another file | 123 # if we're doing an initial clone, divert to another file |
125 if self._divert: | 124 if self._divert: |
126 self._delayname = fp.name | |
127 if not len(self): | 125 if not len(self): |
128 # make sure to truncate the file | 126 # make sure to truncate the file |
129 mode = mode.replace('a', 'w') | 127 mode = mode.replace('a', 'w') |
130 return self._realopener(name + ".a", mode) | 128 return self._realopener(name + ".a", mode) |
131 # otherwise, divert to memory | 129 # otherwise, divert to memory |
147 # add pending data | 145 # add pending data |
148 fp2.write("".join(self._delaybuf)) | 146 fp2.write("".join(self._delaybuf)) |
149 fp2.close() | 147 fp2.close() |
150 # switch modes so finalize can simply rename | 148 # switch modes so finalize can simply rename |
151 self._delaybuf = [] | 149 self._delaybuf = [] |
152 self._delayname = fp1.name | 150 self._divert = True |
153 | 151 |
154 if self._delayname: | 152 if self._divert: |
155 return True | 153 return True |
156 | 154 |
157 return False | 155 return False |
158 | 156 |
159 def checkinlinesize(self, tr, fp=None): | 157 def checkinlinesize(self, tr, fp=None): |