Phorge: Going Public
we.phorge.it
we.phorge.it
* Differential, a code review tool
* Diffusion, a repository browser
* Herald, a change monitoring tool
* Maniphest, a bug tracker
* Phriction, a wiki
What do you mean by this?
With GitHub / Gitlab you push a branch and tell the tool to generate the diff by comparing two branches.
With Phabricator you make the patch locally and push the patch directly for review. There is fooling to help you do this, as well as to pull and apply patches.
This decouples Phabricator from your VCS tool and is partly a legacy of a time when Facebook had some engineers (and the central repo) using Subversion, and others using git. Even when everyone is using git, there are still 1001 different workflows which people use, so Phabricator ignores all that and zeroes in on the relevant bit: the code change you are proposing.
It is more precise, imho. At its heart, code review is a human process for discussing the merits of a document that happens to be structured in the form of @@, + and - symbols. You can bolt other tools onto the side of it for CI/CD, linting, etc., but the human readable code change and social interaction parts are still front and centre.
Individual, atomic ideas are expressed as a single diff which maps to a single commit. Representing one idea as multiple commits is discouraged, though Phabricator does keep its own history of how a patch evolves should you ever need to refer to it.
There is not one exact correct philosophy about how small the atomic unit is or what constitutes too much work, but the general wisdom is something to the order of "do one thing."
I believe a PR should "do one thing," so PRs with multiple commits should be safe to flatten, else they likely contain too much. Of all of the things Google is rightly criticized for, their methodologies towards code review are pretty good and this is more or less what it felt like working in pseudo-Perforce. What if you needed multiple changes? Well, it was certainly more cumbersome than needed, but serieses work great here. Not only that, but patch serieses are already well established in the software engineering canon! Plenty of projects have accepted patch serieses over mailing lists for decades.
I know many people have seen Github-style workflows work pretty well and so are unlikely to be receptive to the idea that some of the fundamentals could be wrong, but my advice is please consider it. It's not like there's one exactly correct way to handle merging changes, but I've found that the process of focusing on atomic sets of changes individually has improved my discipline as a software engineer. It may be a bit too wanky to call it "enlightening," but it's pretty close.
1) At issue here is not (just) the portion of the history in the changes under review, but the choice of where that history starts. That's what the commenters above mean by "diff based" and "branch based". If I start a Git branch on HEAD@{yesterday}, and HEAD@{today} renames a function that I'm using, then there is a semantic difference between approving solely my changes and approving my branch with information about its branch point. And in a workflow where only my changes are under review without further history, it's entirely possible for me to submit a set of changes that simply don't sensibly apply to a specific target branch, because the tooling did not reflect that my source branch is different.
Note that all of this true even if "my changes" takes the form of a series of patches, such as a [PATCH m/n] series posted to a mailing list using an LKML-style workflow!
2) All that said, I do not know of any tool that makes it particularly easy to manage both of these pieces of history in a review. All the Git-based review tools I've seen (GitHub, GitLab, Gitea, etc.) make it fairly easy to see where the remainder of history is, view the final state of a modified file with history (e.g., it's easy to see the blame view of a modified file), etc. But they don't default to showing you the commit-by-commit history; they show you the diff between the beginning and end for review. Meanwhile, the [PATCH m/n] workflow (e.g., git format-patch, including Sourcehut's tooling on top) is in fact much closer to the Phabricator one in spirit; while it does permit you to see the commit-by-commit history, it has no idea what the history before the first patch is, and it's difficult to even tell if a patch got merged!
So in a practical sense, there isn't really a tool that lets you work with full history. You have to make some form of compromise. In practice, I think the most common compromise is to constrain yourself to making one commit per code review; if the history is complex enough to really want commit-by-commit review, you're probably best off making multiple reviews anyway.
(You might object - what if the code doesn't build or work right between your first and second commits? But that's already a bad place to be, because ordinary git bisect will have false build failures if it lands between those two points. There is git bisect --first-parent, but first, your project had better be doing --no-ff merges to make this useful, and second, the effect of it is to ignore the detailed history, so if you're going to ask people to do that, why burden them with the detailed history in the first place?)
The other compromise here, weirdly enough, is Phabricator itself. Because Phabricator reviews diffs and not branches, you can submit two independent code reviews for two dependent commits, and Phabricator won't care. If you try to do this with any of the pull-request-style tools, the second code review will include both changes because they know history; Phabricator doesn't, and it will show just the second change if all you sent it is "arc diff HEAD^". And then you can "arc land" those on your own. (But you have to be careful about getting the order right, because, again, Phabricator doesn't know how to do that for you.)
I hope Phorge is just as successful and retains that levity and unique polish that Phab had; looks like a lot of the old guard contributors are around as part of this, so I'm very hopeful. Maybe I should spin up some of my old patches for things like WebAuthn support and re-submit them...
For what it is worth, GitLab and GitHub both do an absolutely terrible job of selling to someone where cloud isn't an option.
I honestly couldn't even figure out how to buy an on-prem license.
If you go to the pricing page[0] and click the “Buy GitLab <tier>” you’re interested in purchasing (Premium or Ultimate), a pop up will appear and you can purchase an on-prem license by clicking the “Purchase self-managed” button.
Edit: actually looks several of the homepage links are broken.
We built Graphite (https://graphite.dev) to bring a lot of that goodness to developers still stuck on Github for one reason or another (after finding that we ourselves were locked into GH). And I'm glad others are championing that as well.
Technically true, but seems out of date...
Issues: https://we.phorge.it/T15034
Pull Request: https://we.phorge.it/D25015 (or the less "Outlook-ish" view of show me the goods, then I'll know what you're talking about: https://we.phorge.it/D25015#toc )
CI: https://we.phorge.it/harbormaster/build/69/
and I guess a "stack overflow for teams" replacement: https://we.phorge.it/Q14
I never got GitHub's PR model. Maintaining separate branches of a single codebase is something I want to do approximately never, and a single commit is the right atom for code review.
Thus, I find Phabricator to be intuitive in a way that branch-based workflows never were.
Phorge: A community-maintained fork of Phabricator - https://news.ycombinator.com/item?id=27773747 - July 2021 (26 comments)
Any tldr articles about the whole thing?
The twist is that it was developed by a commercial company called Phacility, and their monetisation model was that you had to pay to be able to submit bug reports or even create an account on their Phabricator instance. As a result I don't think they have many external developers.
They packed up shop a few months ago. Phorge was created to continue development.
My company paid, and I'm sure they wouldn't have donated anything if they didn't have too.
Quite frustrating to not be able to even comment on issues though.
(And actually, you could still submit bugs and comments generally speaking if you were an "old school" contributor who had generally high-value contributions; I was in this category and never had my permissions pulled, and dropped by from time to time to submit things -- but that was the exception and not the rule.)
I really, really liked Phabricator and would happily have replaced Jira + Confluence + GitHub with Phorge if I was starting somewhere from scratch.
Line height issues. Odd icons. Weird verbiage. Swapping ‘ph’ for ‘f’. A declaration the author is a ‘User’, with no projects, and a “tada” token (whatever that is).
Phab users may feel right at home. Unfortunately.
Yes, my phab experience has been underwhelming and quite confusing. Each piece functions nominally, but is a miserable cacophony of integration. I hope the leaders of this project take some creative liberties with the vision and organization. It’s needed - lest a full restart of this thinking take the reins.