Skip to content

Instantly share code, notes, and snippets.

@thrgamon
Last active July 23, 2019 23:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thrgamon/76838290870145a33ded1ecffb432c59 to your computer and use it in GitHub Desktop.
Save thrgamon/76838290870145a33ded1ecffb432c59 to your computer and use it in GitHub Desktop.
A Gist for extracting the Clubhouse Ticket Number from their suggested branch names
#!/usr/bin/env ruby
###
##
# A git hook to extract the ticket numnber from the Clubhouse branch helpers and prepend it to commit messages for git.
# The format of the branch name format is tomgamon/ch4120/some-branch-name.
# This would result in a commit message starting with [ch4120].
# If you want a quick way to set it up in a project, run this in the project root.
# curl -s https://gist.githubusercontent.com/thrgamon/76838290870145a33ded1ecffb432c59/raw > .git/hooks/prepare-commit-msg && chmod a+x .git/hooks/prepare-commit-msg
##
###
BRANCHES_TO_SKIP = ['master', 'develop'].freeze
# Matches 'ch' plus any number of digits that appear between two '/'
# For example it would match ch4120 in tomgamon/ch4120/option-values-strip-special-characters
PREFIX_REGEX = /(?<=\/)ch\d+?(?=\/)/.freeze
# Matches the format of a clubhouse branch which is some username, '/',
# 'ch' plus some digits, '/', some combination of words and hyphens.
CLUBHOUSE_BRANCH_REGEX = /\w+\/ch\d+\/[\w-]+/.freeze
message_file = ARGV[0]
branch_name = `git symbolic-ref --short HEAD`.strip
return if BRANCHES_TO_SKIP.include?(branch_name)
return unless branch_name =~ CLUBHOUSE_BRANCH_REGEX
return unless branch_name =~ PREFIX_REGEX
club_ticket_prefix = branch_name.scan(PREFIX_REGEX).flatten.first
formatted_prefix = '[' + club_ticket_prefix.upcase + ']'
message_text = File.read(message_file)
return if message_text.include?(formatted_prefix)
new_message_text = [formatted_prefix, message_text].join(' ')
File.write(message_file, new_message_text)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment