@@ -186,6 +186,15 @@ def create_package(version: str, zonenames: Sequence[str], zoneinfo_dir: pathlib
186
186
init_file .touch ()
187
187
188
188
189
+ def get_current_package_version () -> str :
190
+ with open (PKG_BASE / "tzdata/__init__.py" , "rt" ) as f :
191
+ for line in f :
192
+ if line .startswith ("IANA_VERSION" ):
193
+ return line .split ("=" , 1 )[1 ].strip (' "\n ' )
194
+
195
+ raise ValueError ("IANA version not found!" )
196
+
197
+
189
198
def find_latest_version () -> str :
190
199
r = requests .get (IANA_LATEST_LOCATION )
191
200
fobj = io .BytesIO (r .content )
@@ -426,27 +435,54 @@ def update_news(news_entry: NewsEntry):
426
435
"--news-only/--no-news-only" ,
427
436
help = "Flag to disable data updates and only update the news entry" ,
428
437
)
438
+ @click .option (
439
+ "--skip-existing/--no-skip-existing" ,
440
+ default = True ,
441
+ help = "Whether to skip the update if we're already at the current value." ,
442
+ )
429
443
def main (
430
444
version : str | None ,
431
445
news_only : bool ,
446
+ skip_existing : bool ,
432
447
source_dir : pathlib .Path | None ,
433
448
):
434
449
logging .basicConfig (level = logging .INFO )
435
450
436
- if source_dir is not None :
437
- if version is None :
438
- logging .error (
439
- "--source-dir specified without --version: "
440
- "If using --source-dir, --version must also be used."
451
+ if skip_existing :
452
+ existing_version : str | None = get_current_package_version ()
453
+ else :
454
+ existing_version = None
455
+
456
+ if version is None or version != existing_version :
457
+ if source_dir is not None :
458
+ if version is None :
459
+ logging .error (
460
+ "--source-dir specified without --version: "
461
+ "If using --source-dir, --version must also be used."
462
+ )
463
+ sys .exit (- 1 )
464
+ download_locations : Sequence [pathlib .Path ] | None = retrieve_local_tarballs (
465
+ version , source_dir
441
466
)
442
- sys .exit (- 1 )
443
- download_locations = retrieve_local_tarballs (version , source_dir )
467
+ else :
468
+ if version is None :
469
+ version = find_latest_version ()
470
+
471
+ if version != existing_version or not skip_existing :
472
+ download_locations = download_tzdb_tarballs (version )
473
+ else :
474
+ download_locations = None
444
475
else :
445
- if version is None :
446
- version = find_latest_version ()
476
+ download_locations = None
447
477
448
- download_locations = download_tzdb_tarballs (version )
478
+ if skip_existing and version == existing_version :
479
+ logging .info (
480
+ f"Selected version { version } is identical "
481
+ f"to existing version { existing_version } ; nothing to do!"
482
+ )
483
+ sys .exit (0 )
449
484
485
+ assert download_locations is not None
450
486
tzdb_location = unpack_tzdb_tarballs (download_locations )
451
487
452
488
# Update the news entry
0 commit comments