class GitDuplicator::Repository

Basic Repostiroy

Attributes

name[RW]
repo[R]
url[RW]
working_directory[R]

Public Class Methods

new(name, url, working_directory = nil) click to toggle source

Initializer @param [String] name name of the repository @param [String] url URL of the repository @param [String] working_directory working directory of the repository

# File lib/git_duplicator/repository/repository.rb, line 13
def initialize(name, url, working_directory = nil)
  self.name = name
  self.url = url
  self.working_directory = working_directory
end

Public Instance Methods

bare_clone(path_to_repo) click to toggle source

Bare clone the repository @param [String] path_to_repo path to clone the repository to

# File lib/git_duplicator/repository/repository.rb, line 26
def bare_clone(path_to_repo)
  self.repo = Git.clone(url, name, bare: true, path: path_to_repo)
rescue => exception
  raise RepositoryCloningError, exception.message
end
mirror(mirrored_url) click to toggle source

Mirror the repository @param [String] mirrored_url URL of mirrored repository

# File lib/git_duplicator/repository/repository.rb, line 44
def mirror(mirrored_url)
  fail('No local repo defined. Set the "repo" attribute') unless repo
  repo.push(mirrored_url, '--mirror')
rescue => exception
  raise RepositoryMirorringError, exception.message
end
mirror_clone(path_to_repo) click to toggle source

Mirror clone the repository @param [String] path_to_repo path to clone the repository to

# File lib/git_duplicator/repository/repository.rb, line 34
def mirror_clone(path_to_repo)
  path = File.join(path_to_repo, name)
  command('clone', '--mirror', url, path)
  self.repo = Git.bare(path)
rescue => exception
  raise RepositoryCloningError, exception.message
end
set_mirrored_remote(mirrored_url) click to toggle source

Set the remote URL of the mirrored @param [String] mirrored_url URL of mirrored repository

# File lib/git_duplicator/repository/repository.rb, line 53
def set_mirrored_remote(mirrored_url)
  fail('No local repo defined. Set the "repo" attribute') unless repo
  command('remote', 'set-url', '--push', 'origin', mirrored_url)
rescue => exception
  raise RepositorySettingRemoteError, exception.message
end
update_mirrored() click to toggle source

Update a mirrored repository

# File lib/git_duplicator/repository/repository.rb, line 61
def update_mirrored
  fail('No local repo defined. Set the "repo" attribute') unless repo
  command('fetch', '-p', 'origin')
  command('push', '--mirror')
rescue => exception
  raise RepositoryMirorredUpdatingError, exception.message
end
working_directory=(value) click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 19
def working_directory=(value)
  @working_directory = value
  @repo = repo_from_path
end

Protected Instance Methods

command(cmd, *opts) click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 97
def command(cmd, *opts)
  git_cmd = "git #{cmd} #{opts.join(' ')}"
  out = run_command(git_cmd)
  if $?.exitstatus > 0
    if $?.exitstatus == 1 && out == ''
      return ''
    end
    fail(git_cmd + ': ' + out.to_s)
  end
end
repo=(value) click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 73
def repo=(value)
  @repo = value
  @working_directory = working_directory_from_repo
end
repo_from_path() click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 78
def repo_from_path
  if working_directory
    Git.open(working_directory) rescue Git.bare(working_directory)
  else
    nil
  end
end
run_command(cmd) click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 108
def run_command(cmd)
  exec = "#{cmd} 2>&1"
  if working_directory
    Dir.chdir(working_directory) { `#{exec}` }
  else
    `#{exec}`
  end.chomp
end
working_directory_from_repo() click to toggle source
# File lib/git_duplicator/repository/repository.rb, line 86
def working_directory_from_repo
  return nil if repo.nil?
  if repo.dir
    repo.dir.path
  elsif repo.repo
    repo.repo.path
  else
    nil
  end
end