374 ) |
374 ) |
375 % (revcount, util.bytecount(dstsize - srcsize)) |
375 % (revcount, util.bytecount(dstsize - srcsize)) |
376 ) |
376 ) |
377 |
377 |
378 |
378 |
379 def _filterstorefile(srcrepo, dstrepo, requirements, path, mode, st): |
379 def _files_to_copy_post_revlog_clone(srcrepo): |
380 """Determine whether to copy a store file during upgrade. |
380 """yields files which should be copied to destination after revlogs |
381 |
381 are cloned""" |
382 This function is called when migrating store files from ``srcrepo`` to |
382 for path, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)): |
383 ``dstrepo`` as part of upgrading a repository. |
383 # don't copy revlogs as they are already cloned |
384 |
384 if path.endswith((b'.i', b'.d', b'.n', b'.nd')): |
385 Args: |
385 continue |
386 srcrepo: repo we are copying from |
386 # Skip transaction related files. |
387 dstrepo: repo we are copying to |
387 if path.startswith(b'undo'): |
388 requirements: set of requirements for ``dstrepo`` |
388 continue |
389 path: store file being examined |
389 # Only copy regular files. |
390 mode: the ``ST_MODE`` file type of ``path`` |
390 if kind != stat.S_IFREG: |
391 st: ``stat`` data structure for ``path`` |
391 continue |
392 |
392 # Skip other skipped files. |
393 Function should return ``True`` if the file is to be copied. |
393 if path in (b'lock', b'fncache'): |
394 """ |
394 continue |
395 # Skip revlogs. |
395 # TODO: should we skip cache too? |
396 if path.endswith((b'.i', b'.d', b'.n', b'.nd')): |
396 |
397 return False |
397 yield path |
398 # Skip transaction related files. |
|
399 if path.startswith(b'undo'): |
|
400 return False |
|
401 # Only copy regular files. |
|
402 if mode != stat.S_IFREG: |
|
403 return False |
|
404 # Skip other skipped files. |
|
405 if path in (b'lock', b'fncache'): |
|
406 return False |
|
407 |
|
408 return True |
|
409 |
398 |
410 |
399 |
411 def _replacestores(currentrepo, upgradedrepo, backupvfs, upgrade_op): |
400 def _replacestores(currentrepo, upgradedrepo, backupvfs, upgrade_op): |
412 """Replace the stores after current repository is upgraded |
401 """Replace the stores after current repository is upgraded |
413 |
402 |
463 tr, |
452 tr, |
464 upgrade_op, |
453 upgrade_op, |
465 ) |
454 ) |
466 |
455 |
467 # Now copy other files in the store directory. |
456 # Now copy other files in the store directory. |
468 # The sorted() makes execution deterministic. |
457 for p in _files_to_copy_post_revlog_clone(srcrepo): |
469 for p, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)): |
|
470 if not _filterstorefile( |
|
471 srcrepo, dstrepo, upgrade_op.new_requirements, p, kind, st |
|
472 ): |
|
473 continue |
|
474 |
|
475 srcrepo.ui.status(_(b'copying %s\n') % p) |
458 srcrepo.ui.status(_(b'copying %s\n') % p) |
476 src = srcrepo.store.rawvfs.join(p) |
459 src = srcrepo.store.rawvfs.join(p) |
477 dst = dstrepo.store.rawvfs.join(p) |
460 dst = dstrepo.store.rawvfs.join(p) |
478 util.copyfile(src, dst, copystat=True) |
461 util.copyfile(src, dst, copystat=True) |
479 |
462 |