From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2201) id F34A43858D1E; Sun, 31 Mar 2024 14:45:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F34A43858D1E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1711896356; bh=dcOun1nLi6xeMLZ/h31AxsRgyeTViq0O35YIx+80fb8=; h=To:Subject:Date:From:From; b=AYxT90U0+ksnrbaNs2GqxSx9yQ+zObyBcbleWqVkh3glhyp3N0Bb9v0qh5cxkB56v QCWCK5c5F7korvbRYPZoWTPRVcKh06h5hzSiflC8dRkhgUYiJzBeDESq6F6zlzP66K i/3oH8Utp6gK2Tb5Ruf6s9PdMEC9+HURyG92Owis= To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20230209-79-g886e9b7 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 10a4242d26b1fc7c54b9aab8d2d14209fed38e73 X-Git-Newrev: 886e9b7b74ccfa0d70faf14f4eca90a29dd6ce16 Message-Id: <20240331144555.F34A43858D1E@sourceware.org> Date: Sun, 31 Mar 2024 14:45:55 +0000 (GMT) From: Jon Turney List-Id: https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=886e9b7b74ccfa0d70faf14f4eca90a29dd6ce16 commit 886e9b7b74ccfa0d70faf14f4eca90a29dd6ce16 Author: Jon Turney Date: Sun Mar 31 15:24:29 2024 +0100 Expire python34 left-overs https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=27a2ad89d1a7be564ae4e8965b6c3dd087c04499 commit 27a2ad89d1a7be564ae4e8965b6c3dd087c04499 Author: Jon Turney Date: Sat Mar 30 20:20:08 2024 +0000 Ignore InotifyError exceptions https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=56719ceaa0ce8dba4d7d2a24430fd697909fe0ef commit 56719ceaa0ce8dba4d7d2a24430fd697909fe0ef Author: Jon Turney Date: Wed Mar 27 13:46:56 2024 +0000 Only consider files in fix-requires-by-path This makes it practical to use complex regex e.g. ending with a negative lookahead. Diff: --- calm/calm.py | 51 ++++++++++++++++++++++++-------------------- calm/fix-requires-by-path.py | 8 +++++-- calm/package.py | 7 +++--- calm/past_mistakes.py | 3 +-- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/calm/calm.py b/calm/calm.py index cf4e397..ab118ee 100755 --- a/calm/calm.py +++ b/calm/calm.py @@ -745,29 +745,34 @@ def do_daemon(args, state): saw_events = False depth = args.rel_area.count(os.path.sep) + 1 - # It would be nice to use inotify.adaptor's timeout feature so - # we go at least a few seconds without events, to ensure that we - # don't start processing in the middle of a flurry of events. - # Unfortunately, that goes back to waiting for the full - # block_duration_s if timeout hasn't expired... - for event in i.event_gen(yield_nones=True): - if event is not None: - logging.debug("inotify event %s" % str(event)) - saw_events = True - (_, type_names, path, filename) = event - if path.startswith(args.rel_area): - # ignore sha512.sum and modifications to setup.* - # files in the arch directory - if (filename != 'sha512.sum') and ((path.count(os.path.sep) > depth) or filename == ".touch"): - action |= Event.read_relarea - elif path.startswith(args.stagingdir): - action |= Event.read_uploads - elif (path.startswith(args.homedir)) and (filename == "!ready"): - action |= Event.read_uploads - else: - # None means no more events are currently available, so - # break to process actions - break + try: + # It would be nice to use inotify.adaptor's timeout feature so + # we go at least a few seconds without events, to ensure that we + # don't start processing in the middle of a flurry of events. + # Unfortunately, that goes back to waiting for the full + # block_duration_s if timeout hasn't expired... + for event in i.event_gen(yield_nones=True): + if event is not None: + logging.debug("inotify event %s" % str(event)) + saw_events = True + (_, type_names, path, filename) = event + if path.startswith(args.rel_area): + # ignore sha512.sum and modifications to setup.* + # files in the arch directory + if (filename != 'sha512.sum') and ((path.count(os.path.sep) > depth) or filename == ".touch"): + action |= Event.read_relarea + elif path.startswith(args.stagingdir) and (filename != 'tmp'): + action |= Event.read_uploads + elif (path.startswith(args.homedir)) and (filename == "!ready"): + action |= Event.read_uploads + else: + # None means no more events are currently available, so + # break to process actions + break + except inotify.calls.InotifyError: + # can occur if a just created directory is (re)moved before + # we set a watch on it + pass if not saw_events: if time.time() > next_scan_time: diff --git a/calm/fix-requires-by-path.py b/calm/fix-requires-by-path.py index 4fa9e65..0efe087 100644 --- a/calm/fix-requires-by-path.py +++ b/calm/fix-requires-by-path.py @@ -42,6 +42,10 @@ from . import hint def fix_one_hint(args, dirpath, hintfile, tf): pn = os.path.join(dirpath, hintfile) + # avoid pointlessly checking to add a self-dependency + if pn == args.requires: + return + hints = hint.hint_file_parse(pn, hint.pvr) hints.pop('parse-warnings', None) @@ -57,13 +61,13 @@ def fix_one_hint(args, dirpath, hintfile, tf): if args.requires in requires: return - # check if this package installs anything with the specified path, and if + # check if this package installs any files with the specified path, and if # so, add to the requires, if not already present ivp = False try: with xtarfile.open(os.path.join(dirpath, tf), mode='r') as a: - ivp = any(re.match(args.path, m) for m in a.getnames()) + ivp = any((m.isfile() and re.match(args.path, m.name)) for m in a.getmembers()) except tarfile.ReadError: pass diff --git a/calm/package.py b/calm/package.py index 3b530cb..860bc64 100755 --- a/calm/package.py +++ b/calm/package.py @@ -1636,10 +1636,9 @@ def mark_fn(packages, po, v, certain_age, vault_requests): # - if package depends on anything in expired_provides # requires = po.version_hints[v].get('depends', '').split(', ') - if re.match(r'^python(|2|27)[-_]', pn): - if any(ep in requires for ep in past_mistakes.expired_provides) or po.obsolete: - logging.debug("package '%s' version '%s' not retained as it requires a provide known to be expired" % (pn, v)) - return Freshness.stale + if any(ep in requires for ep in past_mistakes.expired_provides): + logging.debug("package '%s' version '%s' not retained as it requires a provide known to be expired" % (pn, v)) + return Freshness.conditional # - explicitly marked as 'noretain' # diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py index e1bef6b..7f4e8ea 100644 --- a/calm/past_mistakes.py +++ b/calm/past_mistakes.py @@ -256,8 +256,7 @@ substitute_dependency = { # provides: which don't exist and packages which require them should be expired expired_provides = [ - 'python2', - 'python27', + 'python34', ] # empty source packages