Class: Committer::Commands::SetupGitHook

Inherits:
Object
  • Object
show all
Defined in:
lib/committer/commands/setup_git_hook.rb

Constant Summary collapse

HOOK_PATH =
'.git/hooks/prepare-commit-msg'

Class Method Summary collapse

Class Method Details

.display_success_messageObject



55
56
57
58
# File 'lib/committer/commands/setup_git_hook.rb', line 55

def self.display_success_message
  puts 'Git hook successfully installed!'
  puts 'Now your commit messages will be automatically generated.'
end

.execute(_args) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/committer/commands/setup_git_hook.rb', line 8

def self.execute(_args)
  validate_git_repository
  install_git_hook
  display_success_message
  exit 0
rescue StandardError => e
  puts "Error: #{e.message}"
  exit 1
end

.install_git_hookObject



48
49
50
51
52
53
# File 'lib/committer/commands/setup_git_hook.rb', line 48

def self.install_git_hook
  template_path = File.expand_path('../prepare-commit-msg', __dir__)
  hook_content = File.read(template_path)
  File.write(HOOK_PATH, hook_content)
  File.chmod(0o755, HOOK_PATH)
end

.validate_git_directory_existsObject



24
25
26
27
28
29
# File 'lib/committer/commands/setup_git_hook.rb', line 24

def self.validate_git_directory_exists
  return if Dir.exist?('.git')

  puts 'Error: Current directory is not a git repository.'
  exit 1
end

.validate_git_repositoryObject



18
19
20
21
22
# File 'lib/committer/commands/setup_git_hook.rb', line 18

def self.validate_git_repository
  validate_git_root
  validate_git_directory_exists
  validate_hook_doesnt_exist
end

.validate_git_rootObject



31
32
33
34
35
36
37
38
# File 'lib/committer/commands/setup_git_hook.rb', line 31

def self.validate_git_root
  git_toplevel = `git rev-parse --show-toplevel`.strip
  current_dir = Dir.pwd
  return if git_toplevel == current_dir

  puts 'Error: Please run this command from the root of your git repository.'
  exit 1
end

.validate_hook_doesnt_existObject



40
41
42
43
44
45
46
# File 'lib/committer/commands/setup_git_hook.rb', line 40

def self.validate_hook_doesnt_exist
  return unless File.exist?(HOOK_PATH)

  puts 'Error: prepare-commit-msg hook already exists.'
  puts 'Please remove or rename the existing hook and try again.'
  exit 1
end