commit:     52013b84c9bab8aaf5a7a673c566c0425f048d0e
Author:     Alfred Wingate <parona <AT> protonmail <DOT> com>
AuthorDate: Sun May 25 10:20:32 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue May 27 08:27:41 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=52013b84

net-mail/queue-repair: enable py3.13 + bump EAPI

Drop 2to3 use thanks to patch pointed to by Florian Faber.

Bug: https://bugs.gentoo.org/952605
Thanks-To: Florian Faber <faber <AT> faberman.de>
Signed-off-by: Alfred Wingate <parona <AT> protonmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/42252
Closes: https://github.com/gentoo/gentoo/pull/42252
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/queue-repair-0.9.0-python3.patch         | 244 +++++++++++++++++++++
 net-mail/queue-repair/queue-repair-0.9.0-r3.ebuild |  32 +++
 2 files changed, 276 insertions(+)

diff --git a/net-mail/queue-repair/files/queue-repair-0.9.0-python3.patch 
b/net-mail/queue-repair/files/queue-repair-0.9.0-python3.patch
new file mode 100644
index 000000000000..e3f97f7353a2
--- /dev/null
+++ b/net-mail/queue-repair/files/queue-repair-0.9.0-python3.patch
@@ -0,0 +1,244 @@
+https://bugs.gentoo.org/952605
+
+Makes qmail-repair.py compatible with python3
+Tx Tony Fung 
https://notes.sagredo.eu/en/qmail-notes-185/queue-repair-21.html#comment1506
+
+--- queue-repair-0.9.0-r3/queue_repair.py 2003-10-22 23:54:13.000000000 +0800
++++ queue-repair-0.9.0-r3/queue_repair.py.new 2020-01-17 18:21:18.834455813 
+0800
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ '''queue_repair.py - qmail tools in Python.
+ Copyright (C) 2001 Charles Cazabon 
+ 
+@@ -66,24 +66,24 @@
+     #   key: pathname - all paths are relative to conf-qmail
+     #   data: (user, group, mode, split)
+     #       split is:  0 : no, 1 : yes, -1 : only with big-todo
+-    'queue' :           ('qmailq', 'qmail', 0750, 0),
+-    'queue/bounce' :    ('qmails', 'qmail', 0700, 0),
+-    'queue/info' :      ('qmails', 'qmail', 0700, 1),
+-    'queue/intd' :      ('qmailq', 'qmail', 0700, -1),
+-    'queue/local' :     ('qmails', 'qmail', 0700, 1),
+-    'queue/lock' :      ('qmailq', 'qmail', 0750, 0),
+-    'queue/mess' :      ('qmailq', 'qmail', 0750, 1),
+-    'queue/pid' :       ('qmailq', 'qmail', 0700, 0),
+-    'queue/remote' :    ('qmails', 'qmail', 0700, 1),
+-    'queue/todo' :      ('qmailq', 'qmail', 0750, -1),
++    'queue' :           ('qmailq', 'qmail', 0o750, 0),
++    'queue/bounce' :    ('qmails', 'qmail', 0o700, 0),
++    'queue/info' :      ('qmails', 'qmail', 0o700, 1),
++    'queue/intd' :      ('qmailq', 'qmail', 0o700, -1),
++    'queue/local' :     ('qmails', 'qmail', 0o700, 1),
++    'queue/lock' :      ('qmailq', 'qmail', 0o750, 0),
++    'queue/mess' :      ('qmailq', 'qmail', 0o750, 1),
++    'queue/pid' :       ('qmailq', 'qmail', 0o700, 0),
++    'queue/remote' :    ('qmails', 'qmail', 0o700, 1),
++    'queue/todo' :      ('qmailq', 'qmail', 0o750, -1),
+ }
+ 
+ nondirs = {
+     # Files to check; format is:
+     #   key: pathname - all paths are relative to conf-qmail
+     #   data: (user, group, mode)
+-    'queue/lock/sendmutex' :    ('qmails', 'qmail', 0600),
+-    'queue/lock/tcpto' :        ('qmailr', 'qmail', 0644),
++    'queue/lock/sendmutex' :    ('qmails', 'qmail', 0o600),
++    'queue/lock/tcpto' :        ('qmailr', 'qmail', 0o644),
+ }
+ 
+ 
+@@ -105,7 +105,7 @@
+     while i <= max:
+         for p in primelist:
+             if (i % p == 0) or (p * p > i): break
+-        if (i % p <> 0):
++        if (i % p != 0):
+             primelist.append(i)
+             if i >= min:
+                 result.append(i)
+@@ -151,8 +151,8 @@
+     '''
+     global users, groups
+     msg('finding qmail UIDs/GIDs...')
+-    us = users.keys()
+-    gs = groups.keys()
++    us = list(users.keys())
++    gs = list(groups.keys())
+     for u in us:
+         if users[u]:
+             # Handle case of someone else determining UIDs for us
+@@ -182,7 +182,7 @@
+     that it has octal mode mode.  If testmode is set, create path if it
+     doesn't exist.
+     '''
+-    if checked_dir.has_key(path):
++    if path in checked_dir:
+         return
+     msg('  checking directory %s...' % path)
+     if not os.path.exists(path):
+@@ -208,7 +208,7 @@
+ 
+     Verify path is owned by user:group, and make it so if testmode is not set.
+     '''
+-    if checked_owner.has_key(path):
++    if path in checked_owner:
+         return
+     uid = users[user]
+     gid = groups[group]
+@@ -223,7 +223,7 @@
+                 msg('  fixed, %s ownership %i:%i' % (path, s[ST_UID], 
s[ST_GID]))
+             else:
+                 msg('  testmode, not fixing')
+-    except OSError, o:
++    except OSError as o:
+         err(o or '[no error message]')
+     checked_owner[path] = None
+ 
+@@ -233,7 +233,7 @@
+ 
+     Verify path has mode mode, and make it so if testmode is not set.
+     '''
+-    if checked_mode.has_key(path):
++    if path in checked_mode:
+         return
+     try:
+         s = os.stat(path)
+@@ -247,7 +247,7 @@
+                 msg('  changed %s mode to %o' % (path, newmode))
+             else:
+                 msg('  testmode, not fixing')
+-    except OSError, o:
++    except OSError as o:
+         err(o or '[no error message]')
+     checked_mode[path] = None
+ 
+@@ -259,7 +259,7 @@
+     '''
+     splits = []
+     msg('determining conf-split...')
+-    for (path, (user, group, mode, is_split)) in dirs.items():
++    for (path, (user, group, mode, is_split)) in list(dirs.items()):
+         if is_split != 1:
+             continue
+         highest = 0
+@@ -311,7 +311,7 @@
+         else:
+             msg('  found unexpected direntry %s' % p)
+ 
+-    if splits == range(split):
++    if splits == list(range(split)):
+         # big-todo apparently in use
+         bigtodo = 1
+         msg('  big-todo found')
+@@ -330,14 +330,14 @@
+     Verify ownership, mode, and contents of each queue directory in paths.
+     '''
+     msg('checking main queue directories...')
+-    _dirs = paths.keys()
++    _dirs = list(paths.keys())
+     _dirs.sort()
+     for path in _dirs:
+         (user, group, mode, is_split) = paths[path]
+         check_dir(path, user, group, mode)
+ 
+     msg('checking split sub-directories...')
+-    for (path, (user, group, mode, is_split)) in paths.items():
++    for (path, (user, group, mode, is_split)) in list(paths.items()):
+         if path in ('queue', 'queue/lock'):
+             # Nothing in these directories to check at this point
+             continue
+@@ -345,7 +345,7 @@
+         if not this_split:
+             splits = []
+         else:
+-            splits = range(split)
++            splits = list(range(split))
+             for i in splits:
+                 splitpath = os.path.join(path, str(i))
+                 check_dir(splitpath, user, group, mode)
+@@ -428,7 +428,7 @@
+     Verify ownership and mode of each queue file in paths.
+     '''
+     msg('checking files...')
+-    for (path, (user, group, mode)) in paths.items():
++    for (path, (user, group, mode)) in list(paths.items()):
+         if os.path.exists(path):
+             if not os.path.isfile(path):
+                 msg('  %s is not a file' % path)
+@@ -467,7 +467,7 @@
+     if not os.path.exists(path) and not testmode:
+         os.mkfifo(path)
+     chown(path, user, group)
+-    chmod(path, 0622)
++    chmod(path, 0o622)
+ 
+ #######################################
+ def check_messages(path, split):
+@@ -516,7 +516,7 @@
+     check_messages().  Correct split sub-directory location as well.
+     '''
+     msg('fixing misnamed messages...')
+-    for (path, (user, junk, junk, is_split)) in paths.items():
++    for (path, (user, junk, junk, is_split)) in list(paths.items()):
+         for (oldhash, oldno, newno) in misnamed:
+             if not is_splitdir(is_split, bigtodo):
+                 old_p = os.path.join(path, str(oldno))
+@@ -544,17 +544,17 @@
+     of all files found.
+     '''
+     msg('checking split locations...')
+-    for (path, (user, group, junk, is_split)) in paths.items():
++    for (path, (user, group, junk, is_split)) in list(paths.items()):
+         if path in ('queue', 'queue/lock'):
+             # Nothing in these directories to check at this point
+             continue
+         elif path in ('queue/mess', 'queue/todo'):
+-            mode = 0644
++            mode = 0o644
+         else:
+-            mode = 0600
++            mode = 0o600
+         this_split = is_splitdir(is_split, bigtodo)
+         if this_split:
+-            splits = range(split)
++            splits = list(range(split))
+         else:
+             splits = ['']
+         for splitval in splits:
+@@ -635,7 +635,7 @@
+     wd = os.getcwd()
+     try:
+         os.chdir(qmaildir)
+-    except StandardError:
++    except Exception:
+         err('failed to chdir to %s' % qmaildir)
+ 
+     if testmode:
+@@ -747,7 +747,7 @@
+                     if force_split < 1:
+                         raise ValueError
+                 except ValueError:
+-                    raise getopt.error, 'split value must be a positive 
integer (%s)' % value
++                    raise getopt.error('split value must be a positive 
integer (%s)' % value)
+             elif option in ('-n', '--no-bigtodo'):
+                 force_bigtodo = -1
+             elif option in ('-b', '--bigtodo'):
+@@ -765,10 +765,10 @@
+                 create = 1
+         if args:
+             if len(args) > 1:
+-                raise getopt.error, 'conf-qmail must be a single argument 
(%s)' % string.join(args)
++                raise getopt.error('conf-qmail must be a single argument 
(%s)' % string.join(args))
+             qmaildir = args[0]
+ 
+-    except getopt.error, o:
++    except getopt.error as o:
+         err('Error:  %s' % o, showhelp=1)
+ 
+     check_queue(qmaildir, test, force_split, force_bigtodo, create, 
mathishard)
+@@ -776,3 +776,4 @@
+ #######################################
+ if __name__ == '__main__':
+     main()
++

diff --git a/net-mail/queue-repair/queue-repair-0.9.0-r3.ebuild 
b/net-mail/queue-repair/queue-repair-0.9.0-r3.ebuild
new file mode 100644
index 000000000000..5994c4a0e98f
--- /dev/null
+++ b/net-mail/queue-repair/queue-repair-0.9.0-r3.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..13} )
+inherit python-single-r1
+
+DESCRIPTION="Toolkit for dealing with the qmail queue directory structure"
+HOMEPAGE="https://pyropus.ca/software/queue-repair/";
+SRC_URI="https://pyropus.ca/software/queue-repair/${P}.tar.gz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~m68k ~mips ~ppc ~ppc64 ~s390 ~sparc 
~x86"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RESTRICT="test" # no tests
+
+RDEPEND="${PYTHON_DEPS}"
+DEPEND="${RDEPEND}"
+
+DOCS=( BLURB TODO CHANGELOG )
+
+PATCHES=(
+       "${FILESDIR}"/queue-repair-0.9.0-python3.patch
+)
+
+src_install() {
+       python_newscript queue_repair.py queue-repair.py
+       dosym queue-repair.py /usr/bin/queue-repair
+       einstalldocs
+}

Reply via email to