• 
      

    Support for multi commit review requests in patch

    Review Request #7175 — Created April 6, 2015 and submitted

    Information

    RBTools
    dvcs
    afbd97f...

    Reviewers

    The patch command now supports applying review requests with commit
    history. If requested via command line arguments, each commit in the
    review request will be applied in sequence on the current branch,
    optionally committing each patch. The default behaviour is to replicate
    what ever format of review request was uploaded, but this can be
    overridden via flags.

    Ran unit tests.

    Manually tested the following against review requests with multiple
    commits:

    • Ran rbt patch. The commits were not committed. The output of
      git diff was correct.
    • Ran rbt patch -C. The commits were all created client side. The
      output of git diff was correct.
    • Ran rbt patch -S. The commits were not committed. The output of
      git diff was correct. Verified via the --debug flag that we only
      request the condensed diff from the server.
    • Ran rbt patch -SC against a review request with multiple commits.
      The resulting commit was of the old format (description, testing done,
      bugs fixed, etc.).

    Manually tested the following against review request without multiple
    commits:

    • Ran rbt patch. No commits were created. The output of git diff
      was correct.
    • Ran rbt patch -C. One commit was created and it was of the old
      format (as specified above). The output of git diff was correct.
    • Ran rbt patch -SC. Same behaviour of rbt patch -C.
    Description From Last Updated

    This should use the new template stuff, no?

    daviddavid

    This should probably not say "yields" (since that implies a generator). How about something like a list of history entry …

    daviddavid

    This is assuming a single page of results. You should look at how we iterate over repositories in order to …

    daviddavid

    I don't think we need to use &= here (or even define success outside of the for loop) because when …

    daviddavid

    I don't think you need to use the quotes in here, since the shell isn't parsing arguments.

    daviddavid

    Shouldn't -u and the author be separate arguments?

    daviddavid

    There's no reason for this format operation now. Just pass in author.

    daviddavid

    How about wrapping this as: with_history = (should_commit and self.should_use_history(tool, server_url))

    daviddavid

    Indentation here is crazy. The arguments should just be 4 spaces from the previous indent level, not 20.

    daviddavid

    How about doing: if not success: raise CommandError(...) if should_commit: ... That way you can un-indent everything one level.

    daviddavid
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/commands/patch.py
          rbtools/api/resource.py
          rbtools/clients/git.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/patch.py
          rbtools/api/resource.py
          rbtools/clients/git.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/api/resource.py (Diff revision 3)
       
       
       
      Show all issues

      This should use the new template stuff, no?

      1. Once that lands, I'll put up a new patch to reconcile this.

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

      This should probably not say "yields" (since that implies a generator). How about something like a list of history entry (diff, metadata) tuples?

      1. Oops! This originally was a generator so that is how it crept through.

    4. rbtools/commands/patch.py (Diff revision 3)
       
       
       
       
       
      Show all issues

      This is assuming a single page of results. You should look at how we iterate over repositories in order to fetch all pages.

    5. rbtools/commands/patch.py (Diff revision 3)
       
       
      Show all issues

      I don't think we need to use &= here (or even define success outside of the for loop) because when the result of this is False, you raise a CommandError.

    6. 
        
    brennie
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/clients/git.py (Diff revision 4)
       
       
      Show all issues

      I don't think you need to use the quotes in here, since the shell isn't parsing arguments.

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

      Shouldn't -u and the author be separate arguments?

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

      How about wrapping this as:

      with_history = (should_commit and
                      self.should_use_history(tool, server_url))
      
    5. rbtools/commands/patch.py (Diff revision 4)
       
       
      Show all issues

      How about doing:

      if not success:
          raise CommandError(...)
      
      if should_commit:
          ...
      

      That way you can un-indent everything one level.

    6. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
    2. 
        
    david
    1. 
        
    2. rbtools/clients/mercurial.py (Diff revisions 4 - 5)
       
       
      Show all issues

      There's no reason for this format operation now. Just pass in author.

    3. rbtools/commands/patch.py (Diff revisions 4 - 5)
       
       
       
       
      Show all issues

      Indentation here is crazy. The arguments should just be 4 spaces from the previous indent level, not 20.

    4. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          rbtools/commands/land.py
          rbtools/clients/mercurial.py
          rbtools/api/resource.py
          rbtools/clients/git.py
          rbtools/commands/patch.py
      
      
    2. 
        
    david
    1. Ship It!
    2. 
        
    brennie
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to dvcs (80debfe)