Class: R10K::Git::ShellGit::BaseRepository

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/r10k/git/shellgit/base_repository.rb

Direct Known Subclasses

BareRepository, WorkingRepository

Constant Summary

Constants included from Logging

Logging::LOG_LEVELS

Instance Method Summary collapse

Methods included from Logging

debug_formatter, default_formatter, default_outputter, #logger, #logger_name, parse_level

Instance Method Details

#branchesArray<String>

Returns All local branches in this repository.

Returns:

  • (Array<String>)

    All local branches in this repository



29
30
31
# File 'lib/r10k/git/shellgit/base_repository.rb', line 29

def branches
  for_each_ref('refs/heads')
end

#git_dirPathname

This method is abstract.

Returns The path to the Git directory.

Returns:

  • (Pathname)

    The path to the Git directory

Raises:

  • (NotImplementedError)


9
10
11
# File 'lib/r10k/git/shellgit/base_repository.rb', line 9

def git_dir
  raise NotImplementedError
end

#ref_type(pattern) ⇒ Symbol

Returns The type of the given ref, one of :branch, :tag, :commit, or :unknown.

Returns:

  • (Symbol)

    The type of the given ref, one of :branch, :tag, :commit, or :unknown



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/r10k/git/shellgit/base_repository.rb', line 39

def ref_type(pattern)
  if branches.include? pattern
    :branch
  elsif tags.include? pattern
    :tag
  elsif resolve(pattern)
    :commit
  else
    :unknown
  end
end

#remotesHash

Returns Collection of remotes for this repo, keys are the remote name and values are the remote URL.

Returns:

  • (Hash)

    Collection of remotes for this repo, keys are the remote name and values are the remote URL.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/r10k/git/shellgit/base_repository.rb', line 52

def remotes
  result = git ['config', '--local', '--get-regexp', '^remote\..*\.url$'], :git_dir => git_dir.to_s, :raise_on_fail => false

  if result.success?
    Hash[
      result.stdout.split("\n").collect do |remote|
        matches = /^remote\.(.*)\.url (.*)$/.match(remote)

        [matches[1], matches[2]]
      end
    ]
  else
    {}
  end
end

#resolve(pattern) ⇒ String? Also known as: rev_parse

Resolve the given Git ref to a commit

Parameters:

  • pattern (String)

    The git ref to resolve

Returns:

  • (String, nil)

    The commit SHA if the ref could be resolved, nil otherwise.



17
18
19
20
21
22
# File 'lib/r10k/git/shellgit/base_repository.rb', line 17

def resolve(pattern)
  result = git ['rev-parse', "#{pattern}^{commit}"], :git_dir => git_dir.to_s, :raise_on_fail => false
  if result.success?
    result.stdout
  end
end

#tagsArray<String>

Returns All tags in this repository.

Returns:

  • (Array<String>)

    All tags in this repository



34
35
36
# File 'lib/r10k/git/shellgit/base_repository.rb', line 34

def tags
  for_each_ref('refs/tags')
end