Show More
@@ -13,6 +13,9 b' import os' | |||
|
13 | 13 | |
|
14 | 14 | from .i18n import _ |
|
15 | 15 | |
|
16 | ||
|
17 | from .revlogutils.flagutil import REVIDX_SIDEDATA | |
|
18 | ||
|
16 | 19 | from . import ( |
|
17 | 20 | error, |
|
18 | 21 | match as matchmod, |
@@ -21,6 +24,9 b' from . import (' | |||
|
21 | 24 | pycompat, |
|
22 | 25 | util, |
|
23 | 26 | ) |
|
27 | ||
|
28 | from .revlogutils import sidedata as sidedatamod | |
|
29 | ||
|
24 | 30 | from .utils import stringutil |
|
25 | 31 | |
|
26 | 32 | |
@@ -955,3 +961,49 b' def decodefileindices(files, data):' | |||
|
955 | 961 | # Perhaps someone had chosen the same key name (e.g. "added") and |
|
956 | 962 | # used different syntax for the value. |
|
957 | 963 | return None |
|
964 | ||
|
965 | ||
|
966 | def _getsidedata(srcrepo, rev): | |
|
967 | ctx = srcrepo[rev] | |
|
968 | filescopies = computechangesetcopies(ctx) | |
|
969 | filesadded = computechangesetfilesadded(ctx) | |
|
970 | filesremoved = computechangesetfilesremoved(ctx) | |
|
971 | sidedata = {} | |
|
972 | if any([filescopies, filesadded, filesremoved]): | |
|
973 | sortedfiles = sorted(ctx.files()) | |
|
974 | p1copies, p2copies = filescopies | |
|
975 | p1copies = encodecopies(sortedfiles, p1copies) | |
|
976 | p2copies = encodecopies(sortedfiles, p2copies) | |
|
977 | filesadded = encodefileindices(sortedfiles, filesadded) | |
|
978 | filesremoved = encodefileindices(sortedfiles, filesremoved) | |
|
979 | sidedata[sidedatamod.SD_P1COPIES] = p1copies | |
|
980 | sidedata[sidedatamod.SD_P2COPIES] = p2copies | |
|
981 | sidedata[sidedatamod.SD_FILESADDED] = filesadded | |
|
982 | sidedata[sidedatamod.SD_FILESREMOVED] = filesremoved | |
|
983 | return sidedata | |
|
984 | ||
|
985 | ||
|
986 | def getsidedataadder(srcrepo, destrepo): | |
|
987 | def sidedatacompanion(revlog, rev): | |
|
988 | sidedata = {} | |
|
989 | if util.safehasattr(revlog, 'filteredrevs'): # this is a changelog | |
|
990 | sidedata = _getsidedata(srcrepo, rev) | |
|
991 | return False, (), sidedata | |
|
992 | ||
|
993 | return sidedatacompanion | |
|
994 | ||
|
995 | ||
|
996 | def getsidedataremover(srcrepo, destrepo): | |
|
997 | def sidedatacompanion(revlog, rev): | |
|
998 | f = () | |
|
999 | if util.safehasattr(revlog, 'filteredrevs'): # this is a changelog | |
|
1000 | if revlog.flags(rev) & REVIDX_SIDEDATA: | |
|
1001 | f = ( | |
|
1002 | sidedatamod.SD_P1COPIES, | |
|
1003 | sidedatamod.SD_P2COPIES, | |
|
1004 | sidedatamod.SD_FILESADDED, | |
|
1005 | sidedatamod.SD_FILESREMOVED, | |
|
1006 | ) | |
|
1007 | return False, f, {} | |
|
1008 | ||
|
1009 | return sidedatacompanion |
@@ -13,6 +13,7 b' from .i18n import _' | |||
|
13 | 13 | from .pycompat import getattr |
|
14 | 14 | from . import ( |
|
15 | 15 | changelog, |
|
16 | copies, | |
|
16 | 17 | error, |
|
17 | 18 | filelog, |
|
18 | 19 | hg, |
@@ -31,7 +32,6 b' from .utils import compression' | |||
|
31 | 32 | RECLONES_REQUIREMENTS = { |
|
32 | 33 | b'generaldelta', |
|
33 | 34 | localrepo.SPARSEREVLOG_REQUIREMENT, |
|
34 | localrepo.SIDEDATA_REQUIREMENT, | |
|
35 | 35 | } |
|
36 | 36 | |
|
37 | 37 | |
@@ -77,6 +77,7 b' def supportremovedrequirements(repo):' | |||
|
77 | 77 | supported = { |
|
78 | 78 | localrepo.SPARSEREVLOG_REQUIREMENT, |
|
79 | 79 | localrepo.SIDEDATA_REQUIREMENT, |
|
80 | localrepo.COPIESSDC_REQUIREMENT, | |
|
80 | 81 | } |
|
81 | 82 | for name in compression.compengines: |
|
82 | 83 | engine = compression.compengines[name] |
@@ -103,6 +104,7 b' def supporteddestrequirements(repo):' | |||
|
103 | 104 | b'store', |
|
104 | 105 | localrepo.SPARSEREVLOG_REQUIREMENT, |
|
105 | 106 | localrepo.SIDEDATA_REQUIREMENT, |
|
107 | localrepo.COPIESSDC_REQUIREMENT, | |
|
106 | 108 | } |
|
107 | 109 | for name in compression.compengines: |
|
108 | 110 | engine = compression.compengines[name] |
@@ -129,6 +131,7 b' def allowednewrequirements(repo):' | |||
|
129 | 131 | b'generaldelta', |
|
130 | 132 | localrepo.SPARSEREVLOG_REQUIREMENT, |
|
131 | 133 | localrepo.SIDEDATA_REQUIREMENT, |
|
134 | localrepo.COPIESSDC_REQUIREMENT, | |
|
132 | 135 | } |
|
133 | 136 | for name in compression.compengines: |
|
134 | 137 | engine = compression.compengines[name] |
@@ -698,6 +701,7 b' UPGRADE_ALL_REVLOGS = frozenset(' | |||
|
698 | 701 | def getsidedatacompanion(srcrepo, dstrepo): |
|
699 | 702 | sidedatacompanion = None |
|
700 | 703 | removedreqs = srcrepo.requirements - dstrepo.requirements |
|
704 | addedreqs = dstrepo.requirements - srcrepo.requirements | |
|
701 | 705 | if localrepo.SIDEDATA_REQUIREMENT in removedreqs: |
|
702 | 706 | |
|
703 | 707 | def sidedatacompanion(rl, rev): |
@@ -706,6 +710,10 b' def getsidedatacompanion(srcrepo, dstrep' | |||
|
706 | 710 | return True, (), {} |
|
707 | 711 | return False, (), {} |
|
708 | 712 | |
|
713 | elif localrepo.COPIESSDC_REQUIREMENT in addedreqs: | |
|
714 | sidedatacompanion = copies.getsidedataadder(srcrepo, dstrepo) | |
|
715 | elif localrepo.COPIESSDC_REQUIREMENT in removedreqs: | |
|
716 | sidedatacompanion = copies.getsidedataremover(srcrepo, dstrepo) | |
|
709 | 717 | return sidedatacompanion |
|
710 | 718 | |
|
711 | 719 |
@@ -450,4 +450,91 b' Test committing half a rename' | |||
|
450 | 450 | $ hg ci -Aqm 'add a' |
|
451 | 451 | $ hg mv a b |
|
452 | 452 | $ hg ci -m 'remove a' a |
|
453 | ||
|
454 | #if sidedata | |
|
455 | ||
|
456 | Test upgrading/downgrading to sidedata storage | |
|
457 | ============================================== | |
|
458 | ||
|
459 | downgrading (keeping some sidedata) | |
|
460 | ||
|
461 | $ hg debugformat -v | |
|
462 | format-variant repo config default | |
|
463 | fncache: yes yes yes | |
|
464 | dotencode: yes yes yes | |
|
465 | generaldelta: yes yes yes | |
|
466 | sparserevlog: yes yes yes | |
|
467 | sidedata: yes yes no | |
|
468 | copies-sdc: yes yes no | |
|
469 | plain-cl-delta: yes yes yes | |
|
470 | compression: zlib zlib zlib | |
|
471 | compression-level: default default default | |
|
472 | $ hg debugsidedata -c -- 0 | |
|
473 | 4 sidedata entries | |
|
474 | entry-0010 size 0 | |
|
475 | entry-0011 size 0 | |
|
476 | entry-0012 size 1 | |
|
477 | entry-0013 size 0 | |
|
478 | $ hg debugsidedata -c -- 1 | |
|
479 | 4 sidedata entries | |
|
480 | entry-0010 size 0 | |
|
481 | entry-0011 size 0 | |
|
482 | entry-0012 size 0 | |
|
483 | entry-0013 size 1 | |
|
484 | $ hg debugsidedata -m -- 0 | |
|
485 | $ cat << EOF > .hg/hgrc | |
|
486 | > [format] | |
|
487 | > use-side-data = yes | |
|
488 | > exp-use-copies-side-data-changeset = no | |
|
489 | > EOF | |
|
490 | $ hg debugupgraderepo --run --quiet --no-backup > /dev/null | |
|
491 | $ hg debugformat -v | |
|
492 | format-variant repo config default | |
|
493 | fncache: yes yes yes | |
|
494 | dotencode: yes yes yes | |
|
495 | generaldelta: yes yes yes | |
|
496 | sparserevlog: yes yes yes | |
|
497 | sidedata: yes yes no | |
|
498 | copies-sdc: no no no | |
|
499 | plain-cl-delta: yes yes yes | |
|
500 | compression: zlib zlib zlib | |
|
501 | compression-level: default default default | |
|
502 | $ hg debugsidedata -c -- 0 | |
|
503 | $ hg debugsidedata -c -- 1 | |
|
504 | $ hg debugsidedata -m -- 0 | |
|
505 | ||
|
506 | upgrading | |
|
507 | ||
|
508 | $ cat << EOF > .hg/hgrc | |
|
509 | > [format] | |
|
510 | > exp-use-copies-side-data-changeset = yes | |
|
511 | > EOF | |
|
512 | $ hg debugupgraderepo --run --quiet --no-backup > /dev/null | |
|
513 | $ hg debugformat -v | |
|
514 | format-variant repo config default | |
|
515 | fncache: yes yes yes | |
|
516 | dotencode: yes yes yes | |
|
517 | generaldelta: yes yes yes | |
|
518 | sparserevlog: yes yes yes | |
|
519 | sidedata: yes yes no | |
|
520 | copies-sdc: yes yes no | |
|
521 | plain-cl-delta: yes yes yes | |
|
522 | compression: zlib zlib zlib | |
|
523 | compression-level: default default default | |
|
524 | $ hg debugsidedata -c -- 0 | |
|
525 | 4 sidedata entries | |
|
526 | entry-0010 size 0 | |
|
527 | entry-0011 size 0 | |
|
528 | entry-0012 size 1 | |
|
529 | entry-0013 size 0 | |
|
530 | $ hg debugsidedata -c -- 1 | |
|
531 | 4 sidedata entries | |
|
532 | entry-0010 size 0 | |
|
533 | entry-0011 size 0 | |
|
534 | entry-0012 size 0 | |
|
535 | entry-0013 size 1 | |
|
536 | $ hg debugsidedata -m -- 0 | |
|
537 | ||
|
538 | #endif | |
|
539 | ||
|
453 | 540 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now