Exemple #1
0
    public static CachedVersion GetVersion(string gitDirectory)
    {
        using (var repo = RepositoryLoader.GetRepo(gitDirectory))
        {
            var           ticks = DirectoryDateFinder.GetLastDirectoryWrite(gitDirectory);
            var           key   = string.Format("{0}:{1}:{2}", repo.Head.CanonicalName, repo.Head.Tip.Sha, ticks);
            CachedVersion cachedVersion;
            if (versionCacheVersions.TryGetValue(key, out cachedVersion))
            {
                if (cachedVersion.Timestamp != ticks)
                {
                    Logger.WriteInfo("Change detected. flushing cache.");
                    cachedVersion.SemanticVersion   = GitVersionFinder.GetSemanticVersion(repo);
                    cachedVersion.MasterReleaseDate = LastVersionOnMasterFinder.Execute(repo, repo.Head.Tip);
                }
                return(cachedVersion);
            }
            Logger.WriteInfo("Version not in cache. Calculating version.");

            //TODO: cope with githubflow
            //if (GitVersionFinder.ShouldGitHubFlowVersioningSchemeApply(repo))
            //{
            //    return rd;
            //}
            return(versionCacheVersions[key] = new CachedVersion
            {
                SemanticVersion = GitVersionFinder.GetSemanticVersion(repo),
                MasterReleaseDate = LastVersionOnMasterFinder.Execute(repo, repo.Head.Tip),
                Timestamp = ticks
            });
        }
    }
    static void EnsureMetaDataMatch(CommitCountingRepoFixture fixture, string branchName, Func <IRepository, Commit> commitFinder = null)
    {
        var referenceCommitFinder = commitFinder ?? (r => r.FindBranch(branchName).Tip);

        var commit      = referenceCommitFinder(fixture.Repository);
        var releaseDate = LastVersionOnMasterFinder.Execute(fixture.Repository, commit);

        releaseDate.ShouldBe(commit.When());
    }