Jon Turney [Sat, 16 Aug 2025 13:26:32 +0000 (14:26 +0100)] Update tests
Adjust date assigned to rpm-doc-999-1 package so it doesn't qualify as
'old enough to be converted to new style obsolete'
Jon Turney [Mon, 27 Oct 2025 17:00:12 +0000 (17:00 +0000)] Add 'epoch' hint
Jon Turney [Fri, 15 Aug 2025 17:00:48 +0000 (18:00 +0100)] Drop some no longer needed past_mistakes
Jon Turney [Fri, 15 Aug 2025 13:16:13 +0000 (14:16 +0100)] Wind the obsolete package exipry threshold age forward
Wind the obsolete package exipry threshold age forward to the value
being used in production.
Jon Turney [Sat, 26 Jul 2025 12:57:04 +0000 (13:57 +0100)] Use the 'good' version of pidlockfile
Use the improved version of pidlockfile, where locks are implicitly
released when the process is no longer running.
Otherwise we are prevented from starting just by the existence of the
lockfile, even if the previous process was terminated abnormally.
Jon Turney [Thu, 24 Jul 2025 15:31:45 +0000 (16:31 +0100)] Loiter before exiting on unhandled exception
Jon Turney [Sat, 19 Jul 2025 13:22:34 +0000 (14:22 +0100)] Handle replology versions for some more slotted packages
Also make sure we consider the newest version as a possibility, for
cases where we actually have a slot for that.
Jon Turney [Thu, 10 Jul 2025 15:21:11 +0000 (16:21 +0100)] Generalize getting versions for slotted packages from repology
Add automake to the list of slotted packages.
(This also fixed the legacy package version being reported correctly,
rather than jsut the first character, as we didn't turn it into a list
when we added support for repology reporting multiple newest versions)
Fixes:
4ec728554663 ("Handle multiple 'newest' versions reported by repology")
Jon Turney [Thu, 10 Jul 2025 12:29:21 +0000 (13:29 +0100)] Record repology project name, even if newest version isn't known
Also record if newest version is unknown specifically because project is
noscheme, unique to cygwin, or unclassified by repology.
Jon Turney [Wed, 9 Jul 2025 16:07:47 +0000 (17:07 +0100)] Actually mark the upload/deploy as errored if pre-authorization fails
This ensures correct feedback to scallywag when a user attempts a deploy
which they are not authorized for.
Also, update tests appropriately.
Also, fix a typo noticed while investigating.
Jon Turney [Wed, 9 Jul 2025 15:58:46 +0000 (16:58 +0100)] Omit source packages from generated announce mail
https://cygwin.com/pipermail/cygwin-announce/2025-June/012393.html
Also, add 'ChangeLog' to the list of files checked for announce message.
Jon Turney [Sun, 15 Jun 2025 20:32:30 +0000 (21:32 +0100)] Remove old multiarch considerations
Remove old multiarch considerations, preparatory to adding them back
again, done right.
We only have x86_64 at the moment, this just makes everything more
complex.
In particular, this removes a few complex knots, where we struggle with
our data model being inside-out (arch contains packages, rather than
vice versa).
Also, update tests and test data appropriately.
Also, as a side-effect, this makes !ready files at any level in the
upload directory heirarchy work, rather than being limited to the
arch/release directory and below.
After this change, website search function will need updating to look in
noarch/ and src/ directories.
Jon Turney [Mon, 9 Jun 2025 11:51:22 +0000 (12:51 +0100)] Handle the existence of modules for test version in python rebuild report
Better handle the existence of modules for a higher, test version of
python in the python rebuild report.
Jon Turney [Thu, 5 Jun 2025 17:59:44 +0000 (18:59 +0100)] Handle multiple 'newest' versions reported by repology
repology can now report multiple 'newest' versions, due to altver
schemes. Handle that better by employing a simple heuristic (equal
number of alphanumeric sequences) to find which one matches our version.
Jon Turney [Wed, 4 Jun 2025 15:53:27 +0000 (16:53 +0100)] Generate a per-maintainer packages report
Refactor orphaned packages report so we can generate a per-maintainer
report as well.
Jon Turney [Wed, 4 Jun 2025 13:09:24 +0000 (14:09 +0100)] Add repology link to package summary
Jon Turney [Wed, 4 Jun 2025 15:20:40 +0000 (16:20 +0100)] Record repology project name as well as upstream version
Jon Turney [Tue, 3 Jun 2025 12:30:51 +0000 (13:30 +0100)] Fix sorting maintainer report by number of packages
Add a hint so sorting maintainer report by number of packages works
correctly.
Jon Turney [Fri, 6 Jun 2025 12:23:49 +0000 (13:23 +0100)] Improve maintainer last activity estimate
Ignore timestamp of co-maintained packages when estimating last date of
maintainer activity. This helps the inactive mainainter tool not to be
so easily fooled by co-maintainership.
(This is still not perfect, but... well, eventually we'll be in a world
where we have ssh activity timestamps for all maintainers and don't have
to resort to guessing based on package timestamps)
Jon Turney [Mon, 2 Jun 2025 16:18:16 +0000 (17:18 +0100)] Wind the inactive maintainer threshold forward a bit
Adjust the grammar slightly now we've worked through the ridiculously
old maintainer accounts.
Also, don't send the mail for maintainers with no packages
Jon Turney [Sat, 31 May 2025 18:11:40 +0000 (19:11 +0100)] Accommodate historic Cygwin READMEs with version in filename
Also, sort versions so highest gets extracted last
Also, downgrade a piece of logging to something more sensible
Also, rewrite document list inclusion fragment when forced
Jon Turney [Sat, 31 May 2025 18:09:48 +0000 (19:09 +0100)] Actually do the "no current version" test before issuing the warning
Jon Turney [Wed, 28 May 2025 16:39:03 +0000 (17:39 +0100)] Extract /usr/share/doc/Cygwin/ files
Extract /usr/share/doc/Cygwin/ files, and write a includable HTML
fragment listing them all.
v2: Put extracted READMEs in a per package directory
This maintains the association between the README file and the package
name, and lets us handle README files which *aren't* named after the
package (e.g. cygserver.README in the cygwin package).
Jon Turney [Wed, 28 May 2025 12:40:35 +0000 (13:40 +0100)] Only issue the 'no curr: version' warning at upload time
Not sure if this warning if very useful, since the #1 intervention I
have to make is configuring supression for it when it's expected.
Avoid that bit of work, by only issuing the warning at upload time.
Jon Turney [Sat, 29 Mar 2025 22:03:15 +0000 (22:03 +0000)] Update version to
20250329 Jon Turney [Mon, 24 Mar 2025 19:33:09 +0000 (19:33 +0000)] Fix untest for arch-tagged hint filenames
Jon Turney [Tue, 25 Mar 2025 18:21:08 +0000 (18:21 +0000)] Adjust timestamp of rpm-doc-999-1
This needs to be less than OBSOLETE_AGE_THRESHOLD_YEARS ago, otherwise
the package gets removed. (Maybe we need to switch tests around so it's
checking that instead?)
Jon Turney [Sun, 16 Mar 2025 18:19:55 +0000 (18:19 +0000)] Add 'Takashi Yano' to trusted maintainers list
Jon Turney [Sat, 1 Mar 2025 17:00:33 +0000 (17:00 +0000)] mkgitolite: Also allow push to 'main' branch
'master' and 'main' should be the same via a symbolic reference, so it
shouldn't matter which is used.
Jon Turney [Sat, 1 Mar 2025 16:59:19 +0000 (16:59 +0000)] mail-inactive-maintainers: Improve grammar
Also wind threshold forwards a bit
Also improve debug output
Jon Turney [Sun, 16 Feb 2025 15:47:36 +0000 (15:47 +0000)] Set Maintainer._homedirs earlier
This is needed for last_seen values to be retrieved correctly on the
first call to maintainer_list()
Jon Turney [Sat, 1 Feb 2025 18:05:08 +0000 (18:05 +0000)] Update package summary package when hints change as well
Jon Turney [Wed, 18 Dec 2024 17:20:46 +0000 (17:20 +0000)] CI: Drop testing on python 3.7
Drop testing on python 3.7, not available on ubuntu-latest.
Jon Turney [Wed, 18 Dec 2024 17:09:08 +0000 (17:09 +0000)] Improve reliability of detecting upload available.
Detecting a !ready file being placed into the upload directory is
problematic, due to possible races in setting watches on a just created
directory.
So instead, we just watch for a file touched when the sftp session ends.
This means we more reliably detect when a !ready file has been uploaded,
at the cost of doing extra scans (in the probably rare case) when a sftp
session hasn't uploaded a !ready file.
Jon Turney [Sun, 17 Mar 2024 13:44:04 +0000 (13:44 +0000)] mkgitolite: Define a group for all packages
Define a group of all package repositories, rather than just using @all,
so gitolite can be used to control access to other cygwin repositories
as well.
Also define a per-repo post-recieve hook to perform package builds.
Also rearrange things so comments in giolite configuration file
consistently preceed the what they are commenting on.
Jon Turney [Sun, 21 Jul 2024 11:24:18 +0000 (12:24 +0100)] Handle transient ConnectionRefusedError from repology
Also: use a timeout on urlopen(), so we don't pause indefinitely if the
far end drops the connection.
Also: reuse the last successfully fetched data if fetching fails.
v2:
timeout on urlopen(), not Request()
Jon Turney [Thu, 11 Jul 2024 17:40:30 +0000 (18:40 +0100)] Also rate-limit invidual repology API calls
Also rate-limit invidual repology API calls, so we do not exceed
repology's rate-limit instantaneously, as well as on average...
Jon Turney [Thu, 11 Jul 2024 15:07:21 +0000 (16:07 +0100)] Handle errors from repology API slightly better
Jon Turney [Fri, 21 Jun 2024 14:28:12 +0000 (15:28 +0100)] Fix mail intactive maintainers tool
Also a few tweaks to text
Jon Turney [Tue, 18 Jun 2024 14:13:41 +0000 (15:13 +0100)] Wind the obsolete package exipry threshold age forward
Wind the obsolete package exipry threshold age forward, and update tests
appropriately.
Jon Turney [Sun, 2 Jun 2024 16:37:11 +0000 (17:37 +0100)] Improve mail inactive maintainers tool
Jon Turney [Sun, 2 Jun 2024 13:35:59 +0000 (14:35 +0100)] Add Brian Inglis to NMU maintainers list
Jon Turney [Fri, 31 May 2024 13:39:55 +0000 (14:39 +0100)] Add a tool for mailing long-inactive maintainers
Jon Turney [Mon, 27 May 2024 14:19:00 +0000 (15:19 +0100)] Produce a report to help identify long-inactive maintainers
Jon Turney [Sat, 4 May 2024 16:36:20 +0000 (17:36 +0100)] Also allow remembered, synthetic obsoletes: in valid_requires
Jon Turney [Sat, 4 May 2024 15:28:17 +0000 (16:28 +0100)] Wind the obsolete package exipry threshold age forward
Jon Turney [Thu, 2 May 2024 17:41:53 +0000 (18:41 +0100)] Include arch into package summary versions table
Jon Turney [Thu, 2 May 2024 12:38:56 +0000 (13:38 +0100)] Simplify the way arch_re is made
(There's actually a thinko in the previous implementation, as it doesn't
add the '-' in the right place if the ARCHES list has more than one
element.)
Jon Turney [Wed, 1 May 2024 18:23:56 +0000 (19:23 +0100)] Improve fix-requires-by-linkage tool
* allow to only consider packages which already have some dependency
* also consider loadable modules built with .so extension
Jon Turney [Sun, 28 Apr 2024 20:20:52 +0000 (21:20 +0100)] Include obsoletes: in the set of valid things to depends: on
It's OK to depends: on something which only exists as an obsoletes: on
some package, after the original package providing it has been removed.
Jon Turney [Wed, 24 Apr 2024 12:20:39 +0000 (13:20 +0100)] Clarify missing obsoletes reminder
Make it clearer that if calm has to provide missing obsoletes, that is a
packaging defect.
Jon Turney [Sun, 19 Jun 2022 12:11:44 +0000 (13:11 +0100)] Don't retain obsolete packages
Don't retain obsolete packages over a certain age threshold (when they
are effectively just adding an obsolete: to another package).
This is safe, as commit
17dc61e9 (persisting missing_obsoletes) ensures
that if the obsoletion was old-style (and thus only recorded in the
obsoleted package, with the new-style obsoletes: hint in the obsoleteing
package being synthesized by commit
eca3a88d), the fact of that
obsoletion isn't forgotten once the obsolete package itself is removed.
Jon Turney [Wed, 23 Feb 2022 23:39:23 +0000 (23:39 +0000)] Misspellings re-uploaded since last fixed
Jon Turney [Tue, 23 Apr 2024 19:16:08 +0000 (20:16 +0100)] Adjust log-level of some debug output
Jon Turney [Wed, 17 Apr 2024 22:08:31 +0000 (23:08 +0100)] Be a bit more aggressive about expiring old soversions
Allow the source package responsible for the old soversion to be
completely expired if it wouldn't normally be kept, and all of it's
install packages have no external rdepends.
Jon Turney [Wed, 17 Apr 2024 13:19:57 +0000 (14:19 +0100)] Drop 'noretain' hint
This was pretty much useless, even more so now we have the 'vault'
command to do the same thing.
This effectively reverts commit
aec1dcf7.
Jon Turney [Mon, 22 Apr 2024 18:14:18 +0000 (19:14 +0100)] Ignore sighup when daemonized
It seems like systemd sends this as well as SIGTERM, so make sure to
ignore it so we shut down cleanly.
Jon Turney [Sat, 17 Feb 2024 19:26:03 +0000 (19:26 +0000)] Don't update setup.ini if we can't sign it
Check with gpg-agent if the signing key(s) are available, and don't
update setup.ini if we can't sign it.
Also, since we want to do some logging about keygrips before we
daemonize, move logging_setup earlier, and don't close the file
descriptors it opens when we darmonize.
Jon Turney [Wed, 17 Apr 2024 16:16:58 +0000 (17:16 +0100)] Add a test of upload auth failure
Jon Turney [Thu, 11 Apr 2024 23:02:12 +0000 (00:02 +0100)] Add the ability to ingest arch-tagged package filenames
Change to deriving the name of the listing file from package name and
version, rather than from the tar archive filename, because that would
include the arch tag.
That exposes an interesting anomaly: We are ignoring any version:
override when generating the listing filename. Since it's taken into
account where the link is made to that file on the package summary page,
that seems like a bug which this change accidentally fixes.
Adjust the test data to reflect this fix.
Jon Turney [Fri, 16 Sep 2022 15:38:33 +0000 (16:38 +0100)] Separate collect and read package files steps
This is necessary when different versions of a src package might exist
in both arch/ and src/ paths.
Update test data for change to Package() repr, as we no longer have
pkgpath, just then package name
This is preparatory work for allowing a couple of things: putting new
source packages in src/ (without moving the existing ones under arch/),
re-structuring the data model so that arch is inside package, rather
than containing a collection of them.
This improves package authorization so it's possible for a package can
replace parts of another package (without needing rearrangement of the
package locations), by requiring authorization for *all* paths at which
a package exists.
Change to using a class rather than named tuple to hold scan results, so
it can be mutable in uploads.auth_check()
Also: drop no longer needed use of a defaultdict for holding packages in
uploads.scan()
Jon Turney [Wed, 17 Apr 2024 13:18:10 +0000 (14:18 +0100)] Fix typo
Jon Turney [Thu, 11 Apr 2024 15:10:26 +0000 (16:10 +0100)] Drop age threshold for 'upgrade old-style obsoletes'
Jon Turney [Fri, 12 Apr 2024 13:00:38 +0000 (14:00 +0100)] Make formatting of 'conflicts:' lines in setup.ini consistent
Make formatting of 'conflicts:' lines in setup.ini consistent with
everything else.
Jon Turney [Thu, 11 Apr 2024 15:05:17 +0000 (16:05 +0100)] Utility function to drop version constraints from a package list
Factor out "strip out version constraints from a package list" into a
utility function.
Jon Turney [Tue, 9 Apr 2024 20:16:58 +0000 (21:16 +0100)] Add some more old-style obsoletion upgrade information
These packages weren't being noticed before as being "obsolete, but no
replacement" due to the way split() can produce a list containing an
empty string, rather than an empty list.
Jon Turney [Tue, 9 Apr 2024 18:43:08 +0000 (19:43 +0100)] Convert package lists in hints to actual lists
Convert package lists in hints to actual lists in one place, rather than
doing it every time we need to use the value.
This fixes the bug that build-requires wasn't written to JSON as a list.
Update test data appropriately.
Future work: Factor out "strip out version constraints from a package
list" into a utility function.
Jon Turney [Mon, 8 Apr 2024 15:34:04 +0000 (16:34 +0100)] Add repr for RepoPath objects to aid debugging
Jon Turney [Tue, 9 Apr 2024 22:35:06 +0000 (23:35 +0100)] Fix a bug in 'remove obsoleting package from depends of package it obsoletes'
Fix a bug in 'remove obsoleting package from depends of package it
obsoletes' code. This wasn't applying correctly if the dependency
wasn't the first one, and left extraneous whitespace when it was.
Jon Turney [Sun, 7 Apr 2024 15:45:39 +0000 (16:45 +0100)] Add dependencies etc. to JSON output
Jon Turney [Sat, 6 Apr 2024 16:19:48 +0000 (17:19 +0100)] Produce a subreport for each solib
Initially I wanted to put this information directly into the solib
report, but some sort of disclosure widget which spans the whole table
width is hard to do in just HTML.
Jon Turney [Sat, 6 Apr 2024 16:17:41 +0000 (17:17 +0100)] Make fix-requires-by-linkage quieter
Jon Turney [Tue, 2 Apr 2024 15:05:29 +0000 (16:05 +0100)] Fix package name checking in fix-requires-by-path
Also add a bit of more verbose output,
Also make it possible to run on just a named package
Jon Turney [Tue, 2 Apr 2024 15:03:44 +0000 (16:03 +0100)] Clean up all empty directories in stagingdir
Jon Turney [Mon, 1 Apr 2024 13:55:12 +0000 (14:55 +0100)] Expire python35
Jon Turney [Sun, 31 Mar 2024 14:24:29 +0000 (15:24 +0100)] Expire python34 left-overs
Jon Turney [Sat, 30 Mar 2024 20:20:08 +0000 (20:20 +0000)] Ignore InotifyError exceptions
Jon Turney [Wed, 27 Mar 2024 13:46:56 +0000 (13:46 +0000)] Only consider files in fix-requires-by-path
This makes it practical to use complex regex e.g. ending with a negative
lookahead.
Jon Turney [Tue, 26 Mar 2024 13:49:27 +0000 (13:49 +0000)] Add replace option to fix-requires-by-path tool as well
Jon Turney [Mon, 25 Mar 2024 21:57:22 +0000 (21:57 +0000)] Preparations for python3.5 removal
Jon Turney [Sun, 24 Mar 2024 22:22:38 +0000 (22:22 +0000)] Improve fix-requires-by-linkage tool to allow it to run on entire relarea
Also: allow replacing an existing dependency (e.g python3 -> python35)
Also: don't spam with objdump warnings for symlinks
Jon Turney [Sun, 24 Mar 2024 16:52:53 +0000 (16:52 +0000)] Support an easy way to trigger a relarea rescan via a .touch file
This will be used by vault and scan-relarea
Jon Turney [Sat, 23 Mar 2024 21:40:03 +0000 (21:40 +0000)] Add a report of python packages which need rebuilding
Jon Turney [Sat, 23 Mar 2024 15:49:26 +0000 (15:49 +0000)] Future proof the re for "python modules for old python versions"
Jon Turney [Sun, 24 Mar 2024 14:10:14 +0000 (14:10 +0000)] Relocate lockfile
Relocate lockfile somewhere writeable by cygwin-admin uid
Jon Turney [Sat, 23 Mar 2024 15:42:26 +0000 (15:42 +0000)] Record reason for calm daemon stopping in logfile
Jon Turney [Sun, 17 Mar 2024 13:46:28 +0000 (13:46 +0000)] Use inotify to detect when there's work to be done
Rather than signals (which can only be sent by the same uid), use
inotify to detect when there's work to process in upload or staging
directory, or when a change has been made in the relarea.
Jon Turney [Sat, 9 Mar 2024 12:27:25 +0000 (12:27 +0000)] Tolerate package html directories being owned by someone else
As a consequence of the cygwin-admin/cygwin split, we might not own an
existing package listing/summary HTML directory. Ignore any error trying
to set permissions in that case.
Jon Turney [Sat, 17 Feb 2024 19:24:45 +0000 (19:24 +0000)] Don't warn if license expression canonicalization just changes case
Also: consistently indicate if a problem warned about in hints is fixed
Jon Turney [Sat, 20 Jan 2024 16:45:02 +0000 (16:45 +0000)] Add a report of package lingering in test/unstable status
Jon Turney [Fri, 19 Jan 2024 18:12:42 +0000 (18:12 +0000)] Ignore new flake B038
Ignore new flake B038: "editing a loop's mutable iterable often leads to
unexpected results/bugs". The instances this reports are all false
positives.
Jon Turney [Thu, 18 Jan 2024 20:25:41 +0000 (20:25 +0000)] Rewrite dependencies on removed python packages
Using the now removed, obsoleted package name causes the solver to want
to uninstall anything which depends on these, which isn't helpful right
now.
Theoretically, the information to generate these exists in our "retired
old-style obsoleting packages" data, but do it manually for speed right
now.
Jon Turney [Thu, 18 Jan 2024 20:50:18 +0000 (20:50 +0000)] Anchor nonexistent_provides at the end
Anchor the nonexistent_provides regex at the end, so it matches the
whole provide name, avoiding unpleasant surprises.
Jon Turney [Tue, 17 Oct 2023 12:37:14 +0000 (13:37 +0100)] Expunge all python2 modules
Jon Turney [Sat, 6 Jan 2024 14:58:14 +0000 (14:58 +0000)] Ensure announce mail ends with a blank line
Jon Turney [Wed, 13 Dec 2023 13:26:31 +0000 (13:26 +0000)] Improve rendering of minimal Markdown for description in package summary
Retain the heuristic which makes URLs in the description, and improve
it's handling of some cases.
Jon Turney [Wed, 3 Jan 2024 19:33:24 +0000 (19:33 +0000)] Add rdepends and build_rdepends to package summary
Use the HTML <details> widget to avoid showing large lists by default.
Jon Turney [Wed, 3 Jan 2024 19:25:32 +0000 (19:25 +0000)] Factor out writing the details in the package summary page
Contain the details in a table of class 'pkgdetails' for more layout
control.
Jon Turney [Thu, 4 Jan 2024 14:30:01 +0000 (14:30 +0000)] Isolate tests from a local repodir
This fixes the tests if a local /git/cygwin-packages happens to exist,
and adds some test coverage of code which examines repodir.
Jon Turney [Wed, 3 Jan 2024 18:25:08 +0000 (18:25 +0000)] Avoid an exception if package.merge() fails and returns None
This page took 0.060385 seconds and 5 git commands to generate.