Diff:
---
calm/calm.py | 61 +++++++++++++++++++++++++++++++++++++--------------
calm/db.py | 20 ++++++++++++-----
calm/past_mistakes.py | 9 +-------
calm/vault.py | 2 +-
test/test_calm.py | 2 ++
5 files changed, 63 insertions(+), 31 deletions(-)
diff --git a/calm/calm.py b/calm/calm.py
index 82f460c..86336f7 100755
--- a/calm/calm.py
+++ b/calm/calm.py
@@ -119,20 +119,14 @@ def process_relarea(args, state):
return None
# packages can be stale due to changes made directly in the release
- # area, so first check here if there are any stale packages to vault
+ # area, or vault requests, so first check here if there are any stale
+ # packages to vault
if args.stale:
- fresh_packages = copy.deepcopy(packages)
-
- stale_to_vault = remove_stale_packages(args, fresh_packages, state)
- if stale_to_vault is not None:
- logging.info("vaulting %d old package(s)" % (len(stale_to_vault)))
- stale_to_vault.move_to_vault(args)
- else:
+ packages = remove_stale_packages(args, packages, state)
+ if packages is None:
logging.error("error while evaluating stale packages")
return None
- packages = fresh_packages
-
# clean up any empty directories
if not args.dryrun:
utils.rmemptysubdirs(args.rel_area)
@@ -362,7 +356,7 @@ def _process_maintainer_uploads(scan_result, args, state,
all_packages, m, based
# check for packages which are stale as a result of this upload,
# which we will want in the same report
if args.stale:
- stale_to_vault = remove_stale_packages(args, merged_packages, state)
+ stale_to_vault = identify_stale_packages(args, merged_packages, state)
# if an error occurred ...
if stale_to_vault is None:
@@ -431,25 +425,60 @@ def process(args, state):
#
-# remove stale packages
+# identify and remove stale packages
#
def remove_stale_packages(args, packages, state):
- vault_requests = db.vault_requests(args)
+ # first do other removal reasons
+ packages = _execute_stale_removal(args, packages, state, "old package(s)")
+ if packages is None:
+ return None
+
+ # then do vault requests, so we can send results to the requester
+ for m in maintainers.maintainer_list(state.args):
+ vault_requests = db.vault_requests(args, m)
+
+ if vault_requests:
+ logging.debug("processing vault requests by %s" % (m))
+
+ with logfilters.AttrFilter(maint=m):
+ packages = _execute_stale_removal(args, packages, state,
"package(s) for %s" % m, vault_requests)
+ if packages is None:
+ return None
+
+ return packages
+
+
+def _execute_stale_removal(args, packages, state, reason, vault_requests=None):
+ fresh_packages = copy.deepcopy(packages)
+ stale_to_vault = identify_stale_packages(args, fresh_packages, state,
vault_requests)
+ if stale_to_vault is not None:
+ logging.info("vaulting %d %s" % (len(stale_to_vault), reason))
+ stale_to_vault.move_to_vault(args)
+ else:
+ return None
+
+ return fresh_packages
+
+
+def identify_stale_packages(args, packages, state, vault_requests=None):
logging.debug("checking for stale packages")
+ if vault_requests is None:
+ vault_requests = []
+
# find stale packages
to_vault = package.stale_packages(packages, vault_requests)
- # remove stale packages from package set
- to_vault.map(lambda p, f: package.delete(packages, p, f))
-
# if there are no stale packages, we don't have anything to do
if not to_vault:
logging.debug("nothing is stale")
return to_vault
+ # remove stale packages from package set
+ to_vault.map(lambda p, f: package.delete(packages, p, f))
+
# re-validate package sets
# (this shouldn't fail, but we check just to sure...)
error = False
diff --git a/calm/db.py b/calm/db.py
index cf2051f..a6b19f5 100644
--- a/calm/db.py
+++ b/calm/db.py
@@ -46,7 +46,8 @@ def connect(args):
conn.execute('''CREATE TABLE IF NOT EXISTS vault_requests
(srcpackage TEXT NOT NULL,
- vr TEXT NOT NULL
+ vr TEXT NOT NULL,
+ request_by TEXT NOT NULL
)''')
conn.execute('''CREATE TABLE IF NOT EXISTS missing_obsolete
@@ -60,6 +61,12 @@ def connect(args):
msgid TEXT NOT NULL
)''')
+ # migrations
+ cursor = conn.execute("SELECT * FROM vault_requests LIMIT 1")
+ cols = [row[0] for row in cursor.description]
+ if 'request_by' not in cols:
+ cursor.execute("ALTER TABLE vault_requests ADD COLUMN request_by TEXT
NOT NULL")
+
conn.commit()
return conn
@@ -92,28 +99,29 @@ def update_package_names(args, packages):
#
# vault requests made via 'calm-tool vault'
#
-def vault_requests(args):
+def vault_requests(args, m):
requests = {}
with connect(args) as conn:
conn.row_factory = sqlite3.Row
- cur = conn.execute("SELECT * FROM vault_requests")
+ cur = conn.execute("SELECT * FROM vault_requests WHERE request_by =
?", (m,))
for row in cur.fetchall():
spkg = row['srcpackage']
if spkg not in requests:
requests[spkg] = set()
+ requests[spkg].add(row)
requests[spkg].add(row['vr'])
# remove all rows
- cur = conn.execute("DELETE FROM vault_requests")
+ cur = conn.execute("DELETE FROM vault_requests WHERE request_by = ?",
(m,))
return requests
-def vault_request_add(args, p, v):
+def vault_request_add(args, p, v, m):
with connect(args) as conn:
- conn.execute('INSERT INTO vault_requests (srcpackage, vr) VALUES
(?,?)', (p, v))
+ conn.execute('INSERT INTO vault_requests (srcpackage, vr, request_by)
VALUES (?,?, ?)', (p, v, m))
#
diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py
index fa23648..985257c 100644
--- a/calm/past_mistakes.py
+++ b/calm/past_mistakes.py
@@ -160,27 +160,20 @@ nonexistent_provides = historical_provides + [
'python-gnomevfs2',
'python-gtk2.0',
'python-keybinder',
- 'python-orbit',
'python-pynotify',
'python-vte',
'python-wnck',
'python-zeitgeist',
'python2-avahi',
- 'python2-avogadro',
'python2-ayatana_appindicator',
- 'python2-fontforge',
'python2-gobject',
'python2-ipaddr',
'python2-libvirt',
- 'python2-magic',
'python2-matemenu',
'python2-pykde4',
'python2-pyqt4',
'python2-pyqt5',
- # random build-depends
- 'python2-cython',
- 'python2-wheel',
- 'python2-cairo-devel',
+ 'libtidy0_99_0',
# general
'_windows',
r'perl5_\d+',
diff --git a/calm/vault.py b/calm/vault.py
index b433660..f6eb236 100644
--- a/calm/vault.py
+++ b/calm/vault.py
@@ -43,7 +43,7 @@ def vault(pvr):
args = types.SimpleNamespace()
args.htdocs = os.path.join(common_constants.HTDOCS, 'packages')
- db.vault_request_add(args, p, vr)
+ db.vault_request_add(args, p, vr, os.environ['CYGNAME'])
logging.info("package '%s' version '%s' marked as expirable" % (p, vr))
diff --git a/test/test_calm.py b/test/test_calm.py
index e09b95a..fd7dc5c 100755
--- a/test/test_calm.py
+++ b/test/test_calm.py
@@ -393,6 +393,7 @@ class CalmTest(unittest.TestCase):
os.system('touch "%s"' % (os.path.join(m_homedir, 'x86_64', 'release',
'staleversion', '!ready')))
state = calm.calm.CalmState()
+ state.args = args
state.packages = calm.calm.process_relarea(args, state)
state.packages = calm.calm.process_uploads(args, state)
self.assertTrue(state.packages)
@@ -428,6 +429,7 @@ class CalmTest(unittest.TestCase):
os.system('touch "%s"' % (os.path.join(m_homedir, 'x86_64', 'release',
'testpackage', '!ready')))
state = calm.calm.CalmState()
+ state.args = args
state.packages = calm.calm.process_relarea(args, state)
state.packages = calm.calm.process_uploads(args, state)
self.assertTrue(state.packages)
[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20250329-35-gce5a066
Jon Turney via Cygwin-apps-cvs Mon, 05 Jan 2026 08:44:27 -0800
