public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
* [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20221205-18-g7b11bae
@ 2023-01-12 11:37 Jon Turney
0 siblings, 0 replies; only message in thread
From: Jon Turney @ 2023-01-12 11:37 UTC (permalink / raw)
To: cygwin-apps-cvs
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=7b11bae1275bc54f19ea6bfe9aeebdb8049a2cfd
commit 7b11bae1275bc54f19ea6bfe9aeebdb8049a2cfd
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Wed Jan 11 15:35:06 2023 +0000
Add 'python26' to non-existent provide list
(since we're going to annotate python26 dependent packages which are
missing that, to facilitate their removal)
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=f05c6de0aa72603732cfab724e74874b46e805b0
commit f05c6de0aa72603732cfab724e74874b46e805b0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Wed Jan 11 13:09:34 2023 +0000
Add a more generic 'add requires based on paths in package' tool
Diff:
---
calm/fix-requires-by-path.py | 124 +++++++++++++++++++++++++++++++++++++++++++
calm/past_mistakes.py | 1 +
2 files changed, 125 insertions(+)
diff --git a/calm/fix-requires-by-path.py b/calm/fix-requires-by-path.py
new file mode 100644
index 0000000..19b2f71
--- /dev/null
+++ b/calm/fix-requires-by-path.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2023 Jon Turney
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+import argparse
+import logging
+import os
+import re
+import shutil
+import sys
+import tarfile
+
+import xtarfile
+
+from . import common_constants
+from . import hint
+
+#
+#
+#
+
+
+def fix_one_hint(args, dirpath, hintfile, tf):
+ pn = os.path.join(dirpath, hintfile)
+
+ hints = hint.hint_file_parse(pn, hint.pvr)
+
+ hints.pop('parse-warnings', None)
+ if 'parse-errors' in hints:
+ logging.error('invalid hints %s' % hintfile)
+ return
+
+ modified = False
+
+ requires = hints.get('requires', '').split()
+ if requires:
+ # requires is already present?
+ if args.requires in requires:
+ return
+
+ # check if this package installs anything 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(m.startswith(args.path) for m in a.getnames())
+ except tarfile.ReadError:
+ pass
+
+ if ivp:
+ requires = hints.get('requires', '').split()
+ if args.requires not in requires:
+ requires.append(args.requires)
+ requires = sorted(requires)
+ modified = True
+ logging.warning("adding %s to requires in %s" % (args.requires, hintfile))
+ hints['requires'] = ' '.join(requires)
+
+ if not modified:
+ return
+
+ # write updated hints
+ shutil.copy2(pn, pn + '.bak')
+ hint.hint_file_write(pn, hints)
+ # os.system('/usr/bin/diff -uBZ %s %s' % (pn + '.bak', pn))
+
+
+def fix_hints(args):
+ for (dirpath, _subdirs, files) in os.walk(args.relarea):
+ for f in files:
+ match = re.match(r'^([^-].*?)\.tar' + common_constants.PACKAGE_COMPRESSIONS_RE + r'$', f)
+ if match:
+ root = match.group(1)
+ if root.endswith('-src'):
+ continue
+
+ fix_one_hint(args, dirpath, root + '.hint', f)
+
+#
+#
+#
+
+
+if __name__ == "__main__":
+ relarea_default = common_constants.FTP
+
+ parser = argparse.ArgumentParser(description='Add DEPATOM to requires: of packages which contain a file starting with PATH')
+ parser.add_argument('path', metavar='PATH', help='path to match')
+ parser.add_argument('requires', metavar='DEPATOM', help='require to add')
+ parser.add_argument('-v', '--verbose', action='count', dest='verbose', help='verbose output', default=0)
+ parser.add_argument('--releasearea', action='store', metavar='DIR', help="release directory (default: " + relarea_default + ")", default=relarea_default, dest='relarea')
+ (args) = parser.parse_args()
+
+ if not args.path.startswith('/'):
+ sys.exit('must use an absolute path')
+ else:
+ args.path = args.path[1:]
+
+ if args.verbose:
+ logging.getLogger().setLevel(logging.INFO)
+
+ logging.basicConfig(format=os.path.basename(sys.argv[0]) + ': %(message)s')
+
+ fix_hints(args)
diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py
index 08885ec..0a56340 100644
--- a/calm/past_mistakes.py
+++ b/calm/past_mistakes.py
@@ -156,6 +156,7 @@ missing_obsolete = {
nonexistent_provides = [
'_windows',
'perl5_026',
+ 'python26',
'rdiff-debuginfo',
'rxvt-unicode-X-debuginfo',
'xfce4-mixer-debuginfo',
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-01-12 11:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-12 11:37 [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20221205-18-g7b11bae Jon Turney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).