Phabricator: An open source, software engineering platform
github.com
github.com
Review Code or just stare at it
Review others' code with Differential, because they can't be trusted.
...
• Shows text in several different colors.
...
Have terrible software? Keep track of all the defects and problems with
your awful code using Maniphest.
• Keeps track of bugs.
• You can assign them to people.
• Maybe you could fix them eventually. (optional)
...
The arcanist command line tool gives you CLI access to most of Phabricator's
functionality.
• Many cryptic commands.
• ...
http://phacility.com/: Phabricator, except you pay money for it.* Written in PHP so literally anyone can contribute, even if they have no idea how to program.
The tone of the project itself is similar to the tone of the site, so if you find it off-putting or believe your co-workers would find it unprofessional, the product may not be a great fit for your environment anyway.
We also haven't heard feedback about anyone having difficulty convincing others to try Phabricator because of the project's tone. Again, it's possible we're just not aware of it, but we have heard feedback about other issues in this vein (for example, the LAMP stack being a hard sell).
We use it every day at work. At first we were like, what is this 'Clowncopterize' button? But then we enabled the serious business flag and we were off and running.
We also just got rid of "Clowncopterize":
* Easily automatic updating.
* Really nice code reviews.
* Many features built in.
It also has some very terrible downsides:
* It expects you to use its work flow (though you can work around it) for merging code back into master.
* It requires manual config per git repository.
* arcanist is a pain to install (and php)
* Its expectations don't seem to quite match up with gits. It seems to often have trouble figuring out what I'm trying to send for code review. I've given up on it being smart and now just always run: `arc diff master` or `arc diff master --update D<ID>`.
1. `arc land` is optional, and always has been. If you don't want to use it, you can just use normal `git` commands. All `arc land` gives you is a few checks against human error.
2. `.arcconfig` is no longer required, although if you want to use integrations like lint, you'll still need to configure them.
3. Anything we can improve on?
4. You should be able to use `arc which` to understand what `arc diff` will do. You can change what `arc diff` will do by specifying a different set of "base" rules, according to this document:
https://secure.phabricator.com/book/phabricator/article/arca...
FWIW, a friend who'd never used the tool got up and running (after a kind of messy install) in less than 2 hrs. For any other undergrads out there doing any serious project work with people, this is worth your time. I mostly use it as a personal task-manager (asana would do the job), but I like how good its command line tools are, and how I can do just about anything from terminal.
Here's Phabriactor's weekly code churn
http://screenshots.gitsense.com/phabricator-churn/
And its weekly lines of code change
I know for instance that the Rust project has had some frustrations with Github when it comes to code reviews, possibly for issue tracking too. Does anyone have any experience with phabricator as a bug tracker?
The IRC channel is a great place for Q&A and epriestley et. al. are always there to offer help.
Before you bash it for being written in PHP, take a look at the source; it is unlike any other PHP code I have ever seen.
https://github.com/facebook/phabricator/blob/master/webroot/...
Also this comment is pretty telling:
// If execution throws an exception and then trying to render that exception
// throws another exception, we want to show the original exception, as it is
// likely the root cause of the rendering exception.
I'm not saying this is a bad project, it looks excellent and the code is pretty good but you can't escape having to do some nutty things in PHP.---
To provide some context, this is the top-level entry point for all requests. It routes requests to code which does application-level things, like showing a code review or updating a task or whatever.
When the application-level things go wrong, we try to display a pretty, human-readable exception page with a nicely formatted stack trace (if you're in developer mode), etc. This page relies on some infrastructure subsystems (like configuration, to check for developer mode, and static resources, to include JS and CSS, and rendering, to actually produce the HTML) working correctly.
Normally, the exception is in application code and everything works fine. We produce a pretty page and send it back to the user.
However, sometimes there's an error in one of these subsystems. If we start rendering the page and encounter a second exception during rendering, we fall back to a less-pretty page which has bare text and no dependencies on subsystems. Normally, this happens during development when you've made a mistake in changing one of the subsystems, and all JS inclusion or all configuration checks are failing.
On this bare page, we want to retain the original exception (as well as show the followup exception) because it may be helpful in identifying and resolving the issue.
With the obvious caveat that I wrote the code, this architecture seems sensible and appropriate to me, and appears to function correctly in practice.
To answer your question, I'd start with why you are worried about exceptions in rendering your exceptions? Whatever you are using to render your exception should be so simple and stable that you shouldn't need to worry about it.
Also another question, from a fairly quick glance and I admit I didn't read through every last line of code, it appears as if all application execution is wrapped in a try/catch block, instead of exceptions being caught and handled closer to the potential points of failure is there a reason for this?
And one nitpick, because it was kind of a pain to follow some of the code but nested if/else statements five/six layers deep are generally kind of discouraged.
Thanks for taking time out of your weekend to respond and good luck to your team!
Unfortunately, to me, the Atlassian toolchain still wins out over it, provided it's within the budget. I vastly prefer Jira's Agile boards to anything else I've ever used, and it's integration with Stash and Bamboo just make things absolutely lovely.
But I mean, as long as it's not Mantis.
I'd love it if someone started a project like phabricator but in community with a decent package manager and robust module ecosystem like node.js, python, go or ruby, with go or node.js being my first choices. Large monolithic projects with half-baked plugin management and profiteering seems to be a recurring theme in the PHP ecosystem (joomla, drupal, magento, wordpress). I feel that a project like this birthed in one of those other communities would promote a much simpler core product the can grow with your needs.
I'm really not trying to hate but just vent some frustration.
On the other hand, looking at the site today, it looks like it might have changed a lot since when I first tried it like 2 years ago. Might have to give it another go.
EDIT: managed to compile it, it's just the RPM that wouldn't build :P (still wouldn't dare run this on the servers though)
Who cares.
What will happen to these projects if that is the case?
Also the tools they produce are an order of magnitude better than their main product, which I can't wrap my head around either.
The GitHub URL will probably change if Facebook vanishes, but the project would otherwise be unaffected.
Keep it up buddy.