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; this.configuration = 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; } } if (CurrentCommit == null) { Logger.WriteWarning("No specific commit specified or found, falling back to latest commit on specified branch"); CurrentCommit = currentBranch.Tip; } if (currentBranch.IsDetachedHead()) { CurrentBranch = CurrentCommit.GetBranchesContainingCommit(repository, OnlyEvaluateTrackedBranches).OnlyOrDefault() ?? currentBranch; } else { CurrentBranch = currentBranch; } CalculateEffectiveConfiguration(); CurrentCommitTaggedVersion = repository.Tags .SelectMany(t => { SemanticVersion version; if (t.PeeledTarget() == CurrentCommit && SemanticVersion.TryParse(t.Name, Configuration.GitTagPrefix, out version)) { return new[] { version } } ; return(new SemanticVersion[0]); }) .Max(); IsCurrentCommitTagged = CurrentCommitTaggedVersion != null; }
public GitVersionContext(IRepository repository, Branch currentBranch) { Repository = repository; if (currentBranch == null) { return; } CurrentCommit = currentBranch.Tip; if (repository != null && currentBranch.IsDetachedHead()) { CurrentBranch = GetBranchesContaininingCommit(CurrentCommit.Sha).OnlyOrDefault() ?? currentBranch; } else { CurrentBranch = currentBranch; } }
public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool isForTrackingBranchOnly = true) { Repository = repository; Configuration = configuration; IsContextForTrackedBranchesOnly = isForTrackingBranchOnly; if (currentBranch == null) { return; } CurrentCommit = currentBranch.Tip; if (repository != null && currentBranch.IsDetachedHead()) { CurrentBranch = GetBranchesContainingCommit(CurrentCommit.Sha).OnlyOrDefault() ?? currentBranch; } else { CurrentBranch = currentBranch; } }
private GitVersionContext Init(Branch currentBranch, string commitId = null, bool onlyTrackedBranches = false) { if (currentBranch == null) { throw new InvalidOperationException("Need a branch to operate on"); } var configuration = configProvider.Provide(overrideConfig: options.Value.OverrideConfig); var currentCommit = repositoryMetadataProvider.GetCurrentCommit(currentBranch, commitId); if (currentBranch.IsDetachedHead()) { var branchForCommit = repositoryMetadataProvider.GetBranchesContainingCommit(currentCommit, onlyTrackedBranches: onlyTrackedBranches).OnlyOrDefault(); currentBranch = branchForCommit ?? currentBranch; } var currentBranchConfig = branchConfigurationCalculator.GetBranchConfiguration(currentBranch, currentCommit, configuration); var effectiveConfiguration = configuration.CalculateEffectiveConfiguration(currentBranchConfig); var currentCommitTaggedVersion = repositoryMetadataProvider.GetCurrentCommitTaggedVersion(currentCommit, effectiveConfiguration); return(new GitVersionContext(currentBranch, currentCommit, configuration, effectiveConfiguration, currentCommitTaggedVersion)); }