= Gerrit Code Review - Superproject subscription to submodules updates

[[automatic_update]]
== Description
Gerrit supports a custom git superproject feature for tracking submodules.
This feature is useful for automatic updates on superprojects whenever
a change is merged on tracked submodules.

When a superproject is subscribed to a submodule, it is not
required to push/merge commits to this superproject to update the
gitlink to the submodule. Whenever a commit is merged in a submodule,
its subscribed superproject is updated by Gerrit.

Imagine a superproject called 'super' having a branch called 'dev'
having subscribed to a submodule 'sub' on a branch 'dev-of-sub'. When a commit
is merged in branch 'dev-of-sub' of 'sub' project, Gerrit automatically
creates a new commit on branch 'dev' of 'super' updating the gitlink
to point to the just merged commit.

To take advantage of this feature, one should:

. ensure superproject subscriptions are enabled on the server via
  link:config-gerrit.html#submodule.enableSuperProjectSubscriptions[submodule.enableSuperProjectSubscriptions]
. configure the submodule to allow having a superproject subscribed
. ensure the .gitmodules file of the superproject includes
.. a branch field
.. a url that starts with the link:config-gerrit.html#gerrit.canonicalWebUrl[`gerrit.canonicalWebUrl`]

When a commit in a project is merged, Gerrit checks for superprojects
that are subscribed to the the project and automatically updates those
superprojects with a commit that updates the gilink for the project.

This feature is enabled by default and can be disabled
via link:config-gerrit.html#submodule.enableSuperProjectSubscriptions[submodule.enableSuperProjectSubscriptions]
in the server configuration.

== Git submodules overview

Submodules are a Git feature that allows an external repository to be
attached inside a repository at a specific path. The objective here
is to provide a brief overview, further details can be found
in the official Git submodule documentation.

Imagine a repository called 'super' and another one called 'sub'.
Also consider 'sub' available in a running Gerrit instance on "server".
With this feature, one could attach 'sub' inside of 'super' repository
at path 'sub' by executing the following command when being inside
'super':
----
git submodule add ssh://server/sub sub
----

Still considering the above example, after its execution notice that
inside the local repository 'super' the 'sub' folder is considered a
gitlink to the external repository 'sub'. Also notice a file called
.gitmodules is created (it is a configuration file containing the
subscription of 'sub'). To provide the SHA-1 each gitlink points to in
the external repository, one should use the command:
----
git submodule status
----

In the example provided, if 'sub' is updated and 'super' is supposed
to see the latest SHA-1 (considering here 'sub' has only the master
branch), one should then commit the modified gitlink for 'sub' in
the 'super' project. Actually it would not even need to be an
external update, one could move to 'sub' folder (inside 'super'),
modify its content, commit, then move back to 'super' and
commit the modified gitlink for 'sub'.

== Creating a new subscription

=== Ensure the subscription is allowed

Gerrit has a complex access control system, where different repositories
can be accessed by different groups of people. To ensure that the submodule
related information is allowed to be exposed in the superproject,
the submodule needs to be configured to enable the superproject subscription.
In a submodule client, checkout the refs/meta/config branch and edit
the subscribe capabilities in the 'project.config' file:
----
    git fetch <remote> refs/meta/config:refs/meta/config
    git checkout refs/meta/config
    $EDITOR project.config
----
and add the following lines:
----
  [allowSuperproject "<superproject>"]
    matching = <refspec>
----
where the 'superproject' should be the exact project name of the superproject.
The refspec defines which branches of the submodule are allowed to be
subscribed to which branches of the superproject. See below for
link:#acl_refspec[details]. Push the configuration for review and
submit the change:
----
  git add project.config
  git commit -m "Allow <superproject> to subscribe"
  git push <remote> HEAD:refs/for/refs/meta/config
----
After the change is integrated a superproject subscription is possible.

The configuration is inherited from parent projects, such that you can have
a configuration in the "All-Projects" project like:
----
    [allowSuperproject "my-only-superproject"]
        matching = refs/heads/*:refs/heads/*
----
and then you don't have to worry about configuring the individual projects
any more. Child projects cannot negate the parent's configuration.

=== Defining the submodule branch

Since Gerrit manages subscriptions in the branch scope, we could have
a scenario having a project called 'super' having a branch 'integration'
subscribed to a project called 'sub' in branch 'integration', and also
having the same 'super' project but in branch 'dev' subscribed to the 'sub'
project in a branch called 'local-dev'.

After adding the git submodule to a super project, one should edit
the .gitmodules file to add a branch field to each submodule
section which is supposed to be subscribed.

As the branch field is a Gerrit-specific field it will not be filled
automatically by the git submodule command, so one needs to edit it
manually. Its value should indicate the branch of a submodule project
that when updated will trigger automatic update of its registered
gitlink.

The branch value could be "'.'" if the submodule project branch
has the same name as the destination branch of the commit having
gitlinks/.gitmodules file.

If the intention is to make use of the Gerrit feature described
here, one should always be sure to update the .gitmodules file after
adding submodules to a super project.

If a git submodule is added but the branch field is not added to the
.gitmodules file, Gerrit will not create a subscription for the
submodule and there will be no automatic updates to the superproject.

Whenever a commit is merged to a project, its project config is checked
to see if any potential superprojects are allowed to subscribe to it.
If so, the superproject is checked if a valid subscription exists
by checking the .gitmodules file for the a submodule which includes
a `branch` field and a url pointing to this server.

[[acl_refspec]]
=== The RefSpec in the allowSuperproject section
There are two options for specifying which branches can be subscribed
to. The most common is to set `allowSuperproject.<superproject>.matching`
to a Git-style refspec, which has the same syntax as the refspecs used
for pushing in Git. Regular expressions as found in the ACL configuration
are not supported.

The most restrictive refspec is allowing one specific branch of the
submodule to be subscribed to one specific branch of the superproject:
----
  [allowSuperproject "<superproject>"]
    matching = refs/heads/<submodule-branch>:refs/heads/<superproject-branch>
----

If you want to allow for a 1:1 mapping, i.e. 'master' maps to 'master',
'stable' maps to 'stable', but not allowing 'master' to be subscribed to
'stable':
----
  [allowSuperproject "<superproject>"]
    matching = refs/heads/*:refs/heads/*
----

To allow all refs matching one pattern to subscribe to all refs
matching another pattern, set `allowSuperproject.<superproject>.all`
to the patterns concatenated with a colon. For example, to make a
single branch available for subscription from all branches of the
superproject:
----
  [allowSuperproject "<superproject>"]
     all = refs/heads/<submodule-branch>:refs/heads/*
----

To make all branches available for subscription from all branches of
the superproject:
----
  [allowSuperproject "<superproject>"]
     all = refs/heads/*:refs/heads/*
----

=== Subscription Limitations

Gerrit will only automatically update superprojects where the
submodules are hosted on the same Gerrit instance as the
superproject. Gerrit determines this by checking that the URL of the
submodule specified in the .gitmodules file starts with
link:config-gerrit.html#gerrit.canonicalWebUrl[`gerrit.canonicalWebUrl`].
The protocol part is ignored in this check.

It is currently not possible to use the submodule subscription feature
with a canonical web URL that differs from the first part  of
the submodule URL. Instead relative submodules should be used.

The Gerrit instance administrator should ensure that the canonical web
URL value is specified in its configuration file. Users should ensure
that they use the correct hostname of the running Gerrit instance when
adding submodule subscriptions.

When converting an existing submodule to use subscription by adding
a `branch` field into the .gitmodules file, Gerrit does not change
the revision of the submodule (i.e. update the superproject's gitlink)
until the next time the branch of the submodule advances. In other words,
if the currently used revision of the submodule is not the branch's head,
adding a subscription will not cause an immediate update to the head. In
this case the revision must be manually updated at the same time as adding
the subscription.

=== Relative submodules

To enable easier usage of Gerrit mirrors and/or distribution over
several protocols, such as plain git and HTTP(S) as well as SSH, one
can use relative submodules. This means that instead of providing the
entire URL to the submodule a relative path is stated in the
.gitmodules file.

Gerrit will try to match the entire project name of the submodule
including directories. Therefore it is important to supply the full
path name of the Gerrit project, not only relative to the super
repository. See the following example:

We have a super repository placed under a sub directory.

  product/super_repository.git

To this repository we wish add a submodule "deeper" into the directory
structure.

  product/framework/subcomponent.git

Now we need to edit the .gitmodules to include the complete path to
the Gerrit project. Observe that we need to use two "../" to include
the complete Gerrit project path.

  path = subcomponent.git
  url = ../../product/framework/subcomponent.git
  branch = master

In contrast the following will not setup proper submodule
subscription, even if the submodule will be successfully cloned by git
from Gerrit.

  path = subcomponent.git
  url = ../framework/subcomponent.git
  branch = master

== Removing Subscriptions

To remove a subscription, either disable the subscription from the
submodules configuration or remove the submodule or information thereof
(such as the branch field) in the superproject.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
