# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1548436896 18000
#      Fri Jan 25 12:21:36 2019 -0500
# Node ID 039688ae2325e9573a50bdfc6d5d88a84d3b8a76
# Parent  9462b14569817f095344e8013a838333f5ab5e10
Add `--optimize` flag to make-reference

diff --git a/repo-scripts/make-reference b/repo-scripts/make-reference
--- a/repo-scripts/make-reference
+++ b/repo-scripts/make-reference
@@ -25,6 +25,12 @@
     parser = argparse.ArgumentParser()
     parser.add_argument("source")
     parser.add_argument("id")
+    parser.add_argument(
+        "--optimize",
+        help="Run extra optimization through debugupgraderepo before archiving",
+        nargs="+",
+    )
+
     args = parser.parse_args(args)
 
     repo_source = args.source
@@ -58,13 +64,24 @@
     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))
+    if len(mismatch) > 0 or args.optimize:
+        if not args.optimize:
+            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"])
+            shell_exec(["hg", "-R", repo_main, "debugupgraderepo", "--run"])
+        else:
+            print("Running `debugupgraderepo` with requested optimizations:")
+            print("\t{0}".format(", ".join(args.optimize)))
+            cmd = ["hg", "-R", repo_main, "debugupgraderepo", "--run"]
+
+            for optimization in args.optimize:
+                cmd.append("-o")
+                cmd.append(optimization)
+
+            shell_exec(cmd)
 
         # We need to remove the upgradebackup
         for backup_dir in glob(join(repo_main, ".hg", "upgradebackup*")):
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
@@ -14,15 +14,15 @@
 ----------
 
   $ make-reference
-  usage: make-reference [-h] source id
+  usage: make-reference [-h] [--optimize OPTIMIZE [OPTIMIZE ...]] source id
   make-reference: error: too few arguments
   [2]
   $ make-reference some-dir/my-source-repo
-  usage: make-reference [-h] source id
+  usage: make-reference [-h] [--optimize OPTIMIZE [OPTIMIZE ...]] source id
   make-reference: error: too few arguments
   [2]
   $ make-reference my-id
-  usage: make-reference [-h] source id
+  usage: make-reference [-h] [--optimize OPTIMIZE [OPTIMIZE ...]] source id
   make-reference: error: too few arguments
   [2]
 
@@ -206,8 +206,10 @@
   > EOF
   $ chmod +x editor.sh
   $ EDITOR=$PWD/editor.sh update-reference-config my-reference-reference.tar
+
   $ mkdir dst
   $ cd dst
+
   $ tar xf ../my-reference-reference.tar my-reference.benchrepo
   $ cat my-reference.benchrepo
   reference-repo:
@@ -231,3 +233,50 @@
       all: 53
       visible: 53
     source: some-dir/my-other-source-repo
+  $ cd ..
+
+Call from scratch with explicit optimization
+--------------------------------------------
+
+  $ rm -rf my-reference.benchrepo my-reference-reference.tar my-reference-reference
+  $ ls -1
+  dst
+  editor.sh
+  some-dir
+  $ make-reference some-dir/my-source-repo my-reference --optimize re-delta-parent re-delta-multibase
+  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` with requested optimizations:
+  	re-delta-parent, re-delta-multibase
+  building a reference tarball
+  result available at: my-reference-reference.tar
+  $ ls -1
+  dst
+  editor.sh
+  my-reference-reference
+  my-reference-reference.tar
+  my-reference.benchrepo
+  some-dir
+  $ cat my-reference.benchrepo
+  reference-repo:
+    enabled: true
+    format-info:
+      compression: zlib
+      dotencode: true
+      fncache: true
+      generaldelta: true
+      plain-cl-delta: true
+      sparserevlog: true
+    hg-version: * (glob)
+    id: my-reference
+    number-heads:
+      all: 3
+      visible: 3
+    number-named-branch:
+      all: 1
+      visible: 1
+    number-revisions:
+      all: 53
+      visible: 53
+    source: some-dir/my-source-repo