Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit31ad0a0

Browse files
committed
fix(commit): handle gpgsig properly
Assure that gpgsig is not initialized with Noneto allow the automatic deserialization to kick in.Fixes#500
1 parentdf5095c commit31ad0a0

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

‎git/objects/commit.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ def __init__(self, repo, binsha, tree=None, author=None, authored_date=None, aut
130130
self.parents=parents
131131
ifencodingisnotNone:
132132
self.encoding=encoding
133-
self.gpgsig=gpgsig
133+
ifgpgsigisnotNone:
134+
self.gpgsig=gpgsig
134135

135136
@classmethod
136137
def_get_intermediate_items(cls,commit):
@@ -425,10 +426,13 @@ def _serialize(self, stream):
425426
ifself.encoding!=self.default_encoding:
426427
write(("encoding %s\n"%self.encoding).encode('ascii'))
427428

428-
ifself.gpgsig:
429-
write(b"gpgsig")
430-
forsiglineinself.gpgsig.rstrip("\n").split("\n"):
431-
write((" "+sigline+"\n").encode('ascii'))
429+
try:
430+
ifself.__getattribute__('gpgsig')isnotNone:
431+
write(b"gpgsig")
432+
forsiglineinself.gpgsig.rstrip("\n").split("\n"):
433+
write((" "+sigline+"\n").encode('ascii'))
434+
exceptAttributeError:
435+
pass
432436

433437
write(b"\n")
434438

@@ -473,6 +477,7 @@ def _deserialize(self, stream):
473477
# now we can have the encoding line, or an empty line followed by the optional
474478
# message.
475479
self.encoding=self.default_encoding
480+
self.gpgsig=None
476481

477482
# read headers
478483
enc=next_line

‎git/test/test_commit.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
importos
3535
fromdatetimeimportdatetime
3636
fromgit.objects.utilimporttzoffset,utc
37+
frommockimportMock
3738

3839

3940
defassert_commit_serialization(rwrepo,commit_id,print_performance_info=False):
@@ -342,7 +343,9 @@ def test_gpgsig(self):
342343
cstream=BytesIO()
343344
cmt._serialize(cstream)
344345
assertre.search(r"^gpgsig <test\n dummy\n sig>$",cstream.getvalue().decode('ascii'),re.MULTILINE)
345-
346+
347+
self.assert_gpgsig_deserialization(cstream)
348+
346349
cstream.seek(0)
347350
cmt.gpgsig=None
348351
cmt._deserialize(cstream)
@@ -352,6 +355,31 @@ def test_gpgsig(self):
352355
cstream=BytesIO()
353356
cmt._serialize(cstream)
354357
assertnotre.search(r"^gpgsig ",cstream.getvalue().decode('ascii'),re.MULTILINE)
358+
359+
defassert_gpgsig_deserialization(self,cstream):
360+
assert'gpgsig'in'precondition: need gpgsig'
361+
362+
classRepoMock:
363+
def__init__(self,bytestr):
364+
self.bytestr=bytestr
365+
366+
@property
367+
defodb(self):
368+
classODBMock:
369+
def__init__(self,bytestr):
370+
self.bytestr=bytestr
371+
372+
defstream(self,*args):
373+
stream=Mock(spec_set=['read'],return_value=self.bytestr)
374+
stream.read.return_value=self.bytestr
375+
return ('binsha','typename','size',stream)
376+
377+
returnODBMock(self.bytestr)
378+
379+
repo_mock=RepoMock(cstream.getvalue())
380+
forfieldinCommit.__slots__:
381+
c=Commit(repo_mock,b'x'*20)
382+
assertgetattr(c,field)isnotNone
355383

356384
deftest_datetimes(self):
357385
commit=self.rorepo.commit('4251bd5')

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp