Sha256: e73b18024190a611bf5881d8e86e21d8412b3d945f3f5965858cce6db0dbb4c8
Contents?: true
Size: 1.52 KB
Versions: 1
Compression:
Stored size: 1.52 KB
Contents
module GemOnDemand class Checkout NotFound = Class.new(Exception) NOT_FOUND = "not-found" UPDATED_AT = "updated_at" DIR = File.expand_path("~/.gem-on-demand/cache") CACHE_DURATION = 15 * 60 # for project tags attr_accessor :user, :project def initialize(user, project) self.user = user self.project = project Utils.ensure_directory(dir) end def chdir(&block) clone_or_refresh Dir.chdir(dir, &block) end def cache @cache ||= FileCache.new("#{dir}/cache") end private def dir "#{DIR}/#{user}/#{project}" end def was_not_found? cache.read(NOT_FOUND) end def not_found! cache.write(NOT_FOUND, true) raise NotFound end def need_refresh? cache.read(UPDATED_AT).to_i < Time.now.to_i - CACHE_DURATION end def fresh! cache.write(UPDATED_AT, Time.now.to_i) end def clone_or_refresh if cloned? refresh if need_refresh? elsif was_not_found? not_found! else clone end end def refresh Dir.chdir(dir) { Utils.sh "git fetch origin" } cache.delete Project::DEPENDENCIES fresh! end def clone Utils.remove_directory(dir) cloned = Utils.sh "git clone git@github.com:#{user}/#{project}.git #{dir}", :fail => :allow Utils.ensure_directory(dir) if cloned fresh! else not_found! end end def cloned? File.directory?("#{dir}/.git") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gem_on_demand-1.1.0 | lib/gem_on_demand/checkout.rb |