summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2015-07-17 18:58:04 +0200
committerSebastian Thiel <byronimo@gmail.com>2015-07-17 18:58:04 +0200
commit58c78e649cbac271dee187b055335c876fcb1937 (patch)
tree5c30bdc8849ae56b887a1da500f7e775b656d582
parentc3d33c113b1dfa4be7e3c9924fae029c178505c3 (diff)
parente3068025b64bee24efc1063aba5138708737c158 (diff)
downloadgitpython-58c78e649cbac271dee187b055335c876fcb1937.tar.gz
Merge pull request #317 from avinassh/dates-in-commits
Feature: Make commits with custom `author_date` and `commit_date` (closes #315)
-rw-r--r--git/index/base.py6
-rw-r--r--git/objects/commit.py13
-rw-r--r--git/test/test_index.py11
3 files changed, 25 insertions, 5 deletions
diff --git a/git/index/base.py b/git/index/base.py
index f8696800..b955dae4 100644
--- a/git/index/base.py
+++ b/git/index/base.py
@@ -922,7 +922,8 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable):
return out
- def commit(self, message, parent_commits=None, head=True, author=None, committer=None):
+ def commit(self, message, parent_commits=None, head=True, author=None,
+ committer=None, author_date=None, commit_date=None):
"""Commit the current default index file, creating a commit object.
For more information on the arguments, see tree.commit.
@@ -932,7 +933,8 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable):
run_commit_hook('pre-commit', self)
tree = self.write_tree()
rval = Commit.create_from_tree(self.repo, tree, message, parent_commits,
- head, author=author, committer=committer)
+ head, author=author, committer=committer,
+ author_date=author_date, commit_date=commit_date)
run_commit_hook('post-commit', self)
return rval
diff --git a/git/objects/commit.py b/git/objects/commit.py
index d301e301..376b451d 100644
--- a/git/objects/commit.py
+++ b/git/objects/commit.py
@@ -266,7 +266,8 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable):
finalize_process(proc_or_stream)
@classmethod
- def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, author=None, committer=None):
+ def create_from_tree(cls, repo, tree, message, parent_commits=None, head=False, author=None, committer=None,
+ author_date=None, commit_date=None):
"""Commit the given tree, creating a commit object.
:param repo: Repo object the commit should be part of
@@ -288,6 +289,8 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable):
configuration is used to obtain this value.
:param committer: The name of the committer, optional. If unset, the
repository configuration is used to obtain this value.
+ :param author_date: The timestamp for the author field
+ :param commit_date: The timestamp for the committer field
:return: Commit object representing the new commit
@@ -327,14 +330,18 @@ class Commit(base.Object, Iterable, Diffable, Traversable, Serializable):
offset = altzone
author_date_str = env.get(cls.env_author_date, '')
- if author_date_str:
+ if author_date:
+ author_time, author_offset = parse_date(author_date)
+ elif author_date_str:
author_time, author_offset = parse_date(author_date_str)
else:
author_time, author_offset = unix_time, offset
# END set author time
committer_date_str = env.get(cls.env_committer_date, '')
- if committer_date_str:
+ if commit_date:
+ committer_time, committer_offset = parse_date(commit_date)
+ elif committer_date_str:
committer_time, committer_offset = parse_date(committer_date_str)
else:
committer_time, committer_offset = unix_time, offset
diff --git a/git/test/test_index.py b/git/test/test_index.py
index 8c3775d2..2fd53f65 100644
--- a/git/test/test_index.py
+++ b/git/test/test_index.py
@@ -470,6 +470,17 @@ class TestIndex(TestBase):
assert cur_head.commit == commit_actor
assert cur_head.log()[-1].actor == my_committer
+ # commit with author_date and commit_date
+ cur_commit = cur_head.commit
+ commit_message = u"commit with dates by Avinash Sajjanshetty"
+
+ new_commit = index.commit(commit_message, author_date="2006-04-07T22:13:13", commit_date="2005-04-07T22:13:13")
+ assert cur_commit != new_commit
+ print(new_commit.authored_date, new_commit.committed_date)
+ assert new_commit.message == commit_message
+ assert new_commit.authored_date == 1144447993
+ assert new_commit.committed_date == 1112911993
+
# same index, no parents
commit_message = "index without parents"
commit_no_parents = index.commit(commit_message, parent_commits=list(), head=True)