Skip to content

Data model

Enroute stores Git repositories. Your application defines the product model around those repositories.

Repositories

Your application creates each repository with a key it chooses, or grants the key to the push that creates it. Enroute treats the key as opaque and does not store a display name, owner, description, members, or permissions. Keep those records in your application and map them to repository keys.

When you enable the authorize hook, every Git request requires an answer from your application. When you do not, every request may read and push, and the URL path is the key. See repository keys and Enable hooks.

Objects and refs

A ref is a name that points to an object ID. UpdateRefs changes each ref on its own and does not invoke hooks. It can only target an object already in the repository, and a branch must point at a commit.

Objects come from Git pushes, or from CreateCommit, which makes one commit from file changes, with at most one parent. Enroute does not create merge commits; a client must push the merge commit before your application moves a ref to it. Enroute accepts non-fast-forward updates unless your application rejects them. Use IsAncestor to evaluate ancestry.

Enroute supports SHA-1 repositories. Object IDs are 40 lowercase hexadecimal characters.

Namespaces

A deployment serves one application, named in hooks.endpoint_url. Repository keys are unique across the deployment. A key can hold /, but Enroute gives its segments no meaning: it has no concept of an owner or a group.

Grouping repositories is therefore your application's own table, not a field here. See Namespacing repositories.

Exclusions

Enroute does not authenticate users, store product policy, or create Git objects on its own: every new object comes from a push or a CreateCommit call. See Hooks and Limitations.

Generated from docs/concepts/model.md at bc0dc6e