Compatibility topic

Compatibility

This page is the only statement of the package's compatibility policy.

Platforms and toolchain

The package runs on the Dart VM on Linux, macOS and Windows and requires Dart SDK ^3.3.0. The process backend needs git 2.28 or newer, the release that provides init --initial-branch; reference transactions already need 2.27. GitMerge.mergeTree needs git 2.38 or newer (merge-tree --write-tree). Browsers are not supported, and the dart:io server adapter targets the Dart VM.

Versioned libraries

package:git_engine/git_engine.dart, package:git_engine/process.dart, package:git_engine/server_io.dart and package:git_engine/testing.dart follow semantic versioning.

package:git_engine/backend.dart serves the engines maintained with the package and stays outside that promise.

Everything under lib/src/ is private.

Capability contracts

These small shapes are implemented outside the package by a backend or a host. They grow only in a major version, by a new interface that extends the old one.

Repository-side contracts:

  • GitObjectReader, GitObjectWriter, GitObjectStore, GitRefReader.
  • GitRevisionResolver, GitHistoryReader, GitRefTransaction.
  • GitRepositoryReader, GitRepositoryWriter.

Server-side contracts:

  • GitPrincipal, GitAuthorizationPolicy, GitServiceResponse.
  • GitUploadPackService, GitHttpRequest.

Facades

Facades aggregate capabilities and convenience methods. Members may be added to them in a minor version, and they are not meant to be implemented outside the package.

  • The repository hierarchy: GitRepository, GitIndexedRepository, GitFileRepository.
  • GitWorkingRepository, GitBareRepository, GitFileBareRepository.
  • GitRepositoryManager, GitFileClient, GitEngineRuntime, GitSmartHttpHandler.
  • Repository configuration: GitConfig, GitRemotes.
  • Branches and tags: GitBranches, GitTags, GitRefs.
  • Revisions and history: GitRevisions, GitHistory.
  • Objects and index: GitObjects, GitIndex.
  • Work tree and patches: GitWorktree, GitPatches, GitIndexedPatches.
  • GitWorkingPatches, GitMerge, GitWorkingMerge, GitDirectoryFiles.

Incompatible changes

An incompatible change waits for a major version and goes through deprecations first.

Classes

GitAuthorizationPolicy Server Compatibility
Decides whether an identity may read or write a served repository.
GitHistoryReader Getting started Compatibility
Walks the commit graph of one repository.
GitHttpRequest Server Compatibility
A request received by a transport adapter, independent of any HTTP framework.
GitObjectReader Getting started Compatibility
Read access to the objects of one repository, addressed by object name.
GitObjectStore Getting started Compatibility
Read and write access to the objects of one repository.
GitObjectWriter Getting started Compatibility
Writes any object to a repository from its type and serialized content.
GitPrincipal Server Compatibility
An identity authenticated by the host application.
GitRefReader Getting started Compatibility
Read access to the references of one repository.
GitRefTransaction Getting started Compatibility
A set of reference updates applied together, all or nothing.
GitRepositoryReader Getting started Compatibility
Read-only view of one repository's stored data.
GitRepositoryWriter Getting started Compatibility
Read and write view of the stored data of one repository.
GitRevisionResolver Getting started Compatibility
Interprets git revision expressions (HEAD~2, main^{tree}…).
GitServiceResponse Server Compatibility
Response stream of a server service, transport independent.
GitUploadPackService Server Compatibility
Serves clone and fetch for a repository designated by its identifier.