static string CreateDynamicRepository(string targetPath, Authentication authentication, string repositoryUrl, string targetBranch, bool noFetch) { if (string.IsNullOrWhiteSpace(targetBranch)) { throw new Exception("Dynamic Git repositories must have a target branch (/b)"); } Logger.WriteInfo(string.Format("Creating dynamic repository at '{0}'", targetPath)); var gitDirectory = Path.Combine(targetPath, ".git"); if (Directory.Exists(targetPath)) { Logger.WriteInfo("Git repository already exists"); GitHelper.NormalizeGitDirectory(gitDirectory, authentication, noFetch, targetBranch); return(gitDirectory); } CloneRepository(repositoryUrl, gitDirectory, authentication); // Normalize (download branches) before using the branch GitHelper.NormalizeGitDirectory(gitDirectory, authentication, noFetch, targetBranch); return(gitDirectory); }
public override void PerformPreProcessingSteps(string gitDirectory) { if (string.IsNullOrEmpty(gitDirectory)) { throw new WarningException("Failed to find .git directory on agent. Please make sure agent checkout mode is enabled for you VCS roots - http://confluence.jetbrains.com/display/TCD8/VCS+Checkout+Mode"); } GitHelper.NormalizeGitDirectory(gitDirectory, arguments); }
public override void PerformPreProcessingSteps(string gitDirectory) { if (string.IsNullOrEmpty(gitDirectory)) { throw new ErrorException("Failed to find .git directory on agent"); } GitHelper.NormalizeGitDirectory(gitDirectory, _arguments); }
public override void PerformPreProcessingSteps(string gitDirectory) { if (string.IsNullOrEmpty(gitDirectory)) { throw new WarningException("Failed to find .git directory on agent."); } GitHelper.NormalizeGitDirectory(gitDirectory, authentication); }
string GetGitInfoFromUrl() { var gitDirectory = Path.Combine(arguments.TargetPath, "_dynamicrepository", ".git"); if (Directory.Exists(gitDirectory)) { Logger.WriteInfo(string.Format("Deleting existing .git folder from '{0}' to force new checkout from url", gitDirectory)); DeleteHelper.DeleteGitRepository(gitDirectory); } Credentials credentials = null; var authentication = arguments.Authentication; if (!string.IsNullOrWhiteSpace(authentication.Username) && !string.IsNullOrWhiteSpace(authentication.Password)) { Logger.WriteInfo(string.Format("Setting up credentials using name '{0}'", authentication.Username)); credentials = new UsernamePasswordCredentials { Username = authentication.Username, Password = authentication.Password }; } Logger.WriteInfo(string.Format("Retrieving git info from url '{0}'", arguments.TargetUrl)); Repository.Clone(arguments.TargetUrl, gitDirectory, new CloneOptions { IsBare = true, Checkout = false, Credentials = credentials }); if (!string.IsNullOrWhiteSpace(arguments.TargetBranch)) { // Normalize (download branches) before using the branch GitHelper.NormalizeGitDirectory(gitDirectory, arguments.Authentication); using (var repository = new Repository(gitDirectory)) { var targetBranchName = string.Format("refs/heads/{0}", arguments.TargetBranch); if (!string.Equals(repository.Head.CanonicalName, targetBranchName)) { Logger.WriteInfo(string.Format("Switching to branch '{0}'", arguments.TargetBranch)); repository.Refs.UpdateTarget("HEAD", targetBranchName); } repository.CheckoutFilesIfExist("NextVersion.txt"); } } DynamicGitRepositoryPath = gitDirectory; return(gitDirectory); }
public override void PerformPreProcessingSteps(string gitDirectory) { if (string.IsNullOrEmpty(gitDirectory)) { throw new WarningException("Failed to find .git directory on agent. Please make sure agent checkout mode is enabled for you VCS roots - http://confluence.jetbrains.com/display/TCD8/VCS+Checkout+Mode"); } var repoBranch = Environment.GetEnvironmentVariable("APPVEYOR_REPO_BRANCH"); GitHelper.NormalizeGitDirectory(gitDirectory, authentication, repoBranch); }
public void Initialise(bool normaliseGitDirectory, string currentBranch) { if (string.IsNullOrWhiteSpace(targetUrl)) { if (normaliseGitDirectory) { GitHelper.NormalizeGitDirectory(GetDotGitDirectory(), authentication, noFetch, currentBranch); } return; } var tempRepositoryPath = CalculateTemporaryRepositoryPath(targetUrl, dynamicRepositoryLocation); DynamicGitRepositoryPath = CreateDynamicRepository(tempRepositoryPath, authentication, targetUrl, currentBranch, noFetch); }
static string CreateDynamicRepository(string targetPath, Authentication authentication, string repositoryUrl, string targetBranch, bool noFetch) { Logger.WriteInfo(string.Format("Creating dynamic repository at '{0}'", targetPath)); var gitDirectory = Path.Combine(targetPath, ".git"); if (Directory.Exists(targetPath)) { Logger.WriteInfo("Git repository already exists"); GitHelper.NormalizeGitDirectory(gitDirectory, authentication, noFetch); Logger.WriteInfo(string.Format("Updating branch '{0}'", targetBranch)); using (var repo = new Repository(targetPath)) { if (string.IsNullOrWhiteSpace(targetBranch)) { throw new Exception("Dynamic Git repositories must have a target branch (/b)"); } var targetGitBranch = repo.Branches[targetBranch]; var trackedBranch = targetGitBranch.TrackedBranch; if (trackedBranch == null) { throw new InvalidOperationException(string.Format("Expecting {0} to have a remote tracking branch", targetBranch)); } targetGitBranch.Checkout(); repo.Reset(ResetMode.Hard, trackedBranch.Tip); } return(gitDirectory); } Credentials credentials = null; if (!string.IsNullOrWhiteSpace(authentication.Username) && !string.IsNullOrWhiteSpace(authentication.Password)) { Logger.WriteInfo(string.Format("Setting up credentials using name '{0}'", authentication.Username)); credentials = new UsernamePasswordCredentials { Username = authentication.Username, Password = authentication.Password }; } Logger.WriteInfo(string.Format("Retrieving git info from url '{0}'", repositoryUrl)); CloneRepository(repositoryUrl, gitDirectory, credentials); // Normalize (download branches) before using the branch GitHelper.NormalizeGitDirectory(gitDirectory, authentication, noFetch); using (var repository = new Repository(gitDirectory)) { if (string.IsNullOrWhiteSpace(targetBranch)) { targetBranch = repository.Head.Name; } Reference newHead = null; var localReference = GetLocalReference(repository, targetBranch); if (localReference != null) { newHead = localReference; } if (newHead == null) { var remoteReference = GetRemoteReference(repository, targetBranch, repositoryUrl, authentication); if (remoteReference != null) { repository.Network.Fetch(repositoryUrl, new[] { string.Format("{0}:{1}", remoteReference.CanonicalName, targetBranch) }); newHead = repository.Refs[string.Format("refs/heads/{0}", targetBranch)]; } } if (newHead != null) { Logger.WriteInfo(string.Format("Switching to branch '{0}'", targetBranch)); repository.Refs.UpdateTarget(repository.Refs.Head, newHead); } } return(gitDirectory); }
string GetGitInfoFromUrl() { var gitRootDirectory = Path.Combine(arguments.TargetPath, "_dynamicrepository"); var gitDirectory = Path.Combine(gitRootDirectory, ".git"); if (Directory.Exists(gitRootDirectory)) { Logger.WriteInfo(string.Format("Deleting existing .git folder from '{0}' to force new checkout from url", gitRootDirectory)); DeleteHelper.DeleteGitRepository(gitRootDirectory); } Credentials credentials = null; var authentication = arguments.Authentication; if (!string.IsNullOrWhiteSpace(authentication.Username) && !string.IsNullOrWhiteSpace(authentication.Password)) { Logger.WriteInfo(string.Format("Setting up credentials using name '{0}'", authentication.Username)); credentials = new UsernamePasswordCredentials { Username = authentication.Username, Password = authentication.Password }; } Logger.WriteInfo(string.Format("Retrieving git info from url '{0}'", arguments.TargetUrl)); Repository.Clone(arguments.TargetUrl, gitDirectory, new CloneOptions { IsBare = true, Checkout = false, CredentialsProvider = (url, usernameFromUrl, types) => credentials }); if (!string.IsNullOrWhiteSpace(arguments.TargetBranch)) { // Normalize (download branches) before using the branch GitHelper.NormalizeGitDirectory(gitDirectory, arguments.Authentication); using (var repository = new Repository(gitDirectory)) { Reference newHead = null; var localReference = GetLocalReference(repository, arguments.TargetBranch); if (localReference != null) { newHead = localReference; } if (newHead == null) { var remoteReference = GetRemoteReference(repository, arguments.TargetBranch, arguments.TargetUrl); if (remoteReference != null) { repository.Network.Fetch(arguments.TargetUrl, new[] { string.Format("{0}:{1}", remoteReference.CanonicalName, arguments.TargetBranch) }); newHead = repository.Refs[string.Format("refs/heads/{0}", arguments.TargetBranch)]; } } if (newHead != null) { Logger.WriteInfo(string.Format("Switching to branch '{0}'", arguments.TargetBranch)); repository.Refs.UpdateTarget(repository.Refs.Head, newHead); } repository.CheckoutFilesIfExist("NextVersion.txt"); } } DynamicGitRepositoryPath = gitDirectory; return(gitDirectory); }
static string CreateDynamicRepository(string targetPath, Authentication authentication, string repositoryUrl, string targetBranch, bool noFetch) { var gitDirectory = Path.Combine(targetPath, ".git"); if (Directory.Exists(targetPath)) { Logger.WriteInfo("Git repository already exists at {0}, skipping clone"); return(gitDirectory); } Credentials credentials = null; if (!string.IsNullOrWhiteSpace(authentication.Username) && !string.IsNullOrWhiteSpace(authentication.Password)) { Logger.WriteInfo(string.Format("Setting up credentials using name '{0}'", authentication.Username)); credentials = new UsernamePasswordCredentials { Username = authentication.Username, Password = authentication.Password }; } Logger.WriteInfo(string.Format("Retrieving git info from url '{0}'", repositoryUrl)); Repository.Clone(repositoryUrl, gitDirectory, new CloneOptions { IsBare = true, Checkout = false, CredentialsProvider = (url, usernameFromUrl, types) => credentials }); // Normalize (download branches) before using the branch GitHelper.NormalizeGitDirectory(gitDirectory, authentication, noFetch); using (var repository = new Repository(gitDirectory)) { if (string.IsNullOrWhiteSpace(targetBranch)) { targetBranch = repository.Head.Name; } Reference newHead = null; var localReference = GetLocalReference(repository, targetBranch); if (localReference != null) { newHead = localReference; } if (newHead == null) { var remoteReference = GetRemoteReference(repository, targetBranch, repositoryUrl); if (remoteReference != null) { repository.Network.Fetch(repositoryUrl, new[] { string.Format("{0}:{1}", remoteReference.CanonicalName, targetBranch) }); newHead = repository.Refs[string.Format("refs/heads/{0}", targetBranch)]; } } if (newHead != null) { Logger.WriteInfo(string.Format("Switching to branch '{0}'", targetBranch)); repository.Refs.UpdateTarget(repository.Refs.Head, newHead); } } return(gitDirectory); }