Kiln » Dependencies » Dulwich Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in master-1, master-0, and 0.9.4

Add support for mergetags.

Bug: https://bugs.launchpad.net/dulwich/+bug/963525

Changeset 1be736fb5ff6

Parent 60742876dd89

committed by Jelmer Vernooij

authored by milki

Changes to 3 files · Browse files at 1be736fb5ff6 Showing diff from parent 60742876dd89 Diff from another changeset...

Change 1 of 1 Show Entire File NEWS Stacked
 
6
7
8
 
 
 
 
9
10
11
 
6
7
8
9
10
11
12
13
14
15
@@ -6,6 +6,10 @@
    * Use indentation consistent with C Git in config files.   (#1031356, Curt Moore, Jelmer Vernooij) + + FEATURES + + * Add support for mergetags. (milki, #963525)    0.8.7 2012-11-27  
 
51
52
53
54
 
 
55
56
57
 
583
584
585
 
586
 
 
 
 
 
 
 
587
588
589
 
1038
1039
1040
1041
 
1042
1043
1044
1045
1046
 
1047
1048
1049
 
1059
1060
1061
 
1062
1063
1064
 
1078
1079
1080
 
 
 
 
 
 
1081
1082
1083
 
1132
1133
1134
 
 
 
 
 
 
 
 
 
 
1135
1136
1137
 
1185
1186
1187
 
 
 
1188
1189
1190
 
51
52
53
 
54
55
56
57
58
 
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
 
1047
1048
1049
 
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
 
1069
1070
1071
1072
1073
1074
1075
 
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
 
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
 
1212
1213
1214
1215
1216
1217
1218
1219
1220
@@ -51,7 +51,8 @@
 _AUTHOR_HEADER = "author"  _COMMITTER_HEADER = "committer"  _ENCODING_HEADER = "encoding" - +_MERGETAG_HEADER = "mergetag" +_INTERNAL_EXTRA_HEADER = "_extra_"    # Header fields for objects  _OBJECT_HEADER = "object" @@ -583,7 +584,15 @@
  field named None for the freeform tag/commit text.   """   f = StringIO(text) + extra = ""   for l in f: + if l.startswith(" "): + # Beginning space indicates embedded extra header + extra += l.lstrip(" ") + continue + if extra: + yield _INTERNAL_EXTRA_HEADER, extra + extra = ""   l = l.rstrip("\n")   if l == "":   # Empty line indicates end of headers @@ -1038,12 +1047,13 @@
  '_commit_timezone_neg_utc', '_commit_time',   '_author_time', '_author_timezone', '_commit_timezone',   '_author', '_committer', '_parents', '_extra', - '_encoding', '_tree', '_message') + '_encoding', '_tree', '_message', '_mergetag')     def __init__(self):   super(Commit, self).__init__()   self._parents = []   self._encoding = None + self._mergetag = []   self._extra = []   self._author_timezone_neg_utc = False   self._commit_timezone_neg_utc = False @@ -1059,6 +1069,7 @@
  self._parents = []   self._extra = []   self._author = None + mergetag = ""   for field, value in parse_commit(''.join(chunks)):   if field == _TREE_HEADER:   self._tree = value @@ -1078,6 +1089,12 @@
  self._encoding = value   elif field is None:   self._message = value + elif field == _MERGETAG_HEADER: + mergetag = "%s\n" % value + elif field == _INTERNAL_EXTRA_HEADER: + if mergetag: + self._mergetag.append(Tag.from_string(mergetag + value)) + mergetag = ""   else:   self._extra.append((field, value))   @@ -1132,6 +1149,16 @@
  self._commit_timezone_neg_utc)))   if self.encoding:   chunks.append("%s %s\n" % (_ENCODING_HEADER, self.encoding)) + for mergetag in self.mergetag: + mergetag_chunks = mergetag.as_raw_string().split("\n") + + chunks.append("%s %s\n" % (_MERGETAG_HEADER, mergetag_chunks[0])) + # Embedded extra header needs leading space + for chunk in mergetag_chunks[1:]: + chunks.append(" %s\n" % chunk) + + # No trailing empty line + chunks[-1] = chunks[-1].rstrip(" \n")   for k, v in self.extra:   if "\n" in k or "\n" in v:   raise AssertionError("newline in extra data: %r -> %r" % (k, v)) @@ -1185,6 +1212,9 @@
    encoding = serializable_property("encoding",   "Encoding of the commit message.") + + mergetag = serializable_property("mergetag", + "Associated signed tag.")      OBJECT_CLASSES = (
 
157
158
159
160
 
 
161
162
163
 
312
313
314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
316
317
 
157
158
159
 
160
161
162
163
164
 
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
@@ -157,7 +157,8 @@
    def test_read_tag_from_file(self):   t = self.get_tag(tag_sha) - self.assertEqual(t.object, (Commit, '51b668fd5bf7061b7d6fa525f88803e6cfadaa51')) + self.assertEqual(t.object, + (Commit, '51b668fd5bf7061b7d6fa525f88803e6cfadaa51'))   self.assertEqual(t.name,'signed')   self.assertEqual(t.tagger,'Ali Sabil <ali.sabil@gmail.com>')   self.assertEqual(t.tag_time, 1231203091) @@ -312,6 +313,115 @@
  d = Commit()   d._deserialize(c.as_raw_chunks())   self.assertEqual(c, d) + + def test_serialize_mergetag(self): + tag = make_object( + Tag, object=(Commit, "a38d6181ff27824c79fc7df825164a212eff6a3f"), + object_type_name="commit", + name="v2.6.22-rc7", + tag_time=1183319674, + tag_timezone=0, + tagger="Linus Torvalds <torvalds@woody.linux-foundation.org>", + message=default_message) + commit = self.make_commit(mergetag=[tag]) + + self.assertEqual("""tree d80c186a03f423a81b39df39dc87fd269736ca86 +parent ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd +parent 4cffe90e0a41ad3f5190079d7c8f036bde29cbe6 +author James Westby <jw+debian@jameswestby.net> 1174773719 +0000 +committer James Westby <jw+debian@jameswestby.net> 1174773719 +0000 +mergetag object a38d6181ff27824c79fc7df825164a212eff6a3f + type commit + tag v2.6.22-rc7 + tagger Linus Torvalds <torvalds@woody.linux-foundation.org> 1183319674 +0000 + + Linux 2.6.22-rc7 + -----BEGIN PGP SIGNATURE----- + Version: GnuPG v1.4.7 (GNU/Linux) + + iD8DBQBGiAaAF3YsRnbiHLsRAitMAKCiLboJkQECM/jpYsY3WPfvUgLXkACgg3ql + OK2XeQOiEeXtT76rV4t2WR4= + =ivrA + -----END PGP SIGNATURE----- + +Merge ../b +""", commit.as_raw_string()) + + def test_serialize_mergetags(self): + tag = make_object( + Tag, object=(Commit, "a38d6181ff27824c79fc7df825164a212eff6a3f"), + object_type_name="commit", + name="v2.6.22-rc7", + tag_time=1183319674, + tag_timezone=0, + tagger="Linus Torvalds <torvalds@woody.linux-foundation.org>", + message=default_message) + commit = self.make_commit(mergetag=[tag, tag]) + + self.assertEqual("""tree d80c186a03f423a81b39df39dc87fd269736ca86 +parent ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd +parent 4cffe90e0a41ad3f5190079d7c8f036bde29cbe6 +author James Westby <jw+debian@jameswestby.net> 1174773719 +0000 +committer James Westby <jw+debian@jameswestby.net> 1174773719 +0000 +mergetag object a38d6181ff27824c79fc7df825164a212eff6a3f + type commit + tag v2.6.22-rc7 + tagger Linus Torvalds <torvalds@woody.linux-foundation.org> 1183319674 +0000 + + Linux 2.6.22-rc7 + -----BEGIN PGP SIGNATURE----- + Version: GnuPG v1.4.7 (GNU/Linux) + + iD8DBQBGiAaAF3YsRnbiHLsRAitMAKCiLboJkQECM/jpYsY3WPfvUgLXkACgg3ql + OK2XeQOiEeXtT76rV4t2WR4= + =ivrA + -----END PGP SIGNATURE----- +mergetag object a38d6181ff27824c79fc7df825164a212eff6a3f + type commit + tag v2.6.22-rc7 + tagger Linus Torvalds <torvalds@woody.linux-foundation.org> 1183319674 +0000 + + Linux 2.6.22-rc7 + -----BEGIN PGP SIGNATURE----- + Version: GnuPG v1.4.7 (GNU/Linux) + + iD8DBQBGiAaAF3YsRnbiHLsRAitMAKCiLboJkQECM/jpYsY3WPfvUgLXkACgg3ql + OK2XeQOiEeXtT76rV4t2WR4= + =ivrA + -----END PGP SIGNATURE----- + +Merge ../b +""", commit.as_raw_string()) + + def test_deserialize_mergetag(self): + tag = make_object( + Tag, object=(Commit, "a38d6181ff27824c79fc7df825164a212eff6a3f"), + object_type_name="commit", + name="v2.6.22-rc7", + tag_time=1183319674, + tag_timezone=0, + tagger="Linus Torvalds <torvalds@woody.linux-foundation.org>", + message=default_message) + commit = self.make_commit(mergetag=[tag]) + + d = Commit() + d._deserialize(commit.as_raw_chunks()) + self.assertEquals(commit, d) + + def test_deserialize_mergetags(self): + tag = make_object( + Tag, object=(Commit, "a38d6181ff27824c79fc7df825164a212eff6a3f"), + object_type_name="commit", + name="v2.6.22-rc7", + tag_time=1183319674, + tag_timezone=0, + tagger="Linus Torvalds <torvalds@woody.linux-foundation.org>", + message=default_message) + commit = self.make_commit(mergetag=[tag, tag]) + + d = Commit() + d._deserialize(commit.as_raw_chunks()) + self.assertEquals(commit, d)      default_committer = 'James Westby <jw+debian@jameswestby.net> 1174773719 +0000'