Class: Prodder::Git

Inherits:
Object
  • Object
show all
Defined in:
lib/prodder/git.rb

Constant Summary collapse

GitError =
Class.new(StandardError) do
  attr_reader :command, :error
  def initialize(command, error); @command, @error = command, error; end
end
NotFoundError =
Class.new(StandardError)
NotFastForward =
Class.new(StandardError) do
  attr_reader :remote
  def initialize(remote); @remote = remote; end
end

Instance Method Summary collapse

Constructor Details

#initialize(local, remote) ⇒ Git

Returns a new instance of Git.



14
15
16
17
# File 'lib/prodder/git.rb', line 14

def initialize(local, remote)
  @local  = local
  @remote = remote
end

Instance Method Details

#add(file) ⇒ Object



65
66
67
# File 'lib/prodder/git.rb', line 65

def add(file)
  inside_repo { git 'add', file }
end

#checkout(branch) ⇒ Object



57
58
59
# File 'lib/prodder/git.rb', line 57

def checkout(branch)
  inside_repo { git 'checkout', branch }
end

#cloneObject



49
50
51
# File 'lib/prodder/git.rb', line 49

def clone
  git 'clone', @remote, @local
end

#clone_or_remote_updateObject



19
20
21
22
23
24
25
26
27
# File 'lib/prodder/git.rb', line 19

def clone_or_remote_update
  if File.directory? File.join(@local, '.git')
    remote_update
    checkout 'master'
    reset    'origin/master', true
  else
    clone
  end
end

#commit(message, author) ⇒ Object



69
70
71
# File 'lib/prodder/git.rb', line 69

def commit(message, author)
  inside_repo { git 'commit', "--author='#{author}'", "-m", message }
end

#dirty?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/prodder/git.rb', line 29

def dirty?
  inside_repo { git('status', '--porcelain') != '' }
end

#fast_forward?Boolean

Returns:

  • (Boolean)


43
44
45
46
47
# File 'lib/prodder/git.rb', line 43

def fast_forward?
  inside_repo do
    git('merge-base', 'master', 'origin/master') == git('show-ref', '--hash', 'origin/master')
  end
end

#no_new_commits?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
# File 'lib/prodder/git.rb', line 37

def no_new_commits?
  inside_repo do
    git('show-ref', '--hash', 'origin/master') == git('show-ref', '--hash', 'refs/heads/master')
  end
end

#pushObject



73
74
75
# File 'lib/prodder/git.rb', line 73

def push
  inside_repo { git 'push', 'origin', 'master:master' }
end

#remote_updateObject



53
54
55
# File 'lib/prodder/git.rb', line 53

def remote_update
  inside_repo { git 'remote', 'update' }
end

#reset(sharef, hard = false) ⇒ Object



61
62
63
# File 'lib/prodder/git.rb', line 61

def reset(sharef, hard = false)
  inside_repo { git 'reset', hard ? '--hard' : '', sharef }
end

#tracked?(file) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/prodder/git.rb', line 33

def tracked?(file)
  inside_repo { git('ls-files', file) != '' }
end