# HG changeset patch # User Boris Feld <boris.feld@octobus.net> # Date 1548436896 18000 # Fri Jan 25 12:21:36 2019 -0500 # Node ID 9462b14569817f095344e8013a838333f5ab5e10 # Parent 00f612a8a849d0b6082d47de19b2ce661a37dce7 Run debugupgraderepo if format mismatch between repo and config Detect if the repository format is different from the default one in current Mercurial version and if so, run `debugupgraderepo` to make it match. diff --git a/lib/scmperf_lib/__init__.py b/lib/scmperf_lib/__init__.py --- a/lib/scmperf_lib/__init__.py +++ b/lib/scmperf_lib/__init__.py @@ -2,6 +2,31 @@ import subprocess +def check_format_data(repo): + """ Return the list of mismatched format values between default and repo + + Read the output of `debugformat` against the repo and the list of + mismatched values + """ + # Format information + raw_format_data = json.loads( + shell_exec(["hg", "-R", repo, "debugformat", "-T", "json"]) + ) + + mismatch = [] + + for format_value in raw_format_data: + format_name = format_value["name"] + repo_value = format_value["repo"] + + if format_value["config"] != repo_value: + mismatch.append( + (format_name, repo_value, format_value["config"]) + ) + + return mismatch + + def gather_repo_stats(repo, repo_id, repo_source): """gather repo related stats and returns a json-encodable dict diff --git a/repo-scripts/make-reference b/repo-scripts/make-reference --- a/repo-scripts/make-reference +++ b/repo-scripts/make-reference @@ -14,7 +14,11 @@ parent_dir = abspath(join(dirname(abspath(__file__)), "..")) sys.path.insert(0, join(parent_dir, "lib")) -from scmperf_lib import gather_repo_stats, shell_exec # isort:skip +from scmperf_lib import ( + gather_repo_stats, + shell_exec, + check_format_data, +) # isort:skip def main(args): @@ -51,6 +55,21 @@ shell_exec(["hg", "-R", repo_main, "debugupdatecache"]) ### Compute stats + mismatch = check_format_data(repo_main) + + ### Run upgraderepo if needed + if len(mismatch) > 0: + print("Running debugupgraderepo because of format mismatch:") + for format_name, repo_value, config_value in mismatch: + msg = "\t{0}: {1!r} != {2!r} (repo/config)" + print(msg.format(format_name, repo_value, config_value)) + + shell_exec(["hg", "-R", repo_main, "debugupgraderepo", "--run"]) + + # We need to remove the upgradebackup + for backup_dir in glob(join(repo_main, ".hg", "upgradebackup*")): + shutil.rmtree(backup_dir, ignore_errors=True) + data = gather_repo_stats(repo_main, repo_id, repo_source) # Write data to the benchrepo file diff --git a/tests/test-make-reference.t b/tests/test-make-reference.t --- a/tests/test-make-reference.t +++ b/tests/test-make-reference.t @@ -7,7 +7,7 @@ $ export PATH=$TESTDIR/../repo-scripts/:${PATH} $ mkdir some-dir - $ hg init some-dir/my-source-repo + $ hg init some-dir/my-source-repo --config format.usegeneraldelta=False $ hg -R some-dir/my-source-repo debugbuilddag --new-file '.+5:brancha$.+11:branchb$.+30:branchc<brancha+2<branchb+2' Wrong call @@ -30,7 +30,12 @@ ----------------- $ make-reference some-dir/my-source-repo my-reference + copy of old repository backed up at $TESTTMP/my-reference-reference/.hg/upgradebackup.* (glob) + the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified hg cloning repository from: some-dir/my-source-repo + Running debugupgraderepo because of format mismatch: + generaldelta: False != True (repo/config) + sparserevlog: False != True (repo/config) building a reference tarball result available at: my-reference-reference.tar $ ls -1 @@ -165,6 +170,9 @@ my-reference-reference/.hg/store/data/nf8.i my-reference-reference/.hg/store/data/nf9.i my-reference-reference/.hg/store/fncache + my-reference-reference/.hg/store/undo + my-reference-reference/.hg/store/undo.backupfiles + my-reference-reference/.hg/store/undo.phaseroots my-reference.benchrepo update the reference