1diff --git a/aab/builder.py b/aab/builder.py
2index 5c3805c..7dfe595 100644
3--- a/aab/builder.py
4+++ b/aab/builder.py
5@@ -77,7 +77,7 @@ class AddonBuilder:
6 self._config = Config()
7 self._path_dist_module = PATH_DIST / "src" / self._config["module_name"]
8
9- def build(self, qt_versions: List[QtVersion], disttype="local", pyenv=None):
10+ def build(self, qt_versions: List[QtVersion], disttype="local", pyenv=None, modtime=None):
11 logging.info(
12 "\n--- Building %s %s for %s ---\n",
13 self._config["display_name"],
14@@ -86,7 +86,7 @@ class AddonBuilder:
15 )
16
17 self.create_dist()
18- self.build_dist(qt_versions=qt_versions, disttype=disttype, pyenv=pyenv)
19+ self.build_dist(qt_versions=qt_versions, disttype=disttype, pyenv=pyenv, modtime=modtime)
20
21 return self.package_dist(qt_versions=qt_versions, disttype=disttype)
22
23@@ -102,7 +102,7 @@ class AddonBuilder:
24 PATH_DIST.mkdir(parents=True)
25 Git().archive(self._version, PATH_DIST)
26
27- def build_dist(self, qt_versions: List[QtVersion], disttype="local", pyenv=None):
28+ def build_dist(self, qt_versions: List[QtVersion], disttype="local", pyenv=None, modtime=None):
29 self._copy_licenses()
30 if self._path_changelog.exists():
31 self._copy_changelog()
32@@ -111,7 +111,7 @@ class AddonBuilder:
33 if self._callback_archive:
34 self._callback_archive()
35
36- self._write_manifest(disttype)
37+ self._write_manifest(disttype, modtime=modtime)
38
39 ui_builder = UIBuilder(dist=PATH_DIST, config=self._config)
40
41@@ -162,12 +162,13 @@ class AddonBuilder:
42
43 return out_path
44
45- def _write_manifest(self, disttype):
46+ def _write_manifest(self, disttype, modtime=None):
47 ManifestUtils.generate_and_write_manifest(
48 addon_properties=self._config,
49 version=self._version,
50 dist_type=disttype,
51 target_dir=self._path_dist_module,
52+ modtime=modtime,
53 )
54
55 def _copy_licenses(self):
56diff --git a/aab/cli.py b/aab/cli.py
57index 2ce6425..0956e98 100644
58--- a/aab/cli.py
59+++ b/aab/cli.py
60@@ -89,7 +89,7 @@ def build(args):
61 total = len(dists)
62 for dist in dists:
63 logging.info("\n=== Build task %s/%s ===", cnt, total)
64- builder.build(qt_versions=qt_versions, disttype=dist)
65+ builder.build(qt_versions=qt_versions, disttype=dist, modtime=args.modtime)
66 cnt += 1
67
68
69@@ -146,7 +146,7 @@ def build_dist(args):
70 total = len(dists)
71 for dist in dists:
72 logging.info("\n=== Build task %s/%s ===", cnt, total)
73- builder.build_dist(qt_versions=qt_versions, disttype=dist)
74+ builder.build_dist(qt_versions=qt_versions, disttype=dist, modtime=args.modtime)
75 cnt += 1
76
77
78@@ -204,6 +204,12 @@ def construct_parser():
79 default="local",
80 choices=["local", "ankiweb", "all"],
81 )
82+ dist_parent.add_argument(
83+ "--modtime",
84+ help="Last modified timestamp",
85+ type=int,
86+ required=False,
87+ )
88
89 build_parent = argparse.ArgumentParser(add_help=False)
90 build_parent.add_argument(
91diff --git a/aab/manifest.py b/aab/manifest.py
92index fc0038d..355e370 100644
93--- a/aab/manifest.py
94+++ b/aab/manifest.py
95@@ -49,10 +49,11 @@ class ManifestUtils:
96 version: str,
97 dist_type: DistType,
98 target_dir: Path,
99+ modtime=None,
100 ):
101 logging.info("Writing manifest...")
102 manifest = cls.generate_manifest_from_properties(
103- addon_properties=addon_properties, version=version, dist_type=dist_type
104+ addon_properties=addon_properties, version=version, dist_type=dist_type, modtime=modtime
105 )
106 cls.write_manifest(manifest=manifest, target_dir=target_dir)
107
108@@ -62,6 +63,7 @@ class ManifestUtils:
109 addon_properties: Config,
110 version: str,
111 dist_type: DistType,
112+ modtime=None,
113 ) -> Dict[str, Any]:
114 manifest = {
115 "name": addon_properties["display_name"],
116@@ -71,7 +73,7 @@ class ManifestUtils:
117 "version": version,
118 "homepage": addon_properties.get("homepage", ""),
119 "conflicts": deepcopy(addon_properties["conflicts"]),
120- "mod": Git().modtime(version),
121+ "mod": modtime if modtime is not None else Git().modtime(version),
122 }
123
124 # Add version specifiers: