I think a 'bundler'-like tool is a necessary evil, if one wishes to maintain an application for a few years - and it would be convenient as well in other cases. I took a stab at implementing one back in May, but as usual things came up and I never finished.
The idea was:
- User creates a 'hatchfile' listing all the eggs the application needs. At this point, versions are optional.
- Instead of calling chicken-install directly for each missing egg, the tool would read the file and ask chicken-install to fetch and install them.
- The tool would record the egg versions (somewhere!) in order to 'freeze' them. Further installs wouldn't fetch new versions, unless an upgrade was requested.
Note that, at the time, I didn't know about egg-pack-sources, so I didn't consider it. Indeed, 'vendoring' the eggs might be a better solution. It would really guarantee that they are available and that they work. I'll have to play with that.
Depending on how the environment is setup, there is still the possibility of egg version conflicts among different applications, if they are installed system-wide, in the default repository. Which is usually the case.
I'm not too fond of how tools like RVM handle that, convenient as they are. Thankfully, since Chicken reads the CHICKEN_REPOSITORY environment variable, it is an easy fix.