Sha256: f1b42dcfabebd3a9d91273e0f0592fe47b04e0bd445a3e143c3ca116ba8b8c16

Contents?: true

Size: 1.68 KB

Versions: 4

Compression:

Stored size: 1.68 KB

Contents

module Jets::Git
  class Local < Base
    include GitCli

    def info
      return {} unless git? && git_branch
      info = {
        git_system: "local",
        git_branch: git_branch,
        git_sha: git_sha,
        git_dirty: git_dirty?,
        git_message: git_message,
        git_version: git_version,
        git_default_branch: git_default_branch
      }
      info[:git_url] = git_url if git_url
      info
    end

    def git_message
      git "log -1 --pretty=%B"
    end

    def git_branch
      git "rev-parse --abbrev-ref HEAD"
    end

    def git_sha
      git "rev-parse HEAD"
    end

    def git_url
      # IE: git "config --get remote.origin.url"
      git "config --get remote.#{git_remote}.url"
    end

    def git_dirty?
      !git("status --porcelain").empty?
    end

    def git_version
      git "--version", on_error: :raise
    end

    # discover git remote name. in case it's not origin
    def git_remote
      # 2>&1 to suppress error message
      #   "fatal: not a git repository (or any parent up to mount point /path)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n"
      `git remote 2>&1`
      return unless $?.success?
      `git remote`.strip # IE: origin or blank string
    end
    memoize :git_remote

    def git_default_branch
      default = ENV["JETS_GIT_DEFAULT_BRANCH"] || "master"
      out = `git remote show origin 2>&1`.strip
      return default unless $?.success?

      lines = out.split("\n")
      lines.each do |line|
        if line.include?("HEAD")
          return line.split(" ").last
        end
      end
      default
    end

    def git_current_branch
      `rev-parse --abbrev-ref HEAD`.strip
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jets-6.0.5 lib/jets/git/local.rb
jets-6.0.4 lib/jets/git/local.rb
jets-6.0.3 lib/jets/git/local.rb
jets-6.0.2 lib/jets/git/local.rb