Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }