Phabricator/Diffusion

"Diffusion" is the Phabricator repository browser and repository management tool. Eventually we want to replace "Gerrit" for code review and repository management by "Differential", and "gitblit" for repository read-only mirroring by "Diffusion". Right now, we're mirroring some of our Git repositories to Phabricator for demonstration purposes.

Diffusion is integrated with the other tools in the Phabricator suite. For instance:
 * When you commit Differential revisions to a tracked repository, they are automatically updated and linked to the corresponding commits;
 * You can add Herald rules to notify you about commits that match certain rules;
 * In tasks and other places, you can automatically link to commits.

If you're looking for a new repository, that's still over here at Gerrit.

Callsigns
Callsigns are a thing in Diffusion. You can read about them at . Callsigns must be. This means that one or more letters from A to Z inclusive in the Latin alphabet must be in the callsign and the callsign is considered immutable. We have and follow callsign naming conventions. https://phabricator.wikimedia.org/diffusion lists all active repositories and their callsigns.

Module:Callsigns maps repository "paths" in gerrit to Diffusion callsigns, for example "mediawiki/extensions/AbuseFilter" maps to the callsign. git file takes a  parameter to refer to a git repository (T101358), so it invokes Module:Callsigns to create a link to a file in diffusion.

Repository-Admins
The Repository-Admins group in Phabricator is tasked with creating, managing and organizing our repositories. If you need help with a repo, these are the folks to ask.

Repositories are to be created using the naming conventions. Repositories can now be locally hosted to Phabricator and used via Differential/Arcanist.

Diffusion vs. Gitblit
We are switching our repository browser to Diffusion (T752) from gitblit (was at https://git.wikimedia.org).
 * ''See also Git/Gerrit evaluation

Advantages

 * Privacy: doesn't load external resources from googleapis.com.
 * Nice minor features of the project summary
 * README preview
 * "Locate file" quicksearch by filename
 * Allows grepping file content and filename from Browse > Show search (grepping not enabled on our gitblit, but was quite used at gitweb's time)
 * Easier to configure
 * "Path was deleted" feature when looking for a deleted file.

Disadvantages

 * No repository metrics
 * Will not be able to show big diffs.
 * No ZIP/tarball download.
 * Not linked from gerrit. No gerrit plugin available?
 * URL hard or impossible to type manually: they don't contain escaped characters nor .git suffix (like gitweb) but require remembering the repository-specific callsign, (e.g.  vs.  ).

Neutral

 * Discoverability: like gitblit, diffusion was set up with a restrictive robots.txt. Some things may not be blacklisted yet.
 * Performance?
 * "Remote repositories" (?)
 * No full list of projects ( is paginated), but that was too slow to use for some users anyway.

Email address privacy
Obviously, if you commit a change in Git using your email address which you configured in Phabricator, these two bits of information will be linked in the user interface.