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

Commitabaefc5

Browse files
committed
Implemented the serializable interface - by refactoring code
1 parentaf32b6e commitabaefc5

File tree

1 file changed

+47
-32
lines changed

1 file changed

+47
-32
lines changed

‎lib/git/index/base.py

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@
3535
Blob,
3636
Tree,
3737
Object,
38-
Commit
38+
Commit,
3939
)
4040

41+
fromgit.objects.utilsimportSerializable
42+
4143
fromgit.utilsimport (
4244
IndexFileSHA1Writer,
4345
LazyMixin,
@@ -48,7 +50,8 @@
4850

4951
__all__= ('IndexFile','CheckoutError' )
5052

51-
classIndexFile(LazyMixin,diff.Diffable):
53+
54+
classIndexFile(LazyMixin,diff.Diffable,Serializable):
5255
"""Implements an Index that can be manipulated using a native implementation in
5356
order to save git command function calls wherever possible.
5457
@@ -103,7 +106,7 @@ def _set_cache_(self, attr):
103106
# END memory mapping
104107

105108
try:
106-
self._read_from_stream(stream)
109+
self._deserialize(stream)
107110
finally:
108111
pass
109112
# make sure we close the stream ( possibly an mmap )
@@ -158,7 +161,9 @@ def _read_header(cls, stream):
158161
assertversionin (1,2)
159162
returnversion,num_entries
160163

161-
def_read_from_stream(self,stream):
164+
#{ Serializable Interface
165+
166+
def_deserialize(self,stream):
162167
""" Initialize this instance with index values read from the given stream """
163168
self.version,num_entries=self._read_header(stream)
164169
count=0
@@ -182,7 +187,43 @@ def _read_from_stream(self, stream):
182187

183188
# truncate the sha in the end as we will dynamically create it anyway
184189
self._extension_data=self._extension_data[:-20]
190+
191+
returnself
192+
193+
def_serialize(self,stream,ignore_tree_extension_data=False):
194+
195+
# wrap the stream into a compatible writer
196+
stream=IndexFileSHA1Writer(stream)
197+
198+
# header
199+
stream.write("DIRC")
200+
stream.write(pack(">LL",self.version,len(self.entries)))
185201

202+
# body
203+
entries_sorted=self.entries.values()
204+
entries_sorted.sort(key=lambdae: (e[3],e[2]))# use path/stage as sort key
205+
forentryinentries_sorted:
206+
self._write_cache_entry(stream,entry)
207+
# END for each entry
208+
209+
stored_ext_data=None
210+
ifignore_tree_extension_dataandself._extension_dataandself._extension_data[:4]=='TREE':
211+
stored_ext_data=self._extension_data
212+
self._extension_data=''
213+
# END extension data special handling
214+
215+
# write previously cached extensions data
216+
stream.write(self._extension_data)
217+
218+
ifstored_ext_data:
219+
self._extension_data=stored_ext_data
220+
# END reset previous ext data
221+
222+
# write the sha over the content
223+
stream.write_sha()
224+
returnself
225+
226+
#} END serializable interface
186227

187228
@classmethod
188229
def_write_cache_entry(cls,stream,entry):
@@ -229,34 +270,8 @@ def write(self, file_path = None, ignore_tree_extension_data=False):
229270
write_op=ConcurrentWriteOperation(file_pathorself._file_path)
230271
stream=write_op._begin_writing()
231272

232-
stream=IndexFileSHA1Writer(stream)
233-
234-
# header
235-
stream.write("DIRC")
236-
stream.write(pack(">LL",self.version,len(self.entries)))
237-
238-
# body
239-
entries_sorted=self.entries.values()
240-
entries_sorted.sort(key=lambdae: (e[3],e[2]))# use path/stage as sort key
241-
forentryinentries_sorted:
242-
self._write_cache_entry(stream,entry)
243-
# END for each entry
244-
245-
stored_ext_data=None
246-
ifignore_tree_extension_dataandself._extension_dataandself._extension_data[:4]=='TREE':
247-
stored_ext_data=self._extension_data
248-
self._extension_data=''
249-
# END extension data special handling
250-
251-
# write previously cached extensions data
252-
stream.write(self._extension_data)
253-
254-
ifstored_ext_data:
255-
self._extension_data=stored_ext_data
256-
# END reset previous ext data
257-
258-
# write the sha over the content
259-
stream.write_sha()
273+
self._serialize(stream,ignore_tree_extension_data)
274+
260275
write_op._end_writing()
261276

262277
# make sure we represent what we have written

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp