public static StripWorkDir ( FileSystemInfo workDir, FileSystemInfo file ) : string | ||
workDir | FileSystemInfo | Work directory |
file | FileSystemInfo | File whose path shall be stripp off it's workdir |
return | string |
public static string StripWorkDir(FileSystemInfo workDir, FileSystemInfo file)
{
string filePath = file.DirectoryName();
string workDirPath = workDir.DirectoryName();
if (filePath.Length <= workDirPath.Length ||
filePath[workDirPath.Length] != Path.DirectorySeparatorChar ||
!filePath.StartsWith(workDirPath))
{
FileSystemInfo absWd = new DirectoryInfo(workDir.DirectoryName());
FileSystemInfo absFile = new FileInfo(file.FullName);
if (absWd.FullName == workDir.FullName && absFile.FullName == file.FullName)
{
return string.Empty;
}
return StripWorkDir(absWd, absFile);
}
string relName = filePath.Substring(workDirPath.Length + 1);
if (Path.DirectorySeparatorChar != '/')
{
relName = relName.Replace(Path.DirectorySeparatorChar, '/');
}
return relName;
}
private byte[] MakeKey(FileSystemInfo wd, FileSystemInfo f) { if (!string.IsNullOrEmpty(f.DirectoryName()) && wd.IsDirectory() && wd.Exists && !f.DirectoryName().StartsWith(wd.DirectoryName())) { throw new Exception("Path is not in working dir"); } string relName = Repository.StripWorkDir(wd, f); return(Core.Repository.GitInternalSlash(Constants.encode(relName))); }