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

Commit4375386

Browse files
committed
IndexFile.write: Added special handling flag allowing to skip TREE extension data, which becomes important if git-write-tree is supposed to be used
1 parentf96ee74 commit4375386

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

‎lib/git/index.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ def _write_cache_entry(cls, stream, entry):
416416
real_size= ((stream.tell()-beginoffset+8)&~7)
417417
stream.write("\0"* ((beginoffset+real_size)-stream.tell()))
418418

419-
defwrite(self,file_path=None):
419+
defwrite(self,file_path=None,ignore_tree_extension_data=False):
420420
"""
421421
Write the current state to our file path or to the given one
422422
@@ -426,6 +426,16 @@ def write(self, file_path = None):
426426
Please note that this will change the file_path of this index to
427427
the one you gave.
428428
429+
``ignore_tree_extension_data``
430+
If True, the TREE type extension data read in the index will not
431+
be written to disk. Use this if you have altered the index and
432+
would like to use git-write-tree afterwards to create a tree
433+
representing your written changes.
434+
If this data is present in the written index, git-write-tree
435+
will instead write the stored/cached tree.
436+
Alternatively, use IndexFile.write_tree() to handle this case
437+
automatically
438+
429439
Returns
430440
self
431441
@@ -448,9 +458,19 @@ def write(self, file_path = None):
448458
self._write_cache_entry(stream,entry)
449459
# END for each entry
450460

461+
stored_ext_data=None
462+
ifignore_tree_extension_dataandself._extension_dataandself._extension_data[:4]=='TREE':
463+
stored_ext_data=self._extension_data
464+
self._extension_data=''
465+
# END extension data special handling
466+
451467
# write previously cached extensions data
452468
stream.write(self._extension_data)
453469

470+
ifstored_ext_data:
471+
self._extension_data=stored_ext_data
472+
# END reset previous ext data
473+
454474
# write the sha over the content
455475
stream.write_sha()
456476
write_op._end_writing()
@@ -770,28 +790,14 @@ def write_tree(self, missing_ok=False):
770790
Returns
771791
Tree object representing this index
772792
"""
773-
# IMPORTANT: If we have TREE extension data, it will actually
774-
# ignore the index and write the stored tree instead. Hence we
775-
# temporarily forget about it, and in fact I don't know what git
776-
# uses it for
777-
stored_ext_data=None
778-
ifself._extension_dataandself._extension_data[:4]=='TREE':
779-
stored_ext_data=self._extension_data
780-
self._extension_data=''
781-
# END extension data special handling
782-
783793
index_path=self._index_path()
784794
tmp_index_mover=_TemporaryFileSwap(index_path)
785795

786-
self.write(index_path)
796+
self.write(index_path,ignore_tree_extension_data=True)
787797
tree_sha=self.repo.git.write_tree(missing_ok=missing_ok)
788798

789799
del(tmp_index_mover)# as soon as possible
790800

791-
ifstored_ext_data:
792-
self._extension_data=stored_ext_data
793-
# END reset stored exstension data
794-
795801
returnTree(self.repo,tree_sha,0,'')
796802

797803
def_process_diff_args(self,args):
@@ -1127,10 +1133,14 @@ def move(self, items, skip_errors=False, **kwargs):
11271133
@default_index
11281134
defcommit(self,message,parent_commits=None,head=True):
11291135
"""
1130-
Commit the current index, creating a commit object.
1136+
Commit the currentdefaultindex file, creating a commit object.
11311137
11321138
For more information on the arguments, see tree.commit.
11331139
1140+
``NOTE``:
1141+
If you have manually altered the .entries member of this instance,
1142+
don't forget to write() your changes to disk beforehand.
1143+
11341144
Returns
11351145
Commit object representing the new commit
11361146
"""

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp