Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • C clpm
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 32
    • Issues 32
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • clpm
  • clpm
  • Issues
  • #40
Closed
Open
Issue created Sep 03, 2021 by Eric Timmons@etimmonsOwner

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking