Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 23877:7cc77030c557
localrepo: remove all external users of localrepo.opener
This change touches every module in which repository.opener was being used, and
changes it for the equivalent repository.vfs. This is meant to make it easier
to split the repository.vfs into several separate vfs.
It should now be possible to remove localrepo.opener.
author | Angel Ezquerra <angel.ezquerra@gmail.com> |
---|---|
date | Thu, 15 Jan 2015 23:17:12 +0100 |
parents | d3e137c91f94 |
children | b88278a308c6 |
comparison
equal
deleted
inserted
replaced
23876:48fd1dfb99aa | 23877:7cc77030c557 |
---|---|
136 Note: the "F" data from this file are one entry short | 136 Note: the "F" data from this file are one entry short |
137 (no "other file node" entry) | 137 (no "other file node" entry) |
138 """ | 138 """ |
139 records = [] | 139 records = [] |
140 try: | 140 try: |
141 f = self._repo.opener(self.statepathv1) | 141 f = self._repo.vfs(self.statepathv1) |
142 for i, l in enumerate(f): | 142 for i, l in enumerate(f): |
143 if i == 0: | 143 if i == 0: |
144 records.append(('L', l[:-1])) | 144 records.append(('L', l[:-1])) |
145 else: | 145 else: |
146 records.append(('F', l[:-1])) | 146 records.append(('F', l[:-1])) |
155 | 155 |
156 returns list of record [(TYPE, data), ...] | 156 returns list of record [(TYPE, data), ...] |
157 """ | 157 """ |
158 records = [] | 158 records = [] |
159 try: | 159 try: |
160 f = self._repo.opener(self.statepathv2) | 160 f = self._repo.vfs(self.statepathv2) |
161 data = f.read() | 161 data = f.read() |
162 off = 0 | 162 off = 0 |
163 end = len(data) | 163 end = len(data) |
164 while off < end: | 164 while off < end: |
165 rtype = data[off] | 165 rtype = data[off] |
182 for "is a merge in progress." | 182 for "is a merge in progress." |
183 """ | 183 """ |
184 # Check local variables before looking at filesystem for performance | 184 # Check local variables before looking at filesystem for performance |
185 # reasons. | 185 # reasons. |
186 return bool(self._local) or bool(self._state) or \ | 186 return bool(self._local) or bool(self._state) or \ |
187 self._repo.opener.exists(self.statepathv1) or \ | 187 self._repo.vfs.exists(self.statepathv1) or \ |
188 self._repo.opener.exists(self.statepathv2) | 188 self._repo.vfs.exists(self.statepathv2) |
189 | 189 |
190 def commit(self): | 190 def commit(self): |
191 """Write current state on disk (if necessary)""" | 191 """Write current state on disk (if necessary)""" |
192 if self._dirty: | 192 if self._dirty: |
193 records = [] | 193 records = [] |
203 self._writerecordsv1(records) | 203 self._writerecordsv1(records) |
204 self._writerecordsv2(records) | 204 self._writerecordsv2(records) |
205 | 205 |
206 def _writerecordsv1(self, records): | 206 def _writerecordsv1(self, records): |
207 """Write current state on disk in a version 1 file""" | 207 """Write current state on disk in a version 1 file""" |
208 f = self._repo.opener(self.statepathv1, 'w') | 208 f = self._repo.vfs(self.statepathv1, 'w') |
209 irecords = iter(records) | 209 irecords = iter(records) |
210 lrecords = irecords.next() | 210 lrecords = irecords.next() |
211 assert lrecords[0] == 'L' | 211 assert lrecords[0] == 'L' |
212 f.write(hex(self._local) + '\n') | 212 f.write(hex(self._local) + '\n') |
213 for rtype, data in irecords: | 213 for rtype, data in irecords: |
215 f.write('%s\n' % _droponode(data)) | 215 f.write('%s\n' % _droponode(data)) |
216 f.close() | 216 f.close() |
217 | 217 |
218 def _writerecordsv2(self, records): | 218 def _writerecordsv2(self, records): |
219 """Write current state on disk in a version 2 file""" | 219 """Write current state on disk in a version 2 file""" |
220 f = self._repo.opener(self.statepathv2, 'w') | 220 f = self._repo.vfs(self.statepathv2, 'w') |
221 for key, data in records: | 221 for key, data in records: |
222 assert len(key) == 1 | 222 assert len(key) == 1 |
223 format = '>sI%is' % len(data) | 223 format = '>sI%is' % len(data) |
224 f.write(_pack(format, key, len(data), data)) | 224 f.write(_pack(format, key, len(data), data)) |
225 f.close() | 225 f.close() |
232 fd: file path of the resulting merge. | 232 fd: file path of the resulting merge. |
233 | 233 |
234 note: also write the local version to the `.hg/merge` directory. | 234 note: also write the local version to the `.hg/merge` directory. |
235 """ | 235 """ |
236 hash = util.sha1(fcl.path()).hexdigest() | 236 hash = util.sha1(fcl.path()).hexdigest() |
237 self._repo.opener.write('merge/' + hash, fcl.data()) | 237 self._repo.vfs.write('merge/' + hash, fcl.data()) |
238 self._state[fd] = ['u', hash, fcl.path(), | 238 self._state[fd] = ['u', hash, fcl.path(), |
239 fca.path(), hex(fca.filenode()), | 239 fca.path(), hex(fca.filenode()), |
240 fco.path(), hex(fco.filenode()), | 240 fco.path(), hex(fco.filenode()), |
241 fcl.flags()] | 241 fcl.flags()] |
242 self._dirty = True | 242 self._dirty = True |
282 self._repo.ui.warn(_('warning: cannot merge flags for %s\n') % | 282 self._repo.ui.warn(_('warning: cannot merge flags for %s\n') % |
283 afile) | 283 afile) |
284 elif flags == fla: | 284 elif flags == fla: |
285 flags = flo | 285 flags = flo |
286 # restore local | 286 # restore local |
287 f = self._repo.opener('merge/' + hash) | 287 f = self._repo.vfs('merge/' + hash) |
288 self._repo.wwrite(dfile, f.read(), flags) | 288 self._repo.wwrite(dfile, f.read(), flags) |
289 f.close() | 289 f.close() |
290 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca, | 290 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca, |
291 labels=labels) | 291 labels=labels) |
292 if r is None: | 292 if r is None: |