• 
      

    brennie got review request #7000!

    Make file exclusion support syntax consistent for all SCMClients

    Review Request #7000 — Created March 2, 2015 and submitted

    Information

    RBTools
    release-0.7.x
    50ef470...

    Reviewers

    File exclusion support (e.g., with rbt diff -X pattern or
    rbt post -X pattern) now behaves identically (with some caveats).
    Previously, the case of having a pattern matching against the root of
    the repository was not well defined and was misinterpreted by all
    SCMClients. Now all patterns beginning with a path separator (e.g.
    -X /pattern on Linux and Mac OS, and -X \pattern on Windows) are
    treated as being relative to the root of the repository checkoutl.
    However, because CVS generates diffs relative to the current working
    directory (without an easy way to determine the checkout root), all
    patterns (even those beginning with a path separator) are treated as
    relative to the current working directory.

    The documentation for the -X flag has been updated to reflect these
    changes.

    Unit tests have been added for Bazaar, Git, Mercurial, and Subversion
    for generating diffs correctly with this new syntax. A unit test has
    also been added for Perforce that checks that paths are normalized
    correctly.

    Ran unit tests.

    Manually tested that files were excluded correctly using CVS.

    Manually verified that all cases in issue 3776 are resolved:

    1. Running rbt diff -X PATTERN in a subdirectory checkout
      works as expected.
    2. We no longer rely on the Working Copy Root Path field of
      svn info.
    3. Running rbt diff --repository-url URL -X PATTERN R1:R2
      works as expected when ran outside of an SVN checkout.
    Description From Last Updated

    Leftover debugging print?

    daviddavid

    local variable 'normalized_patterns' is assigned to but never used

    reviewbotreviewbot

    Before we backed out the -I change, we had a bunch of reports of people (probably with older versions of …

    daviddavid

    'spy_on' imported but unused

    reviewbotreviewbot

    Per the third item mentioned in #3776, using the current working directory (e.g. '.') here as the target for 'svn …

    gmyersgmyers

    Barret, I really appreciate you taking the time to address the ticket I opened. I hate to be nit-picky, but …

    gmyersgmyers

    Comment needs to be updated to reflect the modified code.

    gmyersgmyers

    This test appears to be failing.

    gmyersgmyers

    Extra leading space on this line.

    gmyersgmyers

    Can we move the comments into the conditional's body? It's easier to scan.

    chipx86chipx86

    This is a bit weird to read. How about calling the function and storing as a variable, and then doing …

    chipx86chipx86
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. rbtools/clients/perforce.py (Diff revision 1)
       
       
      Show all issues
       local variable 'normalized_patterns' is assigned to but never used
      
    3. rbtools/clients/tests.py (Diff revision 1)
       
       
      Show all issues
       'spy_on' imported but unused
      
    4. 
        
    brennie
    david
    1. 
        
    2. rbtools/clients/bazaar.py (Diff revision 1)
       
       
      Show all issues

      Leftover debugging print?

    3. rbtools/clients/svn.py (Diff revision 1)
       
       
      Show all issues

      Before we backed out the -I change, we had a bunch of reports of people (probably with older versions of SVN?) where this was causing a KeyError.

    4. 
        
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    gmyers
    1. I wanted to call your attention to Issue #3776 (https://code.google.com/p/reviewboard/issues/detail?id=3776) where I detailed some issues I observed with -X under svn.  This includes the KeyError that David mentioned earlier in his review.  Perhaps these issues are out of scope for this task, but I tested with the updated code and they are all still present.
      1. Thanks for the heads up, Griffin. I'm working on getting this resolved. We shouldn't have to rely on the Working Copy Root Path and the next version won't assume a root checkout.

    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    gmyers
    1. 
        
    2. rbtools/clients/svn.py (Diff revisions 2 - 4)
       
       
      Show all issues
      Per the third item mentioned in #3776, using the current working directory (e.g. '.') here as the target for 'svn info' does not support the `--repository-url` option.
    3. 
        
    brennie
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    brennie
    gmyers
    1. 
        
    2. rbtools/clients/svn.py (Diff revision 5)
       
       
       
       
      Show all issues

      Barret, I really appreciate you taking the time to address the ticket I opened. I hate to be nit-picky, but I still have a concern here particularly with the use of base_path from the SVNRepositoryInfo object. The base_path here is determined once and is based on the directory in the working copy which rbt is run out of. The problem is that this path is not necessarily what you want when you start to use -I/--include to include specific files to be diffed.

      Here is a bash script, in the spirit of the one I provided in Issue 3776 to illustrate the problem:

      #######################################################
      #!/bin/bash
      set -x
      
      svnadmin create /tmp/testrepo
      mkdir foo
      cd foo
      mkdir trunk branches tags
      echo "test" > trunk/a.txt
      echo "data" > trunk/b.dat
      svn import . file:///tmp/testrepo -m "initial commit"
      cd ..
      svn co file:///tmp/testrepo foo_root_wc
      cd foo_root_wc
      echo "stuff" >> trunk/a.txt
      echo "more data" >> trunk/b.dat
      cd branches
      rbt diff --server 127.0.0.1:8080 -I ../trunk -X *.dat
      cd ../trunk
      rbt diff --server 127.0.0.1:8080 -I . -X *.dat
      ######################################################
      

      This will create a repo with trunk, branches, and tags directories in the root. There are txt and dat files in trunk. The script next checks out the root of the repository, manipulates the files, changes to the branches subdirectory then runs rbt diff with an explicit include to ../trunk and an exclude of *.dat. File b.dat is not excluded from the diff as expected. Finally, the same command is run from trunk where it does behave as expected.

      The problem is that when running from the branches subdirectory the base_path is /branches, which normalizes the exclusion pattern to /branches/*.dat. This does not match with /trunk/b.dat.

      I'll admit that this specific example is a fairly contrived. But, at my workplace we rely heavily on SVN externals and to get RBTools to work like we need/want it to in the presence of externals, we basically have a big wrapper script around rbt that heavily leverages includes via -I. And, if there is way to break something that is exacerbated by includes, then we will probably run into it :)

      1. Ah. So using -X *.txt in a directory will only exclude files in the current directory and subdirectories. That is the intended behaviour and how it works with all other SCMs. To make a pattern "global", you would preface it with the path separator, e.g., -X /*.txt. I never considered the case of using -I to include a seperate directory, so it is currently broken with SVN. I will fix this case in the next revision.

      2. Please change your pattern to '/*.txt' and re-run your script on revision 6. You should find it to work there.

    3. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    gmyers
    1. 
        
    2. rbtools/clients/svn.py (Diff revision 6)
       
       
       
       
       
       
       
       
       
      Show all issues
      Comment needs to be updated to reflect the modified code.
    3. rbtools/clients/tests.py (Diff revision 6)
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
      Show all issues
      This test appears to be failing.
    4. rbtools/commands/__init__.py (Diff revision 6)
       
       
      Show all issues
      Extra leading space on this line.
    5. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    chipx86
    1. 
        
    2. rbtools/clients/perforce.py (Diff revision 7)
       
       
       
       
      Show all issues

      Can we move the comments into the conditional's body? It's easier to scan.

    3. rbtools/clients/svn.py (Diff revision 7)
       
       
       
       
       
       
      Show all issues

      This is a bit weird to read. How about calling the function and storing as a variable, and then doing the conditional from that?

    4. 
        
    brennie
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          rbtools/clients/cvs.py
          rbtools/utils/diffs.py
          rbtools/commands/__init__.py
          rbtools/clients/tests.py
          rbtools/clients/bazaar.py
          rbtools/clients/git.py
          rbtools/clients/perforce.py
          rbtools/clients/svn.py
      
      
    2. 
        
    chipx86
    1. Ship It!
    2. 
        
    brennie
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-0.7.x (202154a)