Copyright ©2015 CollabNet, Inc. All Rights Reserved.
Bringing Pull Request to Gerrit
A tale of feature development
Eryk Sz...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
CollabNet Facts
10,000+ customers,
proven in global
deployments as la...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
CollabNet Customers
Financials
Technology
Government
Other
Service Pr...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
CollabNet TeamForge - ALM Solution
4
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
TeamForge - Git/Gerrit Integration
5
Our approach:
• Support Open Sou...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Git/Gerrit Integration - Features
6
History ProtectionUsers & RBAC
Qu...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Workflow
7
yes
no
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request from Gerrit User Perspective
8
What is a Pull Request?
–...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
From Pull Request User Perspective
9
Will my branch appear in UI once...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Motivation behind Pull Request
10
• Pull Requests are popular
– Our c...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Implementation - User Interface Findings
•Gerrit UI is very powerful ...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Implementation - User Interface Solution
• Seamless UI and Consistent...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Implementation - REST API
• Gerrit Rest API:
– While it is doing grea...
Copyright ©2015 CollabNet, Inc. All Rights Reserved.Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Demo
Pull Request...
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Code Browser - Branches
15
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Create Pull Request
16
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Created
17
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request In Review
18
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Reviewed
19
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Updated - Owner View
20
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Updated - Reviewer View
21
Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Pull Request Ready To Be Merged
22
Copyright ©2015 CollabNet, Inc. All Rights Reserved.Copyright ©2016 CollabNet, Inc. All Rights Reserved.
Thank you very mu...
Upcoming SlideShare
Loading in …5
×

Bringing Pull Request to Gerrit

206 views

Published on

With CollabNet TeamForge it is now possible to use feature branch workflow in addition to standard gerrit workflow to work on your changes. In this presentation you will learn how it works, why we have decided to implement it, how was it implemented and what were the choices we have made and challenges along the way.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
206
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Founded in 1999, CollabNet is truly one of the founding fathers of the open-source movement
    Today thousands of customers rely upon on our solutions to develop high quality software at speed
    We maintain a global presence with offices in SF, Houston, London, Berlin, Chennai, Tokyo
  • We have customers who are leaders across the industries and verticals they represent.
    From Financials, Technology, Government, Service Providers and Other key industries like manufacturing, healthcare and department stores.
  • The patches I mention here are those that did not get its way into vanilla Gerrit. We want to give back to the community and are not interested in maintaining our own Gerrit version. Our extra patches are rebased over each version of Gerrit. So I think it is fair to say that we don’t have a fork. So what features do we deliver?
  • Here you can see the main features that we provide on top of Gerrit. We have TeamForge sync plugin with let us to maintain users and their access rights to Gerrit via TF Role Based Access Conrol model. We have notification plugin that delivers email notifications to users that use Gerrit as Git server. And we have our history protection plugin that assures that no branch will be deleted or rewritten by accident. Those have been presented on Gerrit User Summit in 2014. Last year I’ve presented Quality Gates wizard, a way to define your own submit rules without prolog. We also have Replication feature, which is based on Gerrit replication plugin, but allows managing and controlling of the replication from TeamForge. And this year features are Git LFS (which is based on the plugin available in Gerrit core) and the PullRequest. So let’s talk about pull request.
  • What is a pull request? Let’s start with a workflow. For a developer working on pull request it starts in similar way as in Gerrit.
    One create a feature branch and create some commits. But instead of pushing it for review, the branch is pushed to the remote. We call it a feature branch. Once we have a feature branch on the server one can create a pull request. A request to pull the changes from the feature branch and merge it onto destination branch, which needs to be specified as well. Creating a pull request is equivalent to publishing changes for review. Then the changes are being reviewed, can be reworked, and after they are approved the pull request get merged into the destination branch. Then the feature branch usually gets deleted. So comes the question: how this can be mapped onto Gerrit?
  • The answer is quite obvious, if you think about it: Pull Request is a merge commit pushed for review. So everyone can do that in Gerrit. Prior to the version 2.13 the drawback was, that there was no way to review the changes of merge commit as those were not visible in Gerrit (unless there was a conflict that got automatically resolved). Fortunately David Grzegorczyk, a developer from Poland proposed a change, that enables a diff of merge commit against any parent. So, my colleagues were working on this change and with help of community, the change got merged. So now everyone can use pull request in Gerrit. Right? Well, not really. I would say that the pull request feature is available in Gerrit to people, who do not actually need/want it. Let me show you why.
  • Let’s have a look at the feature from a perspective of a Pull Request user that starts his adventure with Gerrit.
    He will be able to create his branch with changes and push it to remote but that’s about it.
    Why?
    There is no user interface that follows the model that the Pull Request user is familiar with.
    So he cannot leverage what he has learned while using other tools.
    So for him Pull Request still does not exists. And that’s where our feature comes in.
  • Bringing Pull Request to Gerrit

    1. 1. Copyright ©2015 CollabNet, Inc. All Rights Reserved. Bringing Pull Request to Gerrit A tale of feature development Eryk Szymanski Potsdam Engineering Office CollabNet
    2. 2. Copyright ©2016 CollabNet, Inc. All Rights Reserved. CollabNet Facts 10,000+ customers, proven in global deployments as large as 80,000 users and 1 billion commits Leader in open-source based application lifecycle management, version control, DevOps, and collaboration solutions 250 employees across the globe Founded in 1999; HQ in South San Francisco, CA 2
    3. 3. Copyright ©2016 CollabNet, Inc. All Rights Reserved. CollabNet Customers Financials Technology Government Other Service Providers 3
    4. 4. Copyright ©2016 CollabNet, Inc. All Rights Reserved. CollabNet TeamForge - ALM Solution 4
    5. 5. Copyright ©2016 CollabNet, Inc. All Rights Reserved. TeamForge - Git/Gerrit Integration 5 Our approach: • Support Open Source – Give back to the community • If it is Gerrit core change, open source it – Do not fork • Stay as close to current Gerrit as possible – It is ok to have patches on top of vanilla Gerrit – But those are regularly rebased as Gerrit progresses • Everything else goes into the plugins Based on Gerrit 2.13.2 + some patches and 6 proprietary plugins
    6. 6. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Git/Gerrit Integration - Features 6 History ProtectionUsers & RBAC Quality GatesReplication Git LFS Support Pull Request Notifications
    7. 7. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Workflow 7 yes no
    8. 8. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request from Gerrit User Perspective 8 What is a Pull Request? – It is a merge commit pushed for review. Does it mean it is possible to have a pull request in Gerrit? – Yes, one can have a merge commit pushed for review. But can I see a full diff to review the changes? – Yes, it is possible since this patch got merged: http://gerrit-review.googlesource.com/#/c/72092/ So what’s the big deal? – No User Interface. Pull Request model is quite different than Gerrit model and Gerrit UI does not support it.
    9. 9. Copyright ©2016 CollabNet, Inc. All Rights Reserved. From Pull Request User Perspective 9 Will my branch appear in UI once I push it to remote? – Yes, you can see it in Gerrit. So where is my create pull request button? – There isn’t any. Oh, I thought you said there is a Pull Request feature in Gerrit. Although technically speaking it is possible to use the Pull Requests, from a user perspective there is still no such a feature in Gerrit
    10. 10. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Motivation behind Pull Request 10 • Pull Requests are popular – Our customers ask for it • General familiarity with the Pull Request model – Easier onboarding for new TeamForge users • Support feature branch development model – Final big-bang review before merge – One can even combine that with Gerrit model having both Our goal was to deliver an intuitive Pull Request UI to enable easy onboarding for people who are already familiar with Pull Request and do not know Gerrit
    11. 11. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Implementation - User Interface Findings •Gerrit UI is very powerful but hard to use for a novice •Adding a new feature might not make it easier •It is hard to maintain UI changes that are not upstream •Working on UI with the community may slow us down and does not give us full control over the UI •The user experience degrades every time one have to switch between different applications •Not sure what to choose: GWT or PolyGerrit (at that point of time) 11
    12. 12. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Implementation - User Interface Solution • Seamless UI and Consistent flow for TeamForge Users • One can use Pull Request or other Gerrit features without even seeing Gerrit • Everything happens in one place - TeamForge Code Browser 12 Implement the UI in TeamForge Code Browser
    13. 13. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Implementation - REST API • Gerrit Rest API: – While it is doing great job for Gerrit, it is not always optimal in delivering required data for our UI (i.e. Pull Request) – Not versioned (and sometimes changes) – No support for O-Auth authentication • Solution: – Come up with our own REST API – It comes as a plugin and is specific for our needs – Versioned and uses O-Auth for authentication 13
    14. 14. Copyright ©2015 CollabNet, Inc. All Rights Reserved.Copyright ©2016 CollabNet, Inc. All Rights Reserved. Demo Pull Request in Action
    15. 15. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Code Browser - Branches 15
    16. 16. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Create Pull Request 16
    17. 17. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Created 17
    18. 18. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request In Review 18
    19. 19. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Reviewed 19
    20. 20. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Updated - Owner View 20
    21. 21. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Updated - Reviewer View 21
    22. 22. Copyright ©2016 CollabNet, Inc. All Rights Reserved. Pull Request Ready To Be Merged 22
    23. 23. Copyright ©2015 CollabNet, Inc. All Rights Reserved.Copyright ©2016 CollabNet, Inc. All Rights Reserved. Thank you very much Any Questions?

    ×