/// <summary>
        /// Returns the issue for a message from the log file.
        /// </summary>
        /// <param name="logFileEntry">Issue reported by markdownlint.</param>
        /// <param name="issueProvider">Issue provider instance.</param>
        /// <param name="repositorySettings">Repository settings.</param>
        /// <returns>Issue instance.</returns>
        private static IIssue GetIssue(
            LogFileEntry logFileEntry,
            MarkdownlintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings)
        {
            var message = logFileEntry.ruleDescription;

            if (!string.IsNullOrEmpty(logFileEntry.errorDetail))
            {
                message += $": {logFileEntry.errorDetail}";
            }

            return
                (IssueBuilder
                 .NewIssue(message, issueProvider)
                 .InFile(
                     GetFilePath(logFileEntry.fileName, repositorySettings),
                     logFileEntry.lineNumber,
                     logFileEntry.errorRange != null ? logFileEntry.lineNumber : null,
                     logFileEntry.errorRange != null ? logFileEntry.errorRange[0] : null,
                     logFileEntry.errorRange != null ? logFileEntry.errorRange[0] + logFileEntry.errorRange[1] : null)
                 .WithPriority(IssuePriority.Warning)
                 .OfRule(logFileEntry.ruleNames.First(), new Uri(logFileEntry.ruleInformation))
                 .Create());
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            MarkdownlintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            MarkdownlintIssuesSettings markdownlintIssuesSettings)
        {
            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            markdownlintIssuesSettings.NotNull(nameof(markdownlintIssuesSettings));

            if (!markdownlintIssuesSettings.LogFileContent.Any())
            {
                return(new List <IIssue>());
            }

            IEnumerable <LogFileEntry> logFileEntries = null;

            using (var ms = new MemoryStream(markdownlintIssuesSettings.LogFileContent.ToStringUsingEncoding(true).ToByteArray()))
            {
                var jsonSerializer = new DataContractJsonSerializer(typeof(LogFileEntry[]));
                logFileEntries = jsonSerializer.ReadObject(ms) as LogFileEntry[];
            }

            if (logFileEntries == null)
            {
                return(new List <IIssue>());
            }

            return(logFileEntries.Select(x => GetIssue(x, issueProvider, repositorySettings)));
        }
예제 #3
0
        /// <summary>
        /// Make path relative to repository root.
        /// </summary>
        /// <param name="filePath">Full file path.</param>
        /// <param name="repositorySettings">Repository settings.</param>
        /// <returns>File path relative to the repository root.</returns>
        protected string MakeFilePathRelativeToRepositoryRoot(string filePath, IRepositorySettings repositorySettings)
        {
            filePath.NotNullOrWhiteSpace(nameof(filePath));
            repositorySettings.NotNull(nameof(repositorySettings));

            return(filePath.Substring(repositorySettings.RepositoryRoot.FullPath.Length));
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            EsLintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            EsLintIssuesSettings esLintsettings)
        {
            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            esLintsettings.NotNull(nameof(esLintsettings));

            IEnumerable <LogFile> logFileEntries = null;

            using (var ms = new MemoryStream(esLintsettings.LogFileContent.ToStringUsingEncoding(true).ToByteArray()))
            {
                var jsonSerializer = new DataContractJsonSerializer(typeof(LogFile[]));
                logFileEntries = jsonSerializer.ReadObject(ms) as LogFile[];
            }

            if (logFileEntries != null)
            {
                return
                    (from file in logFileEntries
                     from message in file.messages
                     let
                     rule = message.ruleId
                            select
                            IssueBuilder
                            .NewIssue(message.message, issueProvider)
                            .InFile(GetRelativeFilePath(file.filePath, repositorySettings), message.line, message.column)
                            .OfRule(rule, EsLintRuleUrlResolver.Instance.ResolveRuleUrl(rule))
                            .WithPriority(GetPriority(message.severity))
                            .Create());
            }

            return(new List <IIssue>());
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            EsLintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            EsLintIssuesSettings esLintsettings)
        {
            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            esLintsettings.NotNull(nameof(esLintsettings));

            IEnumerable <LogFile> logFileEntries = null;

            using (var ms = new MemoryStream(esLintsettings.LogFileContent.ToStringUsingEncoding(true).ToByteArray()))
            {
                var jsonSerializer = new DataContractJsonSerializer(typeof(LogFile[]));
                logFileEntries = jsonSerializer.ReadObject(ms) as LogFile[];
            }

            if (logFileEntries != null)
            {
                return
                    (from file in logFileEntries
                     from message in file.messages
                     select
                     GetIssue(file, message, issueProvider, repositorySettings));
            }

            return(new List <IIssue>());
        }
        /// <summary>
        /// Reads the affected file path from a warning logged in a MsBuild log.
        /// </summary>
        /// <param name="warning">Warning element from MsBuild log.</param>
        /// <param name="repositorySettings">Repository settings to use.</param>
        /// <param name="fileName">Returns the full path to the affected file.</param>
        /// <returns>True if the file path could be parsed.</returns>
        private bool TryGetFile(
            BuildWarningEventArgs warning,
            IRepositorySettings repositorySettings,
            out string fileName)
        {
            fileName = warning.File;

            if (string.IsNullOrWhiteSpace(fileName))
            {
                return(true);
            }

            // If not absolute path, combine with file path from project file.
            if (!fileName.IsFullPath())
            {
                var projectDirectory = System.IO.Path.GetDirectoryName(warning.ProjectFile);
                fileName = System.IO.Path.Combine(projectDirectory, fileName);
            }

            // Validate file path and make relative to repository root.
            bool result;

            (result, fileName) = this.ValidateFilePath(fileName, repositorySettings);
            return(result);
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            MarkdownlintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            MarkdownlintIssuesSettings markdownlintIssuesSettings)
        {
            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            markdownlintIssuesSettings.NotNull(nameof(markdownlintIssuesSettings));

            Dictionary <string, IEnumerable <Issue> > logFileEntries;

            using (var ms = new MemoryStream(markdownlintIssuesSettings.LogFileContent.RemovePreamble()))
            {
                var jsonSerializer = new DataContractJsonSerializer(
                    typeof(Dictionary <string, IEnumerable <Issue> >),
                    settings: new DataContractJsonSerializerSettings {
                    UseSimpleDictionaryFormat = true
                });

                logFileEntries = jsonSerializer.ReadObject(ms) as Dictionary <string, IEnumerable <Issue> >;
            }

            return
                (from file in logFileEntries
                 from entry in file.Value
                 let
                 rule = entry.ruleName
                        select
                        IssueBuilder
                        .NewIssue(entry.ruleDescription, issueProvider)
                        .InFile(file.Key, entry.lineNumber)
                        .WithPriority(IssuePriority.Warning)
                        .OfRule(rule, MarkdownlintRuleUrlResolver.Instance.ResolveRuleUrl(rule))
                        .Create());
        }
예제 #8
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
            IPackageRepositoryFactory repositoryFactory,
            IFileSystemProvider fileSystemProvider,
            IRepositorySettings repositorySettings,
            IRecentPackageRepository recentPackagesRepository)
        {
            if (solutionManager == null) {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null) {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (fileSystemProvider == null) {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null) {
                throw new ArgumentNullException("repositorySettings");
            }

            _fileSystemProvider = fileSystemProvider;
            _repositorySettings = repositorySettings;
            _solutionManager = solutionManager;
            _repositoryFactory = repositoryFactory;
            _recentPackageRepository = recentPackagesRepository;

            _solutionManager.SolutionClosing += (sender, e) => {
                _repositoryInfo = null;
            };
        }
예제 #9
0
 /// <summary>
 /// Determines the project from a value in a MsBuild log.
 /// </summary>
 /// <param name="project">Raw value from the MsBuild log.</param>
 /// <param name="repositorySettings">Repository settings to use.</param>
 /// <returns>Relative path to the project.</returns>
 private string GetProject(
     string project,
     IRepositorySettings repositorySettings)
 {
     // Validate project path and make relative to repository root.
     return(this.ValidateFilePath(project, repositorySettings).FilePath);
 }
        /// <summary>
        /// Determines the project for a warning or error logged in a MsBuild log.
        /// </summary>
        /// <param name="element">Warning or error element from MsBuild log.</param>
        /// <param name="repositorySettings">Repository settings to use.</param>
        /// <param name="project">Returns project.</param>
        /// <returns>True if the project could be parsed.</returns>
        private bool TryGetProject(
            XElement element,
            IRepositorySettings repositorySettings,
            out string project)
        {
            project = string.Empty;

            var projectNode = element.Ancestors("project").FirstOrDefault();

            if (projectNode == null)
            {
                return(true);
            }

            var projectAttr = projectNode.Attribute("file");

            if (projectAttr == null)
            {
                return(true);
            }

            project = projectAttr.Value;
            if (string.IsNullOrWhiteSpace(project))
            {
                return(true);
            }

            // Validate project path and make relative to repository root.
            bool result;

            (result, project) = this.ValidateFilePath(project, repositorySettings);
            return(result);
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            MarkdownlintIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            MarkdownlintIssuesSettings markdownlintIssuesSettings)
        {
            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            markdownlintIssuesSettings.NotNull(nameof(markdownlintIssuesSettings));

            var regex = new Regex(@"(?<filePath>.*[^:\d+]): ?(?<lineNumber>\d+):?(?<columnNumber>\d+)? (?<ruleId>MD\d+)/(?<ruleName>(?:\w*-*/*)*) (?<message>.*)");

            foreach (var line in markdownlintIssuesSettings.LogFileContent.ToStringUsingEncoding().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None).ToList().Where(s => !string.IsNullOrEmpty(s)))
            {
                var groups = regex.Match(line).Groups;

                // Read affected file from the line.
                if (!this.TryGetFile(groups, repositorySettings, out string fileName))
                {
                    continue;
                }

                var lineNumber = int.Parse(groups["lineNumber"].Value);
                var ruleId     = groups["ruleId"].Value;
                var message    = groups["message"].Value;

                yield return
                    (IssueBuilder
                     .NewIssue(message, issueProvider)
                     .InFile(fileName, lineNumber)
                     .WithPriority(IssuePriority.Warning)
                     .OfRule(ruleId, MarkdownlintRuleUrlResolver.Instance.ResolveRuleUrl(ruleId))
                     .Create());
            }
        }
예제 #12
0
 /// <inheritdoc/>
 public override IEnumerable <IIssue> ReadIssues(
     FakeMultiFormatIssueProvider issueProvider,
     IRepositorySettings repositorySettings,
     FakeMultiFormatIssueProviderSettings issueProviderSettings)
 {
     return(this.issues);
 }
 public override IEnumerable <IIssue> ReadIssues(
     MsBuildIssuesProvider issueProvider,
     IRepositorySettings repositorySettings,
     MsBuildIssuesSettings issueProviderSettings)
 {
     throw new NotImplementedException();
 }
예제 #14
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       IRecentPackageRepository recentPackagesRepository)
        {
            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null)
            {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (fileSystemProvider == null)
            {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException("repositorySettings");
            }

            _fileSystemProvider      = fileSystemProvider;
            _repositorySettings      = repositorySettings;
            _solutionManager         = solutionManager;
            _repositoryFactory       = repositoryFactory;
            _recentPackageRepository = recentPackagesRepository;

            _solutionManager.SolutionClosing += (sender, e) => {
                _repositoryInfo = null;
            };
        }
예제 #15
0
 private static RepositorySettings CreateSettings(IRepositorySettings settings)
 {
     return(new RepositorySettings(
                settings.Directory,
                settings.IsTrackingDirty,
                settings.BackupSettings,
                settings.Extension,
                settings.TempExtension));
 }
        /// <summary>
        /// Determines the project for a warning logged in a MsBuild log.
        /// </summary>
        /// <param name="warning">Warning element from the MsBuild log.</param>
        /// <param name="repositorySettings">Repository settings to use.</param>
        /// <returns>Relative path to the project.</returns>
        private string GetProject(
            BuildWarningEventArgs warning,
            IRepositorySettings repositorySettings)
        {
            var project = warning.ProjectFile;

            // Validate project path and make relative to repository root.
            return(this.ValidateFilePath(project, repositorySettings).FilePath);
        }
 public VsPackageManagerFactory(ISolutionManager solutionManager,
                                IPackageRepositoryFactory repositoryFactory,
                                IVsPackageSourceProvider packageSourceProvider,
                                IFileSystemProvider fileSystemProvider,
                                IRepositorySettings repositorySettings,
                                IRecentPackageRepository recentPackagesRepository,
                                VsPackageInstallerEvents packageEvents) :
     this(solutionManager, repositoryFactory, packageSourceProvider, fileSystemProvider, repositorySettings, recentPackagesRepository, packageEvents, MachineCache.Default)
 {
 }
예제 #18
0
        public MongoRepository(IRepositorySettings _settings, IPluralizationService _pluralizationService)
        {
            settings             = _settings;
            pluralizationService = _pluralizationService;

            conn                = _settings.GetClientConnection();
            db                  = settings.GetDatabase();
            collection          = db.GetCollection <T>(pluralizationService.Pluralize(typeof(T).Name));
            collectionQueryable = collection.AsQueryable();
        }
예제 #19
0
 private static DataRepositorySettings Create(IRepositorySettings settings)
 {
     return(new DataRepositorySettings(
                settings.Directory,
                settings.IsTrackingDirty,
                (settings as IDataRepositorySettings)?.SaveNullDeletesFile == true,
                settings.BackupSettings,
                settings.Extension,
                settings.TempExtension));
 }
예제 #20
0
 public Repository(
     IRepositorySettings repositorySettings,
     IRepositoryClientFactory repositoryClientFactory,
     IDateTimeFactory dateTimeFactory
     )
 {
     this.repositorySettings = repositorySettings;
     this.dateTimeFactory    = dateTimeFactory;
     repositoryClient        = repositoryClientFactory.CreateGitLabClient(repositorySettings.RepositoryId);
 }
예제 #21
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IVsPackageSourceProvider packageSourceProvider,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       VsPackageInstallerEvents packageEvents,
                                       IPackageRepository activePackageSourceRepository,
                                       IVsFrameworkMultiTargeting frameworkMultiTargeting,
									   IMachineWideSettings machineWideSettings)
        {
            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null)
            {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (packageSourceProvider == null)
            {
                throw new ArgumentNullException("packageSourceProvider");
            }
            if (fileSystemProvider == null)
            {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException("repositorySettings");
            }
            if (packageEvents == null)
            {
                throw new ArgumentNullException("packageEvents");
            }
            if (activePackageSourceRepository == null)
            {
                throw new ArgumentNullException("activePackageSourceRepository");
            }

            _fileSystemProvider = fileSystemProvider;
            _repositorySettings = repositorySettings;
            _solutionManager = solutionManager;
            _repositoryFactory = repositoryFactory;
            _packageSourceProvider = packageSourceProvider;
            _packageEvents = packageEvents;
            _activePackageSourceRepository = activePackageSourceRepository;
            _frameworkMultiTargeting = frameworkMultiTargeting;
			_machineWideSettings = machineWideSettings;

            _solutionManager.SolutionClosing += (sender, e) =>
            {
                _repositoryInfo = null;
            };
        }
예제 #22
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IVsPackageSourceProvider packageSourceProvider,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       VsPackageInstallerEvents packageEvents,
                                       IPackageRepository activePackageSourceRepository,
                                       IVsFrameworkMultiTargeting frameworkMultiTargeting,
                                       IMachineWideSettings machineWideSettings)
        {
            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null)
            {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (packageSourceProvider == null)
            {
                throw new ArgumentNullException("packageSourceProvider");
            }
            if (fileSystemProvider == null)
            {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException("repositorySettings");
            }
            if (packageEvents == null)
            {
                throw new ArgumentNullException("packageEvents");
            }
            if (activePackageSourceRepository == null)
            {
                throw new ArgumentNullException("activePackageSourceRepository");
            }

            _fileSystemProvider            = fileSystemProvider;
            _repositorySettings            = repositorySettings;
            _solutionManager               = solutionManager;
            _repositoryFactory             = repositoryFactory;
            _packageSourceProvider         = packageSourceProvider;
            _packageEvents                 = packageEvents;
            _activePackageSourceRepository = activePackageSourceRepository;
            _frameworkMultiTargeting       = frameworkMultiTargeting;
            _machineWideSettings           = machineWideSettings;

            _solutionManager.SolutionClosing += (sender, e) =>
            {
                _repositoryInfo = null;
            };
        }
        /// <summary>
        /// Returns an issue for values from an MsBuild log.
        /// </summary>
        /// <param name="priority">Priority of the issue.</param>
        /// <param name="message">Raw value from the MsBuild log containing the message.</param>
        /// <param name="projectFile">Raw value from the MsBuild log containing the project file.</param>
        /// <param name="file">Raw value from the MsBuild log containing the file.</param>
        /// <param name="lineNumber">Raw value from the MsBuild log containing the line number.</param>
        /// <param name="endLineNumber">Raw value from the MsBuild log containing the end of the line range.</param>
        /// <param name="columnNumber">Raw value from the MsBuild log containing the column.</param>
        /// <param name="endColumnNumber">Raw value from the MsBuild log containing the end of the column range.</param>
        /// <param name="code">Raw value from the MsBuild log containing the rule.</param>
        /// <param name="issueProvider">Issue provider instance.</param>
        /// <param name="repositorySettings">Repository settings to use.</param>
        /// <returns>Issue instance or null, if the values could not be parsed.</returns>
        private IIssue GetIssue(
            IssuePriority priority,
            string message,
            string projectFile,
            string file,
            int lineNumber,
            int endLineNumber,
            int columnNumber,
            int endColumnNumber,
            string code,
            MsBuildIssuesProvider issueProvider,
            IRepositorySettings repositorySettings)
        {
            // Ignore warnings or errors without a message.
            if (string.IsNullOrWhiteSpace(message))
            {
                this.Log.Verbose("Skip element since it doesn't contain a message");
                return(null);
            }

            var projectFileRelativePath = this.GetProject(projectFile, repositorySettings);

            // Read affected file from the warning or error.
            var(result, fileName) = this.TryGetFile(file, projectFile, repositorySettings);
            if (!result)
            {
                this.Log.Information("Skip element since file path could not be parsed");
                return(null);
            }

            var line      = GetLine(lineNumber);
            var endLine   = GetLine(endLineNumber);
            var column    = GetColumn(columnNumber);
            var endColumn = GetColumn(endColumnNumber);
            var rule      = code;

            // Determine rule URL.
            Uri ruleUrl = null;

            if (!string.IsNullOrWhiteSpace(rule))
            {
                ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule);
            }

            // Build issue.
            return
                (IssueBuilder
                 .NewIssue(message, issueProvider)
                 .WithPriority(priority)
                 .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath))
                 .InFile(fileName, line, endLine, column, endColumn)
                 .OfRule(rule, ruleUrl)
                 .Create());
        }
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IVsPackageSourceProvider packageSourceProvider,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       IRecentPackageRepository recentPackagesRepository,
                                       VsPackageInstallerEvents packageEvents,
                                       IPackageRepository cacheRepository)
        {
            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null)
            {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (packageSourceProvider == null)
            {
                throw new ArgumentNullException("packageSourceProvider");
            }
            if (fileSystemProvider == null)
            {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException("repositorySettings");
            }
            if (cacheRepository == null)
            {
                throw new ArgumentNullException("cacheRepository");
            }

            if (packageEvents == null)
            {
                throw new ArgumentNullException("packageEvents");
            }

            _fileSystemProvider = fileSystemProvider;
            _repositorySettings = repositorySettings;
            _solutionManager = solutionManager;
            _repositoryFactory = repositoryFactory;
            _recentPackageRepository = recentPackagesRepository;
            _packageSourceProvider = packageSourceProvider;
            _packageEvents = packageEvents;
            _cacheRepository = cacheRepository;

            _solutionManager.SolutionClosing += (sender, e) =>
            {
                _repositoryInfo = null;
            };
        }
예제 #25
0
 public TestVsPackageManagerFactory(
     ISolutionManager solutionManager,
     IPackageRepositoryFactory repositoryFactory,
     IVsPackageSourceProvider packageSourceProvider,
     IFileSystemProvider fileSystemProvider,
     IRepositorySettings repositorySettings,
     VsPackageInstallerEvents packageEvents,
     IPackageRepository activePackageSourceRepository,
     IVsFrameworkMultiTargeting frameworkMultiTargeting,
     IMachineWideSettings machineWideSettings)
     : base(solutionManager, repositoryFactory, packageSourceProvider, fileSystemProvider, repositorySettings, packageEvents, activePackageSourceRepository, frameworkMultiTargeting, machineWideSettings)
 {
 }
        /// <summary>
        /// Returns the file path of the issue.
        /// </summary>
        /// <param name="filePath">File path as reported by markdownlint.</param>
        /// <param name="repositorySettings">Repository settings.</param>
        /// <returns>File path absolute to repository root.</returns>
        private static string GetFilePath(
            string filePath,
            IRepositorySettings repositorySettings)
        {
            var directoryPath = new DirectoryPath(filePath);

            if (directoryPath.IsRelative)
            {
                return(filePath);
            }

            // Absolute paths need to be made relative to repository root.
            return(repositorySettings.RepositoryRoot.GetRelativePath(directoryPath).FullPath);
        }
        private static string GetRelativeFilePath(
            string absoluteFilePath,
            IRepositorySettings repositorySettings)
        {
            // Make path relative to repository root.
            var relativeFilePath = absoluteFilePath.Substring(repositorySettings.RepositoryRoot.FullPath.Length);

            // Remove leading directory separator.
            if (relativeFilePath.StartsWith(Path.DirectorySeparatorChar.ToString()))
            {
                relativeFilePath = relativeFilePath.Substring(1);
            }

            return(relativeFilePath);
        }
예제 #28
0
        public RepositoryTest() : base()
        {
            repositorySettings = mockRepository.Create<IRepositorySettings>();
            repositoryClientFactory = mockRepository.Create <IRepositoryClientFactory>();
            dateTimeFactory = mockRepository.Create<IDateTimeFactory>();
            repositoryClient = mockRepository.Create<IRepositoryClient>();

            using (mockRepository.Record())
            {
                var repoId = DataGenerator.GenDigitString(5);
                repositorySettings.Expect(f => f.RepositoryId).Return(repoId);
                repositoryClientFactory.Expect(f => f.CreateGitLabClient(repoId)).Return(repositoryClient);
            }

            repository = new TaskManagerClient.Repository.Repository(repositorySettings, repositoryClientFactory, dateTimeFactory);
        }
예제 #29
0
        /// <summary>
        /// Checks if a file is part of the repository.
        /// </summary>
        /// <param name="filePath">Full file path.</param>
        /// <param name="repositorySettings">Repository settings.</param>
        /// <returns>True if file is in repository, false otherwise.</returns>
        protected bool CheckIfFileIsInRepository(string filePath, IRepositorySettings repositorySettings)
        {
            filePath.NotNullOrWhiteSpace(nameof(filePath));
            repositorySettings.NotNull(nameof(repositorySettings));

            if (!filePath.IsSubpathOf(repositorySettings.RepositoryRoot.FullPath))
            {
                this.Log.Warning(
                    "Ignored issue for file '{0}' since it is outside the repository folder at {1}.",
                    filePath,
                    repositorySettings.RepositoryRoot);

                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Reads the affected file path from a parsed entry.
        /// </summary>
        /// <param name="values">Parsed values of a line in the log file.</param>
        /// <param name="repositorySettings">Repository settings to use.</param>
        /// <param name="fileName">Returns the full path to the affected file.</param>
        /// <returns>True if the file path could be parsed.</returns>
        private bool TryGetFile(
            GroupCollection values,
            IRepositorySettings repositorySettings,
            out string fileName)
        {
            fileName = values["filePath"].Value;

            // Make path relative to repository root.
            fileName = fileName.Substring(repositorySettings.RepositoryRoot.FullPath.Length);

            // Remove leading directory separator.
            if (fileName.StartsWith("/"))
            {
                fileName = fileName.Substring(1);
            }

            return(true);
        }
예제 #31
0
        private void ExecuteInitScripts()
        {
            // Fix for Bug 1426 Disallow ExecuteInitScripts from being executed concurrently by multiple threads.
            lock (_initScriptsLock)
            {
                if (!_solutionManager.IsSolutionOpen)
                {
                    return;
                }

                IRepositorySettings repositorySettings = ServiceLocator.GetInstance <IRepositorySettings>();
                Debug.Assert(repositorySettings != null);
                if (repositorySettings == null)
                {
                    return;
                }

                try
                {
                    var localRepository = new SharedPackageRepository(repositorySettings.RepositoryPath);

                    // invoke init.ps1 files in the order of package dependency.
                    // if A -> B, we invoke B's init.ps1 before A's.

                    var sorter         = new PackageSorter(targetFramework: null);
                    var sortedPackages = sorter.GetPackagesByDependencyOrder(localRepository);

                    foreach (var package in sortedPackages)
                    {
                        string installPath = localRepository.PathResolver.GetInstallPath(package);

                        AddPathToEnvironment(Path.Combine(installPath, "tools"));
                        Runspace.ExecuteScript(installPath, "tools\\init.ps1", package);
                    }
                }
                catch (Exception ex)
                {
                    // if execution of Init scripts fails, do not let it crash our console
                    ReportError(ex);

                    ExceptionHelper.WriteToActivityLog(ex);
                }
            }
        }
예제 #32
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IVsPackageSourceProvider packageSourceProvider,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       VsPackageInstallerEvents packageEvents)
        {
            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }
            if (repositoryFactory == null)
            {
                throw new ArgumentNullException("repositoryFactory");
            }
            if (packageSourceProvider == null)
            {
                throw new ArgumentNullException("packageSourceProvider");
            }
            if (fileSystemProvider == null)
            {
                throw new ArgumentNullException("fileSystemProvider");
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException("repositorySettings");
            }
            if (packageEvents == null)
            {
                throw new ArgumentNullException("packageEvents");
            }

            _fileSystemProvider    = fileSystemProvider;
            _repositorySettings    = repositorySettings;
            _solutionManager       = solutionManager;
            _repositoryFactory     = repositoryFactory;
            _packageSourceProvider = packageSourceProvider;
            _packageEvents         = packageEvents;

            _solutionManager.SolutionClosing += (sender, e) =>
            {
                _repositoryInfo = null;
            };
        }
예제 #33
0
        public VsPackageManagerFactory(ISolutionManager solutionManager,
                                       IPackageRepositoryFactory repositoryFactory,
                                       IVsPackageSourceProvider packageSourceProvider,
                                       IFileSystemProvider fileSystemProvider,
                                       IRepositorySettings repositorySettings,
                                       VsPackageInstallerEvents packageEvents,
                                       IPackageRepository activePackageSourceRepository,
									   IMachineWideSettings machineWideSettings) :
            this(solutionManager, 
                 repositoryFactory, 
                 packageSourceProvider, 
                 fileSystemProvider, 
                 repositorySettings, 
                 packageEvents,
                 activePackageSourceRepository,
                 ServiceLocator.GetGlobalService<SVsFrameworkMultiTargeting, IVsFrameworkMultiTargeting>(),
				 machineWideSettings)
        {
        }
예제 #34
0
 /// <summary>
 /// Returns an issue for a build warning.
 /// </summary>
 /// <param name="buildWarning">Warning for which the issue should be returned.</param>
 /// <param name="issueProvider">Issue provider instance.</param>
 /// <param name="repositorySettings">Repository settings to use.</param>
 /// <returns>Issue instance or null, if the <paramref name="buildWarning"/> could not be parsed.</returns>
 private IIssue GetIssue(
     BuildWarningEventArgs buildWarning,
     MsBuildIssuesProvider issueProvider,
     IRepositorySettings repositorySettings)
 {
     return
         (this.GetIssue(
              IssuePriority.Warning,
              buildWarning.Message,
              buildWarning.ProjectFile,
              buildWarning.File,
              buildWarning.LineNumber,
              buildWarning.EndLineNumber,
              buildWarning.ColumnNumber,
              buildWarning.EndColumnNumber,
              buildWarning.Code,
              issueProvider,
              repositorySettings));
 }
예제 #35
0
 public VsPackageManagerFactory(ISolutionManager solutionManager,
                                IPackageRepositoryFactory repositoryFactory,
                                IVsPackageSourceProvider packageSourceProvider,
                                IFileSystemProvider fileSystemProvider,
                                IRepositorySettings repositorySettings,
                                VsPackageInstallerEvents packageEvents,
                                IPackageRepository activePackageSourceRepository,
                                IMachineWideSettings machineWideSettings) :
     this(solutionManager,
          repositoryFactory,
          packageSourceProvider,
          fileSystemProvider,
          repositorySettings,
          packageEvents,
          activePackageSourceRepository,
          ServiceLocator.GetGlobalService <SVsFrameworkMultiTargeting, IVsFrameworkMultiTargeting>(),
          machineWideSettings)
 {
 }
 public UserRepository(IRepositorySettings repositorySettings) : base(repositorySettings) { }
 public RoleRepository(IRepositorySettings repositorySettings) : base(repositorySettings) { }
예제 #38
0
 public TestVsPackageManagerFactory(
     ISolutionManager solutionManager,
     IPackageRepositoryFactory repositoryFactory,
     IVsPackageSourceProvider packageSourceProvider,
     IFileSystemProvider fileSystemProvider,
     IRepositorySettings repositorySettings,
     VsPackageInstallerEvents packageEvents,
     IPackageRepository activePackageSourceRepository,
     IVsFrameworkMultiTargeting frameworkMultiTargeting,
     IMachineWideSettings machineWideSettings)
     : base(solutionManager, repositoryFactory, packageSourceProvider, fileSystemProvider, repositorySettings, packageEvents, activePackageSourceRepository, frameworkMultiTargeting, machineWideSettings)
 {
 }
 protected SqlRepository(IRepositorySettings repositorySettings)
 {
     RepositorySettings = repositorySettings;
 }
 public DeleteOnRestartManager(IFileSystemProvider fileSystemProvider, IRepositorySettings repositorySettings)
     : this(() => fileSystemProvider.GetFileSystem(repositorySettings.RepositoryPath))
 {
 }
 public TripRepository(IRepositorySettings repositorySettings) : base(repositorySettings) { }
 public CatchMeContext(IRepositorySettings repositorySettings) : base(repositorySettings.ConnectionString)
 {
     Database.SetInitializer(new NullDatabaseInitializer<CatchMeContext>());
 }
예제 #43
0
 public Diagnostics(IRepositorySettings settings)
 {
     m_settings = settings;
 }