All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gorylenko.GitProperties.groovy Maven / Gradle / Ivy

package com.gorylenko

import com.gorylenko.properties.CacheSupport

import java.text.SimpleDateFormat

import org.ajoberstar.grgit.Grgit

import com.gorylenko.properties.BranchProperty
import com.gorylenko.properties.BuildHostProperty
import com.gorylenko.properties.BuildUserEmailProperty
import com.gorylenko.properties.BuildUserNameProperty
import com.gorylenko.properties.BuildVersionProperty
import com.gorylenko.properties.ClosestTagCommitCountProperty
import com.gorylenko.properties.ClosestTagNameProperty
import com.gorylenko.properties.CommitIdAbbrevProperty
import com.gorylenko.properties.CommitIdDescribeProperty
import com.gorylenko.properties.CommitIdProperty
import com.gorylenko.properties.CommitMessageFullProperty
import com.gorylenko.properties.CommitMessageShortProperty
import com.gorylenko.properties.CommitTimeProperty
import com.gorylenko.properties.CommitUserEmailProperty
import com.gorylenko.properties.CommitUserNameProperty
import com.gorylenko.properties.DirtyProperty
import com.gorylenko.properties.RemoteOriginUrlProperty
import com.gorylenko.properties.TagsProperty
import com.gorylenko.properties.TotalCommitCountProperty

import java.io.File
import java.util.List
import java.util.Map


class GitProperties {

    private static final String KEY_GIT_BRANCH = "git.branch"
    private static final String KEY_GIT_COMMIT_ID = "git.commit.id"
    private static final String KEY_GIT_COMMIT_ID_ABBREVIATED = "git.commit.id.abbrev"
    private static final String KEY_GIT_COMMIT_USER_NAME = "git.commit.user.name"
    private static final String KEY_GIT_COMMIT_USER_EMAIL = "git.commit.user.email"
    private static final String KEY_GIT_COMMIT_SHORT_MESSAGE = "git.commit.message.short"
    private static final String KEY_GIT_COMMIT_FULL_MESSAGE = "git.commit.message.full"
    private static final String KEY_GIT_COMMIT_TIME = "git.commit.time"
    private static final String KEY_GIT_COMMIT_ID_DESCRIBE = "git.commit.id.describe"
    private static final String KEY_GIT_REMOTE_ORIGIN_URL = "git.remote.origin.url"
    private static final String KEY_GIT_TAGS = "git.tags"
    private static final String KEY_GIT_CLOSEST_TAG_NAME = "git.closest.tag.name"
    private static final String KEY_GIT_CLOSEST_TAG_COMMIT_COUNT = "git.closest.tag.commit.count"
    private static final String KEY_GIT_TOTAL_COMMIT_COUNT = "git.total.commit.count"
    private static final String KEY_GIT_DIRTY = "git.dirty"
    private static final String KEY_GIT_BUILD_USER_NAME = "git.build.user.name"
    private static final String KEY_GIT_BUILD_USER_EMAIL = "git.build.user.email"
    private static final String KEY_GIT_BUILD_VERSION = "git.build.version"
    private static final String KEY_GIT_BUILD_HOST = "git.build.host"

    public Map generate(File dotGitDirectory, List keys, String dateFormat, String dateFormatTimeZone, String branch,
        Object buildVersion, Map customProperties) {

        // Find standard properties and custom properties to be generated

        Map properties = getStandardPropertiesMap(dateFormat, dateFormatTimeZone, branch, buildVersion).subMap(keys)
        if (customProperties) {
            properties.putAll(customProperties)
        }

        // Evaluate property values

        def result = [:]
        def repo = Grgit.open(dir: dotGitDirectory)
        try {
            properties.each{ k, v -> result.put(k, v instanceof Closure ? v.call(repo).toString() : v.toString() ) }
        } finally {
            repo.close()
        }

        return result
    }

    public static List getStandardProperties() {
        return getStandardPropertiesMap(null, null, null, null).keySet() as List
    }

    private static Map getStandardPropertiesMap(String dateFormat, String dateFormatTimeZone, String branch, Object buildVersion) {
        def cacheSupport = new CacheSupport()

        def map = [(KEY_GIT_BRANCH)                     : new BranchProperty(branch)
                   , (KEY_GIT_COMMIT_ID)                : new CommitIdProperty()
                   , (KEY_GIT_COMMIT_ID_ABBREVIATED)    : new CommitIdAbbrevProperty()
                   , (KEY_GIT_COMMIT_USER_NAME)         : new CommitUserNameProperty()
                   , (KEY_GIT_COMMIT_USER_EMAIL)        : new CommitUserEmailProperty()
                   , (KEY_GIT_COMMIT_SHORT_MESSAGE)     : new CommitMessageShortProperty()
                   , (KEY_GIT_COMMIT_FULL_MESSAGE)      : new CommitMessageFullProperty()
                   , (KEY_GIT_COMMIT_TIME)              : new CommitTimeProperty(dateFormat, dateFormatTimeZone)
                   , (KEY_GIT_COMMIT_ID_DESCRIBE)       : new CommitIdDescribeProperty()
                   , (KEY_GIT_REMOTE_ORIGIN_URL)        : new RemoteOriginUrlProperty()
                   , (KEY_GIT_TAGS)                     : new TagsProperty()
                   , (KEY_GIT_CLOSEST_TAG_NAME)         : new ClosestTagNameProperty(cacheSupport)
                   , (KEY_GIT_CLOSEST_TAG_COMMIT_COUNT) : new ClosestTagCommitCountProperty(cacheSupport)
                   , (KEY_GIT_TOTAL_COMMIT_COUNT)       : new TotalCommitCountProperty(cacheSupport)
                   , (KEY_GIT_DIRTY)                    : new DirtyProperty()
                   , (KEY_GIT_BUILD_USER_NAME)          : new BuildUserNameProperty()
                   , (KEY_GIT_BUILD_USER_EMAIL)         : new BuildUserEmailProperty()
                   , (KEY_GIT_BUILD_VERSION)            : new BuildVersionProperty(buildVersion)
                   , (KEY_GIT_BUILD_HOST)               : new BuildHostProperty()]

        return map
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy