![](https://secure.gravatar.com/avatar/da8638bce265a9edbab91dd837042d03.jpg?s=120&d=mm&r=g)
On 3/13/10 Mar 13 -7:36 PM, Faré wrote:
On 13 March 2010 16:56, Robert Goldman <rpgoldman@sift.info> wrote:
On 3/13/10 Mar 13 -1:12 PM, Faré wrote:
We could adopt the same algorithm as dpkg or rpm uses for comparing version.
I once implemented it in shell script. Could do it in Lisp...
I confess to not really knowing this algorithm (I haven't built an RPM in a long time), nor having any guess about whether or not it would break previous :version dependencies.
See attached file (supposes ASCII, will fail on EBCDIC). Add:
(defun version<= (v1 v2) (ecase (compare-rpm-versions v1 v2) ((< =) t) ((> nil) nil))) (defmethod version-satisfies ((v string) (vmin string)) (version<= vmin v))
Do you think we should use that?
Anyone know how backward compatible this would be?
It's backwards compatible with the current version-satisfies indeed.
Are you sure? I don't think so. Current ASDF version-satisfies treats the first digit specially. To match a version spec of the form x.y.z with a.b.c, a must be equal to x, not >=. then b.c must be >= y.z At least that's how I read it. Probably this is a job for a unit test.... Also, I guess I think it's a little weird that (version-satisfies "1.2.3-edgar" "1.2.3-dev") Any reason in particular to choose lexicographic order for non-numeric strings instead of requiring a match? Works for 1.2.3a, 1.2.3b, etc., I suppose, but "dev" seems like a weird case (perhaps one simply to be avoided). Frankly, given that this can be odd, I'd be just as happy insisting on integer ( . integer )* as the syntax for version strings and raising an error if the strings aren't of the right form. Indeed, I think insisting on some form for the version strings (and validating it to the limited extent possible) would be very helpful --- some of the utility of :version is vitiated by having people put in strings that don't fit the convention. Best, R