[openstack-dev] [git-review] Supporting development in local branches
Angus Salkeld
angus.salkeld at RACKSPACE.COM
Tue Aug 5 01:15:00 UTC 2014
On Tue, 2014-08-05 at 03:18 +0400, Yuriy Taraday wrote:
> Hello, git-review users!
>
>
> I'd like to gather feedback on a feature I want to implement that
> might turn out useful for you.
>
>
> I like using Git for development. It allows me to keep track of
> current development process, it remembers everything I ever did with
> the code (and more).
> I also really like using Gerrit for code review. It provides clean
> interfaces, forces clean histories (who needs to know that I changed
> one line of code in 3am on Monday?) and allows productive
> collaboration.
> What I really hate is having to throw away my (local, precious for me)
> history for all change requests because I need to upload a change to
> Gerrit.
I just create a short-term branch to record this.
>
>
> That's why I want to propose making git-review to support the workflow
> that will make me happy. Imagine you could do smth like this:
>
>
> 0. create new local branch;
>
>
> master: M--....
> \
> feature: *
>
>
> 1. start hacking, doing small local meaningful (to you) commits;
>
>
> master: M--....
> \
> feature: A-B-...-C
>
>
> 2. since hacking takes tremendous amount of time (you're doing a Cool
> Feature (tm), nothing less) you need to update some code from master,
> so you're just merging master in to your branch (i.e. using Git as
> you'd use it normally);
>
> master: M--....-N-O-...
> \ \ \
> feature: A-B-...-C-D-...
>
>
> 3. and now you get the first version that deserves to be seen by
> community, so you run 'git review', it asks you for desired commit
> message, and <poof, magic-magic> all changes from your branch is
> uploaded to Gerrit as _one_ change request;
>
> master: M--....-N-O-...
> \ \ \----E* <= uploaded
> feature: A-B-...-C-D-...-E
>
>
> 4. you repeat steps 1 and 2 as much as you like;
> 5. and all consecutive calls to 'git review' will show you last commit
> message you used for upload and use it to upload new state of your
> local branch to Gerrit, as one change request.
>
>
> Note that during this process git-review will never run rebase or
> merge operations. All such operations are done by user in local branch
> instead.
>
>
> Now, to the dirty implementations details.
>
>
> - Since suggested feature changes default behavior of git-review,
> it'll have to be explicitly turned on in config
> (review.shadow_branches? review.local_branches?). It should also be
> implicitly disabled on master branch (or whatever is in .gitreview
> config).
> - Last uploaded commit for branch <branch-name> will be kept in
> refs/review-branches/<branch-name>.
> - For every call of 'git review' it will find latest commit in
> gerrit/master (or remote and branch from .gitreview), create a new one
> that will have that commit as its parent and a tree of current commit
> from local branch as its tree.
> - While creating new commit, it'll open an editor to fix commit
> message for that new commit taking it's initial contents from
> refs/review-branches/<branch-name> if it exists.
> - Creating this new commit might involve generating a temporary bare
> repo (maybe even with shared objects dir) to prevent changes to
> current index and HEAD while using bare 'git commit' to do most of the
> work instead of loads of plumbing commands.
>
>
> Note that such approach won't work for uploading multiple change
> request without some complex tweaks, but I imagine later we can
> improve it and support uploading several interdependent change
> requests from several local branches. We can resolve dependencies
> between them by tracking latest merges (if branch myfeature-a has been
> merged to myfeature-b then change request from myfeature-b will depend
> on change request from myfeature-a):
>
> master: M--....-N-O-...
> \ \ \---------E*
> myfeature-a: A-B-...-C-D-...-E \
> \ \ J* <= uploaded
> myfeature-b: F-...-G-I-J
>
>
> This improvement would be implemented later if needed.
>
>
> I hope such feature seams to be useful not just for me and I'm looking
> forward to some comments on it.
Hi Yuriy,
I like my local history matching what is up for review and
don't value the interim messy commits (I make a short term branch to
save the history so I can go back to it - if I mess up a merge).
Tho' others might love this idea.
-Angus
>
>
> --
>
> Kind regards, Yuriy.
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140805/7476526d/attachment.pgp>
More information about the OpenStack-dev
mailing list