Kiln » Dependencies » Dulwich Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9.4

Preserve and expose commit and author timezones that would change when the parsed offset is serialized

Changeset e63fffff461a

Parent a410821bee8e

committed by Profile picture of User 138Hao 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
616
617
618
 
619
620
621
622
623
624
 
625
626
627
 
671
672
673
674
675
 
676
677
678
 
697
698
699
700
 
701
702
703
704
705
706
 
707
708
709
 
1014
1015
1016
1017
1018
 
 
 
 
 
1019
1020
1021
 
1082
1083
1084
1085
1086
 
 
1087
1088
1089
 
1094
1095
1096
1097
1098
 
 
1099
1100
1101
 
1109
1110
1111
1112
 
1113
1114
 
1115
1116
1117
 
1156
1157
1158
1159
1160
 
1161
1162
1163
1164
 
1165
1166
1167
 
1219
1220
1221
 
 
 
 
1222
1223
1224
1225
1226
 
 
 
 
1227
1228
1229
 
615
616
617
 
618
619
620
621
622
623
 
624
625
626
627
 
671
672
673
 
 
674
675
676
677
 
696
697
698
 
699
700
701
702
703
704
 
705
706
707
708
 
1013
1014
1015
 
 
1016
1017
1018
1019
1020
1021
1022
1023
 
1084
1085
1086
 
 
1087
1088
1089
1090
1091
 
1096
1097
1098
 
 
1099
1100
1101
1102
1103
 
1111
1112
1113
 
1114
1115
 
1116
1117
1118
1119
 
1158
1159
1160
 
 
1161
1162
1163
 
 
1164
1165
1166
1167
 
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
@@ -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
839
840
841
 
842
843
844
 
845
846
847
 
850
851
852
853
 
854
855
856
 
859
860
861
862
 
863
864
865
 
870
871
872
873
 
874
875
876
877
878
 
879
880
 
 
838
839
840
 
841
842
843
 
844
845
846
847
 
850
851
852
 
853
854
855
856
 
859
860
861
 
862
863
864
865
 
870
871
872
 
873
874
875
876
877
 
878
879
 
880
@@ -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"))