summaryrefslogtreecommitdiff
path: root/doc/source/format_project_refs.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/format_project_refs.rst')
-rw-r--r--doc/source/format_project_refs.rst78
1 files changed, 78 insertions, 0 deletions
diff --git a/doc/source/format_project_refs.rst b/doc/source/format_project_refs.rst
new file mode 100644
index 000000000..799b5e761
--- /dev/null
+++ b/doc/source/format_project_refs.rst
@@ -0,0 +1,78 @@
+
+
+.. _projectrefs:
+
+The project.refs file
+=====================
+If one has elected to store source references in a single ``project.refs``
+file, then it will be stored at the toplevel of your project directory
+adjacent to ``project.conf``. This can be configured in your project
+using the :ref:`ref-storage configuration <project_format_ref_storage>`
+
+Sources for :mod:`junction <elements.junction>` elements are stored
+separately in an adjacent ``junction.refs`` file of the same format.
+
+
+.. _projectrefs_basics:
+
+Basic behavior
+--------------
+When a ``project.refs`` file is in use, any source references found
+in the :ref:`inline source declarations <format_sources>` are considered
+invalid and will be ignored, and a warning will be emitted for them.
+
+When ``bst track`` is run for your project, the ``project.refs`` file
+will be updated instead of the inline source declarations. In the absence
+of a ``project.refs`` file, ``bst track`` will create one automatically
+with the tracking results.
+
+An interesting property of ``project.refs`` is that it allows for
+*cross junction tracking*. This is to say that it is possible to override
+the *ref* of a given source in a project that your project depends on via
+a :mod:`junction <elements.junction>`, without actually modifying the
+junctioned project.
+
+
+.. _projectrefs_format:
+
+Format
+------
+The ``project.refs`` uses the same YAML format used throughout BuildStream,
+and supports the same :ref:`directives <format_directives>` which apply to
+``project.conf`` and element declaration files (i.e. *element.bst* files).
+
+The ``project.refs`` file format itself is very simple, it contains a single ``projects``
+key at the toplevel, which is a dictionary of :ref:`project names <project_format_name>`.
+Each *project name* is a dictionary of *element names*, and each *element name* holds
+a list of dictionaries corresponding to the element's :ref:`sources <format_sources>`.
+
+
+**Example**
+
+.. code:: yaml
+
+ # Main toplevel "projects" key
+ projects:
+
+ # The local project's name is "core"
+ core:
+
+ # A dictionary of element names
+ base/automake.bst:
+
+ # A list of sources corresponding to the element
+ # in the same order in which they were declared.
+ #
+ # The values of this list are dictionaries of the
+ # symbolic "ref" portion understood by the given
+ # source plugin implementation.
+ #
+ - ref: af6ba39142220687c500f79b4aa2f181d9b24e4...
+
+ # The "core" project depends on the "bootstrap" project,
+ # here we are allowed to override the refs for the projects
+ # we depend on through junctions.
+ bootstrap:
+
+ zlib.bst:
+ - ref: 4ff941449631ace0d4d203e3483be9dbc9da4540...