summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2023-10-20 12:12:10 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2023-10-23 15:31:31 +0200
commitd7af6c141e3c8fbb79fcfeadc020b9c5224b0046 (patch)
treea51920680c7ef07c793533cf75639641757627ae /doc
parent68d66eaed65a35bba5c2fcfb132d797d91ef48fe (diff)
downloadjustbuild-d7af6c141e3c8fbb79fcfeadc020b9c5224b0046.tar.gz
Add a design for supporting additional mirrors in just-mr
Diffstat (limited to 'doc')
-rw-r--r--doc/future-designs/alternative-mirros.md72
1 files changed, 72 insertions, 0 deletions
diff --git a/doc/future-designs/alternative-mirros.md b/doc/future-designs/alternative-mirros.md
new file mode 100644
index 00000000..265ab83f
--- /dev/null
+++ b/doc/future-designs/alternative-mirros.md
@@ -0,0 +1,72 @@
+Alternative Mirrors Proposal
+============================
+
+Background
+----------
+
+The repository fetch tool `just-mr` reads a repository-configuration
+file that describes `git` repositories and repositories given by
+archives in a content-addressable way: by the `git` commit id, or
+the blob identifier of the archive, respectively. Hence it does
+not matter where these resources are fetched form; nevertheless,
+a location to fetch from is needed for `just-mr` to be able to set
+up those repositories. Typically the main upstream URL is given.
+
+While `just-mr` fetches each archive or commit only once and keeps
+a local copy, large organizations still tend to set up a local mirror.
+In this way, not every person working on the project has to fetch
+from upstream (thus reducing load there) and there is a central
+place archiving all the dependencies. Such an archive is needed
+anyway, for audit and compliance reasons, as well as to be able
+to continue the project independent of the dependencies' upstream.
+
+It is therefore desirable that `just-mr` support this workflow while
+still clearly pointing out the upstream location, e.g., for updating.
+
+Proposal
+--------
+
+We propose the following, backwards-compatible, extensions to
+`just-mr`.
+
+### Mirrors field in `just-mr` repository config
+
+In the multi-repository configuration, in the definition of an
+`"archive"`, `"zip"` or `"git"` repository, an addition field
+`"mirrors"` can be added. If given, this field has to be a list
+of URLs that provide additional places where the respective
+repository can be fetched from. `just-mr` will only consider a fetch
+failed if the repository cannot be fetched neither from the main
+location (described in `"fetch"` field for `"archive"` and `"zip"`
+repositories, and `"repository"` field for `"git"` repositories),
+nor from any of the specified mirrors.
+
+### Additional mirrors in the just local specification
+
+Local mirrors of organizations are often not available to the
+general public and possibly not even available to everyone who
+has access to the respective project. In order to avoid polluting
+a multi-repository specification with the URLs of such restricted
+mirrors, the `.just-local` file is extended to support additional
+keys in its JSON object.
+- For the optional key `"additional mirrors"`, if given, a JSON object
+ is specified that maps primary URLs to a list of local (non-public)
+ mirrors. Those mirrors are always tried first (in the given order)
+ before any other URL is contacted.
+- For the optional key `"preferred mirrors"`, if given, a list of
+ host names is specified. When fetching from a non-local URL, URLs
+ with host names in the given list are preferred (in the order
+ given) over URLs with other host names.
+
+
+### `just-import-git` to support mirror specifications
+
+As multi-repository specifications are often generated from a
+description of the local repositories by a chain of `just-import-git`
+invocations, this tool needs to be able to also insert a `"mirrors"`
+field for the repository imported. Therefore, this tool will be
+extended by an option `--mirror` where multiple occurrences accumulate
+to specify additional mirrors for the URL fetched. These mirrors,
+if any, form the `"mirrors"` field of the repository imported; they
+are not used for the fetching in the import step itself, as the
+head commit of the primary URL is to be taken.