Skip to content

Compatibility between VersionReq from semver and VersionSet from pubgrub

License

Notifications You must be signed in to change notification settings

software-mansion-labs/semver-pubgrub

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This provides compatibility between VersionReq from the semver crate and the VersionSet trait from pubgrub crate (well the unreleased v3/dev branch).

The semver crate defines for the Cargo ecosystem when a version like 1.2.3-alpha matches a requirement like ^1.x. It defines a matches method for comparing a Version with a VersionReq. The PubGrub dependency resolution algorithm requires more operations on its version requirements. The fundamental ones are a negation and intersection. This library provides the SemverPubgrub struct witch is a representation of a VersionReq that supports these additional operations.

We work very hard to make sure that SemverPubgrub contains a Version if and only if the VersionReq matches the Version. Where possible, the logic in this library matches (and links back to) the structure of the code in the semver crate. The goal is to be exactly compatible.

We have code that checks this for all versions currently on crates.io. But crates.io is not particularly creative with its versions or their requirements, so we also have fuzz testing. Unfortunately this fuzz testing is not available on Windows, so we also have proptest and snapshot testing (still to be written).

To the maintainers of the semver crate, thank you!

This project is built on the wonderful work in the semver crate. Full credit and appreciation to the semver contributors. All parsing as well as the semantics of matches/contains are developed and maintained in that semver crate. That crate is available under "MIT OR Apache-2.0" licensing.

Contributing

Discussion and development happens here on GitHub and on our Zulip stream. This is an important project with a lot of work still to do. It is also a small self-contained project with a clear definition of correct behavior. Please join in!

Remember to always be considerate of others, who may have different native languages, cultures and experiences. We want everyone to feel welcomed, let us know with a private message on Zulip if you don't feel that way.

About

Compatibility between VersionReq from semver and VersionSet from pubgrub

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%