@@ -12,19 +12,7 @@ module Git
def get_object_by_sha1(sha1)
r = get_raw_object_by_sha1(sha1)
return nil if !r
-
- case r.type
- when :blob
- return Blob.new(r, self)
- when :tree
- return Tree.new(r, self)
- when :commit
- return Commit.new(r, self)
- when :tag
- return Tag.new(r, self)
- else
- raise RuntimeError, "got invalid object-type"
- end
+ Object.from_raw(r, self)
end
def get_raw_object_by_sha1(sha1)
@@ -23,6 +23,21 @@ module Git
# base class for all git objects (blob, tree, commit, tag)
class Object
+ def Object.from_raw(rawobject, repository = nil)
+ case rawobject.type
+ when :blob
+ return Blob.new(rawobject, repository)
+ when :tree
+ return Tree.new(rawobject, repository)
+ when :commit
+ return Commit.new(rawobject, repository)
+ when :tag
+ return Tag.new(rawobject, repository)
+ else
+ raise RuntimeError, "got invalid object-type"
+ end
+ end
+
def initialize
raise NotImplemented, "abstract class"
end