Class: Dolt::Git::Commit

Inherits:
Object
  • Object
show all
Defined in:
lib/libdolt/git/commit.rb

Class Method Summary collapse

Class Method Details

.commit_end?(line) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
# File 'lib/libdolt/git/commit.rb', line 76

def self.commit_end?(line)
  return true unless line
  line =~ /^commit [a-z0-9]{40}$/
end

.extract_commit(lines) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/libdolt/git/commit.rb', line 30

def self.extract_commit(lines)
  commit = { :oid => lines.shift.split(" ")[1] }
  while (line = lines.shift) && line != ""
    pieces = line.split(": ")
    extract_property(commit, pieces[0], pieces[1])
  end

  commit[:summary] = extract_commit_summary(lines)
  commit[:message] = extract_commit_message(lines)
  commit
end

.extract_commit_message(lines) ⇒ Object



66
67
68
69
70
71
72
73
74
# File 'lib/libdolt/git/commit.rb', line 66

def self.extract_commit_message(lines)
  message = ""

  while !lines.first.nil? && !commit_end?(lines.first)
    message << lines.shift
  end

  HTMLEscape.entityfy(message)
end

.extract_commit_summary(lines) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/libdolt/git/commit.rb', line 58

def self.extract_commit_summary(lines)
  return "" if commit_end?(lines.first)
  summary = lines.shift
  lines.shift if lines.first == ""
  summary = summary.sub(/^    /, "")
  HTMLEscape.entityfy(summary)
end

.extract_property(hash, name, value) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/libdolt/git/commit.rb', line 42

def self.extract_property(hash, name, value)
  key = name.downcase.to_sym

  case key
  when :author
    pieces = value.match(/(.*)\s<(.*)>/)
    name = HTMLEscape.entityfy(pieces[1])
    email = HTMLEscape.entityfy(pieces[2])
    value = { :name => name, :email => email }
  when :date
    value = Time.parse(value)
  end

  hash[key] = value
end

.parse_log(log) ⇒ Object



23
24
25
26
27
28
# File 'lib/libdolt/git/commit.rb', line 23

def self.parse_log(log)
  commits = []
  lines = log.split("\n")
  commits << extract_commit(lines) while lines.length > 0
  commits
end