Thanks Christian, that helps a lot, especially drawing my attention to 
aliases. I think that between git and rb aliases I might be able to come up 
with something elegant and simple.

A couple of things:

Is there a way to get rbt to remove "Ship it" to address the unreviewed 
changes scenario that you describe? I am not unduly worried about that -- 
IMO that falls under "bad behavior" which we don't have much trouble with 
at our small size. But, an ounce of prevention...

Having said that, I should point out that setting up required reviewers per 
file/dir is more of a check for unintended consequences than a check for 
bad behavior. :)

Also, I have found that I get errors when passing '-u' to rbt when there is 
nothing to update. It would simplify automation if there were a way to get 
rbt to ignore use of '-u' when it's a no-op instead of erroring out. I 
would not be surprised to hear that it needs to be that way for some good 
reason, but I thought I would toss it out there since it seems like an easy 
thing for people to overlook in their workflows. I may be able to alias my 
way out of that though...

Thanks again, I'm off to play with aliases. :)

Dave 

On Wednesday, May 17, 2017 at 2:43:18 PM UTC-7, Christian Hammond wrote:
>
> Hi Dave,
>
> So I think there may be some confusion as to what `rbt land` is and what 
> it ultimately does, and I want to go into that to see if it clears anything 
> up.
>
> rbt land just does the following:
>
> 1) Makes sure the commit has a review request that has been approved
> 2) Updates the commit message with the latest from the review request, and 
> stamping the review request (basically calling `rbt stamp`)
> 3) Merges the feature branch onto the destination branch (optionally 
> squashing)
> 4) Optionally deleting the original branch, and optionally pushing the 
> destination branch
>
> If you want to commit and land to the same branch, then `rbt land` isn't 
> for you. The purpose of the command is to take a change that's not on the 
> destination, verify that it's landable, and then get it to the destination. 
> The reason it enforces using a separate feature branch off the land 
> destination branch is to ensure that you don't accidentally push changes 
> that haven't been approved for review.
>
> Doing development on the branch that you'd then land to means the "Ship 
> It" checking won't be as effective. If a person accidentally git pushes the 
> branch, they've just put themselves and everyone else in a state where 
> there's code now in the repository that's either unreviewed or has issues 
> that still need to be addressed.
>
> Given that, I don't think it makes sense to add an option to rbt land for 
> this use case. You'd probably want something that ties together the `rbt 
> stamp` and `git push`. You can do this easily by defining an alias in the 
> repository's `.reviewboardrc` that hooks those operations together.
>
> RBTools has no automation around branch hierarchy. `rbt land` doesn't care 
> about hierarchy. It's going to land the branch you specify at the target 
> you choose. RBTools 0.8 will have some stuff for auto-determining the 
> nearest tracking branch, but that's it.
>
> Christian
>
> -- 
> Christian Hammond
> President/CEO of Beanbag <https://www.beanbaginc.com/>
> Makers of Review Board <https://www.reviewboard.org/>
>
> On Wed, May 17, 2017 at 2:24 PM, <[email protected] <javascript:>> 
> wrote:
>
>> I've spent quite a bit of time playing with this and while I think I am 
>> getting closer to a usable approach I still have some concerns.
>>
>> As an aside, the following example from the workflow blog post creates a 
>> merge conflict:
>>
>> $ git checkout master
>> $ rbt land --dest=master --push my-branch-1
>> $ rbt land --dest=master --push my-branch-2
>>
>> The two land commands should be performed in the reverse order, as far as 
>> I can tell.
>>
>> Anyway, on to the workflow that I am trying to mold and shape from my 
>> end, as I try to understand how to mold and shape RB to fit. I am starting 
>> to think this is a square peg/round hole problem but since I really want 
>> the file-level reviewers functionality(to ultimately extend to required 
>> reviewers) I persist. :)
>>
>> Your comment "You wouldn't be committing and landing to the same 
>> location." seems to advise against using land at all. Here is the current 
>> workflow for the most common use case:
>>
>>
>>    1. git checkout master
>>    2. git fetch && git pull
>>    3. git checkout -b working-branch
>>    4. make some changes
>>    5. git commit
>>    6. git push --set-upstream origin working-branch (or otherwise push 
>>    to remote branch, usually this branch has same name as the JIRA tracking 
>>    the issue/task)
>>    7. Make any changes to the draft pull request description/reviewers, 
>>    then click "Create pull request" button.
>>    8. Address any review comments iteratively with edit/commit/push
>>    9. Once approvals are in place, merge to master.
>>
>>
>> Alternatively, a branch off of master may be created as a remote "feature 
>> branch", and devs will create their own branches off of that and we simply 
>> add another level of the above steps, similar to what you described.
>>
>> So, what I am looking to do is insert RB around steps 6..8, and find a 
>> way to automagically add reviewers based on what files have been changed. 
>> My thinking was that we could create a special user in Bitbucket (e.g. 
>> "ReviewBoard") and preventing merge to master unless that reviewer has 
>> approved. This approval would be triggered by all required reviewers 
>> registering "Ship it" in RB. I'm pretty sure I know how to write the needed 
>> BB plugin and RB extensions for those integration details but certain 
>> aspects of integrating RB into our workflow are giving me trouble.
>>
>> We have explored building a wrapper script that detects when rbt should 
>> have the -s and -u flags applied and I had posted a while back about 
>> getting the stamp in place on the first push. I solved that by doing a push 
>> with --set-upstream immediately after creating the branch prior to any 
>> commits.
>>
>> The challenge for me at this point seems to be coming up with an RB 
>> workflow that supports our push to a remote branch that has the same name 
>> as the local branch and is NOT master. I think that the fundamental 
>> requirement of "land" needing to land to a different branch precludes 
>> leveraging that.
>>
>> Does RBTools have any automation around determining what the branch 
>> heirarchy is, short of using "land"? Is there a simple patch I could apply 
>> to land.py to allow landing on the same branch?
>>
>> It's beginning to look like using RB in our workflow will be difficult to 
>> automate; I was hoping to make it transparent to users but that's seeming 
>> less and less likely. Any help you can offer to help simplify this 
>> transition would be appreciated.
>>
>> On Thursday, May 11, 2017 at 2:28:46 PM UTC-7, Christian Hammond wrote:
>>>
>>> Hi Dave,
>>>
>>> You don't have to merge to master. You can set LAND_DEST_BRANCH in 
>>> .reviewboardrc to point to any branch you want.
>>>
>>> Any commits you're working on must be done on a feature branch that 
>>> comes off the branch you want to land on. You wouldn't be committing and 
>>> landing to the same location. For instance, this is how your branches might 
>>> look:
>>>
>>> o [master] [origin/master]
>>> |
>>> | o my-feature-branch
>>> | |
>>> | o [my-land-dest] [origin/my-land-dest]
>>> |/
>>> |
>>>
>>> You'd set LAND_DEST_BRANCH to "my-land-dest", and what you'd be pushing 
>>> upstream. Code in development that would go up for review would be 
>>> committed to "my-feature-branch" or equivalent. It would only end up on 
>>> "my-land-dest" when it's been reviewed and ready to land (rbt land would 
>>> take care of this). That's the key thing. The upstream branch would be 
>>> treated similarly to the way you're treating "master" today. You'd let `rbt 
>>> land` manage commits going on that branch.
>>>
>>> Since you're not working off of master itself, you're also going to want 
>>> to set TRACKING_BRANCH to "origin/my-land-dest". This is used to tell 
>>> RBTools what the nearest tracking branch would be for the purpose of 
>>> generating diffs and parent diffs.
>>>
>>> So your .reviewboardrc would be:
>>>
>>> REVIEWBOARD_URL = "https://yourserver.example.com";
>>> REPOSITORY = "<Your Repository Name in RB>"
>>> LAND_DEST_BRANCH = "my-land-dest"
>>> TRACKING_BRANCH = "origin/my-land-dest"
>>>
>>> Christian
>>>
>>>
>>> -- 
>>> Christian Hammond
>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>> Makers of Review Board <https://www.reviewboard.org/>
>>>
>>> On Wed, May 10, 2017 at 3:20 PM, <[email protected]> wrote:
>>>
>>>> Referring to this article: 
>>>> http://blog.beanbaginc.com/2015/01/26/an-effective-rbtools-workflow-for-git/
>>>>
>>>> What I need is to be able to land changes not in master but in a remote 
>>>> branch off of master. Our release process merges these branches into 
>>>> master 
>>>> via pull requests at the behest of DevOps, not the individual developers. 
>>>> Landing in master is not an option, because there is a qualification 
>>>> process that needs to take place prior to merge to master.
>>>>
>>>> I'm pretty sure there is something I'm not understanding about Git 
>>>> and/or rb, I'm posting here in case someone can help me spot the issue.
>>>>
>>>> When I look in the BitBucket webUI, oddly I only see the mb-1 commits 
>>>> on the "commits" page(none of the mb-2 commits) and I see the mb-2 branch 
>>>> on the branches pagem but not the mb-1 branch. The mb-1 commits are in the 
>>>> mb-2 branch.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (master)
>>>> $ git checkout -b mb-1
>>>> Switched to a new branch 'mb-1'
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ git push --set-upstream origin mb-1
>>>> Total 0 (delta 0), reused 0 (delta 0)
>>>> remote:
>>>> remote: Create pull request for mb-1:
>>>> remote:   https://
>>>> bitbucket.org/.../rb-test/pull-requests/new?source=mb-1&t=1
>>>> remote:
>>>> To [email protected]:shipwire/rb-test.git
>>>>  * [new branch]      mb-1 -> mb-1
>>>> Branch mb-1 set up to track remote branch mb-1 from origin.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ vi foo.py
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ vi bar.py
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ git commit -a
>>>> [mb-1 216b719] Adding via mb-1
>>>>  2 files changed, 4 insertions(+)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ git checkout -b mb-2
>>>> Switched to a new branch 'mb-2'
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git status
>>>> On branch mb-2
>>>> Untracked files:
>>>>   (use "git add <file>..." to include in what will be committed)
>>>>
>>>>         find_gitpush_done
>>>>         ../conf/file.txt
>>>>         ../copy_merchant_output.txt
>>>>         ../copy_merchant_output2.txt
>>>>         ../output.txt
>>>>         ../output2.txt
>>>>
>>>> nothing added to commit but untracked files present (use "git add" to 
>>>> track)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git push --set-upstream mb-1 mb-2
>>>> fatal: 'mb-1' does not appear to be a git repository
>>>> fatal: Could not read from remote repository.
>>>>
>>>> Please make sure you have the correct access rights
>>>> and the repository exists.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git push --set-upstream origin/mb-1 mb-2
>>>> fatal: 'origin/mb-1' does not appear to be a git repository
>>>> fatal: Could not read from remote repository.
>>>>
>>>> Please make sure you have the correct access rights
>>>> and the repository exists.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git push --set-upstream origin mb-2
>>>> Counting objects: 5, done.
>>>> Delta compression using up to 8 threads.
>>>> Compressing objects: 100% (5/5), done.
>>>> Writing objects: 100% (5/5), 451 bytes | 0 bytes/s, done.
>>>> Total 5 (delta 4), reused 0 (delta 0)
>>>> remote:
>>>> remote: Create pull request for mb-2:
>>>> remote:   https://
>>>> bitbucket.org/.../rb-test/pull-requests/new?source=mb-2&t=1
>>>> remote:
>>>> To [email protected]:shipwire/rb-test.git
>>>>  * [new branch]      mb-2 -> mb-2
>>>> Branch mb-2 set up to track remote branch mb-2 from origin.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ gitk
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ vi foo.py
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git commit -a
>>>> [mb-2 ec57060] Add via mb-2
>>>>  1 file changed, 2 insertions(+)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git checkout mb-1
>>>> Switched to branch 'mb-1'
>>>> Your branch is ahead of 'origin/mb-1' by 1 commit.
>>>>   (use "git push" to publish your local commits)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ rbt post
>>>> Review request #71 posted.
>>>>
>>>> http://rb.tools.aws.....com/r/71/
>>>> http://rb.tools.aws.....com/r/71/diff/
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ git checkout mb-2
>>>> Switched to branch 'mb-2'
>>>> Your branch is ahead of 'origin/mb-2' by 1 commit.
>>>>   (use "git push" to publish your local commits)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ rbt post
>>>> Review request #72 posted.
>>>>
>>>> http://rb.tools.aws.....com/r/72/
>>>> http://rb.tools.aws.....com/r/72/diff/
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ git checkout mb-1
>>>> Switched to branch 'mb-1'
>>>> Your branch is ahead of 'origin/mb-1' by 1 commit.
>>>>   (use "git push" to publish your local commits)
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ rbt land --dest=mb-1 --push mb-1
>>>> ERROR: The local branch cannot be merged onto itself. Try a different 
>>>> local branch or destination branch.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-1)
>>>> $ rbt land --dest=origin/mb-1 --push mb-1
>>>> Merging branch "mb-1" into "origin/mb-1"
>>>> Deleting merged branch "mb-1"
>>>> Pushing branch "origin/mb-1" upstream
>>>> ERROR: Could not pull changes from upstream.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin ((6efeb87...))
>>>> $ rbt land --dest=mb-1 --push origin/mb
>>>> Failed to execute command: ['git', 'rev-parse', 'origin/mb']
>>>> origin/mb
>>>> fatal: ambiguous argument 'origin/mb': unknown revision or path not in 
>>>> the working tree.
>>>> Use '--' to separate paths from revisions, like this:
>>>> 'git <command> [<revision>...] -- [<file>...]'
>>>>
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin ((6efeb87...))
>>>> (arg: 2) rbt land --dest=mb-1 --push origin/mb
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin ((6efeb87...))
>>>>
>>>> $ rbt land --dest=mb-2 --push origin/mb-2
>>>> Merging branch "origin/mb-2" into "mb-2"
>>>> Failed to execute command: ['git', 'commit', '-m', u'Adding via 
>>>> mb-1\n\nReviewed at http://rb.tools.aws.....com/r/7
>>>> 1/', u'--author="Dave Anderson <David....com>"']
>>>> On branch mb-2
>>>> Your branch is ahead of 'origin/mb-2' by 1 commit.
>>>>   (use "git push" to publish your local commits)
>>>> Untracked files:
>>>>         bin/find_gitpush_done
>>>>         conf/file.txt
>>>>         copy_merchant_output.txt
>>>>         copy_merchant_output2.txt
>>>>         output.txt
>>>>         output2.txt
>>>>
>>>> nothing added to commit but untracked files present
>>>>
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin (mb-2)
>>>> $ rbt land --dest=origin/mb-2 --push mb-2
>>>> Merging branch "mb-2" into "origin/mb-2"
>>>> Deleting merged branch "mb-2"
>>>> Pushing branch "origin/mb-2" upstream
>>>> ERROR: Could not pull changes from upstream.
>>>>
>>>> Dave-PC MINGW64 ~/Vagrant/sws-vagrant/src/rb-test/bin ((ca80b47...))
>>>> $
>>>>
>>>>
>>>> -- 
>>>> Supercharge your Review Board with Power Pack: 
>>>> https://www.reviewboard.org/powerpack/
>>>> Want us to host Review Board for you? Check out RBCommons: 
>>>> https://rbcommons.com/
>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>> --- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "reviewboard" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> -- 
>> Supercharge your Review Board with Power Pack: 
>> https://www.reviewboard.org/powerpack/
>> Want us to host Review Board for you? Check out RBCommons: 
>> https://rbcommons.com/
>> Happy user? Let us know! https://www.reviewboard.org/users/
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "reviewboard" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to