Class: Gitmain::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/gitmain/repository.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, branch = self.class.default_branch) ⇒ Repository

Returns a new instance of Repository.

Raises:

  • (ArgumentError)


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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

Instance Attribute Details

#branchObject (readonly)

Returns the value of attribute branch.



3
4
5
# File 'lib/gitmain/repository.rb', line 3

def branch
  @branch
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/gitmain/repository.rb', line 3

def name
  @name
end

Class Method Details

.default_branch(value = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
# 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) ⇒ Object



15
16
17
18
19
20
21
22
23
# 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) ⇒ Object

Raises:

  • (ArgumentError)


25
26
27
28
29
# 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

Instance Method Details

#checkout(branch) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# 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) ⇒ Object



55
56
57
# File 'lib/gitmain/repository.rb', line 55

def commit(klass: Gitmain::Commit)
  klass.new(self, commit_id) if commit_id
end

#commit_idObject



59
60
61
# File 'lib/gitmain/repository.rb', line 59

def commit_id
  @_branch&.target&.oid
end

#rename(name) ⇒ Object



75
76
77
78
79
# 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) ⇒ Object



81
82
83
# File 'lib/gitmain/repository.rb', line 81

def rugged(id)
  @_repo&.lookup(id)
end

#setup?Boolean



85
86
87
# File 'lib/gitmain/repository.rb', line 85

def setup?
  @_repo && !@_repo.empty? && @_repo.branches[self.class.default_branch]
end

#tree(klass: Gitmain::Tree) ⇒ Object



89
90
91
# File 'lib/gitmain/repository.rb', line 89

def tree(klass: Gitmain::Tree)
  klass.new(self, tree_id) if tree_id
end

#tree_idObject



93
94
95
# File 'lib/gitmain/repository.rb', line 93

def tree_id
  @_branch&.target&.tree_id
end