discourse/lib/git_utils.rb
Ted Johansson 53c64f3e79
DEV: Allow specifying a new feature by a commit hash (#34607)
This allows using commit hashes in addition to Discourse versions to decide whether to show a feature in the "What's new?" feed or not.
2025-08-28 16:43:40 +08:00

39 lines
947 B
Ruby

# frozen_string_literal: true
class GitUtils
def self.git_version
self.try_git("git rev-parse HEAD", "unknown")
end
def self.git_branch
self.try_git("git branch --show-current", nil) ||
self.try_git("git config user.discourse-version", "unknown")
end
def self.full_version
self.try_git('git describe --dirty --match "v[0-9]*" 2> /dev/null', "unknown")
end
def self.has_commit?(hash)
return false if !hash.match?(/\A[a-f0-9]{40}\Z/)
self.try_git("git cat-file -t #{hash} 2> /dev/null", false) == "commit"
end
def self.last_commit_date
git_cmd = 'git log -1 --format="%ct"'
seconds = self.try_git(git_cmd, nil)
seconds.nil? ? nil : DateTime.strptime(seconds, "%s")
end
def self.try_git(git_cmd, default_value)
value =
begin
`#{git_cmd}`.strip
rescue StandardError
default_value
end
(!value.empty? ? value : nil) || default_value
end
end