@@ -161,17 +161,34 @@ def add_alias(kw_uri_map: dict[str, str], keyword: str, alias: str) -> None:
161
161
uri = kw_uri_map [keyword ]
162
162
kw_uri_map [alias ] = uri
163
163
164
+ def display_map_diff (orig_kw_uri_map : dict [str , str ], kw_uri_map : dict [str , str ]) -> None :
165
+ # First check keys
166
+ for kw in sorted (orig_kw_uri_map .keys ()):
167
+ if kw not in kw_uri_map :
168
+ logging .error (f"Keyword { kw } not found in new map." )
169
+ else :
170
+ if orig_kw_uri_map [kw ] != kw_uri_map [kw ]:
171
+ logging .error (f"URI for keyword { kw } has changed. Old: { orig_kw_uri_map [kw ]} , New: { kw_uri_map [kw ]} " )
172
+ for kw in sorted (kw_uri_map .keys ()):
173
+ if kw not in orig_kw_uri_map :
174
+ logging .error (f"Keyword { kw } not found in old map." )
175
+ return
176
+
164
177
# fodt-gen-kw-uri-map
165
178
# -------------------
166
179
#
167
180
# SHELL USAGE:
168
181
#
169
- # fodt-gen-kw-uri-map --maindir=<main_dir> --keyword_dir=<keyword_dir>
182
+ # fodt-gen-kw-uri-map --maindir=<main_dir> \
183
+ # --keyword_dir=<keyword_dir> \
184
+ # --check-changed
170
185
#
171
186
# DESCRIPTION:
172
187
#
173
188
# Generates a map: KW_NAME -> URI for all keywords. The map is saved to the file
174
- # "meta/kw_uri_map.txt" in the main directory.
189
+ # "meta/kw_uri_map.txt" in the main directory. If the --check-changed option is
190
+ # given, the script will only check if the files have changed and not write the
191
+ # output file. It will return a non-zero exit code if any files have changed.
175
192
#
176
193
# EXAMPLE:
177
194
#
@@ -182,11 +199,21 @@ def add_alias(kw_uri_map: dict[str, str], keyword: str, alias: str) -> None:
182
199
@click .command ()
183
200
@ClickOptions .maindir ()
184
201
@ClickOptions .keyword_dir
185
- def gen_kw_uri_map_cli (maindir : str | None , keyword_dir : str | None ) -> None :
202
+ @click .option ('--check-changed' , is_flag = True , help = 'Check if files have changed' )
203
+ def gen_kw_uri_map_cli (maindir : str | None , keyword_dir : str | None , check_changed : bool ) -> None :
186
204
logging .basicConfig (level = logging .INFO )
187
205
keyword_dir = helpers .get_keyword_dir (keyword_dir )
188
206
maindir = helpers .get_maindir (maindir )
189
207
kw_uri_map = get_kw_uri_map (maindir , keyword_dir )
208
+ if check_changed :
209
+ orig_kw_uri_map = helpers .load_kw_uri_map (maindir )
210
+ if orig_kw_uri_map != kw_uri_map :
211
+ logging .error ("Files have changed." )
212
+ display_map_diff (orig_kw_uri_map , kw_uri_map )
213
+ exit (1 )
214
+ else :
215
+ logging .info ("Files have not changed." )
216
+ exit (0 )
190
217
with open (maindir / Directories .meta / FileNames .kw_uri_map , "w" , encoding = 'utf8' ) as f :
191
218
for kw in sorted (kw_uri_map .keys ()):
192
219
f .write (f"{ kw } { kw_uri_map [kw ]} \n " )
0 commit comments