Definitions/Background
- A “Topic” allows a group of one or more Changes to be reviewed
together.
- Each Topic has an external “Topic Name” for reference by humans and
during pushes.
- Each Topic has an internal “Topic-Id” representing the topic as a
whole.
- Only one Topic with a given Topic Name may be open at any one time.
- Each open Topic Name will be mapped to its internal Topic-Id.
- Once merged/abandoned the name can be reused and will get a new id.
- A “Topic Rev” is one revision of a Topic, defined by its head
commit and merge base(s), and conceptually equivalent to a Patch Set in
a normal Change.
should a "Topic Rev" have always the same amount of changes ? can you add a new change in "Topic Rev 2" ? can you remove a change in "Topic Rev 3" ?
- Topics can overlap i.e. a Change can appear in multiple open topics.
could you please elaborate a bit on how this should work ?
if a change X that appears in both topic A and topic B gets merged with topic A, does it disappear from topic B ? or did I miss something ?
will a change belonging to a topic be rendered differently ? how will a change belonging to more than one topic be rendered ?
- A Topic that contains an out-of-date Patch Set of a Change cannot
be Submitted.
is this because of a change can belong to more than one topic ?
The constructed “topic changes” in most senses will be treated as
changes like any other, they would appear in dashboard etc. However, the
rendering of the change page for a Topic will be a bit different:
- The raw meta data commit message will not be rendered. Instead a
commit message will be generated that looks a lot like what might be
generated when the topic is merged e.g. a list of commits in the topic
as “%h %s” lines.
- Each revision of the topic will be shown in a “Topic Rev $N” block
similar to a normal “Patch Set $N” block.
- Each “Topic Rev” block will list the changes associated with the
Topic as links to the individual Patch Sets on their corresponding
Change pages.
- Each “Topic Rev” block will also show the normal file-wise diff
computed from the artificial topic commit to show the net change. It
will be reviewable with line-wise comments like any other Patch Set.
will you render it similar to https://codereview.qt-project.org/#/t/56/ ?
The “topic change” can be review and merged at which point Gerrit would
then also label the changes associated with it as merged.
Why would you like to review the topic ? Isn't enough that all the changes are reviewed to merge the topic ?
Cheers,
--
Sergio Ahumada
s...@sansano.inf.utfsm.cl
the merge as a single unit when the work is finished. Is that doable?
Hope that helps,
Jonathan
We have
talked before about making this possible for merge commits.
I believe there is a change up for review by Brad Larson to
do that,
Hi,two minor features which topics have and branches don't, and haven't seen mentioned yet:A topic provides a list of all required changes. Currently the Dependencies view shows only the immediate parent and child. Adding the option to expand the dependency view to show all changes between the merge base (the closest parent which have been merged) and the tip would give this nice feature.
One minor issue with branches compared to topics is that they don't automatically get closed when merged. It might be useful to define a type of short lived topic branch, which can be created on the fly by a user by pushing to refs/for/somebranch/topic (this should already work with the current permission setup) and which (its ref) gets automatically deleted when merged. Otherwise the list of branches would become huge if a branch is used for any small topic.
We have
talked before about making this possible for merge commits.
I believe there is a change up for review by Brad Larson to
do that,It would be nice, if this could be extended to all commits. For non merge commits it would be nice to be able to see the diff relative to the merge base (as defined above for the dependencies).An example of how to write a prologue rule which depends on the subsequent merge (e.g. from the topic branch into the main branch) would be nice.
Roland--
ORNL/UT Center for Molecular Biophysics cmb.ornl.gov
865-241-1537, ORNL PO BOX 2008 MS6309
--
For my teams the workflow we take is:
1. Develop new features on a feature branch.
2. Each commit on the feature branch is reviewed by the feature team.
3. Prepare a squashed merge of the feature branch into master and push for review
4. Prepare a real merge of the tip of the feature branch into master
5. Perform code review by the wider team, when it fails code review go back to 2 for the issues to be fixed.
6. Submit the real merge of tip and abandoned the squash merge.
The process isn’t ideal, particularly as master can often be changing as other features are being merged, poms updated with new release versions etc.
The number one biggest issue we have is that gerrit doesn’t support reviewing merge commits. The latest versions make it slightly better but still aren’t ideal. This is why we have to make the merge commit. Merging in Brad’s change (https://gerrit-review.googlesource.com/#/c/33960/4) would help resolve this part of the issue.
The next issue is that creating a topic merge is additional hassle (and potentially error prone). Having the ability in the UI to create/update the merge would simplify this. This probably needs to cater for two different workflows:
- a short lived feature branch which will only be merged into master once. In this case if a new patch is pushed to the branch and then the prepare merge commit button is pressed for a second time it should reuse the existing merge commit, adding it as a new patchset.
- A long lived branch which may be merged into master multiple times. In this case the user may need the option of creating a new change rather than reusing an existing one.
Sometime review comments (or build failures) are over trivial issues such as a missing semi-colon or comment. Having gerrit allow simple online file editing would allow these types of things to be resolved quicker. If the change-set is still outstanding then it should be added as a new patchset, if the change has already been merged then a new commit should be created for it.
Merges, like rebases, have a high chance of having conflicts. At the moment the rebase button flatly refused to rebase if it detects any conflicts. Once the above support is provided, it would be possible for a new patchset to be created regardless, with conflicts highlighted and the option to compare against both base branches. The patch-set can be prevented from being merged (or even build by Jenkins) until someone has gone through and edited the change to resolve/verify the conflicts as necessary.
To me these are the main changes that would make working with topics (and just generally) much easier and reduce a load of pain, though implementing them probably isn’t anywhere near as simple as I’ve made out above! Getting Brad’s change merged would at least be a giant leap in the right direction.
Thanks for the hard work,
Thomas
From: repo-d...@googlegroups.com [mailto:repo-d...@googlegroups.com]
On Behalf Of Saša Živkov
Sent: 16 December 2012 21:06
To: Roland Schulz
Cc: Repo and Gerrit Discussion
Subject: Re: Gerrit Topic Review - Take two?
On Sat, Dec 15, 2012 at 1:14 AM, Roland Schulz <rol...@utk.edu> wrote:
Let me try to describe how I would handle this scenario in the stock Gerrit:1. assuming the master branch already exists in that project in Gerrit I wouldcreate the 3 additional branches (in Gerrit): dumbidea, iss91, iss91v2They would probably not all be created at the same time but at the pointin time when work has to start on that (topic) branch.2. Developers working on the dumbidea topic would push to refs/for/dumbidea,review changes and merge them in the dumbidea branch.The same applies for the two other topic branches.3. When the dumbidea is finished and looks great, a developer mergesit locally with the master branch and pushes the merge commit to the masterbranch in Gerrit. It could be pushed for code review or bypassing code review.4. when iss91v2 topic branch is good, a developer merges it locally withmaster and pushes the merge commit to the master branch in Gerrit.The result looks exactly as on the second commit graph in that article.Can you identify and explain issues with the approach I described and thenexplain how having "strong topic support" would help?Saša
Also, how can someone indicate to you that A B C were ready
to be merged, go ahead and do this without D E?
Please clarify what you mean by review?
> > So I wonder, is the desirable feature really to be able
> > to restrict partial merges, or to be able to merge them
> > all at once? This seems like 2 different features, and
> > if people want them, why force them to be tied
> > together?
>
> I think the desirable feature here is the ability to
> review and merge them as one unit.
Do you mean approve?
We have worked hard to make approvals flexible in Gerrit, but
I am sure it can be further improved. It sounds like you
want the ability to define approval rules on a per branch
level.
Here again, you see the inability to give approvals to
changes as a feature, I see it as a limit. If I don't like
change E, why can't I indicate this on change E with a -1.
What if I want to be able to approve things in one place, but
I want to be able to reject things on the individual changes?
> > How so, it could be pushed directly no? If that isn'tIs your point that creating a merge commit is perhaps too
> > easy enough, please suggest a simpler solution...
>
> I guess I don't understand the workflow. Edwin mentioned
> review and merging each change and then having to review
> the merge commit? I guess my point here is it hard enough
> to get our user to participate in code review then all
> they have to do is type git gerrit-push :-)
complicated?
I probably agree in some cases. Do you have
any suggestions of how that can be improved? Perhaps all you
need is for a fancy way for Gerrit to create that merge
commit change automatically?
I suspect a goal in Chris's design is to allow developers to work on
dumbidea coordinating some way outside of Gerrit and then to review
the merge as a single unit when the work is finished.
I would like to suggest another line of thinking which might also be of use. I cannot help but wonder if adding Gerrit dependencies would help achieve some of the things which you desire. If I push changes A B C D E for review and want them to submitted as a unit, am I not describing a dependency?
Let's suppose for one moment that Gerrrit supported dependencies which transcended git dependencies, a highly requested Gerrrit feature, in various forms, which you will not likely find much opposition to. Now let us suppose that there were an easy way to define the dependency above: that A B C D E be submitted together. Naturally along with being able to define such dependencies, Gerrit would likely need to be able to intelligently manage their submission also. If you don't want the extra overhead of merging changes to a separate branch first, simply upload them together, tie them together with a dependency, and submit them all together.
Now, if you want to review them together, as Roland suggested, how about making the change screen display these dependencies in a nice table, would such a screen not begin to resemble your topic screen a bit?
I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support:- Ability for developers to submit a topic branch for review with asingle push to Gerrit.- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.
- Sequential listing of the commits in a topic, i.e. retain orderingand show summary of commit scores.- Ability to review individual commits, and the topic in its entirety.- Due to testing/validating tips of topics, it should only be possibleto approve/merge the tested topic tips.- The merge commit of a topic branch needs to be created by Gerrit. Wedon't want users to have to create their own merge commits.- All changes in a topic branch should be able to be merged in a single step.If we change achieve this with only minor changes to Gerrit then great :-)Thanks,Chris
--
To unsubscribe, email repo-discuss...@googlegroups.com
More info at http://groups.google.com/group/repo-discuss?hl=en
- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.Aren't you just defining your CI system to be greedy here? What does that actually have to do with topics? I might have missed it earlier, but I'm under the assumption that topics stay within a single projects. If so, you could just use the native git dependencies and teach your CI system to only care about the furthest children.
> I also don't thing this would solve our CI issue?Could you explain? If changes are dependent, simply download
the last change in the series and test that? What
specifically would you be missing for CI?
> Or may be the create of a dependencyWhy would a normal upload not be good enough to trigger it?
> could be used to trigger it?
-Martin
- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.Aren't you just defining your CI system to be greedy here? What does that actually have to do with topics? I might have missed it earlier, but I'm under the assumption that topics stay within a single projects. If so, you could just use the native git dependencies and teach your CI system to only care about the furthest children.So you are using the refUpdated hook here and then git to workout the furthest children?
I can't go into details, but we have a CI system that handles dependencies, does verification in batches of changes, and has a (per-project) atomic submit on success. We don't have topic or any other custom dependency stuff built into Gerrit to enable that.
--
To unsubscribe, email repo-discuss...@googlegroups.com
More info at http://groups.google.com/group/repo-discuss?hl=en
Let me try to describe how I would handle this scenario in the stock Gerrit:1. assuming the master branch already exists in that project in Gerrit I wouldcreate the 3 additional branches (in Gerrit): dumbidea, iss91, iss91v2They would probably not all be created at the same time but at the pointin time when work has to start on that (topic) branch.2. Developers working on the dumbidea topic would push to refs/for/dumbidea,review changes and merge them in the dumbidea branch.The same applies for the two other topic branches.3. When the dumbidea is finished and looks great, a developer mergesit locally with the master branch and pushes the merge commit to the masterbranch in Gerrit. It could be pushed for code review or bypassing code review.4. when iss91v2 topic branch is good, a developer merges it locally withmaster and pushes the merge commit to the master branch in Gerrit.The result looks exactly as on the second commit graph in that article.Can you identify and explain issues with the approach I described and thenexplain how having "strong topic support" would help?SašaSasa,Thanks for outlining your current workflow. There are a couple of issue with this approach from our point of view.- This workflow seems a little more complicated that what we currently have, having to create branches in Gerrit before pushing etc. Educating our user who have a wide range of git/gerrit skills would not be easy.
We are really trying to keep the process to a minimum, its seems to me that a multi step process like this would really hinder progress. What we currently have is; user creates a branch, push the branch to Gerrit, the branch gets review, the branch gets merged ...- We would not want our user to be able directly push to bypass code review in step 3 so another review would be required, yet another step.- There is no point to attach our CI to unless we ran it on every change that simply isn't possible.- How are these Gerrit branches cleaned up? Is this another step the user has to perform when the branch has been merged into master?
Have said this I can see two possible features that would improve this workflow:- Allow the branch in Gerrit to automatically be created when the user does their first push on a topic.- Allow the branch to be merged into master from the UI, so the user doesn't have to push the merge for review ...
I would like to suggest another line of thinking which might also be of use. I cannot help but wonder if adding Gerrit dependencies would help achieve some of the things which you desire. If I push changes A B C D E for review and want them to submitted as a unit, am I not describing a dependency?
Let's suppose for one moment that Gerrrit supported dependencies which transcended git dependencies, a highly requested Gerrrit feature, in various forms, which you will not likely find much opposition to. Now let us suppose that there were an easy way to define the dependency above: that A B C D E be submitted together. Naturally along with being able to define such dependencies, Gerrit would likely need to be able to intelligently manage their submission also. If you don't want the extra overhead of merging changes to a separate branch first, simply upload them together, tie them together with a dependency, and submit them all together.
Now, if you want to review them together, as Roland suggested, how about making the change screen display these dependencies in a nice table, would such a screen not begin to resemble your topic screen a bit?
It would start to look like the topic screen. However, where would you been able to attach comments associated with group of changes?
I also don't thing this would solve our CI issue? Or may be the create of a dependency could be used to trigger it?
-Martin
Employee of Qualcomm Innovation Center,Inc. which is a member of Code Aurora Forum
--
To unsubscribe, email repo-discuss...@googlegroups.com
More info at http://groups.google.com/group/repo-discuss?hl=en
Thanks for outlining your current workflow. There are a couple of issue with this approach from our point of view.- This workflow seems a little more complicated that what we currently have, having to create branches in Gerrit before pushing etc. Educating our user who have a wide range of git/gerrit skills would not be easy.Hmm... sounds strange: if your developers already have a wide range of git/gerrit skills why thenit would be hard to educate them? :-)
I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support:
- Ability for developers to submit a topic branch for review with asingle push to Gerrit.
- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).
- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.
- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.
- Sequential listing of the commits in a topic, i.e. retain orderingand show summary of commit scores.
- Ability to review individual commits, and the topic in its entirety.
- Due to testing/validating tips of topics, it should only be possibleto approve/merge the tested topic tips.
- The merge commit of a topic branch needs to be created by Gerrit. Wedon't want users to have to create their own merge commits.
- All changes in a topic branch should be able to be merged in a single step.\
If we change achieve this with only minor changes to Gerrit then great :-)
I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support:- Ability for developers to submit a topic branch for review with asingle push to Gerrit.
- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).
- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.- Sequential listing of the commits in a topic, i.e. retain orderingand show summary of commit scores.
- Ability to review individual commits, and the topic in its entirety.
- Due to testing/validating tips of topics, it should only be possibleto approve/merge the tested topic tips.
- The merge commit of a topic branch needs to be created by Gerrit. Wedon't want users to have to create their own merge commits.
- All changes in a topic branch should be able to be merged in a single step.
If we change achieve this with only minor changes to Gerrit then great :-)Thanks,Chris
On Mon, Dec 17, 2012 at 5:55 PM, Chris Harris <chris....@kitware.com> wrote:
I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support:- Ability for developers to submit a topic branch for review with asingle push to Gerrit.We often push a, so called, patch series which is a chain of two ormore changes each depending on the previous one. And this is donewith a single push to Gerrit.The only thing that is missing is creation of the target branch if it does not exist.- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).if topics would be implemented as branches then it would mean showingthose branches which represent the topics.
- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.- Sequential listing of the commits in a topic, i.e. retain orderingand show summary of commit scores.This comes naturally if topics are implemented as a Git branches. Or?
- Ability to review individual commits, and the topic in its entirety.- Due to testing/validating tips of topics, it should only be possibleto approve/merge the tested topic tips.I understand that you want to merge only the whole topic branch.But this shouldn't in any way limit how do you prepare that topic branch.And this is the key reason why I believe that topics should be implementedas branches. I want to use the same workflow for working on a topic branchas for working on any other branch. If topics are done this way then all theimprovements we add to Gerrit for the normal workflow can also be usedfor working with topic branches. For example, since some time Gerrit supportsdrafts changes. So, I want also to be able to push a draft change to a topicbranch, look at it from the UI and then publish it. If topics use their own workflow,which is different from the default workflow then. this wouldn't be easily possible.Another point that I have in mind is that, if we use branches for topics, thenit is very easy to have not only topics but also sub-topics and sub-sub-topics, etc...- The merge commit of a topic branch needs to be created by Gerrit. Wedon't want users to have to create their own merge commits.This would be convenient but creation of own merge commits cannot be avoidedwhen conflicts have to be resolved.
On Mon, Dec 17, 2012 at 5:11 PM, Saša Živkov <ziv...@gmail.com> wrote:
On Mon, Dec 17, 2012 at 5:55 PM, Chris Harris <chris....@kitware.com> wrote:
I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support:- Ability for developers to submit a topic branch for review with asingle push to Gerrit.We often push a, so called, patch series which is a chain of two ormore changes each depending on the previous one. And this is donewith a single push to Gerrit.The only thing that is missing is creation of the target branch if it does not exist.- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).if topics would be implemented as branches then it would mean showingthose branches which represent the topics.The problem with this is if a user pushes a topic branch for review, the branch created in Gerrit wouldn't would represent the topic until all the changes had been merged into it,
so there is still not way to to show a summary of the topics?
On Dec 17, 2012, at 9:55 AM, Chris Harris wrote:I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review support
- Ability for developers to submit a topic branch for review with asingle push to Gerrit.
- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).
- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.
- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.Aren't you just defining your CI system to be greedy here? What does that actually have to do with topics? I might have missed it earlier, but I'm under the assumption that topics stay within a single projects. If so, you could just use the native git dependencies and teach your CI system to only care about the furthest children.I can't go into details, but we have a CI system that handles dependencies, does verification in batches of changes, and has a (per-project) atomic submit on success. We don't have topic or any other custom dependency stuff built into Gerrit to enable that.
- Sequential listing of the commits in a topic, i.e. retain orderingand show summary of commit scores.
- Ability to review individual commits, and the topic in its entirety.
- Due to testing/validating tips of topics, it should only be possibleto approve/merge the tested topic tips.- The merge commit of a topic branch needs to be created by Gerrit. Wedon't want users to have to create their own merge commits.
- All changes in a topic branch should be able to be merged in a single step.
If we change achieve this with only minor changes to Gerrit then great :-)
On Monday, December 17, 2012 5:01:16 PM UTC, Nasser Grainawi wrote:On Dec 17, 2012, at 9:55 AM, Chris Harris wrote:I wanted to try and take a step back by list what our basic requirements are, this is our motivation for adding topic review supportThanks. And also thanks for your work on this. On behalf of the OpenStack project, let me cast my vote for getting this upstreamed. It's the single most complained about and missing feature. (ok, that's not true - single page diff might be tied)
- Ability for developers to submit a topic branch for review with asingle push to Gerrit.Yes.- Summary page showing topics awaiting review, merged topics, etc.This could be merged in with changes, but in such a case it would bedesirable to only show the topics rather than all commits in eachtopic (which risks flooding the view).Yes- Same as above for dashboard and other views where only a singleentry is shown for a topic, ideally with inline expansion to show allcommits using an appropriate UI element.Yes- We need to receive an event when the tip of a topic branch changesso we can trigger CI builds of the tip but not the individual commitson a topic.Aren't you just defining your CI system to be greedy here? What does that actually have to do with topics? I might have missed it earlier, but I'm under the assumption that topics stay within a single projects. If so, you could just use the native git dependencies and teach your CI system to only care about the furthest children.I can't go into details, but we have a CI system that handles dependencies, does verification in batches of changes, and has a (per-project) atomic submit on success. We don't have topic or any other custom dependency stuff built into Gerrit to enable that.
We have that too - and I'm happy to go in to details on it. We use a tool called zuul http://ci.openstack.org/zuul/ which does the above. It also tests changes between related sets of projects. It's great. I'm more than happy to expand on it as much as possible.
Some of you may be aware that Deniz Turkoglu and I have been working on getting topic review support upstream. We have been trying to revive the work developed by Codethink and have rebased/rewritten several patches in the sequence:We at Kitware have been using this functionality for some time now on various projects.However, it seems that the general consensus is that this topic is too invasive/large and is unlikely to ever to be upstreamed. Martin Fick suggested rethinking the support in a way that will enable more of the existing change functionality to be reused rather than creating a new reviewable entity.So with this in mind, my colleague Brad King and I have come up with a possible alternative (see below). We would very much appreciate feedback/comments/thoughts. We would like to try to determine if the community feels this is a viable solution before investing any time in implementation.Many Thanks,Chris HarrisDefinitions/Background- A “Topic” allows a group of one or more Changes to be reviewed together.- Each Topic has an external “Topic Name” for reference by humans and during pushes.- Each Topic has an internal “Topic-Id” representing the topic as a whole.- Only one Topic with a given Topic Name may be open at any one time.- Each open Topic Name will be mapped to its internal Topic-Id.- Once merged/abandoned the name can be reused and will get a new id.- A “Topic Rev” is one revision of a Topic, defined by its head commit and merge base(s), and conceptually equivalent to a Patch Set in a normal Change.- Topics can overlap i.e. a Change can appear in multiple open topics.- A Topic that contains an out-of-date Patch Set of a Change cannot be Submitted.ApproachIn order to reuse existing infrastructure for review, Gerrit will construct a Change to represent a Topic. For example, when a user pushes a topic branch asgit push gerrit HEAD:refs/for/master/$topic_nameGerrit will lookup/generate its Topic-Id and construct a commit equivalent togit commit-tree $topic_head^{tree} -p $topic_basewhere $topic_head is the head commit of the topic and $topic_base is the merge base (or bases) against master. The committer will be the configured “Code Review” user and the author will be the uploader. The commit message will store meta data about the topic e.g.Topic(blank line)Topic-Id: $topic_idTopic-Rev: $topic_revTopic-Head: $topic_headTopic-Name: $topic_namewhere $topic_id is the Topic-Id and $topic_rev is the Topic Rev number. Each push to a new or active Topic will construct a new Topic Rev and add a reference to it asrefs/topics/$topic_id/1refs/topics/$topic_id/2refs/topics/$topic_id/3…The constructed “topic changes” in most senses will be treated as changes like any other, they would appear in dashboard etc. However, the rendering of the change page for a Topic will be a bit different:- The raw meta data commit message will not be rendered. Instead a commit message will be generated that looks a lot like what might be generated when the topic is merged e.g. a list of commits in the topic as “%h %s” lines.- Each revision of the topic will be shown in a “Topic Rev $N” block similar to a normal “Patch Set $N” block.- Each “Topic Rev” block will list the changes associated with the Topic as links to the individual Patch Sets on their corresponding Change pages.- Each “Topic Rev” block will also show the normal file-wise diff computed from the artificial topic commit to show the net change. It will be reviewable with line-wise comments like any other Patch Set.The “topic change” can be review and merged at which point Gerrit would then also label the changes associated with it as merged.