Skip to content
Kward Search API index

Class: Kward::Workers::GitGuard

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/workers/git_guard.rb

Overview

Small git boundary used by write-lane workers to keep implementation work isolated.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(root: Dir.pwd) ⇒ GitGuard

Returns a new instance of GitGuard.



7
8
9
# File 'lib/kward/workers/git_guard.rb', line 7

def initialize(root: Dir.pwd)
  @root = root.to_s
end

Instance Method Details

#apply_stash(ref) ⇒ Object



54
55
56
# File 'lib/kward/workers/git_guard.rb', line 54

def apply_stash(ref)
  run("stash", "apply", ref.to_s)
end

#clean?Boolean

Returns:

  • (Boolean)


15
16
17
18
19
# File 'lib/kward/workers/git_guard.rb', line 15

def clean?
  return true unless repository?

  status.empty?
end

#commit_all(message) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/kward/workers/git_guard.rb', line 34

def commit_all(message)
  add = run("add", "-A")
  return Result.new(success: false, stdout: add.stdout, stderr: add.stderr) unless add.success?

  commit = run("commit", "-m", message)
  return Result.new(success: false, stdout: commit.stdout, stderr: commit.stderr) unless commit.success?

  Result.new(success: true, stdout: commit.stdout, stderr: commit.stderr, commit: head)
end

#dirty?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/kward/workers/git_guard.rb', line 21

def dirty?
  !clean?
end

#drop_stash(ref) ⇒ Object



58
59
60
# File 'lib/kward/workers/git_guard.rb', line 58

def drop_stash(ref)
  run("stash", "drop", ref.to_s)
end

#headObject



29
30
31
32
# File 'lib/kward/workers/git_guard.rb', line 29

def head
  result = run("rev-parse", "--verify", "HEAD")
  result.success? ? result.stdout.strip : nil
end

#repository?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/kward/workers/git_guard.rb', line 11

def repository?
  success?("rev-parse", "--is-inside-work-tree")
end

#stash(message) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/kward/workers/git_guard.rb', line 44

def stash(message)
  before = stash_refs
  result = run("stash", "push", "--include-untracked", "-m", message)
  return Result.new(success: false, stdout: result.stdout, stderr: result.stderr) unless result.success?
  return Result.new(success: true, stdout: result.stdout, stderr: result.stderr) if result.stdout.include?("No local changes")

  ref = (stash_refs - before).first || stash_refs.first
  Result.new(success: true, stdout: result.stdout, stderr: result.stderr, commit: ref)
end

#statusObject



25
26
27
# File 'lib/kward/workers/git_guard.rb', line 25

def status
  run("status", "--porcelain").stdout
end