Show More
@@ -87,6 +87,16 b' class appender(object):' | |||||
87 | self.data.append(str(s)) |
|
87 | self.data.append(str(s)) | |
88 | self.offset += len(s) |
|
88 | self.offset += len(s) | |
89 |
|
89 | |||
|
90 | def delayopener(opener, target, divert, buf): | |||
|
91 | def o(name, mode='r'): | |||
|
92 | if name != target: | |||
|
93 | return opener(name, mode) | |||
|
94 | if divert: | |||
|
95 | return opener(name + ".a", mode.replace('a', 'w')) | |||
|
96 | # otherwise, divert to memory | |||
|
97 | return appender(opener(name, mode), buf) | |||
|
98 | return o | |||
|
99 | ||||
90 | class changelog(revlog.revlog): |
|
100 | class changelog(revlog.revlog): | |
91 | def __init__(self, opener): |
|
101 | def __init__(self, opener): | |
92 | revlog.revlog.__init__(self, opener, "00changelog.i") |
|
102 | revlog.revlog.__init__(self, opener, "00changelog.i") | |
@@ -99,7 +109,8 b' class changelog(revlog.revlog):' | |||||
99 | self._delayed = True |
|
109 | self._delayed = True | |
100 | self._divert = (len(self) == 0) |
|
110 | self._divert = (len(self) == 0) | |
101 | self._delaybuf = [] |
|
111 | self._delaybuf = [] | |
102 |
self.opener = self._ |
|
112 | self.opener = delayopener(self._realopener, self.indexfile, | |
|
113 | self._divert, self._delaybuf) | |||
103 |
|
114 | |||
104 | def finalize(self, tr): |
|
115 | def finalize(self, tr): | |
105 | "finalize index updates" |
|
116 | "finalize index updates" | |
@@ -107,8 +118,8 b' class changelog(revlog.revlog):' | |||||
107 | self.opener = self._realopener |
|
118 | self.opener = self._realopener | |
108 | # move redirected index data back into place |
|
119 | # move redirected index data back into place | |
109 | if self._divert: |
|
120 | if self._divert: | |
110 |
n = self. |
|
121 | n = self.opener(self.indexfile + ".a").name | |
111 |
util.rename(n |
|
122 | util.rename(n, n[:-2]) | |
112 | elif self._delaybuf: |
|
123 | elif self._delaybuf: | |
113 | fp = self.opener(self.indexfile, 'a') |
|
124 | fp = self.opener(self.indexfile, 'a') | |
114 | fp.write("".join(self._delaybuf)) |
|
125 | fp.write("".join(self._delaybuf)) | |
@@ -117,20 +128,6 b' class changelog(revlog.revlog):' | |||||
117 | # split when we're done |
|
128 | # split when we're done | |
118 | self.checkinlinesize(tr) |
|
129 | self.checkinlinesize(tr) | |
119 |
|
130 | |||
120 | def _delayopener(self, name, mode='r'): |
|
|||
121 | fp = self._realopener(name, mode) |
|
|||
122 | # only divert the index |
|
|||
123 | if not name == self.indexfile: |
|
|||
124 | return fp |
|
|||
125 | # if we're doing an initial clone, divert to another file |
|
|||
126 | if self._divert: |
|
|||
127 | if not len(self): |
|
|||
128 | # make sure to truncate the file |
|
|||
129 | mode = mode.replace('a', 'w') |
|
|||
130 | return self._realopener(name + ".a", mode) |
|
|||
131 | # otherwise, divert to memory |
|
|||
132 | return appender(fp, self._delaybuf) |
|
|||
133 |
|
||||
134 | def readpending(self, file): |
|
131 | def readpending(self, file): | |
135 | r = revlog.revlog(self.opener, file) |
|
132 | r = revlog.revlog(self.opener, file) | |
136 | self.index = r.index |
|
133 | self.index = r.index |
General Comments 0
You need to be logged in to leave comments.
Login now