a oek @spdZddlZddlZddlmZddlmZddlm Z ddZ d d Z e fd d Z dddZ eje e dZdS)z2Timestamp comparison of files and groups of files.N)DistutilsFileError) zip_strict)splatcCs&tj| p$tj|tj|kSN)ospathexistsgetmtimesourcetargetr@C:\Program Files\Certbot\pkgs\setuptools\_distutils\_modified.py_newer srcCs*tj|s tdtj|t||S)z Is source modified more recently than target. Returns True if 'source' is modified more recently than 'target' or if 'target' does not exist. Raises DistutilsFileError if 'source' does not exist. zfile '%s' does not exist)rrr rabspathrr rrrnewers rcCs.tt|t||}tttt|p,ggfS)a1 Filter filenames where sources are newer than targets. Walk two filename iterables in parallel, testing if each source is newer than its corresponding target. Returns a pair of lists (sources, targets) where source is newer than target, according to the semantics of 'newer()'. )filterrrtuplemaplistzip)sourcestargetsrZ newer_pairsrrrnewer_pairwise s rerrorcs>fdddkrtjjnd}tfddt||DS)a Is target out-of-date with respect to any file in sources. Return True if 'target' is out-of-date with respect to any file listed in 'sources'. In other words, if 'target' exists and is newer than every file in 'sources', return False; otherwise return True. ``missing`` controls how to handle a missing source file: - error (default): allow the ``stat()`` call to fail. - ignore: silently disregard any missing source files. - newer: treat missing source files as "target out of date". This mode is handy in "dry-run" mode: it will pretend to carry out commands that wouldn't work because inputs are missing, but that doesn't matter because dry-run won't run the commands. csdkotj| S)Nr)rrr )r )missingrrmissing_as_newer>sz%newer_group..missing_as_newerignoreNc3s |]}|pt|VqdSr)r).0r )rr rr Bsznewer_group..)rrr anyr)rr rZignoredr)rrr r newer_group-s  r")r)r)__doc__ functoolsZos.pathrerrorsrZ py39compatr _functoolsrrrrr"partialZnewer_pairwise_grouprrrrs