• 
      

    Adding uncommitted flag to support post staged but not commit changes

    Review Request #6879 — Created Feb. 1, 2015 and discarded

    Information

    RBTools
    master

    Reviewers

    Problem:
    While the common workflow is to post committed changes, some people have workflows where they want to post changes that are uncommitted, and have to resort to generating a diff manually and posting it using rbt post --diff-filename=.

    This work would add an --uncommitted flag to rbt post that would generate diffs for uncommitted changes instead.

    Approach:
    Adding can_diff_committed capability to all clients, and let git set that to True to support it.
    This revision simulate the behavior of svn, where we specify the tip to be --rbtools-working-copy so that git client know to remove the revision range out of the git commands.
    In addition, to support this flag, --update, --diff-filename, and --guess-fields can't coexists, so the error is thrown when the user specifies those commands along with --uncommitted.
    In order to view staged but uncommitted files, we need to add --cached to the git diff command.

    Write an extra unit test to check that the git post --uncommitted works.
    Verify that it throws error when --uncommitted and other options like --diff-filename,

    Description From Last Updated

    Col: 28 E222 multiple spaces after operator

    reviewbotreviewbot

    Col: 80 E501 line too long (90 > 79 characters)

    reviewbotreviewbot

    Col: 43 E203 whitespace before ':'

    reviewbotreviewbot

    Col: 80 E501 line too long (81 > 79 characters)

    reviewbotreviewbot

    Col: 37 E203 whitespace before ':'

    reviewbotreviewbot

    Col: 80 E501 line too long (81 > 79 characters)

    reviewbotreviewbot

    Col: 80 E501 line too long (90 > 79 characters)

    reviewbotreviewbot

    Col: 80 E501 line too long (96 > 79 characters)

    reviewbotreviewbot

    Col: 77 E225 missing whitespace around operator

    reviewbotreviewbot

    Col: 80 E501 line too long (93 > 79 characters)

    reviewbotreviewbot

    Col: 60 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Col: 62 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Col: 80 E501 line too long (94 > 79 characters)

    reviewbotreviewbot

    Col: 46 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Col: 48 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Col: 46 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Col: 48 E251 unexpected spaces around keyword / parameter equals

    reviewbotreviewbot

    Comments should be full sentences with proper capitalization and punctuation.

    daviddavid

    Given that we now do this in both the n_revs == 0 and n_revs >= 1 cases, perhaps we should …

    daviddavid

    We should probably not show this warning if using this flag.

    daviddavid

    Hmm. So I can see people wanting both the diff in the working copy (unstaged) and the diff in the …

    daviddavid

    Please add this line back in.

    daviddavid

    Please fix this comment.

    daviddavid

    Add a blank line between these two.

    daviddavid

    Leftover debugging print?

    daviddavid

    "GitClient". Also this test name is pretty hard to read (perhaps "Testing GitClient uncommitted diff with staged files"?) Because nose …

    daviddavid

    This error message is kind of hard to read. Maybe we can have separate errors for each of the conflicting …

    daviddavid

    Col: 22 W601 .has_key() is deprecated, use 'in'

    reviewbotreviewbot

    We should default this to None rather than the empty string.

    daviddavid

    Reading this through, I think we should keep the handling of the uncommitted flag in this conditional: if uncommitted is …

    daviddavid

    We're still duplicating this code. If you make the above change, you can just have these lines run all the …

    daviddavid

    Typo: "Otherise". Also, add a period at the end.

    daviddavid

    Add a blank line between these two.

    daviddavid

    Add a period at the end.

    daviddavid

    Can we test the parse_revision_spec logic here?

    daviddavid

    Can we test the parse_revision_spec logic here?

    daviddavid

    Remove this line.

    daviddavid

    Can we specify choices in here?

    daviddavid

    Typo: an -> and. You also have an extra ) in the string.

    daviddavid

    Typo: an -> and. You also have an extra ) in the string.

    daviddavid

    Typo: an -> and. You also have an extra ) in the string.

    daviddavid

    This should probably default to None.

    daviddavid

    Col: 55 E231 missing whitespace after ','

    reviewbotreviewbot

    Col: 80 E501 line too long (81 > 79 characters)

    reviewbotreviewbot

    Col: 55 E231 missing whitespace after ','

    reviewbotreviewbot

    Do you mind sorting these in alphabetical order?

    daviddavid

    Can you add blank lines around the blocks? We should also use del rather than .pop(). Please also use exact …

    daviddavid

    This change shouldn't be necessary anymore because the uncommitted handling is a separate case.

    daviddavid

    Remove this blank line?

    daviddavid

    Col: 48 E127 continuation line over-indented for visual indent

    reviewbotreviewbot

    For the help, how about "Uploads a diff of the changes in either the working copy or index (Git only)."

    daviddavid

    Why are these not allowed?

    daviddavid

    Single quotes are preferred.

    chipx86chipx86

    Minor nit: This wraps kind of early.

    chipx86chipx86

    Can you flip this? Should be uncommitted == 'workingcopy'

    chipx86chipx86

    Same here.

    chipx86chipx86

    This should probably be given an error message indicating that uncommitted has an incorrect value?

    chipx86chipx86

    There's some important stuff in git_cmd we don't want to lose, like turning off quoted paths nad colors.

    chipx86chipx86

    Best to use tuples here, to avoid the overhead of a list.

    chipx86chipx86

    Best to use .append() here.

    chipx86chipx86

    That line shouldn't be indented.

    chipx86chipx86

    Missing period.

    chipx86chipx86

    Missing period.

    chipx86chipx86

    Summaries are limited to one line. No wrapping.

    chipx86chipx86

    No need for this line. It's implied.

    chipx86chipx86

    Text must be aligned.

    chipx86chipx86

    Maybe just check for uncommitted once, and then do the rest of the conditionals inside that if block.

    chipx86chipx86

    Col: 1 E302 expected 2 blank lines, found 1

    reviewbotreviewbot

    'UncommittedIncorrectValueError' imported but unused

    reviewbotreviewbot

    undefined name 'OptionsCheckError'

    reviewbotreviewbot

    Col: 80 E501 line too long (84 > 79 characters)

    reviewbotreviewbot

    Col: 32 E128 continuation line under-indented for visual indent

    reviewbotreviewbot

    Col: 13 E303 too many blank lines (2)

    reviewbotreviewbot

    Col: 80 E501 line too long (83 > 79 characters)

    reviewbotreviewbot

    This is short enough that you should be able to put the """s on the same line as the docstring …

    daviddavid

    This comment isn't really useful (the entire function is figuring out tip/base/parent_base), and kind of confusing. I'd just get rid …

    daviddavid

    Add a blank line between here.

    daviddavid

    This comment isn't 100% accurate. Maybe say something about how we add the revision range to the diff command when …

    daviddavid

    The second sentence here isn't good grammar. How about "This is because the update mechanism uses the commit message to …

    daviddavid

    Please figure out why it's not supported and explain that here. You also have a typo ("exlude")

    daviddavid

    This comment is very self-referential to the code, and doesn't really add a lot. How about: If the user passed …

    daviddavid

    Similar to the comment above, this is kind of confusing. How about: If the user asked for a diff of …

    daviddavid

    You should probably just use CommandError instead of this.

    brenniebrennie

    Since this doesn't actually interface with Git, I would suggest renaming this to _create_file or _write_file.

    brenniebrennie

    Maybe instead of the --uncommitted-type flag you could have a --staged flag that would work as follows: If --uncommitted flag …

    brenniebrennie

    Why this change?

    brenniebrennie

    Blank line between these.

    brenniebrennie

    Blank line between these.

    brenniebrennie

    Col: 80 E501 line too long (80 > 79 characters)

    reviewbotreviewbot

    I'm not sure we want to pass a string for this value. It's too easy to typo, and isn't very …

    chipx86chipx86

    I don't see anywhere where this particular exception is caught. The name is a bit awkward. How about InvalidUncommittedModeError, to …

    chipx86chipx86

    This should be: if tip not in (self.REVISION_WORKING_COPY, self.REVISION_STAGED): No need to store as a list and then convert to …

    chipx86chipx86

    this seems redundant self.assertEqual(result['parent_diff'], None) implies self.assertTrue('parent_diff' in result) same for the base_commit_id one

    TI tienv

    "... in the index. Use ..." Note the period and "the".

    chipx86chipx86

    Comma should go immediately after the word it follows, within the same string. Also, should be "--staged to upload the …

    chipx86chipx86

    "... to the working copy."

    chipx86chipx86

    "and this option is specified, a diff of the staged changes will be uploaded. Otherwise, the changed in the working …

    chipx86chipx86

    This comment just reflects the code exactly, so it doesn't need to be here.

    chipx86chipx86

    No \n.

    chipx86chipx86

    Some grammatical fixes: "If the user has explicitly specified the --uncommitted option, then the --update option cannot be used."

    chipx86chipx86

    No \n.

    chipx86chipx86

    Some grammatical fixes: "If the user has explicitly specified the --uncommitted option, then the --exclude-patterns option cannot be used." The …

    chipx86chipx86

    "exclude-patterns", not "exclude_patterns".

    chipx86chipx86

    No \n.

    chipx86chipx86

    Col: 1 E302 expected 2 blank lines, found 1

    reviewbotreviewbot

    Col: 54 E231 missing whitespace after ','

    reviewbotreviewbot

    This comment needs to be updated to reflect the new flags.

    brenniebrennie

    Can we rename file to filename in all these instances? file is overriding a Python builtin.

    brenniebrennie

    Should --staged be shorthand for --staged --uncommitted ?

    brenniebrennie

    Add another blank line here.

    daviddavid

    This is useless (we just set result to be an empty dict above -- so there will never be a …

    daviddavid
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/git.py (Diff revision 1)
       
       
      Show all issues
      Col: 28
       E222 multiple spaces after operator
      
    3. rbtools/clients/tests.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (90 > 79 characters)
      
    4. rbtools/clients/tests.py (Diff revision 1)
       
       
      Show all issues
      Col: 43
       E203 whitespace before ':'
      
    5. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (81 > 79 characters)
      
    6. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 37
       E203 whitespace before ':'
      
    7. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (81 > 79 characters)
      
    8. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (90 > 79 characters)
      
    9. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (96 > 79 characters)
      
    10. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 77
       E225 missing whitespace around operator
      
    11. rbtools/commands/post.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (93 > 79 characters)
      
    12. 
        
    VI
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/git.py (Diff revision 2)
       
       
      Show all issues
      Col: 60
       E251 unexpected spaces around keyword / parameter equals
      
    3. rbtools/clients/git.py (Diff revision 2)
       
       
      Show all issues
      Col: 62
       E251 unexpected spaces around keyword / parameter equals
      
    4. rbtools/commands/post.py (Diff revision 2)
       
       
      Show all issues
      Col: 80
       E501 line too long (94 > 79 characters)
      
    5. rbtools/utils/review_request.py (Diff revision 2)
       
       
      Show all issues
      Col: 46
       E251 unexpected spaces around keyword / parameter equals
      
    6. rbtools/utils/review_request.py (Diff revision 2)
       
       
      Show all issues
      Col: 48
       E251 unexpected spaces around keyword / parameter equals
      
    7. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. rbtools/utils/review_request.py (Diff revision 3)
       
       
      Show all issues
      Col: 46
       E251 unexpected spaces around keyword / parameter equals
      
    3. rbtools/utils/review_request.py (Diff revision 3)
       
       
      Show all issues
      Col: 48
       E251 unexpected spaces around keyword / parameter equals
      
    4. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. This looks like a pretty good start!

    2. rbtools/clients/git.py (Diff revision 4)
       
       
      Show all issues

      Comments should be full sentences with proper capitalization and punctuation.

    3. rbtools/clients/git.py (Diff revision 4)
       
       
       
       
       
      Show all issues

      Given that we now do this in both the n_revs == 0 and n_revs >= 1 cases, perhaps we should move it out to happen just before we return result?

    4. rbtools/clients/git.py (Diff revision 4)
       
       
      Show all issues

      We should probably not show this warning if using this flag.

    5. rbtools/clients/git.py (Diff revision 4)
       
       
       
       
      Show all issues

      Hmm. So I can see people wanting both the diff in the working copy (unstaged) and the diff in the index (staged). Perhaps we should make --uncommitted be able to take an optional argument?

      Please also make sure that this comment is a full sentence with proper capitalization and punctuation.

      1. Can you clarify the format of the optinal argument? Is it going to be a list of unstaged files or a boolean to show all unstaged files?

        I think the former is preferable because a project might have a lot of artifact that hasn't been added to .gitignore. Some of these might not be of interest to the user, but I want to make sure I understand the requirement.

      2. Well, I'm thinking maybe it can be an enumerated value rather than boolean. I can see perhaps wanting --uncommitted=workingcopy and --uncommitted=staged (and maybe have it so --uncommitted without a value defaults to workingcopy and the lack of --uncommitted makes it use the current behavior).

      3. I'm not sure there is a clean way to default to workingcopy, so I let the user specify this option either with workingcopy or staged. I add the appropriate test for it.

    6. rbtools/clients/git.py (Diff revision 4)
       
       
      Show all issues

      Please add this line back in.

    7. rbtools/clients/git.py (Diff revision 4)
       
       
       
      Show all issues

      Please fix this comment.

    8. rbtools/clients/git.py (Diff revision 4)
       
       
       
      Show all issues

      Add a blank line between these two.

    9. rbtools/clients/git.py (Diff revision 4)
       
       
      Show all issues

      Leftover debugging print?

    10. rbtools/clients/tests.py (Diff revision 4)
       
       
      Show all issues

      "GitClient". Also this test name is pretty hard to read (perhaps "Testing GitClient uncommitted diff with staged files"?) Because nose will append an ellipsis, we don't put periods at the end of test case docstrings.

    11. rbtools/commands/post.py (Diff revision 4)
       
       
       
       
       
       
       
       
       
      Show all issues

      This error message is kind of hard to read. Maybe we can have separate errors for each of the conflicting options?

    12. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/git.py (Diff revision 6)
       
       
      Show all issues
      Col: 22
       W601 .has_key() is deprecated, use 'in'
      
    3. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/clients/git.py (Diff revision 8)
       
       
      Show all issues

      We should default this to None rather than the empty string.

    3. rbtools/clients/git.py (Diff revision 8)
       
       
      Show all issues

      Reading this through, I think we should keep the handling of the uncommitted flag in this conditional:

      if uncommitted is not None:
          del result['commit_id']
          result['base'] = self._rev_parse(self.get_head_ref())[0]
      
          if uncommitted == 'workingcopy':
              result['tip'] = self.REVISION_WORKING_COPY
          elif uncommitted == 'staged':
              result['tip'] = self.REVISION_STAGED
          else:
              assertion?
      elif n_revs == 0:
          ...
      
    4. rbtools/clients/git.py (Diff revision 8)
       
       
       
       
       
       
      Show all issues

      We're still duplicating this code. If you make the above change, you can just have these lines run all the time before return result

    5. rbtools/clients/git.py (Diff revision 8)
       
       
      Show all issues

      Typo: "Otherise". Also, add a period at the end.

    6. rbtools/clients/git.py (Diff revision 8)
       
       
       
      Show all issues

      Add a blank line between these two.

    7. rbtools/clients/git.py (Diff revision 8)
       
       
      Show all issues

      Add a period at the end.

    8. rbtools/clients/tests.py (Diff revision 8)
       
       
      Show all issues

      Can we test the parse_revision_spec logic here?

    9. rbtools/clients/tests.py (Diff revision 8)
       
       
      Show all issues

      Can we test the parse_revision_spec logic here?

    10. rbtools/commands/post.py (Diff revision 8)
       
       
      Show all issues

      Remove this line.

    11. rbtools/commands/post.py (Diff revision 8)
       
       
      Show all issues

      Can we specify choices in here?

    12. rbtools/commands/post.py (Diff revision 8)
       
       
      Show all issues

      Typo: an -> and. You also have an extra ) in the string.

    13. rbtools/commands/post.py (Diff revision 8)
       
       
      Show all issues

      Typo: an -> and. You also have an extra ) in the string.

    14. rbtools/commands/post.py (Diff revision 8)
       
       
       
      Show all issues

      Typo: an -> and. You also have an extra ) in the string.

    15. rbtools/utils/review_request.py (Diff revision 8)
       
       
      Show all issues

      This should probably default to None.

    16. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/tests.py (Diff revision 9)
       
       
      Show all issues
      Col: 55
       E231 missing whitespace after ','
      
    3. rbtools/clients/tests.py (Diff revision 9)
       
       
      Show all issues
      Col: 80
       E501 line too long (81 > 79 characters)
      
    4. rbtools/clients/tests.py (Diff revision 9)
       
       
      Show all issues
      Col: 55
       E231 missing whitespace after ','
      
    5. 
        
    VI
    VI
    david
    1. 
        
    2. rbtools/clients/git.py (Diff revision 10)
       
       
       
       
      Show all issues

      Do you mind sorting these in alphabetical order?

    3. rbtools/clients/git.py (Diff revision 10)
       
       
       
       
       
      Show all issues

      Can you add blank lines around the blocks? We should also use del rather than .pop().

      Please also use exact comparisons rather than 'in' (which does a substring match, which is slower and imprecise).

      if 'commit_id' in result:
          del result['commit_id']
      
      result['base'] = self._rev_parse(self.get_head_red())[0]
      
      if uncommitted == 'workingcopy':
          ...
      
    4. rbtools/clients/git.py (Diff revision 10)
       
       
      Show all issues

      This change shouldn't be necessary anymore because the uncommitted handling is a separate case.

    5. rbtools/clients/git.py (Diff revision 10)
       
       
      Show all issues

      Remove this blank line?

    6. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. rbtools/commands/post.py (Diff revision 11)
       
       
      Show all issues
      Col: 48
       E127 continuation line over-indented for visual indent
      
    3. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/commands/post.py (Diff revision 12)
       
       
       
       
      Show all issues

      For the help, how about "Uploads a diff of the changes in either the working copy or index (Git only)."

    3. rbtools/commands/post.py (Diff revision 12)
       
       
       
       
       
       
       
       
       
       
       
       
      Show all issues

      Why are these not allowed?

      1. I think we discussed this the last time about update, but I don't remember exactly the reason. For the exclude_pattern, it's currently not supported because there is not a clean way to support it based on my discussion with Barret

      2. Update is probably because it guesses based on the commit message (and of course there isn't one). We should probably make it so that update can work without a commit message and just try guessing all open review requests in turn.

        That said, the comments next to these shouldn't say what the code does (the code is very simple--I can read it easily), but rather, answer this question (why). That way if circumstances change later, we will know that we can change the restrictions here.

      3. So for the guesses, do you want me to support that in this feature or I should open it as a seperate issue?

      4. I think we should get this change ready as-is, and you can work on supporting -u in a separate review request.

    4. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/clients/__init__.py
          rbtools/utils/review_request.py
          rbtools/clients/git.py
      
      
    2. 
        
    chipx86
    1. So my main concern is that passing --uncommitted=staged or --uncommitted=workingcopy is a lot to type every time, and perhaps is confusing to people without reading docs. How about instead having --uncommitted as a boolean flag, and then --uncommitted-type=[staged|workingcopy], with the default of "staged"?

      The pro being that, in the common case of posting changes scheduled for commit but not yet committed, it's quicker to type and post. Also, --uncommitted-type could be a configurable option, so that the user can specify which mode they prefer to work with in .reviewboardrc without triggering uncommitted reviews for every change.

      Downside being that, in the uncommon case, it's more to type, but I think most people just want to post changes scheduled for commit without actually committing. However, with the option, that shouldn't be as big a deal.

    2. rbtools/clients/git.py (Diff revision 14)
       
       
       
      Show all issues

      Single quotes are preferred.

    3. rbtools/clients/git.py (Diff revision 14)
       
       
       
      Show all issues

      Minor nit: This wraps kind of early.

    4. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      Can you flip this? Should be uncommitted == 'workingcopy'

    5. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      Same here.

    6. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      This should probably be given an error message indicating that uncommitted has an incorrect value?

    7. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      There's some important stuff in git_cmd we don't want to lose, like turning off quoted paths nad colors.

    8. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      Best to use tuples here, to avoid the overhead of a list.

    9. rbtools/clients/git.py (Diff revision 14)
       
       
      Show all issues

      Best to use .append() here.

    10. rbtools/clients/git.py (Diff revision 14)
       
       
       
      Show all issues

      That line shouldn't be indented.

    11. rbtools/clients/tests.py (Diff revision 14)
       
       
      Show all issues

      Missing period.

    12. rbtools/clients/tests.py (Diff revision 14)
       
       
      Show all issues

      Missing period.

    13. rbtools/clients/tests.py (Diff revision 14)
       
       
       
      Show all issues

      Summaries are limited to one line. No wrapping.

    14. rbtools/commands/post.py (Diff revision 14)
       
       
      Show all issues

      No need for this line. It's implied.

    15. rbtools/commands/post.py (Diff revision 14)
       
       
       
       
       
      Show all issues

      Text must be aligned.

    16. rbtools/commands/post.py (Diff revision 14)
       
       
      Show all issues

      Maybe just check for uncommitted once, and then do the rest of the conditionals inside that if block.

    17. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/errors.py (Diff revision 15)
       
       
      Show all issues
      Col: 1
       E302 expected 2 blank lines, found 1
      
    3. rbtools/clients/git.py (Diff revision 15)
       
       
      Show all issues
       'UncommittedIncorrectValueError' imported but unused
      
    4. rbtools/clients/git.py (Diff revision 15)
       
       
      Show all issues
       undefined name 'OptionsCheckError'
      
    5. rbtools/clients/git.py (Diff revision 15)
       
       
      Show all issues
      Col: 80
       E501 line too long (84 > 79 characters)
      
    6. rbtools/commands/post.py (Diff revision 15)
       
       
      Show all issues
      Col: 32
       E128 continuation line under-indented for visual indent
      
    7. rbtools/commands/post.py (Diff revision 15)
       
       
      Show all issues
      Col: 13
       E303 too many blank lines (2)
      
    8. rbtools/commands/post.py (Diff revision 15)
       
       
      Show all issues
      Col: 80
       E501 line too long (83 > 79 characters)
      
    9. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/clients/errors.py (Diff revision 16)
       
       
       
       
      Show all issues

      This is short enough that you should be able to put the """s on the same line as the docstring itself. There should also be a period at the end.

    3. rbtools/clients/git.py (Diff revision 16)
       
       
       
      Show all issues

      This comment isn't really useful (the entire function is figuring out tip/base/parent_base), and kind of confusing. I'd just get rid of it.

    4. rbtools/clients/git.py (Diff revision 16)
       
       
       
      Show all issues

      Add a blank line between here.

    5. rbtools/clients/git.py (Diff revision 16)
       
       
       
      Show all issues

      This comment isn't 100% accurate. Maybe say something about how we add the revision range to the diff command when posting committed changes?

    6. rbtools/commands/post.py (Diff revision 16)
       
       
       
      Show all issues

      The second sentence here isn't good grammar. How about "This is because the update mechanism uses the commit message to find the review request, and uncommitted changes don't have a commit message yet."

    7. rbtools/commands/post.py (Diff revision 16)
       
       
       
       
      Show all issues

      Please figure out why it's not supported and explain that here. You also have a typo ("exlude")

    8. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. Your description should be updated to talk about --uncommitted-type. You also have a typo ("Mercurila").

    2. rbtools/clients/git.py (Diff revision 17)
       
       
       
      Show all issues

      This comment is very self-referential to the code, and doesn't really add a lot. How about:

      If the user passed --uncommitted-type=staged, add --cached to the 'git diff' command.

    3. rbtools/clients/git.py (Diff revision 17)
       
       
       
      Show all issues

      Similar to the comment above, this is kind of confusing. How about:

      If the user asked for a diff of the working copy, we do not pass any revisions to the 'git diff' command. Otherwise, add the revision range.

    4. 
        
    VI
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    brennie
    1. 
        
    2. rbtools/clients/errors.py (Diff revision 18)
       
       
       
       
      Show all issues

      You should probably just use CommandError instead of this.

      1. Is it too generic though? The OptionCheckError in the same file seems to be a CommandError but it has its own definition.

      2. The OptionCheckError would be fine, too.

    3. rbtools/clients/tests.py (Diff revision 18)
       
       
      Show all issues

      Since this doesn't actually interface with Git, I would suggest renaming this to _create_file or _write_file.

    4. rbtools/commands/post.py (Diff revision 18)
       
       
       
       
       
       
       
       
       
      Show all issues

      Maybe instead of the --uncommitted-type flag you could have a --staged flag that would work as follows:

      If --uncommitted flag is specified and --staged isn't specified it will use the working copy changes; otherwise if --staged is specified, it will use the staged changes.

      This seems like a clearer way to go about it (and will be easier to describe).

      1. Having these two flags was Christian's suggestion. How about you and he hash it out, so we don't have Tran thrash around too much between different options?

      2. I just followed what Christian suggested in previous post which I quoted "So my main concern is that passing --uncommitted=staged or --uncommitted=workingcopy is a lot to type every time, and perhaps is confusing to people without reading docs. How about instead having --uncommitted as a boolean flag, and then --uncommitted-type=[staged|workingcopy], with the default of "staged"?" . I get your point, but I feel like I keep going back and forth fixing cosmetic issues everytime someone looks at it which not really help me learn. Is there a guideline or standard where I could refer to when applying my changes?

      3. This is just a suggesstion, so feel free to drop it if you prefer Christian's suggestion. Either way is fine for me.

      4. I'm happy enough with Barret's suggestion. It's cleaner.

    5. rbtools/commands/post.py (Diff revision 18)
       
       
       
      Show all issues

      Why this change?

    6. rbtools/commands/post.py (Diff revision 18)
       
       
       
      Show all issues

      Blank line between these.

    7. rbtools/commands/post.py (Diff revision 18)
       
       
       
      Show all issues

      Blank line between these.

    8. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    VI
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. rbtools/commands/post.py (Diff revision 20)
       
       
      Show all issues
      Col: 80
       E501 line too long (80 > 79 characters)
      
    3. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    chipx86
    1. 
        
    2. rbtools/clients/git.py (Diff revision 21)
       
       
       
       
       
      Show all issues

      I'm not sure we want to pass a string for this value. It's too easy to typo, and isn't very obvious to the caller.

      What I'd suggest instead is a class that works as an enum for storing the possible values. For instance:

      class UncommittedMode(object):
          WORKING_COPY = 1
          STAGED = 2
      

      Then it's easy to check.

    3. rbtools/clients/git.py (Diff revision 21)
       
       
      Show all issues

      I don't see anywhere where this particular exception is caught.

      The name is a bit awkward. How about InvalidUncommittedModeError, to match the suggested class name?

      1. "I don't see anywhere where this particular exception is caught" > Can you elaborate on this? Are you talking about trying to catch it somewhere so that the user can continue?

      2. I think what he means is, in commands/diff.py

            try:
                revisions = tool.parse_revision_spec(args)
                extra_args = None
            except InvalidRevisionSpecError:
        

        there should be another 'except' to catch the UncommittedIncorrectValueError

      3. Well, that makes sense, but what protocol to do here except raise the exception again? I don't see any particular way to handle this exception since the revisions variables is not complete.

    4. rbtools/clients/git.py (Diff revision 21)
       
       
       
      Show all issues

      This should be:

      if tip not in (self.REVISION_WORKING_COPY, self.REVISION_STAGED):
      

      No need to store as a list and then convert to a tuple.

    5. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      "... in the index. Use ..."

      Note the period and "the".

    6. rbtools/commands/post.py (Diff revision 21)
       
       
       
      Show all issues

      Comma should go immediately after the word it follows, within the same string.

      Also, should be "--staged to upload the staged changes."

    7. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      "... to the working copy."

    8. rbtools/commands/post.py (Diff revision 21)
       
       
       
       
       
      Show all issues

      "and this option is specified, a diff of the staged changes will be uploaded. Otherwise, the changed in the working copy are uploaded."

    9. rbtools/commands/post.py (Diff revision 21)
       
       
       
      Show all issues

      This comment just reflects the code exactly, so it doesn't need to be here.

    10. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      No \n.

    11. rbtools/commands/post.py (Diff revision 21)
       
       
       
       
       
      Show all issues

      Some grammatical fixes:

      "If the user has explicitly specified the --uncommitted option, then the --update option cannot be used."

    12. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      No \n.

    13. rbtools/commands/post.py (Diff revision 21)
       
       
       
       
       
       
       
      Show all issues

      Some grammatical fixes:

      "If the user has explicitly specified the --uncommitted option, then the --exclude-patterns option cannot be used."

      The note about diff-tree is a Git-specific implementation detail, so we shouldn't mention it here.

      1. Previous mentors mentioned that I need to indicate the reason for not supporting this and the main reason is to find an alternative to diff-tree command for git. If we remove it, how should I rephrase this to satisfy the requirement of the comment?

    14. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      "exclude-patterns", not "exclude_patterns".

    15. rbtools/commands/post.py (Diff revision 21)
       
       
      Show all issues

      No \n.

    16. 
        
    TI
    1. 
        
    2. rbtools/clients/tests.py (Diff revision 21)
       
       
      Show all issues

      this seems redundant

      self.assertEqual(result['parent_diff'], None)

      implies

      self.assertTrue('parent_diff' in result)

      same for the base_commit_id one

      1. I don't think this comment is valid though, if you try to do "self.assertEqual(result['parent_diff'], None)" without making sure that result actually has 'parent_diff', you will have ValueError exception because you try to access an item that not in the dictionary yet.

      2. yeah, I was thinking that if the key wasn't in the dict, the test will fail anyway. but an exception is probably not as good as an explicit assertion

    3. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. rbtools/clients/git.py (Diff revision 22)
       
       
      Show all issues
      Col: 1
       E302 expected 2 blank lines, found 1
      
    3. rbtools/clients/git.py (Diff revision 22)
       
       
      Show all issues
      Col: 54
       E231 missing whitespace after ','
      
    4. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    brennie
    1. 
        
    2. rbtools/clients/git.py (Diff revision 23)
       
       
      Show all issues

      This comment needs to be updated to reflect the new flags.

    3. rbtools/clients/tests.py (Diff revision 23)
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
      Show all issues

      Can we rename file to filename in all these instances? file is overriding a Python builtin.

    4. rbtools/commands/post.py (Diff revision 23)
       
       
       
      Show all issues

      Should --staged be shorthand for --staged --uncommitted ?

      1. In the previous comment, you mentioned that I should use --uncommitted to indicate changes in working copy and --uncommitted --staged to indicate staged change. For me, it makes senses that way because it's part of supporting uncommitted flag.

    5. 
        
    VI
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/tests.py
          rbtools/commands/post.py
          rbtools/utils/review_request.py
          rbtools/clients/errors.py
          rbtools/clients/git.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/clients/git.py (Diff revision 24)
       
       
      Show all issues

      Add another blank line here.

    3. rbtools/clients/git.py (Diff revision 24)
       
       
       
      Show all issues

      This is useless (we just set result to be an empty dict above -- so there will never be a commit_id in it).

    4. 
        
    david
    Review request changed
    Status:
    Discarded