diff options
Diffstat (limited to 'lib/git/objects')
-rw-r--r-- | lib/git/objects/commit.py | 31 | ||||
-rw-r--r-- | lib/git/objects/tag.py | 12 | ||||
-rw-r--r-- | lib/git/objects/utils.py | 19 |
3 files changed, 34 insertions, 28 deletions
diff --git a/lib/git/objects/commit.py b/lib/git/objects/commit.py index 101014ab..edbe8ed7 100644 --- a/lib/git/objects/commit.py +++ b/lib/git/objects/commit.py @@ -4,14 +4,12 @@ # This module is part of GitPython and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -import re -import time from git.utils import Iterable -from git.actor import Actor import git.diff as diff import git.stats as stats from tree import Tree import base +import utils class Commit(base.Object, Iterable): """ @@ -20,8 +18,6 @@ class Commit(base.Object, Iterable): This class will act lazily on some of its attributes and will query the value on demand only if it involves calling the git binary. """ - # precompiled regex - re_actor_epoch = re.compile(r'^.+? (.*) (\d+) .*$') # object configuration type = "commit" @@ -48,14 +44,16 @@ class Commit(base.Object, Iterable): ``author`` : Actor is the author string ( will be implicitly converted into an Actor object ) - ``authored_date`` : (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst ) - is the authored DateTime + ``authored_date`` : int_seconds_since_epoch + is the authored DateTime - use time.gmtime() to convert it into a + different format ``committer`` : Actor is the committer string - ``committed_date`` : (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst) - is the committed DateTime + ``committed_date`` : int_seconds_since_epoch + is the committed DateTime - use time.gmtime() to convert it into a + different format ``message`` : string is the commit message @@ -185,8 +183,8 @@ class Commit(base.Object, Iterable): parents.append(parent_line.split()[-1]) # END for each parent line - author, authored_date = cls._actor(next_line) - committer, committed_date = cls._actor(stream.next()) + author, authored_date = utils.parse_actor_and_date(next_line) + committer, committed_date = utils.parse_actor_and_date(stream.next()) # empty line stream.next() @@ -286,14 +284,3 @@ class Commit(base.Object, Iterable): def __repr__(self): return '<git.Commit "%s">' % self.id - @classmethod - def _actor(cls, line): - """ - Parse out the actor (author or committer) info - - Returns - [Actor, gmtime(acted at time)] - """ - m = cls.re_actor_epoch.search(line) - actor, epoch = m.groups() - return (Actor._from_string(actor), time.gmtime(int(epoch))) diff --git a/lib/git/objects/tag.py b/lib/git/objects/tag.py index ecf6349d..f54d4b64 100644 --- a/lib/git/objects/tag.py +++ b/lib/git/objects/tag.py @@ -7,8 +7,7 @@ Module containing all object based types. """ import base -import commit -from utils import get_object_type_by_name +import utils class TagObject(base.Object): """ @@ -38,8 +37,9 @@ class TagObject(base.Object): ``tagger`` Actor identifying the tagger - ``tagged_date`` : (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst) - is the DateTime of the tag creation + ``tagged_date`` : int_seconds_since_epoch + is the DateTime of the tag creation - use time.gmtime to convert + it into a different format """ super(TagObject, self).__init__(repo, id ) self._set_self_from_args_(locals()) @@ -53,12 +53,12 @@ class TagObject(base.Object): obj, hexsha = lines[0].split(" ") # object <hexsha> type_token, type_name = lines[1].split(" ") # type <type_name> - self.object = get_object_type_by_name(type_name)(self.repo, hexsha) + self.object = utils.get_object_type_by_name(type_name)(self.repo, hexsha) self.tag = lines[2][4:] # tag <tag name> tagger_info = lines[3][7:]# tagger <actor> <date> - self.tagger, self.tagged_date = commit.Commit._actor(tagger_info) + self.tagger, self.tagged_date = utils.parse_actor_and_date(tagger_info) # line 4 empty - check git source to figure out purpose self.message = "\n".join(lines[5:]) diff --git a/lib/git/objects/utils.py b/lib/git/objects/utils.py index 15c1d114..9b9e0c52 100644 --- a/lib/git/objects/utils.py +++ b/lib/git/objects/utils.py @@ -6,7 +6,9 @@ """ Module for general utility functions """ +import re import commit, tag, blob, tree +from git.actor import Actor def get_object_type_by_name(object_type_name): """ @@ -34,3 +36,20 @@ def get_object_type_by_name(object_type_name): return tree.Tree else: raise ValueError("Cannot handle unknown object type: %s" % object_type_name) + + +# precompiled regex +_re_actor_epoch = re.compile(r'^.+? (.*) (\d+) .*$') + +def parse_actor_and_date(line): + """ + Parse out the actor (author or committer) info from a line like:: + + author Tom Preston-Werner <tom@mojombo.com> 1191999972 -0700 + + Returns + [Actor, int_seconds_since_epoch] + """ + m = _re_actor_epoch.search(line) + actor, epoch = m.groups() + return (Actor._from_string(actor), int(epoch)) |