This is a really hacky plugin for spiffy that allows you to serve automatically-generated release-info files and files-list files (the latter of which serves as the files section of a meta-file) for an SVN repository.
It assumes the svn repository location contains subdirectories matching the names of eggs and those subdirectories contain a directory called "tags" with underneath it a directory for each revision, with the revision number as its name:
/MY-EGG /tags /1.0 /1.1 /ANOTHER-EGG /tags /0.1 /0.2 /1.0
You can use it like this (assuming you have spiffy-uri-match installed, too):
(use spiffy spiffy-uri-match pseudo-meta-egg-info) ;; Trailing slash is mandatory here! ;; By default this uses the Chicken repo (egg-repo "http://example.com/your-egg-repo/eggs/release/4/") (vhost-map `((".*" . ,(uri-match/spiffy `(((/ "release-info") (GET ,release-info)) ((/ "files-list") (GET ,files-list))))))) (start-server)
This makes the release-info for egg MY-EGG available under http://localhost:8080/release-info?egg=MY-EGG
and the files-list for release 1.0 under http://localhost:8080/files-list?egg=MY-EGG;release=1.0[parameter] (egg-repo [URI-STRING])
URI-STRING is a string representing the repository URI holding the Subversion files.[procedure] (release-info CONTINUE)
This serves up the release-info file. It assumes that current-request contains a request URI which contains a egg-name query parameter that indicates the name of the egg.[procedure] (files-list CONTINUE)
This serves up the file-list file. It assumes that current-request contains a request URI which contains a egg-name query parameter that indicates the name of the egg and a release query parameter that indicates the release version of the egg.
- 0.2 - Add extra validation so that empty egg names/release numbers are caught and a nice 400/404 is returned rather than triggering a hard assertion in libsvn and crashing the entire server. Thanks, Subversion team! :S
- 0.1.1 - Improved error messages.
- 0.1 - Initial release
All code in this egg is explicitly placed in the public domain. You may do whatever you want with it.
This code can be used as a basis for generating any kind of pseudo-meta-egg-info stuff, for example the svn backend could be easily modified to read files from a directory or from any other VCS.