module Git::Multi
Constants
- DEFAULT_TOKEN
- DEFAULT_WORKAREA
- GITHUB_CACHE
- GIT_MULTI_DIR
- HOME
- HTML_PAGE
- MAN_PAGE
- MULTI_REPOS
- NAME
- ORGANIZATIONS
- PIM
- SUPERPROJECTS
- TOKEN
- USERS
- VERSION
- WORKAREA
Public Class Methods
version()
click to toggle source
# File lib/git/multi/version.rb, line 6 def self.version "#{NAME} v#{VERSION}" end
Public Instance Methods
archived_repositories_for(multi_repo = nil)
click to toggle source
lists of repositories with a given state
# File lib/git/multi.rb, line 239 def archived_repositories_for(multi_repo = nil) repositories_for(multi_repo).find_all(&:archived) end
cloned_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 289 def cloned_repositories_for(multi_repo = nil) repositories_for(multi_repo).find_all { |repo| File.directory? repo.local_path } end
env_var(name, default = nil)
click to toggle source
# File lib/git/multi/config.rb, line 24 def env_var(name, default = nil) value = ENV[name] (value.nil? || value.empty?) && default ? default : value end
excess_repositories_for(multi_repo = nil)
click to toggle source
derived lists of repositories
# File lib/git/multi.rb, line 255 def excess_repositories_for(multi_repo = nil) repository_full_names = repositories_for(multi_repo).map(&:full_name) local_repositories_for(multi_repo).reject { |repo| repository_full_names.include? repo.full_name } end
forked_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 243 def forked_repositories_for(multi_repo = nil) repositories_for(multi_repo).find_all(&:fork) end
full_names_for(superproject)
click to toggle source
# File lib/git/multi/config.rb, line 10 def full_names_for(superproject) list = `git config --get-all superproject.#{superproject}.repo` list.split($RS).map(&:strip).map(&:freeze) end
github_repositories()
click to toggle source
# File lib/git/multi.rb, line 107 def github_repositories @github_repositories ||= ( USERS.map { |user| @github_user_repositories[user] } + ORGANIZATIONS.map { |org| @github_org_repositories[org] } ).flatten end
github_repositories_for(owner = nil)
click to toggle source
# File lib/git/multi.rb, line 114 def github_repositories_for(owner = nil) case owner when nil github_repositories # all of them when *USERS @github_user_repositories[owner] when *ORGANIZATIONS @github_org_repositories[owner] else raise "Unknown owner: #{owner}" end end
global_list(name, default = nil)
click to toggle source
# File lib/git/multi/config.rb, line 20 def global_list(name, default = nil) global_option(name, default).split(',').map(&:strip).map(&:freeze) end
global_option(name, default = nil)
click to toggle source
# File lib/git/multi/config.rb, line 15 def global_option(name, default = nil) value = `git config --global --get #{name}`.chomp.freeze value.empty? && default ? default : value end
local_option(path, name, default = nil)
click to toggle source
# File lib/git/multi/config.rb, line 5 def local_option(path, name, default = nil) value = `git -C #{path} config --local --get #{name}`.chomp.freeze value.empty? && default ? default : value end
local_repositories()
click to toggle source
# File lib/git/multi.rb, line 75 def local_repositories @local_repositories ||= ( USERS.map { |user| @local_user_repositories[user] } + ORGANIZATIONS.map { |org| @local_org_repositories[org] } ).flatten end
local_repositories_for(owner = nil)
click to toggle source
# File lib/git/multi.rb, line 82 def local_repositories_for(owner = nil) case owner when nil local_repositories # all of them when *USERS @local_user_repositories[owner] when *ORGANIZATIONS @local_org_repositories[owner] else raise "Unknown owner: #{owner}" end end
missing_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 283 def missing_repositories_for(multi_repo = nil) repositories_for(multi_repo).find_all { |repo| !File.directory? repo.local_path } end
private_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 247 def private_repositories_for(multi_repo = nil) repositories_for(multi_repo).find_all(&:private) end
refresh_repositories()
click to toggle source
manage the local repository cache
# File lib/git/multi.rb, line 131 def refresh_repositories File.open(GITHUB_CACHE, 'wb') do |file| Marshal.dump(github_repositories, file) end end
repositories()
click to toggle source
# File lib/git/multi.rb, line 186 def repositories if File.size?(GITHUB_CACHE) # rubocop:disable Security/MarshalLoad @repositories ||= Marshal.load(File.read(GITHUB_CACHE)).tap do |repos| repos.each_with_index do |repo, index| # ensure 'repo' has handle on an Octokit client repo.client = Git::Hub.send(:client) # adorn 'repo', which is a Sawyer::Resource repo.parent_dir = Pathname.new(File.join(WORKAREA, repo.owner.login)) repo.local_path = Pathname.new(File.join(WORKAREA, repo.full_name)) repo.fractional_index = "#{index + 1}/#{repos.count}" # fix 'repo' => https://github.com/octokit/octokit.rb/issues/727 repo.compliant_ssh_url = 'ssh://' + repo.ssh_url.split(':', 2).join('/') # remove optional '.git' suffix from 'git@github.com:pvdb/git-multi.git' repo.abbreviated_ssh_url = repo.ssh_url.chomp('.git') # extend 'repo' with 'just do it' capabilities repo.extend Nike end end # rubocop:enable Security/MarshalLoad else refresh_repositories repositories # retry end end
repositories_for(multi_repo = nil)
click to toggle source
lists of repos for a given multi-repo
# File lib/git/multi.rb, line 216 def repositories_for(multi_repo = nil) case (owner = superproject = full_names = multi_repo) when nil repositories # all of them when Array repositories.find_all { |repository| full_names.include?(repository.full_name) } when *USERS, *ORGANIZATIONS repositories.find_all { |repository| repository.owner.login == owner } when *SUPERPROJECTS repositories_for(full_names_for(superproject)) else raise ArgumentError, multi_repo end end
spurious_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 269 def spurious_repositories_for(multi_repo = nil) cloned_repositories_for(multi_repo).find_all { |repo| origin_url = local_option(repo.local_path, 'remote.origin.url') ![ repo.clone_url, repo.ssh_url, repo.compliant_ssh_url, repo.abbreviated_ssh_url, repo.git_url, ].include? origin_url } end
stale_repositories_for(multi_repo = nil)
click to toggle source
# File lib/git/multi.rb, line 262 def stale_repositories_for(multi_repo = nil) repository_full_names = github_repositories_for(multi_repo).map(&:full_name) repositories_for(multi_repo).reject { |repo| repository_full_names.include? repo.full_name } end
valid?(multi_repo)
click to toggle source
multi-repo support
# File lib/git/multi.rb, line 59 def valid?(multi_repo) MULTI_REPOS.include? multi_repo end