private static string FixupPRReference(RepositoryInfo sourceRepository, string line) { var match = Regex.Match(line, @"Subject: \[PATCH\].*\(#[0-9]+\)$"); if (match.Success) { return(Regex.Replace(line, @"\(#([0-9]+)\)$", $"({sourceRepository.Configuration.UpstreamOwner}/{sourceRepository.Name}#$1)")); } match = Regex.Match(line, @"Subject: \[PATCH\] Merge pull request #[0-9]+ from"); if (match.Success) { return(Regex.Replace(line, "#([0-9]+)", $"{sourceRepository.Configuration.UpstreamOwner}/{sourceRepository.Name}#$1")); } return(line); }
private static void ApplyPatch(RepositoryInfo sourceRepository, RepositoryInfo targetRepository, string patch, Commit commit) { var sourceSlashIgnore = 1 + sourceRepository.SharedPath.Count(c => c == '\\') + 1; var result = Runner.RunCommand("git", $"-c \"user.name={s_mirrorSignatureUserName}\" -C \"{targetRepository.Path}\" am --signoff --reject --3way -p{sourceSlashIgnore} --directory=\"{targetRepository.SharedPath.Replace('\\', '/')}\"", s_logger, patch); s_logger.Debug(result.Output); if (result.ExitCode != 0) { s_logger.Error($"The commit being applied is ${commit.Sha} ${commit.MessageShort} {commit.Author}"); s_logger.Error( $"patching failed, please open '{targetRepository.Path}' and resolve the conflicts then press any key"); s_emailManager.Email("Merge Conflicts", $"Merge Conflicts in {targetRepository.Name} while applying commit {commit} from repo {sourceRepository.Name}"); Console.ReadKey(); } }
private void SanityCheck(RepositoryInfo repository, string branch) { using (var repo = new Repository(repository.Path)) { s_logger.Info($"Running sanity check for {repository.Name}/{branch}"); var lastLookedAtCommit = repo.Lookup <Commit>(repository.LastSynchronizedCommits[branch]); var remoteBranch = repo.Refs[$"refs/heads/{branch}"]; var commitFilter = new CommitFilter { IncludeReachableFrom = remoteBranch, ExcludeReachableFrom = lastLookedAtCommit, SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Time | CommitSortStrategies.Reverse, }; var commitList = repo.Commits.QueryBy(commitFilter).ToList(); if (commitList.Count == 0) { return; } foreach (var commit in commitList) { if (IsMirrorCommit(commit.Message, repository.Configuration.MirrorSignatureUser)) { continue; } var changedFiles = GetChangedFiles(repo, commit); var sharedDirectory = repository.SharedPath; foreach (var changedFile in changedFiles) { if (changedFile.Contains(sharedDirectory)) { foreach (string targetRepo in s_repos[repository.Name]) { RetrieveOrInsert(repository.Name, branch, commit.Sha, targetRepo); } break; } } } UpdateLastSynchronizedCommit(repository, commitList.Last().Sha, branch); s_logger.Info($"sanity check Completed for {repository.Name}/{branch}"); } }
private static async Task <string> GetAuthorAsync(RepositoryInfo repoInfo, string commitSha) { var commit = await Client.Repository.Commit.Get(repoInfo.Owner, repoInfo.Name, commitSha); if (commit.Author != null) { return(commit.Author.Login); } var userSearchRequest = new SearchUsersRequest(commit.Commit.Author.Email) { In = new[] { UserInQualifier.Email } }; var result = await Client.Search.SearchUsers(userSearchRequest); return(result.Items.Count != 0 ? result.Items[0].Login : null); }
public NewChanges(RepositoryInfo targetRepository) { TargetRepository = targetRepository; }