class Repobrowse::Config

Attributes

repos[R]

Public Class Methods

new(file = ENV['REPOBROWSE_CONFIG'] || File.expand_path('~/.repobrowse/config')) click to toggle source
# File lib/repobrowse/config.rb, line 10
def initialize(file = ENV['REPOBROWSE_CONFIG'] ||
                      File.expand_path('~/.repobrowse/config'))
  @groups = Hash.new { |h,k| h[k] = [] }
  if Hash === file
    raw = file
  else
    raw = {}
    if File.exist?(file)
      cfg = Rugged::Config.new(file)
      cfg.each_key { |k| raw[-k] = cfg.get_all(k) }
    end
  end
  raw[:snapshots] ||= '-tar.bz2 -tar.xz'
  raw[:groups] = { hidden: [], none: [] }
  @raw = raw
  @repos = {}
  raw.each do |k, v|
    v = Array(v)
    case k
    when %r{\Arepo\.(.+)\.path\z}
      repo_name = -$1
      warn "multiple values defined for #{k.inspect}\n" if v.size > 1
      path = v[-1]
      add_repo(repo_name, path)
    end
  end
end

Public Instance Methods

add_repo(repo_name, path) click to toggle source
# File lib/repobrowse/config.rb, line 38
def add_repo(repo_name, path) # repo_name "git.git"
  rv = { path: path, name: repo_name }
  rv[:snapshot_pfx] = -path.split(%r{/+})[-1].chomp('.git')
  %i[ vcs readme group snapshots ].each do |key|
    rv[key] = @raw["repo.#{repo_name}.#{key}"]
  end
  rv[:snapshots] ||= @raw[:snapshots]
  rv[:snapshots_disabled] = disabled = {}
  rv[:snapshots].split(/\s+/n).each do |type|
    # "-tar.bz2", "-" prefix denotes disabled
    type.sub!(/\A-/, '') and
      disabled[type] = true
  end
  group = rv[:group] ||= :none
  case group
  when Array
    Array(group).each { |g| @groups[g] << repo_name }
  else
    @groups[group] << repo_name
  end
  snap = repo_name.split('/')[-1]
  if (rv[:vcs] ||= 'git') == 'git'
    snap.chomp!('.git') # seems common for git URLs to end in ".git"
  end
  rv[:snapshot_re] = %r{\A\Q#{Regexp.escape(snap)}[-_]}
  @repos[repo_name] = Repobrowse::Repo.new(rv)
end