{% extends "base.html" %} {% import "repo_tabs.html" as m %} {% import "diffusion_rows.html" as d %} {% block title %}Diffusion · {{ repo.owner }}/{{ repo.name }}{% endblock %} {% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %} {% block tabs %}{% call m::tabs(repo, "diffusion") %}{% endblock %} {% block content %}

Diffusion how changes move between this repository and the ones that pin it

Each pill has two halves. Left, the upstream: checked its own run passed, untested it has no checks, failing its run failed. Right, the repository that pins it: passes its run on the bump passed, fails it failed, testing still running, up to date nothing to bump.

{% if !used_by.is_empty() %}

Used by {{ used_by.len() }}

{% if unverified %}
{{ repo.owner }}/{{ repo.name }} has no checks of its own, so its consumers' bumps are amber: only their own pipelines test them. A .flow/pipeline.kdl here that passes turns them green.
{% endif %} {% call d::rows(used_by) %} {% endif %} {% if !follows.is_empty() %}

Follows {{ follows.len() }}

{% for (up, c) in follows %} {% endfor %}
UpstreamSubrepoBehindUpstream │ downstreamOpen bumpLast landed
{{ up.owner }}/{{ up.name }} {{ c.path }} {{ c.bookmark }} {% match c.behind %}{% when Some(n) %}{{ n }}{% when None %}?{% endmatch %} {% call d::chip(c) %} {% if let Some(n) = c.bump %}#{{ n }}{% if let Some((r, st)) = c.run %} · run #{{ r }} {{ st }}{% endif %}{% else %}none{% endif %} {% if let Some((n, at)) = c.landed %}#{{ n }} {% else %}—{% endif %}
{% endif %} {% if used_by.is_empty() && follows.is_empty() %}

No repository on this hub pins this one, and it pins none that this hub holds.

{% endif %}

Diffusion opens a proposal in a consumer when its upstream moves, and never lands one itself. How each repository follows is under its Settings › Diffusion. How it works

{% endblock %}