Get rid of unnecessary version constraints #1093
No reviewers
Labels
No Label
Benchmarking and Performance
HTTP Storage Protocol
Nevow Removal
Python 3 Porting
not-for-merge
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tahoe-lafs/tahoe-lafs#1093
Loading…
Reference in New Issue
No description provided.
Delete Branch "3390.3404.3723-dependency-versions"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3390
Fixes https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3404
Fixes https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3723
Coverage increased (+0.007%) to 95.479% when pulling
6475b44336
on 3390.3404.3723-dependency-versions intoed52e43a4a
on master.LGTM!
Open version bounds make me nervous. On the other hand, we've mostly been bitten by libraries transitioning from Python 2 to Python 3. I suppose that kind of breakage will not be a problem going forward. :-)
Open version bounds are a good default for libraries, otherwise:
Now if an application wants to use X and Y... it can't, even though D 2.2 may well be completely backwards compatible.
It's true this can cause breakage occasionally, but at least it's breakage users can fix themselves; in the above scenario, they can't fix without forking X or Y. This in fact is what happened to Tahoe: Tahoe needed version of attrs that was less than version V, and that broke a dependency that needed newer attrs.
What to do when dependencies do backwards incompatible things? Ideally you have all tests run twice: once with oldest supported dependencies, once with latest dependencies. And you run tests daily. And then if there's new release of dependencies that breaks things, that's fine.
Now, to be fair, Tahoe is an application, not a library, so that's a little different. For an application, you want to have two lists of dependencies: minimal direct dependencies (e.g.
Twisted > 20.1
), and pinned transitive dependencies (Twisted + all the things Twisted depends on, and the dependencies' dependencies, pinned to exact versions) for the distributed package. And then each install gives the exact set of dependencies each time.This particular configuration is not the transitive pinned dependencies, though, so it shouldn't be too constrained.