class Gitmain::Repository

Attributes

branch[R]
name[R]

Public Class Methods

default_branch(value = nil) click to toggle source
# File lib/gitmain/repository.rb, line 5
def self.default_branch(value = nil)
  @default_branch = value unless value.to_s.empty?

  if @default_branch.to_s.empty?
    'master'
  else
    @default_branch
  end
end
dirname(value = nil) click to toggle source
# File lib/gitmain/repository.rb, line 15
def self.dirname(value = nil)
  @dirname = value unless value.to_s.empty?

  if @dirname.to_s.empty?
    raise ArgumentError, 'provide a value to set @dirname'
  else
    @dirname
  end
end
init(name) click to toggle source
# File lib/gitmain/repository.rb, line 25
def self.init(name)
  raise ArgumentError, 'provide a valid name' unless name.match(/\A[\w\-]+\z/)
  Rugged::Repository.init_at(File.join(dirname, "#{name}.git"), :bare)
  new(name)
end
new(name, branch = self.class.default_branch) click to toggle source
# File lib/gitmain/repository.rb, line 31
def initialize(name, branch = self.class.default_branch)
  raise ArgumentError, 'provide a valid name' unless name.match(/\A[\w\-]+\z/)
  raise ArgumentError, 'provide a valid branch' unless branch.match(/\A[\w\-]+\z/)

  begin
    @_repo = Rugged::Repository.new(File.join(self.class.dirname, "#{name}.git"))
  rescue
    raise ArgumentError, 'could not load repository'
  end

  unless @_repo.bare?
    raise ArgumentError, 'must be a bare repository'
  end

  if @_repo.branches.each_name.include?(branch)
    @_branch = @_repo.branches[branch]
  elsif !@_repo.empty?
    raise ArgumentError, 'must provide an existing branch'
  end

  @name = name
  @branch = branch
end

Public Instance Methods

checkout(branch) click to toggle source
# File lib/gitmain/repository.rb, line 63
def checkout(branch)
  if @_repo.branches.each_name.include?(branch)
    @_branch = @_repo.branches[branch]
    @branch = branch
  elsif @_repo.branches.each_name.include?(self.class.default_branch)
    @_branch = @_repo.branches.create(branch, self.class.default_branch)
    @branch = branch
  else
    raise ArgumentError, "default branch not yet setup"
  end
end
commit(klass: Gitmain::Commit) click to toggle source
# File lib/gitmain/repository.rb, line 55
def commit(klass: Gitmain::Commit)
  klass.new(self, commit_id) if commit_id
end
commit_id() click to toggle source
# File lib/gitmain/repository.rb, line 59
def commit_id
  @_branch&.target&.oid
end
rename(name) click to toggle source
# File lib/gitmain/repository.rb, line 75
def rename(name)
  FileUtils.mv(File.join(self.class.dirname, "#@name.git"), File.join(self.class.dirname, "#{name}.git"))
  @_repo = Rugged::Repository.new(File.join(self.class.dirname, "#{name}.git"))
  @name = name
end
rugged(id) click to toggle source
# File lib/gitmain/repository.rb, line 81
def rugged(id)
  @_repo&.lookup(id)
end
setup?() click to toggle source
# File lib/gitmain/repository.rb, line 85
def setup?
  @_repo && !@_repo.empty? && @_repo.branches[self.class.default_branch]
end
tree(klass: Gitmain::Tree) click to toggle source
# File lib/gitmain/repository.rb, line 89
def tree(klass: Gitmain::Tree)
  klass.new(self, tree_id) if tree_id
end
tree_id() click to toggle source
# File lib/gitmain/repository.rb, line 93
def tree_id
  @_branch&.target&.tree_id
end