Add relative exclude pattern support to Git, SVN, CVS, and Bazaar SCMClients.

Review Request #6383 — Created Sept. 29, 2014 and submitted — Latest diff uploaded

Information

RBTools
master

Reviewers

Exclude patterns are now interpreted as relative to the current
working directory.

Add rbtools.utils.diffs:normalize_patterns which normalizes patterns,
which are interpreted as relative to the current working directory,
into patterns matching only absolute paths.

Simplify logic of rbtools.utils.diffs:filter_diff to use
filename_match_any_patterns instead of looping through patterns.

The rbtools.utils.diffs functions filename_match_any_patterns,
filter_diff, and remove_filenames_matching_patterns now take an
extra parameter: base_dir. This argument indicates the directory
that the files are located in. If this argument is not provided, it is
interpreted as the current working directory.

Add GitClient._get_root_directory which finds the absolute path of
the git repository.

All SCMClients that support file exclusion normalize their exclude
patterns. This is not done outside of the respective diff methods
because Perforce exclude patterns require special treatment for depot
file patterns.

The SVN SCMClient no longer prepends / to patterns as it no longer
matches the / in the Index: line as the file path as they are now
interpreted as relative file paths.

Update documentation for rbt diff and rbt post to indicate that
-X specifies relative exclude patterns. Also add a note that Perforce
can specify depot-specific exclude patterns.

Unit tests pass.

Ran rbt diff -X in SVN, CVS, Git, and Bazaar repositories with
relative paths. Files were excluded as expected.