public ConvertedArguments Convert(DiffToolArguments arguments) { string baseSha = arguments.LeftSHA; string headSha = arguments.RightSHA; throwOnEmptySha(new[] { baseSha, headSha }); FileStorageDiffCacheFolder diffFolder = getDiffFolder(baseSha, headSha); Debug.Assert(diffFolder != null); var configValue = GitTools.GetConfigKeyValue(GitTools.ConfigScope.Global, Constants.GitDiffToolConfigKey); if (String.IsNullOrEmpty(configValue.FirstOrDefault())) { throw new ArgumentConversionException("Diff Tool is not registered", null); } string diffToolPath = configValue.FirstOrDefault() .Replace("$LOCAL", diffFolder.LeftSubfolder) .Replace("$REMOTE", diffFolder.RightSubfolder) .Replace("//", "/"); return(new ConvertedArguments(diffToolPath, String.Empty)); }
private bool verifyDiffFolder(string baseSha, string headSha, string diffFolderPath) { FileStorageDiffCacheFolder diffFolder = new FileStorageDiffCacheFolder(diffFolderPath); if (!Directory.Exists(diffFolder.LeftSubfolder) || !Directory.Exists(diffFolder.RightSubfolder)) { return(false); } getRevisions(baseSha, headSha, out var baseRevisions, out var headRevisions); if (baseRevisions == null || headRevisions == null) { return(false); } return(baseRevisions.Select(x => x.GitFilePath.ToDiskPath(diffFolder.LeftSubfolder)).All(x => File.Exists(x)) && headRevisions.Select(x => x.GitFilePath.ToDiskPath(diffFolder.RightSubfolder)).All(x => File.Exists(x))); }
private FileStorageDiffCacheFolder getDiffFolder(string baseSha, string headSha) { FileStorageDiffCacheFolder diffFolder = null; try { diffFolder = _fileStorage.DiffCache.GetDiffFolder(baseSha, headSha); } catch (FileStorageDiffCacheException ex) { throw new ArgumentConversionException(String.Format( "Cannot locate or create a folder with diff for {0} vs {1}", baseSha, headSha), ex); } if (diffFolder == null || diffFolder.LeftSubfolder == null || diffFolder.RightSubfolder == null) { throw new ArgumentConversionException(String.Format( "Invalid diff folder for {0} vs {1}", baseSha, headSha), null); } return(diffFolder); }