My company uses Mercurial as our primary SCM. Rather than a handful of very large repositories, we have dozens of small repositories, each one storing a relatively self-contained application or library. I've installed Phabricator in order to evaluate its potential as a repository browser and code review tool.
It's fairly common for us to make changes which affect multiple repositories. For example, I may add a new API to a library, and update two or three applications to use that API. I've found that Differential doesn't seem to handle revisions which affect multiple repositories very well, and I'm looking for advice regarding best practices.
I'd like to be able to upload changes from several repositories to the same revision. I've found that when I do this (using arcanist) the revision is attached to the last repository from which I uploaded, and the files are mixed together. Worse, if files from different repositories have the same name (e.g. Makefile, README), Differential presents them as if they were the same file.
Ideally, I'd like to see Differential associate files with repositories, and to permit multiple repositories in the same revision, but I recognize that there are lots of details (e.g. branches) which could make this complicated.
Are there any established best practices for dealing with revisions which affect multiple repositories? Have they been discussions in the past about improved support for this?
I don't believe there's currently a way for a revision to support multiple repositories and I don't imagine that solution would be desired - it would introduce quite a bit more complexity to the code/commit workflows that Differential currently supports.
Instead what may work in this situation is relying on the dependency relationship between revisions - create a separate revision for each repository's change. If the summary of the revision contains Depends on D123 then Differential should create the dependency relationship. More information on the summary text identified in T5132.
In the situation you described with modifying an API - the core API repository that is modified would have the initial revision followed by any additional repository's changes depending on it.