module Fastlane module Actions GIT_MERGE_COMMIT_FILTERING_OPTIONS = [:include_merges, :exclude_merges, :only_include_merges].freeze def self.git_log_between(pretty_format, from, to, merge_commit_filtering) command = 'git log' command << " --pretty=\"#{pretty_format}\" #{from.shellescape}...#{to.shellescape}" command << " --no-merges" if merge_commit_filtering == :exclude_merges command << " --merges" if merge_commit_filtering == :only_include_merges Actions.sh(command, log: false).chomp rescue nil end def self.last_git_tag_name(match_lightweight = true, tag_match_pattern = nil) tag_pattern_param = tag_match_pattern ? "=#{tag_match_pattern.shellescape}" : '' command = ['git describe'] command << '--tags' if match_lightweight command << "`git rev-list --tags#{tag_pattern_param} --max-count=1`" Actions.sh(command.join(' '), log: false).chomp rescue nil end def self.last_git_commit_dict return nil if last_git_commit_formatted_with('%an').nil? { author: last_git_commit_formatted_with('%an'), message: last_git_commit_formatted_with('%B'), commit_hash: last_git_commit_formatted_with('%H'), abbreviated_commit_hash: last_git_commit_formatted_with('%h') } end # Gets the last git commit information formatted into a String by the provided # pretty format String. See the git-log documentation for valid format placeholders def self.last_git_commit_formatted_with(pretty_format) Actions.sh("git log -1 --pretty=#{pretty_format}", log: false).chomp rescue nil end # Get the author email of the last git commit # DEPRECATED: Use git_author_email instead. def self.git_author Helper.log.warn '`git_author` is deprecated. Please use `git_author_email` instead.'.red git_author_email end # Get the author email of the last git commit def self.git_author_email s = last_git_commit_formatted_with('%ae') return s if s.to_s.length > 0 return nil end # Returns the unwrapped subject and body of the last commit # DEPRECATED: Use last_git_commit_message instead. def self.last_git_commit Helper.log.warn '`last_git_commit` is deprecated. Please use `last_git_commit_message` instead.'.red last_git_commit_message end # Returns the unwrapped subject and body of the last commit def self.last_git_commit_message s = (last_git_commit_formatted_with('%B') || "").strip return s if s.to_s.length > 0 nil end # Returns the current git branch - can be replaced using the environment variable `GIT_BRANCH` def self.git_branch return ENV['GIT_BRANCH'] if ENV['GIT_BRANCH'].to_s.length > 0 # set by Jenkins s = Actions.sh("git rev-parse --abbrev-ref HEAD", log: false).chomp return s.to_s.strip if s.to_s.length > 0 nil rescue nil end end end