[ClusterLabs Developers] [RFC] Time to migrate authoritative source forge elsewhere?

Adam Spiers aspiers at suse.com
Wed Jun 13 12:00:52 UTC 2018


Nils Carlson <nils.carlson at ludd.ltu.se> wrote: 
>On 06/11/2018 08:31 PM, Adam Spiers wrote: 
>>Nils Carlson <nils.carlson at ludd.ltu.se> wrote: 
>>>On 06/11/2018 03:18 PM, Adam Spiers wrote: 
>>>>Nils Carlson <pyssling at ludd.ltu.se> wrote: 
>>>>>Gerrit is a much more powerful tool for code-review. The 
>>>>>workflow is less intuitive however and has a far higher 
>>>>>learning curve. 
>>>>
>>>>I disagree, but please can you clarify which version of Gerrit 
>>>>you are referring to?  The latest release (2.15) is an enormous 
>>>>leap forwards in usability: 
>>>
>>>Feel free to disagree, this isn't based on opinion on my part but 
>>>experience, I have migrated two companies (with around 20-30 
>>>developers) to gerrit and gitlab respectively and developers have 
>>>adjusted far faster to gitlab than to gerrit. The version was 
>>>pre-2.15, 2.13 I believe, but nothing revolutionary seems to have 
>>>happened (the same patch-set based workflow). 
>>
>>2.15 *is* revolutionary in terms of UX because the UI was rewritten 
>>from scratch (PolyGerrit).  True, the workflow is more or less the 
>>same in design, but how intuitive it will feel to newcomers (your 
>>original criticism above) depends heavily on the UI. 
>
>Maybe, but I doubt it would change much. People get over the bad UI 
>pretty quickly (weeks,) the workflow is the hard part. 

I'm still hoping to hear something which explains to me why the 
workflow is hard. 

>>>Personally I much prefer gerrit, but I have been using git since 
>>>2009 including kernel coding which puts higher requirements on 
>>>skill than most systems. 
>>
>>Yes, as an occasional git hacker I'm in a similar boat. 
>>>For your average developer Gerrit is a lot harder to adjust to it 
>>>seems.
>>
>>Yes, like I said I've heard this several times, but in the absence 
>>of concrete details I'm really struggling to understand how this 
>>could be more than natural inertia rather than genuinely significant 
>>practical hurdles. 
>>
>>However I'm not only willing to be proven wrong but actively seeking 
>>good explanations which *would* prove me wrong.  This is because 
>>I've already volunteered to write a document which helps people 
>>familiar with GitHub migrate to Gerrit (intended for the OpenStack 
>>community but of course it could be shared to a wider audience).  
>>And to do that well I really need help understanding what people 
>>struggle with when learning Gerrit the first time.  So if you can 
>>help with that I'd be really grateful, although don't worry if you 
>>don't have time :-) 
>>[snipped]
>>
>>>>but this is mostly an internal implementation detail; in 
>>>>practice everyone uses a tool such as "git review" which handles 
>>>>all that automatically behind scenes. 
>>>
>>>Yes, extra tooling is more or less the norm when using gerrit. 
>>
>>It's pretty common with GitHub too, I suspect.  But even if not, I 
>>don't see a one-off installation of a simple tool as a huge hurdle. 
>
>The difference is really on the IDE side. Eclipse has excellent 
>integration with gerrit these days, but most other IDEs do not. 
>Configuring your prefered IDE for Gerrit is not trivial in most cases. 
>
>I've seen specific tools for GitHub, but never seen anyone use them. 
>GitHub does not make use of specific review remotes as Gerrit does, so 
>there is no need for specific tooling or configuration. This is the 
>case with most of these tools, only Gerrit and Phabricator 
>require/encourage specific tooling. 

Yes, I accept that there is a need for most Gerrit users to install 
git-review.  But as I already said, this is a one-off cost which is 
low or even extremely low, and the pay-off is a workflow which is 
significantly simpler than GitHub or GitLab. 

>>Furthermore, without a helper tool or IDE which supports GitHub or 
>>GitLab, creating a pull request or merge request requires several 
>>more steps than with Gerrit: 
>>  0. Ensure that you have a remote fork to which you have push 
>>     access (e.g. by clicking the merge button if you don't 
>>     have push access to the target repository) 
>>
>>  1. Push your branch to a remote fork 
>>
>>  2. Locate that branch in the web UI 
>>
>>  3. Click the button(s) to bring up the window in which you 
>>     draft the pull/merge request 
>>
>>  4. Give the request a title and description 
>>
>>  5. Submit it 
>>
>>Compared to the single step "type git review", I'm somewhat 
>>mystified how anyone can claim that Gerrit is harder to get started 
>>with.
>
>As any programmer will tell you, complexity isn't measured in number 
>of steps. :-) 

Hrm, I've been programming for 36 years and don't recall ever hearing 
that.  Most likely I did hear it once or twice and forgot, but I don't 
think it's a common maxim.  A quick Google didn't reveal anything, at 
least.

>Each step above is trivial and some are in fact not 
>needed, and all are easy to explain. 

Agreed, but surely you aren't arguing that they are simpler than the 
single step "type git review"? 

>The above however isn't correct. For an open repo on Gitlab the steps 
>would be as follows: 
>
>1. Push your commit to a branch of the origin repo (assuming you are 
>part of the project, or have push access to a set of branches which 
>can be granted to any signed-in user), get a URL on the command line 
>for creating a merge-request. 

That's two or three steps.  They don't become a single step just 
because you put them under a single bullet item ;-) 

>2. Click the URL, review the contents of the merge-request (if you 
>pushed only a single commit Gitlab will take the title and comment 
>from that commit), click create at the bottom. 

Ditto here - multiple steps. 

The only difference I can see between that and what I wrote is that my 
step 2 can be circumvented by using the URL provided by the output of 
the CLI command.  That's a nice trick - thanks. 

>Sure, gerrit can do this in one step without opening the we browser, 
>but in general most people want to look at the review before forcing 
>others to do so. 

In Gerrit there is no difference between the review and the commit, 
therefore this can be accomplished by running "git show" before "git 
review".  Gerrit's 1:1 mapping between commits and reviews is a large 
part of why its workflow is so much simpler than GitHub's and 
GitLab's. 

>>>>>The negative sides of Gerrit typically outweigh the positive 
>>>>>for most organizations I'm afraid: - No central hosting like 
>>>>>gitlab.com. 
>>>>
>>>>That's not really true.  There are SaaS hosters of Gerrit, most 
>>>>notably GerritForge who also offer completely free hosting for 
>>>>FLOSS projects on http://gerrithub.io/ (although note that this 
>>>>particular free service uses GitHub as the "back-end"). 
>>>
>>>Github -> github.com Gitlab -> gitlab.com Gerrit -> many 
>>>alternatives. I.e. not central. 
>>
>>Why is that a problem though? 
>
>Not a problem, but a barrier to entry. It typically means yet another 
>sign-up and yet another account to manage. 

So do GitHub and GitLab. 

>I can expect most open-source interested developers to have a GitHub 
>account, and many have a Gitlab account. 

Yes, but sorry, that doesn't make the cost of signing up to GitHub / 
GitLab magically vanish to zero; it just means that cost was already 
spent.  Given that we're only talking about one-off costs here, I 
don't see how it's fair to claim that they have any significant 
advantage.  If every Gerrit repository ran on a different Gerrit 
instance then yes, sign-up would be an O(n) cost with respect to the 
number of repositories a developer is involved in, but that's just not 
representative of reality.  An unusually heavy user of Gerrit would 
still be unlikely to have to sign up more than about 5 instances, 
e.g. an extreme case might be: 

  - gitlab.com
  - Their company's private Gerrit instance
  - Android Gerrit
  - Eclipse Gerrit
  - OpenStack Gerrit

If each sign-up takes 5 minutes, that's 25 minutes cost over say, 10 
years (e.g. until the next git or Gerrit comes along), so it's 
basically a negligible cost. 

Perhaps we're having this debate because I'm thinking of learning 
curves / start-up in terms of time, whereas you're seeing it more as 
the challenge people tend to face in overcoming mental inertia.  I 
think the latter is a perfectly valid point - everyone suffers from 
mental inertia, including me - but as long as there are sufficient 
resources provided to help overcome that, such as quickstart guides, 
cheatsheets etc., I tend to have much less sympathy for that 
situation.  That's why I'm working on a quickstart guide for GitHub 
users who are coming to OpenStack's Gerrit. 

>>>>>- High threshold for new contributors (unusual workflow, hooks 
>>>>>needed. ) 
>>>>
>>>>I keep hearing this and I just don't understand it, sorry.  
>>>>What's unusual about the workflow?  You create a branch, commit 
>>>>to it, and then type "git review".  Could it really be much 
>>>>simpler? And Gerrit requires about the same amount of setup as 
>>>>GitHub.  I already addressed the hooks comment above.  I think 
>>>>most people forget that GitHub requires some setup because they 
>>>>already did it so many years ago.  If you have specific thoughts 
>>>>on this I'd love to hear them so I can understand your viewpoint 
>>>>better, because like I said you are not the only person I've 
>>>>heard this perspective from. 
>>>
>>>Again, not opinion. Painful experience. 
>>>What you outline is the trivial use-case, and using an additional 
>>>tool "git review". The more advanced use-cases are things like 
>>>responding to a review with new commits 
>>
>>With Gerrit: 
>>  1. Add / amend commits 
>>
>>  2. Run "git review" 
>>
>>With GitHub or GitLab: 
>>  1. Add / amend commits 
>>
>>  2. Run "git push", optionally with --force-with-lease, which requires 
>>     a fairly deep understanding of the implications of rewriting git 
>>     history.  This is a sufficiently complicated topic that I've 
>>     blogged about it twice to try to help reduce confusion: 
>
>No need to amend force push. Developers who are getting started with 
>git and are really fresh can push new commits to the same branch. 
>These can be squashed into a single commit at merge time to keep 
>history clean, with a "squash and merge" button. It is of course 
>better to do any squashing/amending locally, but users have different 
>skill levels and pushing them doesn't always lead to good results. 

Exactly.  So it seems we agree this is an area where GitHub's and 
GitLab's workflows make things unnecessarily complicated for less 
experienced users.  In contrast Gerrit side-steps this complexity 
by preserving the 1:1 mapping between commits and reviews. 

>>https://blog.adamspiers.org/2015/03/24/why-and-how-to-correctly-amend-github-pull-requests/ 
>>
>>        https://blog.adamspiers.org/2017/08/16/squash-merging-and-other-problems-with-github/ 
>>
>>
>>>or a complete re-write of the contribution. 
>>
>>With Gerrit: 
>>  1. Create new branch and commit the rewrite to it 
>>
>>  2. Run "git review" 
>>
>>  3. Abandon the old review with a comment linking to the new one. 
>>
>>With GitHub or GitLab: 
>>  1. Create new branch and commit the rewrite to it 
>>
>>  2. Go through the 6 steps I listed above for submitting a new 
>>     pull/merge request 
>>
>>  3. Abandon the old review with a comment linking to the new one. 
>
>Most users don't see it this way. They will run "git reset 
><starting-commit> --hard" to get back to the original state, then 
>create new commits and force push. No new review necessary. 

Yes, that may well be true.  Either way, Gerrit's workflow is simpler, 
since no decision is required about whether to force push; you just 
run "git review" and it always does the right thing. 

>>>I spent a lot more time supporting users on Gerrit when doing 
>>>these things than I did Gitlab users. 
>>
>>I don't dispute that.  But I'd love to hear more about the concrete 
>>reasons why. 
>>>Anecdotes on offer include things like "I re-cloned the the repo 
>>>and my branch isn't there even though I pushed it". 
>>
>>Yeah, that's a very good point that users who are used to pushing 
>>their changes somewhere central would need to relearn the new model. 
>>And thanks - that's a useful point I can capture in the document I'm 
>>working on. 
>>
>>But I still disagree that makes Gerrit inherently more complicated; 
>>it's just *different*.  In fact the number of steps in the processes 
>>listed above show quite clearly that its lack of requirement to 
>>first push changes somewhere central significantly simplifies usage. 
>
>Gerrit is more complex. If you want to think about it another way you 
>can consider that github and gitlab both mantain a 1-1 relationship 
>between local branches and branches on the server. 

No, the *user* maintains those relationships, and this requires extra 
manual work; not just when submitting reviews, but with the cleanup 
afterwards too. 

>Gerrit breaks this 
>with the review references. This makes it more complex for the user. 
>Of course, one can blindly tell the user to use extra tooling and not 
>think about how it works, but that isn't really constructive. 

Why isn't that constructive?  I'm a seasoned Gerrit user and I've 
hardly *ever* had to be more than dimly aware of refs/changes/ because 
git-review takes care of every single use case I rely on. 

>>>You then need to explain about refs/changes/... and that they need 
>>>to find their review there and create a branch again from the 
>>>correct change, which they first need to fetch. 
>>
>>There's no need to explain about refs/changes/... at all; just point 
>>them at git review -d: 
>>  -d CHANGE, --download CHANGE 
>>       Download the contents of an existing gerrit review into a branch 
>>
>>Another simple one-liner. 
>
>I generally follow the philosophy of explaining things to people. 
>Ignorance is seldom bliss for programmers. 

In general I agree, but being aware of the existence of refs/changes/ 
is different and much more easily achievable than having the exact 
details fresh at the top of your head for daily use.  The latter is 
simply unnecessary overkill. 

>>>Gerrit is a fantastic tool, but it isn't for everyone is my 
>>>conclusion. 
>>
>>Is *any* tool for everyone? ;-) 
>
>No, some people were quite happy in Perforce and ClearCase. Having 
>only a single source of truth as in ClearCase appeals to a lot of 
>people.

Right ;-)

>For a much less kind view of Gerrit you can see this article on 
>lwn.net : https://lwn.net/Articles/702177/ . 

Yeah, I was already aware of Greg K-H's dislike of Gerrit.  It's hard 
to miss his rants when you're a SUSE employee ;-) 

However that was from 2016 and the majority of his points in 
https://www.youtube.com/watch?v=L8OOzaqS37s are hopelessly out of 
date.

I know that you already fully appreciate the value of Gerrit, so 
forgive me for preaching to the choir, but there are apparently 
readers on this list who do not have experience with Gerrit, so 
hopefully the following is useful to them. 

Claim #1: Some Google employees hate Gerrit 

   Current reality: Google is heavily investing in Gerrit, are by far
   the biggest contributors to it, and have been responsible for the
   recent and ongoing quantum leaps forward in usability.  I know this
   because I met the whole team at the Gerrit User Summit in London,
   September 2017, saw several presentations on the improvements they
   have already made and are still working on, and talked at length
   with their UX expert who has been allocated to this project.

Claim #2: Patch submission is hard 

   Reality: well, we've discussed this to death in this thread :-)  As
   long as you accept the relatively tiny one-off up-front cost of
   account sign-up and installing "git review", it's a trivial
   one-liner.

Claim #3: Managing patch series is hard 

   Reality: These days Gerrit automatically shows when reviews are
   dependent on or conflict with other reviews.  Additionally there's
   a new hashtags feature for more flexible grouping of reviews:

     https://gerrit-review.googlesource.com/Documentation/intro-user.html#hashtags

Claim #4: When you look at a patch which touches multiple files, you have 
to scroll through multiple pages

   Current reality: This is no longer true in the rewritten UI
   (PolyGerrit).

Claim #5: Local testing is slow 

   Reality: "git review -d $changeid" is easy and quick.

Claim #6: If you update a patch series you get new ids 

   Reality: I have no idea what he was thinking when he said this.
   The Change-Id in the commit message does not change unless you
   decide to change it.  If he meant the git patch-id, then yes that
   will change just like it would with every single other code review
   system.

Claim #7: Discussion is in a web UI which is separate from your 
development team. 

   In the talk, Greg said "This forces your maintainers who are
   assigned to a project to do all the work.  You do not get any
   drive-by reviews.  Nobody on your team who isn't their job to do
   reviewing will *ever* review a Gerrit patch.  [...]  You have to go
   to an external site and search for what you want to review - it
   doesn't come to you.  The discussion's not there.  And even on when
   you do review it and you do make comments on it, it's local between
   you and that developer only.  The rest of your team doesn't see
   those comments."

   Reality: Gerrit (and GitHub and GitLab) all provide bi-directional
   gateways with email, allowing the user to choose exactly which
   events they want to subscribe to via email notifications, and to
   even reply by email.  Accomplishing the same via email filters is
   tricky enough that if you subscribe to mailing lists like kernel or
   git, you will typically end up drinking from a firehose of patches.
   Additionally, empirical evidence shows that drive-by reviews *do*
   happen.

The fact that he can't think of any pros of Gerrit (other than
"project managers like it because it gives them a sense that they know
what is going on") doesn't mean they don't exist.  It just means he's
either unaware of them or doesn't appreciate them.  The above
statement is true for normal developers, not just project managers.

But a kernel developer is very far from a typical modern developer
anyway.  And when you've spent one or more decades reviewing patches
on mailing lists, I can understand why you'd have mental inertia /
natural resistance to switching to something else.

I've submitted various series of patches to git, which has the same
code review workflow as the kernel, and I found it really painful
compared to modern review systems.  One big reason for that was that
the status of any given patch series is not clearly visible anywhere,
you're heavily reliant on regular updates from the maintainer in order
to understand the latest status of both a specific patch and of all
ongoing patches at an overview level.  That's an unpleasant and
unnecessary bottleneck.  And since Greg is (or at least was) a
lieutenant, he's effectively a maintainer who spends much more time
receiving patches than sending them, therefore he's much less likely
to be aware of this pain.  He even admits this problem:

    "I had 85 outstanding patches that nobody was reviewing for a repo
    and everybody thought everything was fine."

OK, that's far too much time spent on this thread.  We're basically on
the same page so I suggest we both return to more productive work ;-)


More information about the Developers mailing list