• 
      

    Optimize diff/post performance by caching 'svn info' results

    Review Request #7199 — Created April 14, 2015 and submitted — Latest diff uploaded

    Information

    RBTools
    master
    2fcdf37...

    Reviewers

    rbt diff and post operations make numerous calls to 'svn info' with
    paths to various files. For any given modified file, 'svn info'
    is called 4 + N times. This breaks down as:

    • 3 calls from convert_to_absolute_paths() with the full filename
      to process the new file line, original file line, and Index line
    • 1 call from find_copyfrom() for the full filename
    • N calls from find_copyfrom() for each sub-path component in the
      filename

    By introducing caching on results from 'svn info' the number of
    calls per file can be decreased to 1 + M, where M is always <= N.
    For files sharing a common directory hierarchy, M will be equal
    to N for the first file processed and 0 for all subsequent files.

    Consider a contrived example with two modified files at:
    A/B/C/foo.txt
    A/B/C/bar.txt

    The original code make 14 total calls to 'svn info'. Measuring
    timing on a CentOS 7 box with time -p reveals an average run
    time of 0.742s. The updated code makes 5 total calls to
    'svn info' and runtime is measured at 0.586s. This is a decrease
    in runtime of 21%.

    * Performed various 'rbt diff' executions with debug enabled to 
      verify expected decrease in calls to 'svn info'.
    * Ran unit tests.