示例#1
0
        public void ConfigurationCacheIsClearedIfFileRemoved()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
            <settings>
            <repositoryPath>lib</repositoryPath>
            </settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object);

            // Act
            string p1 = repositorySettings.RepositoryPath;

            fileSystem.DeleteFile(@"bar\nuget.config");

            string p2 = repositorySettings.RepositoryPath;

            // Assert
            Assert.AreEqual(@"bar\lib", p1);
            Assert.AreEqual(@"bar\baz\packages", p2);
        }
        public void RepositoryPathThrowsIfSolutionDirectoryIsNull()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            var repositorySettings = new RepositorySettings(solutionManager.Object, new Mock<IFileSystemProvider>().Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            ExceptionAssert.Throws<InvalidOperationException>(() => { string s = repositorySettings.RepositoryPath; }, "Unable to locate the solution directory. Please ensure that the solution has been saved.");
        }
        public void RepositoryPathDefaultsToPackagesFolderInSolutionDirectoryIfNoConfigExists()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(new MockFileSystem());
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string path = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\baz\packages", path);
        }
        public void RepositoryPathComesFromConfigFileIfSpecified()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string path = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\lib", path);
        }
        public void RepositoryPathDefaultsToPackagesDirectoryIfConfigFileHasEmptyOrNullRepositoryPath()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath></repositoryPath>
</settings>");
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string path = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\baz\packages", path);
        }
        public static IReferenceDataRepository GetReferenceDataRepository()
        {
            // See if the IReferenceDataRepository instance was already created
            if (ReferenceDataRepositoryFactory.referenceDataRepository == null)
            {
                // It was not created, so build it now
                RepositorySettings settings =
                    (RepositorySettings)ConfigurationManager.GetSection(
                        RepositoryMappingConstants.RepositoryMappingsConfigurationSectionName);

                // Get the type to be created
                Type repositoryType =
                    Type.GetType(
                        settings.RepositoryMappings["IReferenceDataRepository"].RepositoryFullTypeName);

                // Create the repository, and cast it to the
                // IReferenceDataRepository interface
                ReferenceDataRepositoryFactory.referenceDataRepository =
                    Activator.CreateInstance(repositoryType) as IReferenceDataRepository;
            }

            return(ReferenceDataRepositoryFactory.referenceDataRepository);
        }
示例#7
0
        public async Task <XLSForm> LoadAsync(string f, string keyWordSurvey)
        {
            XLSForm  xlsform = new XLSForm();
            FileInfo file    = new FileInfo(f);

            using (ExcelPackage package = new ExcelPackage(file))
            {
                RepositorySurvey   rSurvey   = new RepositorySurvey(package, keyWordSurvey);
                RepositoryChoice   rChoices  = new RepositoryChoice(package);
                RepositorySettings rSettings = new RepositorySettings(package);

                await rSurvey.LoadContentAsync();

                await rChoices.LoadContentAsync();

                await rSettings.LoadContentAsync();

                xlsform.Surveys  = rSurvey.Records;
                xlsform.Choices  = rChoices.Records;
                xlsform.Settings = rSettings.Records[0];
            }
            return(xlsform);
        }
示例#8
0
        public static T GetProvider <T>() where T : class
        {
            // See if the provider instance was already created
            if (ProviderFactory.provider == null)
            {
                // It was not created, so build it now
                RepositorySettings settings =
                    (RepositorySettings)ConfigurationManager.GetSection(
                        RepositoryMappingConstants.RepositoryMappingsConfigurationSectionName);

                // Get the type to be created
                string interfaceTypeName = typeof(T).Name;
                Type   repositoryType    =
                    Type.GetType(
                        settings.RepositoryMappings[interfaceTypeName].RepositoryFullTypeName);

                // Create the provider
                ProviderFactory.provider =
                    Activator.CreateInstance(repositoryType);
            }

            return(ProviderFactory.provider as T);
        }
示例#9
0
        protected override void ProcessRecord()
        {
            string nameArrayAsString = (Name == null || !Name.Any() || string.Equals(Name[0], "*") || Name[0] == null)
                ? "all" : string.Join(", ", Name);

            WriteVerbose(String.Format("reading repository: {0}. Calling Read() API now", nameArrayAsString));
            List <PSRepositoryInfo> items = RepositorySettings.Read(Name, out string[] errorList);

            // handle non-terminating errors
            foreach (string error in errorList)
            {
                WriteError(new ErrorRecord(
                               new PSInvalidOperationException(error),
                               "ErrorGettingSpecifiedRepo",
                               ErrorCategory.InvalidOperation,
                               this));
            }

            foreach (PSRepositoryInfo repo in items)
            {
                WriteObject(repo);
            }
        }
示例#10
0
        public async Task Run(RepositorySettings repository, UsernamePasswordCredentials gitCreds)
        {
            try
            {
                var repo = await BuildGitRepositorySpec(repository, gitCreds.Username);

                if (repo == null)
                {
                    return;
                }

                var tempFolder = _folderFactory.UniqueTemporaryFolder();
                var git        = new LibGit2SharpDriver(_logger, tempFolder, gitCreds);

                await _repositoryUpdater.Run(git, repo);

                tempFolder.TryDelete();
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
            }
        }
    public IEnumerable <CompletionResult> CompleteArgument(
        string commandName,
        string parameterName,
        string wordToComplete,
        CommandAst commandAst,
        IDictionary fakeBoundParameters)
    {
        List <PSRepositoryInfo> listOfRepositories = RepositorySettings.Read(null, out string[] _);

        wordToComplete = Utils.TrimQuotes(wordToComplete);
        var wordToCompletePattern = WildcardPattern.Get(
            pattern: string.IsNullOrWhiteSpace(wordToComplete) ? "*" : wordToComplete + "*",
            options: WildcardOptions.IgnoreCase);

        foreach (PSRepositoryInfo repo in listOfRepositories)
        {
            string repoName = repo.Name;
            if (wordToCompletePattern.IsMatch(repoName))
            {
                yield return(new CompletionResult(Utils.QuoteName(repoName)));
            }
        }
    }
示例#12
0
        public async Task SaveMessage(ChatHistoryEntity chatHistoryEntity)
        {
            RepositorySettings repositorySettings = new RepositorySettings();

            // Retrieve the storage account from the connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                repositorySettings.ConnectionString);

            // Create the table client.
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "people" table.
            CloudTable table = tableClient.GetTableReference(repositorySettings.ChatHistoryTableName);

            // Create the table if it doesn't exist.
            await table.CreateIfNotExistsAsync();

            // Create the TableOperation object that inserts the chat history entity.
            TableOperation insertOperation = TableOperation.Insert(chatHistoryEntity);

            // Execute the insert operation.
            await table.ExecuteAsync(insertOperation);
        }
示例#13
0
        public Files(string name, RepositorySettings settings)
        {
            var fileName          = string.Concat(name, settings.Extension);
            var settingsDirectory = new DirectoryInfo(settings.Directory);

            this.File = settingsDirectory.CreateFileInfoInDirectory(fileName);

            var tempfileName = string.Concat(name, settings.TempExtension);

            this.Temp              = settingsDirectory.CreateFileInfoInDirectory(tempfileName);
            this.SoftDelete        = this.File.GetSoftDeleteFileFor();
            this.WithNewName       = this.File.WithNewName(NewName, settings);
            this.SoftDeleteNewName = this.SoftDelete.WithNewName(NewName, settings);

            var backupSettings = settings.BackupSettings;

            if (backupSettings != null)
            {
                this.Backup           = BackupFile.CreateFor(this.File, backupSettings);
                this.BackupSoftDelete = this.Backup.GetSoftDeleteFileFor();
                this.BackupNewName    = BackupFile.CreateFor(this.WithNewName, backupSettings);
            }
        }
示例#14
0
        /// <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(
            XElement warning,
            RepositorySettings repositorySettings,
            out string fileName)
        {
            fileName = string.Empty;

            var fileAttr = warning.Attribute("file");

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

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

            // If not absolute path, combine with file path from compile task.
            if (!fileName.IsFullPath())
            {
                var parentFileAttr = warning.Parent?.Attribute("file");
                if (parentFileAttr != null)
                {
                    var compileTaskDirectory = System.IO.Path.GetDirectoryName(parentFileAttr.Value);
                    fileName = System.IO.Path.Combine(compileTaskDirectory, fileName);
                }
            }

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

            (result, fileName) = this.ValidateFilePath(fileName, repositorySettings);
            return(result);
        }
        private static async Task <bool> PerformCrud(ContextPersistence <Guid, MondayMorningBlues> repo, string batchId, ConsoleMenu m)
        {
            var createEntity = CreateEntity();
            var repoSettings = new RepositorySettings {
                BatchId = batchId
            };
            var createResult = await repo.Persistence.Create(createEntity, repoSettings);

            if (!createResult.IsSuccess)
            {
                PersistenceLog(m, $"StressCrudTest Create {createResult.ResponseCode}", createResult.IsSuccess);
                return(false);
            }
            var readResult = await repo.Persistence.Read(createEntity.Id, repoSettings);

            if (!readResult.IsSuccess)
            {
                PersistenceLog(m, $"StressCrudTest Read {readResult.ResponseCode}", readResult.IsSuccess);
                return(false);
            }
            var updateResult = await repo.Persistence.Update(readResult.Entity, repoSettings);

            if (!updateResult.IsSuccess)
            {
                PersistenceLog(m, $"StressCrudTest Update {updateResult.ResponseCode}", updateResult.IsSuccess);
                return(false);
            }
            var deleteResult = await repo.Persistence.Delete(createEntity.Id, repoSettings);

            if (!deleteResult.IsSuccess)
            {
                PersistenceLog(m, $"StressCrudTest Delete {deleteResult.ResponseCode}", deleteResult.IsSuccess);
                return(false);
            }

            return(true);
        }
        /// <inheritdoc />
        public override IEnumerable <IIssue> ReadIssues(
            MarkdownlintIssuesProvider issueProvider,
            IssueCommentFormat format,
            RepositorySettings 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());
        }
示例#17
0
        public async Task <bool> ContainsDotNetProjects(RepositorySettings repository)
        {
            const string dotNetCodeFiles = "\"packages.config\" OR \".csproj\" OR \".fsproj\" OR \".vbproj\"";

            var repos = new List <SearchRepo>
            {
                new SearchRepo(repository.RepositoryOwner, repository.RepositoryName)
            };

            var searchCodeRequest = new SearchCodeRequest(dotNetCodeFiles, repos)
            {
                PerPage = 1
            };

            try
            {
                var result = await _collaborationFactory.CollaborationPlatform.Search(searchCodeRequest);

                if (result.TotalCount <= 0)
                {
                    _logger.Detailed(
                        $"Repository {repository.RepositoryOwner}/{repository.RepositoryName} contains no .NET code on the default branch, skipping.");
                    return(false);
                }

                return(true);
            }
#pragma warning disable CA1031
            catch (Exception ex)
#pragma warning restore CA1031
            {
                _logger.Error("Repository search failed.", ex);
            }

            return(true);
        }
示例#18
0
        public void RepositoryPathComesFromConfigFileIfSpecified()
        {
            // Arrange
            var solutionManager = new Mock <ISolutionManager>();

            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();

            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystemProvider = new Mock <IFileSystemProvider>();

            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock <IVsSourceControlTracker>().Object);

            // Act
            string path = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\lib", path);
        }
示例#19
0
        public void ConfigurationCacheIsClearedIfSourceControlBindingChanges()
        {
            // Arrange
            var solutionManager = new Mock <MockSolutionManager>();

            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();

            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            var fileSystemProvider = new Mock <IFileSystemProvider>();

            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz")).Returns(fileSystem);

            var sourceControlTracker = new Mock <IVsSourceControlTracker>();
            var repositorySettings   = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, sourceControlTracker.Object);


            // Act
            string p1 = repositorySettings.RepositoryPath;

            sourceControlTracker.Raise(p => p.SolutionBoundToSourceControl += (o, e) => { }, EventArgs.Empty);

            fileSystem.AddFile(@"bar\baz\nuget.config", @"
<settings>
    <repositoryPath>foo</repositoryPath>
</settings>");

            string p2 = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\lib", p1);
            Assert.Equal(@"bar\baz\foo", p2);
        }
示例#20
0
        /// <summary>
        /// 反射工厂
        /// </summary>
        /// <typeparam name="T">对象</typeparam>
        /// <returns>结果</returns>
        public static T GetFactory <T>()
            where T : class
        {
            T      respository        = default(T);
            string interfaceShortName = typeof(T).Name;

            if (!MRespository.ContainsKey(interfaceShortName))
            {
                RepositorySettings settings = (RepositorySettings)ConfigurationManager.GetSection(RepositoryMappingConstants.RepositoryMappingsConfigurationSectionName);
                string             repositoryFullTypeName = settings.RepositoryMappings[interfaceShortName].RepositoryFullTypeName;
                Type type = Type.GetType(repositoryFullTypeName);
                if (type != null)
                {
                    respository = Activator.CreateInstance(type) as T;
                    MRespository.Add(interfaceShortName, respository);
                }
            }
            else
            {
                respository = (T)MRespository[interfaceShortName];
            }

            return(respository);
        }
示例#21
0
                public void should_load_with_defaults()
                {
                    // We just need the defaults so we can resolve it from loader and
                    // repoResolver, and compare them.
                    var defaults = loader.Lookup <RepositorySettings>(nameof(DefaultRepositorySettings));

                    defaults.Should().NotBeNull();

                    var withDefaults           = resolver.Lookup("learn_to_fly");
                    var withDefaultsFromLoader = loader.LookupWith <RepositorySettings>("learn_to_fly", defaults);

                    withDefaultsFromLoader.Should().NotBeNull();

                    withDefaults.Should().NotBeNull().And.BeEquivalentTo(withDefaultsFromLoader, opt => opt
                                                                         // Name and selection will vary, these aren't properties we
                                                                         // want to compare
                                                                         .Excluding(t => t.Name)
                                                                         .Excluding(t => t.Selection)
                                                                         // Reviewers is the only thing that was overlayed in the
                                                                         //  learn_to_fly repo settings
                                                                         .Excluding(t => t.Reviewers)
                                                                         , "Resolving via repository and laoder should be the same."
                                                                         );

                    // Make sure then when we resolve without defaults, the properties
                    // should line up with a new instance of repo settings.
                    var newSettings     = new RepositorySettings();
                    var withoutDefaults = loader.Lookup <RepositorySettings>().Single(r => r.Selection.Repos.Contains("learn_to_fly"));

                    withoutDefaults.Should().NotBeNull();

                    withoutDefaults.Reviewers.Should().Be(5).And.NotBe(newSettings.Reviewers);
                    withoutDefaults.MergeCommit.Should().Be(newSettings.MergeCommit);
                    withoutDefaults.SquashCommit.Should().Be(newSettings.SquashCommit);
                    withoutDefaults.RebaseCommit.Should().Be(newSettings.RebaseCommit);
                }
        public void GetValueFromMachineWideSettings()
        {
            // Arrange
            var solutionManager = new Mock <MockSolutionManager>();

            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");

            var fileSystem         = new MockFileSystem();
            var fileSystemProvider = new Mock <IFileSystemProvider>();

            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);

            var sourceControlTracker = new Mock <IVsSourceControlTracker>();

            fileSystem.AddFile(@"a.config", @"
<configuration>
  <config>
    <add key=""repositorypath"" value=""c:\path"" />
  </config>
</configuration>");
            var settings = new Settings[] {
                new Settings(fileSystem, "a.config")
            };
            var machineWideSettings = new Mock <IMachineWideSettings>();

            machineWideSettings.SetupGet(m => m.Settings).Returns(settings);

            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, sourceControlTracker.Object, machineWideSettings.Object);


            // Act
            var repositoryPath = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"c:\path", repositoryPath);
        }
        protected override void BeginProcessing()
        {
            if (Proxy != null || ProxyCredential != null)
            {
                ThrowTerminatingError(new ErrorRecord(
                                          new PSNotImplementedException("Proxy and ProxyCredential are not yet implemented. Please rerun cmdlet with other parameters."),
                                          "ParametersNotImplementedYet",
                                          ErrorCategory.NotImplemented,
                                          this));
            }

            try
            {
                RepositorySettings.CheckRepositoryStore();
            }
            catch (PSInvalidOperationException e)
            {
                ThrowTerminatingError(new ErrorRecord(
                                          new PSInvalidOperationException(e.Message),
                                          "RepositoryStoreException",
                                          ErrorCategory.ReadError,
                                          this));
            }
        }
示例#24
0
        public void RepositoryPathDefaultsToPackagesDirectoryIfConfigFileHasEmptyOrNullRepositoryPath()
        {
            // Arrange
            var solutionManager = new Mock <ISolutionManager>();

            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();

            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath></repositoryPath>
</settings>");
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystemProvider = new Mock <IFileSystemProvider>();

            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock <IVsSourceControlTracker>().Object);

            // Act
            string path = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\baz\packages", path);
        }
示例#25
0
 public new (bool Valid, string FilePath) ValidateFilePath(string filePath, RepositorySettings repositorySettings)
 {
     return(base.ValidateFilePath(filePath, repositorySettings));
 }
 protected override void BeginProcessing()
 {
     RepositorySettings.CheckRepositoryStore();
 }
示例#27
0
        // This method calls iterates through repositories (by priority order) to search for the pkgs to install
        private List <PSResourceInfo> ProcessRepositories(
            string[] repository,
            bool trustRepository,
            PSCredential credential,
            bool skipDependencyCheck)
        {
            var listOfRepositories = RepositorySettings.Read(repository, out string[] _);
            var yesToAll           = false;
            var noToAll            = false;

            var findHelper = new FindHelper(_cancellationToken, _cmdletPassedIn);
            List <PSResourceInfo> allPkgsInstalled = new List <PSResourceInfo>();

            foreach (var repo in listOfRepositories)
            {
                // If no more packages to install, then return
                if (!_pkgNamesToInstall.Any())
                {
                    return(allPkgsInstalled);
                }

                string repoName = repo.Name;
                _cmdletPassedIn.WriteVerbose(string.Format("Attempting to search for packages in '{0}'", repoName));

                // Source is only trusted if it's set at the repository level to be trusted, -TrustRepository flag is true, -Force flag is true
                // OR the user issues trust interactively via console.
                var sourceTrusted = true;
                if (repo.Trusted == false && !trustRepository && !_force)
                {
                    _cmdletPassedIn.WriteVerbose("Checking if untrusted repository should be used");

                    if (!(yesToAll || noToAll))
                    {
                        // Prompt for installation of package from untrusted repository
                        var message = string.Format(CultureInfo.InvariantCulture, MsgInstallUntrustedPackage, repoName);
                        sourceTrusted = _cmdletPassedIn.ShouldContinue(message, MsgRepositoryNotTrusted, true, ref yesToAll, ref noToAll);
                    }
                }

                if (!sourceTrusted && !yesToAll)
                {
                    continue;
                }

                _cmdletPassedIn.WriteVerbose("Untrusted repository accepted as trusted source.");

                // If it can't find the pkg in one repository, it'll look for it in the next repo in the list
                var isLocalRepo = repo.Url.AbsoluteUri.StartsWith(Uri.UriSchemeFile + Uri.SchemeDelimiter, StringComparison.OrdinalIgnoreCase);

                // Finds parent packages and dependencies
                IEnumerable <PSResourceInfo> pkgsFromRepoToInstall = findHelper.FindByResourceName(
                    name: _pkgNamesToInstall.ToArray(),
                    type: ResourceType.None,
                    version: _versionRange != null ? _versionRange.OriginalString : null,
                    prerelease: _prerelease,
                    tag: null,
                    repository: new string[] { repoName },
                    credential: credential,
                    includeDependencies: !skipDependencyCheck);

                if (!pkgsFromRepoToInstall.Any())
                {
                    _cmdletPassedIn.WriteVerbose(string.Format("None of the specified resources were found in the '{0}' repository.", repoName));
                    // Check in the next repository
                    continue;
                }

                // Select the first package from each name group, which is guaranteed to be the latest version.
                // We should only have one version returned for each package name
                // e.g.:
                // PackageA (version 1.0)
                // PackageB (version 2.0)
                // PackageC (version 1.0)
                pkgsFromRepoToInstall = pkgsFromRepoToInstall.GroupBy(
                    m => new { m.Name }).Select(
                    group => group.First()).ToList();

                // Check to see if the pkgs (including dependencies) are already installed (ie the pkg is installed and the version satisfies the version range provided via param)
                if (!_reinstall)
                {
                    pkgsFromRepoToInstall = FilterByInstalledPkgs(pkgsFromRepoToInstall);
                }

                if (!pkgsFromRepoToInstall.Any())
                {
                    continue;
                }

                List <PSResourceInfo> pkgsInstalled = InstallPackage(
                    pkgsFromRepoToInstall,
                    repo.Url.AbsoluteUri,
                    credential,
                    isLocalRepo);

                foreach (PSResourceInfo pkg in pkgsInstalled)
                {
                    _pkgNamesToInstall.RemoveAll(x => x.Equals(pkg.Name, StringComparison.InvariantCultureIgnoreCase));
                }

                allPkgsInstalled.AddRange(pkgsInstalled);
            }

            // At this only package names left were those which could not be found in registered repositories
            foreach (string pkgName in _pkgNamesToInstall)
            {
                var message = String.Format("Package '{0}' with requested version range {1} could not be installed as it was not found in any registered repositories",
                                            pkgName,
                                            _versionRange.ToString());
                var ex = new ArgumentException(message);
                var ResourceNotFoundError = new ErrorRecord(ex, "ResourceNotFoundError", ErrorCategory.ObjectNotFound, null);
                _cmdletPassedIn.WriteError(ResourceNotFoundError);
            }

            return(allPkgsInstalled);
        }
示例#28
0
 public void Initialise(RepositorySettings settings, ILogger logger)
 {
     Settings = settings;
     Logger   = logger ?? new BasicLogger();
 }
示例#29
0
 public void Initialise(RepositorySettings settings) => throw new NotImplementedException();
        public void OnlyConfigPathIsCachedNotRepositoryPath()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string p1 = repositorySettings.RepositoryPath;

            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>..\..\lib</repositoryPath>
</settings>");

            string p2 = repositorySettings.RepositoryPath;


            // Assert
            Assert.Equal(@"bar\lib", p1);
            Assert.Equal(@"bar\..\..\lib", p2);
        }
示例#31
0
 public RepositoryFile(string filePath, RepositorySettings repo, VBProject project)
 {
     FilePath   = filePath;
     Repository = repo;
     Project    = project;
 }
示例#32
0
        /// <summary>
        /// Gets or creates an instance of the requested interface.  Once a
        /// repository is created and initialized, it is cached, and all
        /// future requests for the repository will come from the cache.
        /// </summary>
        /// <typeparam name="TRepository">The interface of the repository
        /// to create.</typeparam>
        /// <typeparam name="TEntity">The type of the Entity that the
        /// repository is for.</typeparam>
        /// <param name="unitOfWork">The unit of work that the repository
        /// will be participating in.</param>
        /// <returns>An instance of the interface requested.</returns>
        public static TRepository GetRepository <TRepository, TEntity>(IUnitOfWork unitOfWork)
            where TRepository : class, IRepository <TEntity>
            where TEntity : IAggregateRoot
        {
            // Initialize the provider's default value
            TRepository repository = default(TRepository);

            string interfaceShortName = typeof(TRepository).Name;

            // See if the provider was already created and is in the cache
            if (!RepositoryFactory.repositories.ContainsKey(interfaceShortName))
            {
                // Not there, so create it

                // Get the repositoryMappingsConfiguration config section
                RepositorySettings settings = (RepositorySettings)ConfigurationManager.GetSection(RepositoryMappingConstants.RepositoryMappingsConfigurationSectionName);

                // Get the type to be created
                Type repositoryType = null;

                // See if a valid interfaceShortName was passed in
                if (settings.RepositoryMappings.ContainsKey(interfaceShortName))
                {
                    repositoryType = Type.GetType(settings.RepositoryMappings[interfaceShortName].RepositoryFullTypeName);
                }
                else
                {
                    // It was not, but that's ok.  Now check to see if any of the
                    // interface short names contain the name of the Entity.  If they
                    // do, then use the matching one to get the right Repository
                    // Mapping Element
                    string entityTypeName = typeof(TEntity).Name;
                    foreach (RepositoryMappingElement element in settings.RepositoryMappings)
                    {
                        if (element.InterfaceShortTypeName.Contains(entityTypeName))
                        {
                            repositoryType = Type.GetType(settings.RepositoryMappings[element.InterfaceShortTypeName].RepositoryFullTypeName);
                            break;
                        }
                    }
                }

                // Throw an exception if the right Repository
                // Mapping Element could not be found and the resulting
                // Repository Type could not be created
                if (repositoryType == null)
                {
                    throw new ArgumentNullException("Cannot create the Repository.  There was one or more invalid repositoryMapping configuration settings.");
                }

                // See if an IUnitOfWork needs to be injected to the repository's constructor
                object[] constructorArgs = null;

                // Check if an IUnitOfWork was passed in and if the repository
                // type to be created derives from RepositoryBase<T>
                if (unitOfWork != null &&
                    repositoryType.IsSubclassOf(typeof(RepositoryBase <TEntity>)))
                {
                    constructorArgs = new object[] { unitOfWork };
                }

                // Create the repository, and cast it to the interface specified
                repository = Activator.CreateInstance(repositoryType, constructorArgs) as TRepository;

                // Add the new provider instance to the cache
                RepositoryFactory.repositories.Add(interfaceShortName, repository);
            }
            else
            {
                // The provider was in the cache, so retrieve it
                repository = (TRepository)RepositoryFactory.repositories[interfaceShortName];

                if (unitOfWork != null &&
                    repository.GetType().IsSubclassOf(typeof(RepositoryBase <TEntity>)))
                {
                    repository.SetUnitOfWork(unitOfWork);
                }
            }
            return(repository);
        }
        /// <inheritdoc />
        public override async Task <IReadOnlyCollection <RevInfoTestMerge> > RemoveMergedTestMerges(
            IRepository repository,
            RepositorySettings repositorySettings,
            RevisionInformation revisionInformation,
            CancellationToken cancellationToken)
        {
            if (repository == null)
            {
                throw new ArgumentNullException(nameof(repository));
            }
            if (repositorySettings == null)
            {
                throw new ArgumentNullException(nameof(repositorySettings));
            }
            if (revisionInformation == null)
            {
                throw new ArgumentNullException(nameof(revisionInformation));
            }

            if (revisionInformation.ActiveTestMerges?.Any() != true)
            {
                Logger.LogTrace("No test merges to remove.");
                return(Array.Empty <RevInfoTestMerge>());
            }

            var client = repositorySettings.AccessToken != null
                                ? new GitLabClient(GitLabRemoteFeatures.GitLabUrl, repositorySettings.AccessToken)
                                : new GitLabClient(GitLabRemoteFeatures.GitLabUrl);

            var tasks = revisionInformation
                        .ActiveTestMerges
                        .Select(x => client
                                .MergeRequests
                                .GetAsync(
                                    $"{repository.RemoteRepositoryOwner}/{repository.RemoteRepositoryName}",
                                    x.TestMerge.Number)
                                .WithToken(cancellationToken));

            try
            {
                await Task.WhenAll(tasks).ConfigureAwait(false);
            }
            catch (Exception ex) when(!(ex is OperationCanceledException))
            {
                Logger.LogWarning(ex, "Merge requests update check failed!");
            }

            var newList = revisionInformation.ActiveTestMerges.ToList();

            MergeRequest lastMerged = null;

            async Task CheckRemoveMR(Task <MergeRequest> task)
            {
                var mergeRequest = await task.ConfigureAwait(false);

                if (mergeRequest.State != MergeRequestState.Merged)
                {
                    return;
                }

                // We don't just assume, actually check the repo contains the merge commit.
                if (await repository.ShaIsParent(mergeRequest.MergeCommitSha, cancellationToken).ConfigureAwait(false))
                {
                    if (lastMerged == null || lastMerged.ClosedAt < mergeRequest.ClosedAt)
                    {
                        lastMerged = mergeRequest;
                    }
                    newList.Remove(
                        newList.First(
                            potential => potential.TestMerge.Number == mergeRequest.Id));
                }
            }

            foreach (var prTask in tasks)
            {
                await CheckRemoveMR(prTask).ConfigureAwait(false);
            }

            return(newList);
        }
示例#34
0
        public void ConfigurationCacheIsClearedIfSolutionCloses()
        {
            // Arrange
            var solutionManager = new Mock<MockSolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget", It.IsAny<bool>())).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string p1 = repositorySettings.RepositoryPath;

            solutionManager.Object.CloseSolution();
            fileSystem.AddFile(@"bar\baz\nuget.config", @"
<settings>
    <repositoryPath>foo</repositoryPath>
</settings>");

            string p2 = repositorySettings.RepositoryPath;


            // Assert
            Assert.Equal(@"bar\lib", p1);
            Assert.Equal(@"bar\baz\foo", p2);
        }
        public void RepositoryPathMalformedConfigThrows()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath
</settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act & Assert
            ExceptionAssert.Throws<InvalidOperationException>(() => { string s = repositorySettings.RepositoryPath; }, @"Error reading 'bar\nuget.config'.");
        }
        public void ConfigFoundInDirectoryHierarchyIsCached()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object);

            // Act
            string p1 = repositorySettings.RepositoryPath;

            fileSystem.AddFile(@"bar\baz\nuget.config", @"
<settings>
    <repositoryPath>foo</repositoryPath>
</settings>");

            string p2 = repositorySettings.RepositoryPath;


            // Assert
            Assert.Equal(@"bar\lib", p1);
            Assert.Equal(@"bar\lib", p2);
        }
示例#37
0
        public void GetValueFromMachineWideSettings()
        {
            // Arrange
            var solutionManager = new Mock<MockSolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");

            var fileSystem = new MockFileSystem();
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);

            var sourceControlTracker = new Mock<IVsSourceControlTracker>();            

            fileSystem.AddFile(@"a.config", @"
<configuration>
  <config>
    <add key=""repositorypath"" value=""c:\path"" />
  </config>
</configuration>");
            var settings = new Settings[] {
                new Settings(fileSystem, "a.config")
            };
            var machineWideSettings = new Mock<IMachineWideSettings>();
            machineWideSettings.SetupGet(m => m.Settings).Returns(settings);

            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, sourceControlTracker.Object, machineWideSettings.Object);


            // Act
            var repositoryPath = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"c:\path", repositoryPath);
        }
        public void ConfigurationCacheIsClearedIfSourceControlBindingChanges()
        {
            // Arrange
            var solutionManager = new Mock<MockSolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<settings>
    <repositoryPath>lib</repositoryPath>
</settings>");
            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);

            var sourceControlTracker = new Mock<IVsSourceControlTracker>();
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, sourceControlTracker.Object);
            

            // Act
            string p1 = repositorySettings.RepositoryPath;

            sourceControlTracker.Raise(p => p.SolutionBoundToSourceControl += (o, e) => { }, EventArgs.Empty);
            
            fileSystem.AddFile(@"bar\baz\nuget.config", @"
<settings>
    <repositoryPath>foo</repositoryPath>
</settings>");

            string p2 = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"bar\lib", p1);
            Assert.Equal(@"bar\baz\foo", p2);
        }
示例#39
0
 public new bool CheckIfFileIsInRepository(string filePath, RepositorySettings repositorySettings)
 {
     return(base.CheckIfFileIsInRepository(filePath, repositorySettings));
 }
示例#40
0
        protected override async Task <EventHandlerResult> execute(CreateEventPayload webhookPayload, RepositorySettings repoSettings)
        {
            if (!webhookPayload.RefType.StringValue.Equals("branch", StringComparison.OrdinalIgnoreCase))
            {
                return(EventHandlerResult.NoActionNeeded($"create event for ref {webhookPayload.RefType} is not of interrest"));
            }

            if (repoSettings.BranchProtection == null || !repoSettings.BranchProtection.Enabled)
            {
                return(EventHandlerResult.Disabled());
            }

            await GitHubClient.Repository.Branch.UpdateBranchProtection(
                webhookPayload.Repository.Id, webhookPayload.Ref, getBranchProtectionSettingsUpdate(webhookPayload.Ref, webhookPayload.Repository.DefaultBranch));

            return(EventHandlerResult.ActionPerformed("branch protection rule applied"));
        }
示例#41
0
 public new string MakeFilePathRelativeToRepositoryRoot(string filePath, RepositorySettings repositorySettings)
 {
     return(base.MakeFilePathRelativeToRepositoryRoot(filePath, repositorySettings));
 }
        public void RepositoryPathAtSolutionRootFolderIsConsideredBeforeParentFolder()
        {
            // Arrange
            var solutionManager = new Mock<ISolutionManager>();
            solutionManager.Setup(m => m.SolutionDirectory).Returns(@"bar\baz");
            var fileSystem = new MockFileSystem();
            fileSystem.AddFile(@"bar\nuget.config", @"
<configuration>
    <repositoryPath>lib</repositoryPath>
</configuration>");

            fileSystem.AddFile(@"bar\baz\nuget.config", @"
<configuration>
    <repositoryPath>x:\demo</repositoryPath>
</configuration>");

            var fileSystemProvider = new Mock<IFileSystemProvider>();
            fileSystemProvider.Setup(m => m.GetFileSystem(@"bar\baz\.nuget")).Returns(fileSystem);
            var repositorySettings = new RepositorySettings(solutionManager.Object, fileSystemProvider.Object, new Mock<IVsSourceControlTracker>().Object);

            // Act
            string p = repositorySettings.RepositoryPath;

            // Assert
            Assert.Equal(@"x:\demo", p);
        }