1. Raphael Estrada
  2. minimalpath


= Summary =
Tools to get minimal p4 client workspace paths from a solution.\\
Run any of the executables with argument {{{-help}}} for more detailed expanation and examples.

= Why? =
I created these tools so I can create a minimal p4 client workspace for a given VS solution. This is to optimize !TeamCity VCS roots. If you use a too generic root, it will trigger for version control changes that don't really matter to the project/solution. But hand-coding a custom VCS root for every solution is a lot of work (see below for a bit more detail).

They can be useful in other scenarios, especially {{{GetFilePaths}}} can be used whenever you need to walk a solution for it's paths somewhere in your toolchain.

== Minimal p4 client mappings ==
These tools can be used in a simple text manipulation pipeline to automagically generate customized p4 client workspaces. See {{{src/Demo.ps1}}} for an example !PowerShell script that combines them to get the minimal workspace paths from a solution. Note that currently you'll have to prepend "//" to your "Depot" path root after the tool has done it's magic - it cannot handle slashes in the path root just yet.\\
All that needs to be done after that is use the p4 command line to translate those paths into depot paths. Technically you can do that even easier by just doing a find/replace, usually the depot part is quite static. See {{{src/Demo.ps1}}}.

== GetFilePaths ==
* gets all project paths from within a solution (.sln file) OR gets all file paths from within a project (.csproj file)
* currently only tested with rather simple VS 2010 solution and project files
== MinimalPath ==
* takes paths line by line from standard in, removes duplicates and returns the path tree up to a defined point
* if max branch depth is 0 or negative, will return all paths in their full length (without duplicates)
* if max branch depth is greater 0, will return the path tree only down to that level


= TODOs =
* improve performance via parallelization (see WorkerManager)
* make path format handling more flexible, i.e. rooted paths (such as {{{C:\...}}} or {{{//Root/...}}}) and different path separators


= License =
This software is licensed under the MIT license. A copy of the license is included with the package you downloaded, namely in a file called 'LICENSE'. You can also  view the license online at 

If the file is not included, somebody (willingly or unwillingly) violated the license. Please report this to the author and redownload the software from it's original source here:
Thank you.