[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20221205-18-g7b11bae

Jon Turney jturney@sourceware.org
Thu Jan 12 11:37:27 GMT 2023




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',



More information about the Cygwin-apps-cvs mailing list