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 +}
