def self.from_raw(rawobject, repository=nil)
parent = []
tree = author = committer = nil
headers, message = rawobject.content.split(/\n\n/, 2)
all_headers = headers.split(/\n/).map { |header| header.split(/ /, 2) }
all_headers.each do |key, value|
case key
when "tree"
tree = value
when "parent"
parent.push(value)
when "author"
author = UserInfo.new(value)
when "committer"
committer = UserInfo.new(value)
else
warn "unknown header '%s' in commit %s" % \
[key, rawobject.sha1.unpack("H*")[0]]
end
end
if not tree && author && committer
raise RuntimeError, "incomplete raw commit object"
end
new(tree, parent, author, committer, message, headers, repository)
end