[tfs] Allow overriding tf.cmd location

Review Request #7999 — Created Feb. 25, 2016 and submitted

Information

RBTools
master

Reviewers

Allow an environment variable to specify location of tf.cmd for rbtools.
This will allow tf commands from visual studio 2013+ to work alongside
an installation of Team Explorer Everywhere.

Before:

C:\>rbt post -d
>>> RBTools 0.8 alpha 0 (dev)
>>> Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
>>> Running on Windows-10-10.0.10586
Checking location "%RBT_TF_PATH%\tf.cmd"
Caught OSError: [Error 2] The system cannot find the file specified

After:

C:\>rbt post -d
>>> RBTools 0.8 alpha 0 (dev)
>>> Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
>>> Running on Windows-10-10.0.10586
Checking location C:\Program Files (x86)\TEE-CLC-14.0.2\tf.cmd
Using location C:\Program Files (x86)\TEE-CLC-14.0.2\tf.cmd
Description From Last Updated

These shouldn't be one sentence per line.

brenniebrennie

Perhaps this should be exposed as a .reviewboardrc option instead?

brenniebrennie

Blank line between these.

brenniebrennie

The config in __init__ is from load_config :) We'll also want to use options (also included above) instead, see my …

brenniebrennie

I believe we'll want to add an option group to rbtools.commands.Command, similar to perforce_options circa line 435. That way, we …

brenniebrennie

tf_locations.extend Otherwise, your array will look like ['my-custom-path', ['tf.cmd', '...']] which is not what you were intending.

brenniebrennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
    
    
  2. 
      
SM
  1. 
      
  2. rbtools/clients/tfs.py (Diff revision 1)
     
     

    This environmental variable gets evaluated by the shell, when check_install gets run, right? Because since it's a raw string, I think Python won't do it.

    1. Yep, exactly. The same way the two installation locations are checked.

    2. Well, I mean, not the exact same way - there's no %ENV_VARIABLE% getting evaluated in the other cases! - but yeah, I'm satisfied. Thumbs-up.

    3. r'%programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE\tf.cmd',
      r'%programfiles%\Microsoft Team Foundation Server 12.0\Tools\tf.cmd',
      

      %programfiles(x86)% and %programfiles% are environment variables that, for the large majority of people, will resolve to C:\Program Files (x86) and C:\Program Files respectively.

      C:\>echo %programfiles(x86)%
      C:\Program Files (x86)
      
      C:\>echo %programfiles%
      C:\Program Files
      

      Thanks for the review and the thumbs-up! ^_^

      So this is my first submission, do I need another review, just commit, or do I create a master branch pull request?

  3. 
      
BM
reviewbot
  1. Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
    
    
    
    Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
    
    
  2. 
      
brennie
  1. 
      
  2. rbtools/clients/tfs.py (Diff revision 2)
     
     
     
     
    Show all issues

    These shouldn't be one sentence per line.

  3. rbtools/clients/tfs.py (Diff revision 2)
     
     
     
    Show all issues

    Perhaps this should be exposed as a .reviewboardrc option instead?

    1. I'm not sure about this. In general, .reviewboardrc contains the settings around a RB Repository and a local workspace of the same repo, right? However the installation location for Team Explorer Everywhere is very likely to be quite different from machine to machine (It's just an unzipped directory, there is no installer for it).

    2. That is true, but we also support .reviewboardrc in higher up directories, so it seems like ~/.reviewboardrc would be a good place for this (or whatever the equivalent would be in windows with %HOME%\.reviewboardrc)

    3. Ahh, cool. I'll go ahead and make the change.

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

    Blank line between these.

  5. 
      
BM
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
    
    
  2. 
      
BM
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
    
    
  2. 
      
brennie
  1. 
      
  2. rbtools/clients/tfs.py (Diff revision 4)
     
     
     
     
    Show all issues

    The config in __init__ is from load_config :)

    We'll also want to use options (also included above) instead, see my notes below.

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

    I believe we'll want to add an option group to rbtools.commands.Command, similar to perforce_options circa line 435.

    That way, we can also specify, e.g. --tf-path on the command line, and we can get a named options.

    Then we can do:

    if options.tf_cmd_path:
        tf_locations.append(options.tf_cmd_path)
    
  4. rbtools/clients/tfs.py (Diff revision 4)
     
     
     
     
     
     
    Show all issues

    tf_locations.extend

    Otherwise, your array will look like

    ['my-custom-path', ['tf.cmd', '...']]
    

    which is not what you were intending.

    1. Sorry for the churn. My python-fu is rudimentary at best. ^_^

  5. 
      
BM
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
        rbtools/commands/__init__.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
        rbtools/commands/__init__.py
    
    
  2. 
      
BM
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        rbtools/clients/tfs.py
        rbtools/commands/__init__.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        rbtools/clients/tfs.py
        rbtools/commands/__init__.py
    
    
  2. 
      
david
  1. Looks good! Thanks so much for doing this!

    1. Cool, thanks for the review! ^_^

  2. 
      
BM
Review request changed
Status:
Completed
Change Summary:
Pushed to release-0.7.x (847a34e)