summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2015-01-06 11:02:31 +0100
committerSebastian Thiel <byronimo@gmail.com>2015-01-06 11:02:31 +0100
commitb5a37564b6eec05b98c2efa5edcd1460a2df02aa (patch)
treee002ae6c2196a5f18d671bf09318d86428a0ff68
parent45c1c99a22e95d730d3096c339d97181d314d6ca (diff)
downloadgitpython-b5a37564b6eec05b98c2efa5edcd1460a2df02aa.tar.gz
test_reflog works
-rw-r--r--git/refs/log.py22
-rw-r--r--git/test/test_reflog.py5
2 files changed, 16 insertions, 11 deletions
diff --git a/git/refs/log.py b/git/refs/log.py
index f397548e..c3019d39 100644
--- a/git/refs/log.py
+++ b/git/refs/log.py
@@ -19,7 +19,8 @@ from git.objects.util import (
)
from git.compat import (
xrange,
- string_types
+ string_types,
+ defenc
)
import time
@@ -38,9 +39,8 @@ class RefLogEntry(tuple):
def __repr__(self):
"""Representation of ourselves in git reflog format"""
act = self.actor
- name = act.name.encode('utf-8')
time = self.time
- return self._fmt % (self.oldhexsha, self.newhexsha, name, act.email,
+ return self._fmt % (self.oldhexsha, self.newhexsha, act.name, act.email,
time[0], altz_to_utctz_str(time[1]), self.message)
@property
@@ -82,8 +82,9 @@ class RefLogEntry(tuple):
@classmethod
def from_line(cls, line):
""":return: New RefLogEntry instance from the given revlog line.
- :param line: line without trailing newline
+ :param line: line bytes without trailing newline
:raise ValueError: If line could not be parsed"""
+ line = line.decode(defenc)
try:
info, msg = line.split('\t', 1)
except ValueError:
@@ -253,15 +254,18 @@ class RefLog(list, Serializable):
# END handle sha type
assure_directory_exists(filepath, is_file=True)
committer = isinstance(config_reader, Actor) and config_reader or Actor.committer(config_reader)
- entry = RefLogEntry(
- (bin_to_hex(oldbinsha), bin_to_hex(newbinsha), committer, (int(time.time()), time.altzone), message))
+ entry = RefLogEntry((
+ bin_to_hex(oldbinsha).decode('ascii'),
+ bin_to_hex(newbinsha).decode('ascii'),
+ committer, (int(time.time()), time.altzone), message
+ ))
lf = LockFile(filepath)
lf._obtain_lock_or_raise()
- fd = open(filepath, 'a')
+ fd = open(filepath, 'ab')
try:
- fd.write(repr(entry))
+ fd.write(repr(entry).encode(defenc))
finally:
fd.close()
lf._release_lock()
@@ -286,7 +290,7 @@ class RefLog(list, Serializable):
# write all entries
for e in self:
- write(repr(e))
+ write(repr(e).encode(defenc))
# END for each entry
def _deserialize(self, stream):
diff --git a/git/test/test_reflog.py b/git/test/test_reflog.py
index 4efb8025..3571e083 100644
--- a/git/test/test_reflog.py
+++ b/git/test/test_reflog.py
@@ -8,6 +8,7 @@ from git.refs import (
RefLog
)
from git.util import Actor
+from gitdb.util import hex_to_bin
import tempfile
import shutil
@@ -51,7 +52,7 @@ class TestRefLog(TestBase):
assert len(reflog)
# iter_entries works with path and with stream
- assert len(list(RefLog.iter_entries(open(rlp_master))))
+ assert len(list(RefLog.iter_entries(open(rlp_master, 'rb'))))
assert len(list(RefLog.iter_entries(rlp_master)))
# raise on invalid revlog
@@ -65,7 +66,7 @@ class TestRefLog(TestBase):
self.failUnlessRaises(ValueError, RefLog().write)
# test serialize and deserialize - results must match exactly
- binsha = chr(255) * 20
+ binsha = hex_to_bin(('f' * 40).encode('ascii'))
msg = "my reflog message"
cr = self.rorepo.config_reader()
for rlp in (rlp_head, rlp_master):