Class: R10K::Git::Cache Abstract

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Logging, Settings::Mixin, Util::Cacheable
Defined in:
lib/r10k/git/cache.rb

Overview

This class is abstract.

Cache Git repository mirrors for object database reuse.

This implements most of the behavior needed for Git repo caching, but needs to have a specific Git bare repository provided. Subclasses should implement the Cache.bare_repository method.

See Also:

  • git-clone(1)

Direct Known Subclasses

Rugged::Cache, ShellGit::Cache

Constant Summary

Constants included from Logging

Logging::LOG_LEVELS, Logging::SYSLOG_LEVELS_MAP

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Logging

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

Methods included from Util::Cacheable

default_cachedir

Methods included from Settings::Mixin

included

Constructor Details

#initialize(remote) ⇒ Cache

Returns a new instance of Cache.

Parameters:

  • remote (String)

    The URL of the Git remote URL to cache.



66
67
68
69
# File 'lib/r10k/git/cache.rb', line 66

def initialize(remote)
  @remote = remote
  @repo = self.class.bare_repository.new(settings[:cache_root], sanitized_dirname)
end

Instance Attribute Details

#pathObject (readonly)



56
57
58
59
# File 'lib/r10k/git/cache.rb', line 56

def path
  logger.warn _("%{class}#path is deprecated; use #git_dir") % {class: self.class}
  git_dir
end

#repoObject (readonly)

Returns the value of attribute repo.



63
64
65
# File 'lib/r10k/git/cache.rb', line 63

def repo
  @repo
end

Class Method Details

.bare_repositoryObject

This method is abstract.

Returns The concrete bare repository implementation to use for interacting with the cached Git repository.

Returns:

  • (Object)

    The concrete bare repository implementation to use for interacting with the cached Git repository.

Raises:

  • (NotImplementedError)


43
44
45
# File 'lib/r10k/git/cache.rb', line 43

def self.bare_repository
  raise NotImplementedError
end

.generate(remote) ⇒ R10K::Git::Cache

Generate a new instance with the given remote or return an existing object with the given remote. This should be used over R10K::Git::Cache.new.

Parameters:

  • remote (String)

    The git remote to cache

Returns:



36
37
38
# File 'lib/r10k/git/cache.rb', line 36

def self.generate(remote)
  instance_cache.generate(remote)
end

.instance_cacheObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



26
27
28
# File 'lib/r10k/git/cache.rb', line 26

def self.instance_cache
  @instance_cache
end

Instance Method Details

#reset!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



98
99
100
# File 'lib/r10k/git/cache.rb', line 98

def reset!
  @synced = false
end

#sanitized_dirnameObject



104
105
106
# File 'lib/r10k/git/cache.rb', line 104

def sanitized_dirname
  @sanitized_dirname ||= super(@remote)
end

#syncObject



71
72
73
74
75
76
# File 'lib/r10k/git/cache.rb', line 71

def sync
  if !@synced
    sync!
    @synced = true
  end
end

#sync!Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/r10k/git/cache.rb', line 82

def sync!
  if cached?
    @repo.fetch
  else
    logger.debug1 _("Creating new git cache for %{remote}") % {remote: @remote.inspect}

    # TODO extract this to an initialization step
    if !File.exist?(settings[:cache_root])
      FileUtils.mkdir_p settings[:cache_root]
    end

    @repo.clone(@remote)
  end
end

#synced?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/r10k/git/cache.rb', line 78

def synced?
  @synced
end