diff --git a/suites/hg/scheduling/auto-cases b/suites/hg/scheduling/auto-cases
index 3efd226a6787695369d8fb1997abb68d27880479_c3VpdGVzL2hnL3NjaGVkdWxpbmcvYXV0by1jYXNlcw==..617cfa829add86f337868c1baeb2779caeb36b1f_c3VpdGVzL2hnL3NjaGVkdWxpbmcvYXV0by1jYXNlcw== 100755
--- a/suites/hg/scheduling/auto-cases
+++ b/suites/hg/scheduling/auto-cases
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 
 from pathlib import Path
+import functools
 import itertools
 import os
 import random
@@ -72,6 +73,7 @@
     return variants
 
 
+@functools.lru_cache(maxsize=100)
 def list_mercurial_hashes(base_dir, interval="all()"):
     """return a list of possible mercurial hashes"""
     repo_dir = mercurial_repository_path(base_dir)
@@ -86,7 +88,7 @@
         interval,
     ]
     p = subprocess.run(cmd, stdout=subprocess.PIPE, encoding="utf8")
-    return p.stdout.splitlines()
+    return set(p.stdout.splitlines())
 
 
 def list_data_envs(base_dir):
@@ -188,7 +190,7 @@
 
     mercurial_intervals = PY_VERSION_COMPATIBILITY.get(python_version, "all()")
 
-    hashes = list_mercurial_hashes(base_dir, mercurial_intervals)
+    hashes = list(list_mercurial_hashes(base_dir, mercurial_intervals))
     datas = list_data_envs(base_dir)
     datas = [(data_env_lib.get_data_env(data_dir / d), d) for d in datas]
     benchmarks = list_benchmarks(base_dir)