diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2009-10-16 16:09:07 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2009-10-16 16:09:07 +0200 |
commit | bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2 (patch) | |
tree | 391ba27fa04e7d6ef65fb7d371b07475eb4263c6 /lib/git/objects/base.py | |
parent | 919164df96d9f956c8be712f33a9a037b097745b (diff) | |
download | gitpython-bb24f67e64b4ebe11c4d3ce7df021a6ad7ca98f2.tar.gz |
Fixed object bug that would cause object ids not to be resolved to sha's as this was assumed - now there is a test for it as well
repo: removed diff and commit_diff methods, added 'head' property returning the current head as Reference object
Diffstat (limited to 'lib/git/objects/base.py')
-rw-r--r-- | lib/git/objects/base.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/lib/git/objects/base.py b/lib/git/objects/base.py index 3b48e066..d780c7b3 100644 --- a/lib/git/objects/base.py +++ b/lib/git/objects/base.py @@ -15,22 +15,12 @@ class Object(LazyMixin): This Object also serves as a constructor for instances of the correct type:: - inst = Object(repo,id) + inst = Object.new(repo,id) """ TYPES = ("blob", "tree", "commit", "tag") __slots__ = ("repo", "id", "size", "data" ) type = None # to be set by subclass - def __new__(cls, repo, id, *args, **kwargs): - if cls is Object: - hexsha, typename, size = repo.git.get_object_header(id) - obj_type = utils.get_object_type_by_name(typename) - inst = super(Object,cls).__new__(obj_type, repo, hexsha, *args, **kwargs) - inst.size = size - return inst - else: - return super(Object,cls).__new__(cls, repo, id, *args, **kwargs) - def __init__(self, repo, id): """ Initialize an object by identifying it by its id. All keyword arguments @@ -45,7 +35,25 @@ class Object(LazyMixin): super(Object,self).__init__() self.repo = repo self.id = id - + + @classmethod + def new(cls, repo, id): + """ + Return + New Object instance of a type appropriate to the object type behind + id. The id of the newly created object will be a hexsha even though + the input id may have been a Reference or Rev-Spec + + Note + This cannot be a __new__ method as it would always call __init__ + with the input id which is not necessarily a hexsha. + """ + hexsha, typename, size = repo.git.get_object_header(id) + obj_type = utils.get_object_type_by_name(typename) + inst = obj_type(repo, hexsha) + inst.size = size + return inst + def _set_self_from_args_(self, args_dict): """ Initialize attributes on self from the given dict that was retrieved |