`rbt land` command for landing changes in upstream
Review Request #6509 — Created Oct. 26, 2014 and submitted
Information | |
---|---|
asalahli | |
RBTools | |
master | |
2f08592... | |
Reviewers | |
rbtools, students | |
rbt land
command for landing changes in upstream
See https://reviewboard.hackpad.com/rbt-land-YrgGuhTuseU
for detailed description of the command.What works:
- Merging/rebasing a branch with/on destination branch.
- Adding a commit message based on the review request.
- Pushing to upstream
- A wrapper around
rbt patch
in order to allow landing
others' changes.
-
Successfully merged and rebased a feature branch to/on master branch.
-
Successfully patched a review request from another user and landed it
on upstream. -
Tested with:
- empty repo
- unclean working directory
- unapproved review request
- same target and destination branches
- incorrect target/destination branch
- incorrect upstream repository
and got appropriate error messages, as expected.
Description | From | Last Updated |
---|---|---|
'APIError' imported but unused |
![]() |
|
'execute' imported but unused |
![]() |
|
Col: 80 E501 line too long (81 > 79 characters) |
![]() |
|
Col: 1 W391 blank line at end of file |
![]() |
|
'json' imported but unused |
![]() |
|
local variable 'remote' is assigned to but never used |
![]() |
|
'APIError' imported but unused |
![]() |
|
'InvalidRevisionSpecError' imported but unused |
![]() |
|
'execute' imported but unused |
![]() |
|
Col: 80 E501 line too long (85 > 79 characters) |
![]() |
|
Col: 80 E501 line too long (81 > 79 characters) |
![]() |
|
Col: 80 E501 line too long (83 > 79 characters) |
![]() |
|
Col: 1 W391 blank line at end of file |
![]() |
|
'json' imported but unused |
![]() |
|
'json' imported but unused |
![]() |
|
'json' imported but unused |
![]() |
|
Col: 1 W391 blank line at end of file |
![]() |
|
'json' imported but unused |
![]() |
|
Let's use "squash" instead of "flatten". Also, this function and push_upstream need to have NotImplemented stubs in SCMClient. |
|
|
Blank line between these. |
|
|
Say you do this on 'master', and your commit is already there. Doing a pull is going to pull down … |
|
|
Missing a trailing period. |
|
|
This doesn't really describe what the command does. We should have a lot more detail about what this is and … |
|
|
The """ should be on the next lin. |
|
|
Merging shouldn't squash. Or are you saying it'd be the inverse? |
|
|
Can this be done now? |
|
|
Just from the common ones, right? How about doing that as part of this change? |
|
|
'json' imported but unused |
![]() |
|
Col: 80 E501 line too long (84 > 79 characters) |
![]() |
|
undefined name 'branch' |
![]() |
|
undefined name 'branch' |
![]() |
|
Col: 1 E302 expected 2 blank lines, found 1 |
![]() |
|
Col: 1 E302 expected 2 blank lines, found 1 |
![]() |
|
'json' imported but unused |
![]() |
|
Col: 80 E501 line too long (83 > 79 characters) |
![]() |
|
'json' imported but unused |
![]() |
|
Col: 69 W291 trailing whitespace |
![]() |
|
'json' imported but unused |
![]() |
|
'json' imported but unused |
![]() |
|
Use a double quote and put the branch name in single quotes, e.g. raise MergeError("Could not checkout branch '%s' ...) … |
|
|
Quote branchname in single quotes. |
|
|
"to the remote repository" |
|
|
.reviewboardrc shoudn't be required. It hsould be possible to specify on the command line. |
|
|
I prefer full sentences that sound more natural, like "A review request ID is required." |
|
|
This change I think predates the discussion on this, but "BRANCH" can't be used for any kind of real determinations … |
|
|
This may not be very clear when the user hits it and doesn't realize that they chose the same branch. … |
|
|
We can't depend on this attribute existing on the review request. It's new in 2.0. You can check with hasattr(). … |
|
|
"The specified review request ..." This should also include the review_request.approval_failure text. |
|
|
This should now be MergeError as e. Same in all other cases. |
|
|
How about "... has landed on <branch>" |
|
|
Since we're moving to Py2.5+, you'll want to use the new print function. At the top of your file: from … |
|
|
This was changed in https://reviews.reviewboard.org/r/6578/ to use __future__.print_function. You should pull master and rebase your changes off of it. Your … |
|
|
I had to read the code and think through it to realize what this is doing and why it's there. … |
|
|
There's a way to simplify this and make the function in general a lot more useful. Instead of hard-coding all … |
|
|
'json' imported but unused |
![]() |
|
Col: 36 E111 indentation is not a multiple of four |
![]() |
|
Col: 36 E113 unexpected indentation |
![]() |
|
Col: 17 E113 unexpected indentation |
![]() |
|
Col: 17 E112 expected an indented block |
![]() |
|
Col: 25 W601 .has_key() is deprecated, use 'in' |
![]() |
|
Col: 80 E501 line too long (81 > 79 characters) |
![]() |
|
"are" considered optional. |
|
|
"an upstream repository." |
|
|
"the patching step." |
|
|
Instead of hard-coding here, it's best to identify what's missing in SCMClients that this function needs to support. We can … |
|
|
This needs to raise a CommandError for the output to be properly shown. Otherwise it'll appear as a crash. Also, … |
|
|
I just pushed a change that adds this. See what commands/stamp.py and commands/post.py do now. |
|
|
"Review Board". Can you say: "... an old version (pre-2.0)" that ..." |
|
|
"support the `approved` field." |
|
|
Blank line between these. |
|
|
If we have approved and approval_failure, we have issue_open_count. They were introduced in the same release. |
|
|
The ending paren should be on the self.options.squash line. |
|
|
We don't put parens around individual conditions. |
|
|
Same here. |
|
|
This looks left over from something. |
|
|
You can probably make this one line by doing: approval_failure = \ 'The review request ...' |
|
Description: |
|
---|
Summary: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Testing Done: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commit: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 2 (+142) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py
-
-
-
-
-
-
-
-
-
Change Summary:
Fixed style issues
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 3 (+139) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py
-
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Commit: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 4 (+179) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py setup.py rbtools/clients/git.py
-
Description: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Testing Done: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commit: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 5 (+199 -1) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py setup.py rbtools/utils/process.py rbtools/clients/git.py Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py setup.py rbtools/utils/process.py rbtools/clients/git.py
-
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 6 (+198 -1) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py setup.py rbtools/utils/process.py rbtools/clients/git.py Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py setup.py rbtools/utils/process.py rbtools/clients/git.py
-
-
-
rbtools/clients/git.py (Diff revision 6) Let's use "squash" instead of "flatten".
Also, this function and push_upstream need to have NotImplemented stubs in SCMClient.
-
-
rbtools/clients/git.py (Diff revision 6) Say you do this on 'master', and your commit is already there. Doing a pull is going to pull down new content and merge it in, creating a bit of an annoying merge graph, before pushing.
What you probably want here is 'git pull --rebase'.
Also, pull and push will, depending on settings/version of git, pull/push all branches. I'd be explicit with taking a branch name and passing it in this function.
-
-
rbtools/commands/land.py (Diff revision 6) This doesn't really describe what the command does. We should have a lot more detail about what this is and why/how it's used.
-
-
rbtools/commands/land.py (Diff revision 6) Merging shouldn't squash. Or are you saying it'd be the inverse?
-
-
rbtools/commands/land.py (Diff revision 6) Just from the common ones, right?
How about doing that as part of this change?
Summary: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commit: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 7 (+252 -31) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
-
-
-
-
Change Summary:
Fixed style issues
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 8 (+254 -30) |

-
Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 9 (+255 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 10 (+255 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
Change Summary:
Better docstring for
commands.land.Land
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 11 (+255 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
-
-
rbtools/commands/land.py (Diff revision 11) .reviewboardrc shoudn't be required. It hsould be possible to specify on the command line.
-
rbtools/commands/land.py (Diff revision 11) I prefer full sentences that sound more natural, like "A review request ID is required."
-
rbtools/commands/land.py (Diff revision 11) This change I think predates the discussion on this, but "BRANCH" can't be used for any kind of real determinations like this. That option purely handles the visual display of a branch, and can contain any text.
-
rbtools/commands/land.py (Diff revision 11) This may not be very clear when the user hits it and doesn't realize that they chose the same branch. How about:
"The local branch cannot be merged onto itself. Try a different local branch or destination branch."
-
rbtools/commands/land.py (Diff revision 11) We can't depend on this attribute existing on the review request. It's new in 2.0.
You can check with
hasattr()
.If it doesn't exist, we can check
review_request.ship_it_count
. -
rbtools/commands/land.py (Diff revision 11) "The specified review request ..."
This should also include the
review_request.approval_failure
text. -
rbtools/commands/land.py (Diff revision 11) This should now be
MergeError as e
.Same in all other cases.
-
-
rbtools/utils/commands.py (Diff revision 11) I had to read the code and think through it to realize what this is doing and why it's there.
How about calling this build_rbtools_cmd_argv, and having the docs be clear that this is used to take common options passed on the command line or in .reviewboardrc and convert them back into a set of arguments for calling another RBTools command?
-
rbtools/utils/commands.py (Diff revision 11) There's a way to simplify this and make the function in general a lot more useful.
Instead of hard-coding all these here, this function can take a dictionary (defaulting to a predefiend dictionary constant in this module) and build the command lines from that. It can do this with:
```python
def build_rbtools_cmd_argv(options, options_map=DEFAULT_OPTIONS_MAP):
argv = []for option_key, arg_name in six.iteritems(options_map): option_value = getattr(options, option_key, None) if option_value is True: argv.append(arg_name) elif option_value not in (False, None): argv.extend([arg_name, option_value]) return argv
-
-
rbtools/clients/git.py (Diff revision 11) Use a double quote and put the branch name in single quotes, e.g.
raise MergeError("Could not checkout branch '%s' ...)
It also might read better if the error is on the same line, seperated by a colon instead of newlines.
Same below.
-
-
rbtools/commands/land.py (Diff revision 11) Since we're moving to Py2.5+, you'll want to use the new print function. At the top of your file:
from __future__ import print_function
and then here you call
print
as a function with parentheses:print('Review request %s ...' % request_id)
Likewise elsewhere you use
print
. -
rbtools/commands/patch.py (Diff revision 11) This was changed in https://reviews.reviewboard.org/r/6578/ to use
__future__.print_function
.You should pull master and rebase your changes off of it. Your patch may not cleanly apply, otherwise.
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 12 (+275 -30) |

-
Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
-
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 13 (+275 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
Change Summary:
Changed branch related arguments and options to reflect the discussion in the last group meeting.
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 14 (+286 -30) |

-
Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 15 (+286 -30) |

-
Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 16 (+288 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 17 (+289 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
Just a few things left. Some small wording changes, and a couple things we can now implement based on a recent commit.
Looking great! Can't WAIT to land this :)
-
-
-
-
rbtools/commands/land.py (Diff revision 17) Instead of hard-coding here, it's best to identify what's missing in SCMClients that this function needs to support. We can then add a
can_<something>
boolean attribute toSCMClient
, defaulting toFalse
, and add an equivalent to the supported SCMClients, set toTrue
.This would then check for those attributes instead. See the new
rbt stamp
for another case where this is done.I imagine we'd want
can_merge
andcan_push_upstream
.This way, other SCMClients will get support for this when those functions are implemented.
-
rbtools/commands/land.py (Diff revision 17) I just pushed a change that adds this. See what commands/stamp.py and commands/post.py do now.
-
rbtools/commands/land.py (Diff revision 17) "Review Board".
Can you say: "... an old version (pre-2.0)" that ..."
-
-
rbtools/commands/land.py (Diff revision 17) If we have
approved
andapproval_failure
, we haveissue_open_count
. They were introduced in the same release. -
rbtools/commands/land.py (Diff revision 17) The ending paren should be on the
self.options.squash
line. -
-
-
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 18 (+290 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
-
-
rbtools/commands/land.py (Diff revisions 17 - 18) This needs to raise a
CommandError
for the output to be properly shown. Otherwise it'll appear as a crash.Also, can you put the space after the
%s
instead of on the next line, and the% self.tool.name
on the next line? Like:raise CommandError('This command ... %s ' 'repositories.' % self.tool.name)
-
-
rbtools/commands/land.py (Diff revision 18) You can probably make this one line by doing:
approval_failure = \ 'The review request ...'
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 19 (+291 -30) |

-
Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS
Commit: |
|
||||
---|---|---|---|---|---|
Diff: |
Revision 20 (+289 -30) |

-
Tool: PEP8 Style Checker Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS Tool: Pyflakes Processed Files: rbtools/commands/land.py rbtools/utils/commands.py rbtools/commands/__init__.py rbtools/commands/patch.py rbtools/clients/__init__.py rbtools/clients/git.py setup.py rbtools/clients/errors.py Ignored Files: AUTHORS