Changeset e63fffff461a…
Parent a410821bee8e…
committed by Hao Lian <hao@fogcreek.com>
authored by Kevin Gessner
Changes to 2 files · Browse files at e63fffff461a Showing diff from parent a410821bee8e Diff from another changeset...
|
|
@@ -615,13 +615,13 @@ type_name = 'tag'
type_num = 4
- __slots__ = ('_tag_timezone_neg_utc', '_name', '_object_sha',
+ __slots__ = ('_tag_timezone_raw', '_name', '_object_sha',
'_object_class', '_tag_time', '_tag_timezone',
'_tagger', '_message')
def __init__(self):
super(Tag, self).__init__()
- self._tag_timezone_neg_utc = False
+ self._tag_timezone_raw = None
@classmethod
def from_path(cls, filename):
@@ -671,8 +671,7 @@ else:
chunks.append("%s %s %d %s\n" % (
_TAGGER_HEADER, self._tagger, self._tag_time,
- format_timezone(self._tag_timezone,
- self._tag_timezone_neg_utc)))
+ self._tag_timezone_raw or format_timezone(self._tag_timezone)))
chunks.append("\n") # To close headers
chunks.append(self._message)
return chunks
@@ -697,13 +696,13 @@ self._tagger = value
self._tag_time = None
self._tag_timezone = None
- self._tag_timezone_neg_utc = False
+ self._tag_timezone_raw = None
else:
self._tagger = value[0:sep+1]
try:
(timetext, timezonetext) = value[sep+2:].rsplit(" ", 1)
self._tag_time = int(timetext)
- self._tag_timezone, self._tag_timezone_neg_utc = \
+ self._tag_timezone, self._tag_timezone_raw = \
parse_timezone(timezonetext)
except ValueError, e:
raise ObjectFormatException(e)
@@ -1014,8 +1013,11 @@ offset = abs(offset)
hours = int(offset / 100)
minutes = (offset % 100)
- return (signum * (hours * 3600 + minutes * 60),
- unnecessary_negative_timezone)
+ raw = None
+ parsed = signum * (hours * 3600 + minutes * 60)
+ if unnecessary_negative_timezone or text != format_timezone(parsed):
+ raw = text
+ return (parsed, raw)
def format_timezone(offset, unnecessary_negative_timezone=False):
@@ -1082,8 +1084,8 @@ type_name = 'commit'
type_num = 1
- __slots__ = ('_parents', '_encoding', '_extra', '_author_timezone_neg_utc',
- '_commit_timezone_neg_utc', '_commit_time',
+ __slots__ = ('_parents', '_encoding', '_extra', '_author_timezone_raw',
+ '_commit_timezone_raw', '_commit_time',
'_author_time', '_author_timezone', '_commit_timezone',
'_author', '_committer', '_parents', '_extra',
'_encoding', '_tree', '_message', '_mergetag')
@@ -1094,8 +1096,8 @@ self._encoding = None
self._mergetag = []
self._extra = []
- self._author_timezone_neg_utc = False
- self._commit_timezone_neg_utc = False
+ self._author_timezone_raw = None
+ self._commit_timezone_raw = None
@classmethod
def from_path(cls, path):
@@ -1109,9 +1111,9 @@ self._mergetag, self._message, self._extra) = \
parse_commit(chunks)
(self._author, self._author_time, (self._author_timezone,
- self._author_timezone_neg_utc)) = author_info
+ self._author_timezone_raw)) = author_info
(self._committer, self._commit_time, (self._commit_timezone,
- self._commit_timezone_neg_utc)) = commit_info
+ self._commit_timezone_raw)) = commit_info
def check(self):
"""Check this object for internal consistency.
@@ -1156,12 +1158,10 @@ chunks.append("%s %s\n" % (_PARENT_HEADER, p))
chunks.append("%s %s %s %s\n" % (
_AUTHOR_HEADER, self._author, str(self._author_time),
- format_timezone(self._author_timezone,
- self._author_timezone_neg_utc)))
+ self._author_timezone_raw or format_timezone(self._author_timezone)))
chunks.append("%s %s %s %s\n" % (
_COMMITTER_HEADER, self._committer, str(self._commit_time),
- format_timezone(self._commit_timezone,
- self._commit_timezone_neg_utc)))
+ self._commit_timezone_raw or format_timezone(self._commit_timezone)))
if self.encoding:
chunks.append("%s %s\n" % (_ENCODING_HEADER, self.encoding))
for mergetag in self.mergetag:
@@ -1219,11 +1219,19 @@ commit_timezone = serializable_property("commit_timezone",
"The zone the commit time is in")
+ commit_timezone_raw = serializable_property("commit_timezone_raw",
+ "The raw zone the commit time is in, if reserializing the parsed"
+ "offset would result in a different value; otherwise, None")
+
author_time = serializable_property("author_time",
"The timestamp the commit was written. as the number of seconds since the epoch.")
author_timezone = serializable_property("author_timezone",
"Returns the zone the author time is in.")
+
+ author_timezone_raw = serializable_property("author_timezone_raw",
+ "The raw zone the author time is in, if reserializing the parsed"
+ "offset would result in a different value; otherwise, None")
encoding = serializable_property("encoding",
"Encoding of the commit message.")
|
@@ -838,10 +838,10 @@ class TimezoneTests(TestCase):
def test_parse_timezone_utc(self):
- self.assertEqual((0, False), parse_timezone("+0000"))
+ self.assertEqual((0, None), parse_timezone("+0000"))
def test_parse_timezone_utc_negative(self):
- self.assertEqual((0, True), parse_timezone("-0000"))
+ self.assertEqual((0, "-0000"), parse_timezone("-0000"))
def test_generate_timezone_utc(self):
self.assertEqual("+0000", format_timezone(0))
@@ -850,7 +850,7 @@ self.assertEqual("-0000", format_timezone(0, True))
def test_parse_timezone_cet(self):
- self.assertEqual((60 * 60, False), parse_timezone("+0100"))
+ self.assertEqual((60 * 60, None), parse_timezone("+0100"))
def test_format_timezone_cet(self):
self.assertEqual("+0100", format_timezone(60 * 60))
@@ -859,7 +859,7 @@ self.assertEqual("-0400", format_timezone(-4 * 60 * 60))
def test_parse_timezone_pdt(self):
- self.assertEqual((-4 * 60 * 60, False), parse_timezone("-0400"))
+ self.assertEqual((-4 * 60 * 60, None), parse_timezone("-0400"))
def test_format_timezone_pdt_half(self):
self.assertEqual("-0440",
@@ -870,11 +870,11 @@ format_timezone(int(((7 * 60)) * 60), True))
def test_parse_timezone_pdt_half(self):
- self.assertEqual((((-4 * 60) - 40) * 60, False),
+ self.assertEqual((((-4 * 60) - 40) * 60, None),
parse_timezone("-0440"))
def test_parse_timezone_double_negative(self):
self.assertEqual(
- (int(((7 * 60)) * 60), False), parse_timezone("+700"))
+ (int(((7 * 60)) * 60), "+700"), parse_timezone("+700"))
self.assertEqual(
- (int(((7 * 60)) * 60), True), parse_timezone("--700"))
+ (int(((7 * 60)) * 60), "--700"), parse_timezone("--700"))
|
Loading...