public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool onlyEvaluateTrackedBranches = true, string commitId = null, string pathFilter = null) { Repository = repository; RepositoryMetadataProvider = new GitRepoMetadataProvider(repository, configuration); FullConfiguration = configuration; OnlyEvaluateTrackedBranches = onlyEvaluateTrackedBranches; PathFilter = pathFilter; if (currentBranch == null) { throw new InvalidOperationException("Need a branch to operate on"); } if (!string.IsNullOrWhiteSpace(commitId)) { Logger.WriteInfo(string.Format("Searching for specific commit '{0}'", commitId)); var commit = repository.Commits.FirstOrDefault(c => string.Equals(c.Sha, commitId, StringComparison.OrdinalIgnoreCase)); if (commit != null) { CurrentCommit = commit; } else { Logger.WriteWarning(string.Format("Commit '{0}' specified but not found", commitId)); } } if (CurrentCommit == null) { Logger.WriteInfo("Using latest commit on specified branch"); CurrentCommit = currentBranch.GetTip(PathFilter); } if (currentBranch.IsDetachedHead()) { CurrentBranch = RepositoryMetadataProvider.GetBranchesContainingCommit(CurrentCommit, repository.Branches.ToList(), OnlyEvaluateTrackedBranches).OnlyOrDefault() ?? currentBranch; } else { CurrentBranch = currentBranch; } CalculateEffectiveConfiguration(); CurrentCommitTaggedVersion = repository.Tags .SelectMany(t => { SemanticVersion version; if (t.PeeledTarget() == CurrentCommit && SemanticVersion.TryParse(t.FriendlyName, Configuration.GitTagPrefix, out version)) { return new[] { version } } ; return(new SemanticVersion[0]); }) .Max(); IsCurrentCommitTagged = CurrentCommitTaggedVersion != null; }
public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool onlyEvaluateTrackedBranches = true, string commitId = null) { Repository = repository; RepositoryMetadataProvider = new GitRepoMetadataProvider(repository); FullConfiguration = configuration; OnlyEvaluateTrackedBranches = onlyEvaluateTrackedBranches; if (currentBranch == null) throw new InvalidOperationException("Need a branch to operate on"); if (!string.IsNullOrWhiteSpace(commitId)) { Logger.WriteInfo(string.Format("Searching for specific commit '{0}'", commitId)); var commit = repository.Commits.FirstOrDefault(c => string.Equals(c.Sha, commitId, StringComparison.OrdinalIgnoreCase)); if (commit != null) { CurrentCommit = commit; } else { Logger.WriteWarning(string.Format("Commit '{0}' specified but not found", commitId)); } } if (CurrentCommit == null) { Logger.WriteInfo("Using latest commit on specified branch"); CurrentCommit = currentBranch.Tip; } if (currentBranch.IsDetachedHead()) { CurrentBranch = RepositoryMetadataProvider.GetBranchesContainingCommit(CurrentCommit, repository.Branches.ToList(), OnlyEvaluateTrackedBranches).OnlyOrDefault() ?? currentBranch; } else { CurrentBranch = currentBranch; } CalculateEffectiveConfiguration(); CurrentCommitTaggedVersion = repository.Tags .SelectMany(t => { SemanticVersion version; if (t.PeeledTarget() == CurrentCommit && SemanticVersion.TryParse(t.FriendlyName, Configuration.GitTagPrefix, out version)) return new[] { version }; return new SemanticVersion[0]; }) .Max(); IsCurrentCommitTagged = CurrentCommitTaggedVersion != null; }