Specify git repositories as a source, not requirement
I was working on #39 but realized that because of how things are structured, it's going to be more difficult to solve than simply making sure it's persisted to the lock file.
This made me realize that the clpmfile specification unfortunately blends together a couple of concepts that really should be separate in :git
, :gitlab
, and :github
forms. Namely, something like the following:
(:gitlab "asdf-release-ops"
:path "daewok/asdf-release-ops"
:branch "main")
goes in the "requirements" section of the clpmfile (after all the sources), but logically it defines both a source and a requirement. The requirement is that every system present in the repository is included in the bundle (and therefore also has its dependencies satisfied).
I'd like to split this up so that you would instead write:
(:source "asdf-release-ops"
:type :gitlab
:path "daewok/asdf-release-ops"
:branch "main")
in the sources section. Then, if you want to include any system from that repo, you need to include them either explicitly (like (:system "asdf-release-ops")
) or transitively (e.g., through an (:asd "my-system.asd")
).
I think the upsides to this approach are:
- Much cleaner code. Right now, the VCS handling is a nightmare. I believe this will clean it up significantly.
- Much cleaner story conceptually. I think this change will make it easier to explain what's going on under the hood.
- Less time groveling on average. Users don't specify
:systems
for:git*
requirements right now (or if they do, they have no effect, see: #39). This means that we always grovel for information from every system in a repo. This change will not grovel a system unless it is actually needed.
The major downside to this approach is that it is incompatible with earlier clpmfile versions and in order to take advantage of the cleaner concepts, I really do not want to support reading both the older and newer clpmfile versions.