45 replace=True, |
45 replace=True, |
46 ) |
46 ) |
47 return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata) |
47 return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata) |
48 |
48 |
49 |
49 |
50 def _revlogfrompath(repo, rl_type, path): |
50 def _revlog_from_store_entry(repo, entry): |
51 """Obtain a revlog from a repo path. |
51 """Obtain a revlog from a repo store entry. |
52 |
52 |
53 An instance of the appropriate class is returned. |
53 An instance of the appropriate class is returned. |
54 """ |
54 """ |
|
55 rl_type = entry.revlog_type |
|
56 path = entry.unencoded_path |
55 if rl_type & store.FILEFLAGS_CHANGELOG: |
57 if rl_type & store.FILEFLAGS_CHANGELOG: |
56 return changelog.changelog(repo.svfs) |
58 return changelog.changelog(repo.svfs) |
57 elif rl_type & store.FILEFLAGS_MANIFESTLOG: |
59 elif rl_type & store.FILEFLAGS_MANIFESTLOG: |
58 mandir = b'' |
60 mandir = b'' |
59 if b'/' in path: |
61 if b'/' in path: |
70 raise error.Abort(msg) |
72 raise error.Abort(msg) |
71 path = path_part[1] |
73 path = path_part[1] |
72 return filelog.filelog(repo.svfs, path) |
74 return filelog.filelog(repo.svfs, path) |
73 |
75 |
74 |
76 |
75 def _copyrevlog(tr, destrepo, oldrl, rl_type, unencodedname): |
77 def _copyrevlog(tr, destrepo, oldrl, entry): |
76 """copy all relevant files for `oldrl` into `destrepo` store |
78 """copy all relevant files for `oldrl` into `destrepo` store |
77 |
79 |
78 Files are copied "as is" without any transformation. The copy is performed |
80 Files are copied "as is" without any transformation. The copy is performed |
79 without extra checks. Callers are responsible for making sure the copied |
81 without extra checks. Callers are responsible for making sure the copied |
80 content is compatible with format of the destination repository. |
82 content is compatible with format of the destination repository. |
81 """ |
83 """ |
82 oldrl = getattr(oldrl, '_revlog', oldrl) |
84 oldrl = getattr(oldrl, '_revlog', oldrl) |
83 newrl = _revlogfrompath(destrepo, rl_type, unencodedname) |
85 newrl = _revlog_from_store_entry(destrepo, entry) |
84 newrl = getattr(newrl, '_revlog', newrl) |
86 newrl = getattr(newrl, '_revlog', newrl) |
85 |
87 |
86 oldvfs = oldrl.opener |
88 oldvfs = oldrl.opener |
87 newvfs = newrl.opener |
89 newvfs = newrl.opener |
88 oldindex = oldvfs.join(oldrl._indexfile) |
90 oldindex = oldvfs.join(oldrl._indexfile) |
96 util.copyfile(oldindex, newindex) |
98 util.copyfile(oldindex, newindex) |
97 copydata = oldrl.opener.exists(oldrl._datafile) |
99 copydata = oldrl.opener.exists(oldrl._datafile) |
98 if copydata: |
100 if copydata: |
99 util.copyfile(olddata, newdata) |
101 util.copyfile(olddata, newdata) |
100 |
102 |
101 if rl_type & store.FILEFLAGS_FILELOG: |
103 if entry.revlog_type & store.FILEFLAGS_FILELOG: |
|
104 unencodedname = entry.unencoded_path |
102 destrepo.svfs.fncache.add(unencodedname) |
105 destrepo.svfs.fncache.add(unencodedname) |
103 if copydata: |
106 if copydata: |
104 destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d') |
107 destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d') |
105 |
108 |
106 |
109 |
131 def _perform_clone( |
134 def _perform_clone( |
132 ui, |
135 ui, |
133 dstrepo, |
136 dstrepo, |
134 tr, |
137 tr, |
135 old_revlog, |
138 old_revlog, |
136 rl_type, |
139 entry, |
137 unencoded, |
|
138 upgrade_op, |
140 upgrade_op, |
139 sidedata_helpers, |
141 sidedata_helpers, |
140 oncopiedrevision, |
142 oncopiedrevision, |
141 ): |
143 ): |
142 """returns the new revlog object created""" |
144 """returns the new revlog object created""" |
143 newrl = None |
145 newrl = None |
144 if matchrevlog(upgrade_op.revlogs_to_process, rl_type): |
146 revlog_path = entry.unencoded_path |
|
147 if matchrevlog(upgrade_op.revlogs_to_process, entry.revlog_type): |
145 ui.note( |
148 ui.note( |
146 _(b'cloning %d revisions from %s\n') % (len(old_revlog), unencoded) |
149 _(b'cloning %d revisions from %s\n') |
147 ) |
150 % (len(old_revlog), revlog_path) |
148 newrl = _revlogfrompath(dstrepo, rl_type, unencoded) |
151 ) |
|
152 newrl = _revlog_from_store_entry(dstrepo, entry) |
149 old_revlog.clone( |
153 old_revlog.clone( |
150 tr, |
154 tr, |
151 newrl, |
155 newrl, |
152 addrevisioncb=oncopiedrevision, |
156 addrevisioncb=oncopiedrevision, |
153 deltareuse=upgrade_op.delta_reuse_mode, |
157 deltareuse=upgrade_op.delta_reuse_mode, |
154 forcedeltabothparents=upgrade_op.force_re_delta_both_parents, |
158 forcedeltabothparents=upgrade_op.force_re_delta_both_parents, |
155 sidedata_helpers=sidedata_helpers, |
159 sidedata_helpers=sidedata_helpers, |
156 ) |
160 ) |
157 else: |
161 else: |
158 msg = _(b'blindly copying %s containing %i revisions\n') |
162 msg = _(b'blindly copying %s containing %i revisions\n') |
159 ui.note(msg % (unencoded, len(old_revlog))) |
163 ui.note(msg % (revlog_path, len(old_revlog))) |
160 _copyrevlog(tr, dstrepo, old_revlog, rl_type, unencoded) |
164 _copyrevlog(tr, dstrepo, old_revlog, entry) |
161 |
165 |
162 newrl = _revlogfrompath(dstrepo, rl_type, unencoded) |
166 newrl = _revlog_from_store_entry(dstrepo, entry) |
163 return newrl |
167 return newrl |
164 |
168 |
165 |
169 |
166 def _clonerevlogs( |
170 def _clonerevlogs( |
167 ui, |
171 ui, |
201 # Perform a pass to collect metadata. This validates we can open all |
205 # Perform a pass to collect metadata. This validates we can open all |
202 # source files and allows a unified progress bar to be displayed. |
206 # source files and allows a unified progress bar to be displayed. |
203 for entry in alldatafiles: |
207 for entry in alldatafiles: |
204 if not (entry.is_revlog and entry.is_revlog_main): |
208 if not (entry.is_revlog and entry.is_revlog_main): |
205 continue |
209 continue |
206 unencoded = entry.unencoded_path |
210 |
207 |
211 rl = _revlog_from_store_entry(srcrepo, entry) |
208 rl = _revlogfrompath(srcrepo, entry.revlog_type, unencoded) |
|
209 |
212 |
210 info = rl.storageinfo( |
213 info = rl.storageinfo( |
211 exclusivefiles=True, |
214 exclusivefiles=True, |
212 revisionscount=True, |
215 revisionscount=True, |
213 trackedsize=True, |
216 trackedsize=True, |
221 srcsize += datasize |
224 srcsize += datasize |
222 srcrawsize += rawsize |
225 srcrawsize += rawsize |
223 |
226 |
224 # This is for the separate progress bars. |
227 # This is for the separate progress bars. |
225 if entry.revlog_type & store.FILEFLAGS_CHANGELOG: |
228 if entry.revlog_type & store.FILEFLAGS_CHANGELOG: |
226 changelogs[unencoded] = entry.revlog_type |
229 changelogs[entry.target_id] = entry |
227 crevcount += len(rl) |
230 crevcount += len(rl) |
228 csrcsize += datasize |
231 csrcsize += datasize |
229 crawsize += rawsize |
232 crawsize += rawsize |
230 elif entry.revlog_type & store.FILEFLAGS_MANIFESTLOG: |
233 elif entry.revlog_type & store.FILEFLAGS_MANIFESTLOG: |
231 manifests[unencoded] = entry.revlog_type |
234 manifests[entry.target_id] = entry |
232 mcount += 1 |
235 mcount += 1 |
233 mrevcount += len(rl) |
236 mrevcount += len(rl) |
234 msrcsize += datasize |
237 msrcsize += datasize |
235 mrawsize += rawsize |
238 mrawsize += rawsize |
236 elif entry.revlog_type & store.FILEFLAGS_FILELOG: |
239 elif entry.revlog_type & store.FILEFLAGS_FILELOG: |
237 filelogs[unencoded] = entry.revlog_type |
240 filelogs[entry.target_id] = entry |
238 fcount += 1 |
241 fcount += 1 |
239 frevcount += len(rl) |
242 frevcount += len(rl) |
240 fsrcsize += datasize |
243 fsrcsize += datasize |
241 frawsize += rawsize |
244 frawsize += rawsize |
242 else: |
245 else: |
277 util.bytecount(fsrcsize), |
280 util.bytecount(fsrcsize), |
278 util.bytecount(frawsize), |
281 util.bytecount(frawsize), |
279 ) |
282 ) |
280 ) |
283 ) |
281 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount) |
284 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount) |
282 for unencoded, rl_type in sorted(filelogs.items()): |
285 for target_id, entry in sorted(filelogs.items()): |
283 oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) |
286 oldrl = _revlog_from_store_entry(srcrepo, entry) |
284 |
287 |
285 newrl = _perform_clone( |
288 newrl = _perform_clone( |
286 ui, |
289 ui, |
287 dstrepo, |
290 dstrepo, |
288 tr, |
291 tr, |
289 oldrl, |
292 oldrl, |
290 rl_type, |
293 entry, |
291 unencoded, |
|
292 upgrade_op, |
294 upgrade_op, |
293 sidedata_helpers, |
295 sidedata_helpers, |
294 oncopiedrevision, |
296 oncopiedrevision, |
295 ) |
297 ) |
296 info = newrl.storageinfo(storedsize=True) |
298 info = newrl.storageinfo(storedsize=True) |
319 if progress: |
321 if progress: |
320 progress.complete() |
322 progress.complete() |
321 progress = srcrepo.ui.makeprogress( |
323 progress = srcrepo.ui.makeprogress( |
322 _(b'manifest revisions'), total=mrevcount |
324 _(b'manifest revisions'), total=mrevcount |
323 ) |
325 ) |
324 for unencoded, rl_type in sorted(manifests.items()): |
326 for target_id, entry in sorted(manifests.items()): |
325 oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) |
327 oldrl = _revlog_from_store_entry(srcrepo, entry) |
326 newrl = _perform_clone( |
328 newrl = _perform_clone( |
327 ui, |
329 ui, |
328 dstrepo, |
330 dstrepo, |
329 tr, |
331 tr, |
330 oldrl, |
332 oldrl, |
331 rl_type, |
333 entry, |
332 unencoded, |
|
333 upgrade_op, |
334 upgrade_op, |
334 sidedata_helpers, |
335 sidedata_helpers, |
335 oncopiedrevision, |
336 oncopiedrevision, |
336 ) |
337 ) |
337 info = newrl.storageinfo(storedsize=True) |
338 info = newrl.storageinfo(storedsize=True) |
359 if progress: |
360 if progress: |
360 progress.complete() |
361 progress.complete() |
361 progress = srcrepo.ui.makeprogress( |
362 progress = srcrepo.ui.makeprogress( |
362 _(b'changelog revisions'), total=crevcount |
363 _(b'changelog revisions'), total=crevcount |
363 ) |
364 ) |
364 for unencoded, rl_type in sorted(changelogs.items()): |
365 for target_id, entry in sorted(changelogs.items()): |
365 oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) |
366 oldrl = _revlog_from_store_entry(srcrepo, entry) |
366 newrl = _perform_clone( |
367 newrl = _perform_clone( |
367 ui, |
368 ui, |
368 dstrepo, |
369 dstrepo, |
369 tr, |
370 tr, |
370 oldrl, |
371 oldrl, |
371 rl_type, |
372 entry, |
372 unencoded, |
|
373 upgrade_op, |
373 upgrade_op, |
374 sidedata_helpers, |
374 sidedata_helpers, |
375 oncopiedrevision, |
375 oncopiedrevision, |
376 ) |
376 ) |
377 info = newrl.storageinfo(storedsize=True) |
377 info = newrl.storageinfo(storedsize=True) |