Merge "update_permalink.py: Support state versions back to v15 (2022-04)"
diff --git a/python/tools/update_permalink.py b/python/tools/update_permalink.py
index a6e8fab..56250fe 100755
--- a/python/tools/update_permalink.py
+++ b/python/tools/update_permalink.py
@@ -14,6 +14,65 @@
 CURRENT_STATE_VERSION = 28
 
 
+def upgrade_15(old):
+  new = copy.deepcopy(old)
+  new["version"] = 16
+  new["flamegraphModalDismissed"] = False
+  return new
+
+
+def upgrade_16(old):
+  new = copy.deepcopy(old)
+  new["version"] = 17
+  new["nextId"] = max(old["nextId"], old["nextNoteId"], old["nextAreaId"])
+  engines = old["engines"]
+  if len(engines) > 0:
+    new["currentEngineId"] = list(engines.values())[0]['id']
+  return new
+
+
+def upgrade_17(old):
+  new = copy.deepcopy(old)
+  new["version"] = 18
+  # TODO(hjd): Update
+  return new
+
+
+def upgrade_18(old):
+  new = copy.deepcopy(old)
+  new["version"] = 19
+  # TODO(hjd): Update
+  return new
+
+
+def upgrade_19(old):
+  new = copy.deepcopy(old)
+  new["version"] = 20
+  # TODO(hjd): Update
+  return new
+
+
+def upgrade_20(old):
+  new = copy.deepcopy(old)
+  new["version"] = 21
+  # TODO(hjd): Update
+  return new
+
+
+def upgrade_20(old):
+  new = copy.deepcopy(old)
+  new["version"] = 22
+  # TODO(hjd): Update
+  return new
+
+
+def upgrade_21(old):
+  new = copy.deepcopy(old)
+  new["version"] = 22
+  # TODO(hjd): Update
+  return new
+
+
 def upgrade_22(old):
   new = copy.deepcopy(old)
   new["version"] = 23
@@ -121,6 +180,8 @@
       "--target-version",
       help=f"Target state version (default: {CURRENT_STATE_VERSION})",
       default=CURRENT_STATE_VERSION)
+  parser.add_argument(
+      "--verbose", help=f"Show debug information", action="store_true")
   args = parser.parse_args()
 
   permalink_url = args.permalink
@@ -132,7 +193,16 @@
   old_state_version = old_json["version"]
   new_state_version = args.target_version
 
+  print(json.dumps(old_json, sort_keys=True, indent=4))
+
   UPGRADE = {
+      15: upgrade_15,
+      16: upgrade_16,
+      17: upgrade_17,
+      18: upgrade_18,
+      19: upgrade_19,
+      20: upgrade_20,
+      21: upgrade_21,
       22: upgrade_22,
       23: upgrade_23,
       24: upgrade_24,