| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -562,7 +562,48 @@ def _preprocess_add_items(self, items): | |||
| 562 | 562 | # END for each item | |
| 563 | 563 | return (paths, entries) | |
| 564 | 564 | ||
| 565 | + | ||
| 566 | + @git_working_dir | ||
| 567 | + def _store_path(self, filepath, fprogress): | ||
| 568 | + """Store file at filepath in the database and return the base index entry""" | ||
| 569 | + st = os.lstat(filepath) # handles non-symlinks as well | ||
| 570 | + stream = None | ||
| 571 | + if S_ISLNK(st.st_mode): | ||
| 572 | + stream = StringIO(os.readlink(filepath)) | ||
| 573 | + else: | ||
| 574 | + stream = open(filepath, 'rb') | ||
| 575 | + # END handle stream | ||
| 576 | + fprogress(filepath, False, filepath) | ||
| 577 | + istream = self.repo.odb.store(IStream(Blob.type, st.st_size, stream)) | ||
| 578 | + fprogress(filepath, True, filepath) | ||
| 579 | + return BaseIndexEntry((stat_mode_to_index_mode(st.st_mode), | ||
| 580 | + istream.binsha, 0, to_native_path_linux(filepath))) | ||
| 581 | + | ||
| 565 | 582 | @git_working_dir | |
| 583 | + def _entries_for_paths(self, paths, path_rewriter, fprogress): | ||
| 584 | + entries_added = list() | ||
| 585 | + if path_rewriter: | ||
| 586 | + for path in paths: | ||
| 587 | + abspath = os.path.abspath(path) | ||
| 588 | + gitrelative_path = abspath[len(self.repo.working_tree_dir)+1:] | ||
| 589 | + blob = Blob(self.repo, Blob.NULL_BIN_SHA, | ||
| 590 | + stat_mode_to_index_mode(os.stat(abspath).st_mode), | ||
| 591 | + to_native_path_linux(gitrelative_path)) | ||
| 592 | + entries.append(BaseIndexEntry.from_blob(blob)) | ||
| 593 | + # END for each path | ||
| 594 | + del(paths[:]) | ||
| 595 | + # END rewrite paths | ||
| 596 | + | ||
| 597 | + # HANDLE PATHS | ||
| 598 | + assert len(entries_added) == 0 | ||
| 599 | + added_files = list() | ||
| 600 | + for filepath in self._iter_expand_paths(paths): | ||
| 601 | + entries_added.append(self._store_path(filepath, fprogress)) | ||
| 602 | + # END for each filepath | ||
| 603 | + # END path handling | ||
| 604 | + return entries_added | ||
| 605 | + | ||
| 606 | + | ||
| 566 | 607 | def add(self, items, force=True, fprogress=lambda *args: None, path_rewriter=None, | |
| 567 | 608 | write=True): | |
| 568 | 609 | """Add files from the working tree, specific blobs or BaseIndexEntries | |
@@ -651,47 +692,10 @@ def add(self, items, force=True, fprogress=lambda *args: None, path_rewriter=Non | |||
| 651 | 692 | # sort the entries into strings and Entries, Blobs are converted to entries | |
| 652 | 693 | # automatically | |
| 653 | 694 | # paths can be git-added, for everything else we use git-update-index | |
| 654 | - entries_added = list() | ||
| 655 | 695 | paths, entries = self._preprocess_add_items(items) | |
| 656 | - if paths and path_rewriter: | ||
| 657 | - for path in paths: | ||
| 658 | - abspath = os.path.abspath(path) | ||
| 659 | - gitrelative_path = abspath[len(self.repo.working_tree_dir)+1:] | ||
| 660 | - blob = Blob(self.repo, Blob.NULL_BIN_SHA, | ||
| 661 | - stat_mode_to_index_mode(os.stat(abspath).st_mode), | ||
| 662 | - to_native_path_linux(gitrelative_path)) | ||
| 663 | - entries.append(BaseIndexEntry.from_blob(blob)) | ||
| 664 | - # END for each path | ||
| 665 | - del(paths[:]) | ||
| 666 | - # END rewrite paths | ||
| 667 | - | ||
| 668 | - | ||
| 669 | - def store_path(filepath): | ||
| 670 | - """Store file at filepath in the database and return the base index entry""" | ||
| 671 | - st = os.lstat(filepath) # handles non-symlinks as well | ||
| 672 | - stream = None | ||
| 673 | - if S_ISLNK(st.st_mode): | ||
| 674 | - stream = StringIO(os.readlink(filepath)) | ||
| 675 | - else: | ||
| 676 | - stream = open(filepath, 'rb') | ||
| 677 | - # END handle stream | ||
| 678 | - fprogress(filepath, False, filepath) | ||
| 679 | - istream = self.repo.odb.store(IStream(Blob.type, st.st_size, stream)) | ||
| 680 | - fprogress(filepath, True, filepath) | ||
| 681 | - return BaseIndexEntry((stat_mode_to_index_mode(st.st_mode), | ||
| 682 | - istream.binsha, 0, to_native_path_linux(filepath))) | ||
| 683 | - # END utility method | ||
| 684 | - | ||
| 685 | - | ||
| 686 | - # HANDLE PATHS | ||
| 696 | + entries_added = list() | ||
| 687 | 697 | if paths: | |
| 688 | - assert len(entries_added) == 0 | ||
| 689 | - added_files = list() | ||
| 690 | - for filepath in self._iter_expand_paths(paths): | ||
| 691 | - entries_added.append(store_path(filepath)) | ||
| 692 | - # END for each filepath | ||
| 693 | - # END path handling | ||
| 694 | - | ||
| 698 | + entries_added.extend(self._entries_for_paths(paths, path_rewriter, fprogress)) | ||
| 695 | 699 | ||
| 696 | 700 | # HANDLE ENTRIES | |
| 697 | 701 | if entries: | |
@@ -706,7 +710,7 @@ def store_path(filepath): | |||
| 706 | 710 | if null_entries_indices: | |
| 707 | 711 | for ei in null_entries_indices: | |
| 708 | 712 | null_entry = entries[ei] | |
| 709 | - new_entry = store_path(null_entry.path) | ||
| 713 | + new_entry = self._store_path(null_entry.path, fprogress) | ||
| 710 | 714 | ||
| 711 | 715 | # update null entry | |
| 712 | 716 | entries[ei] = BaseIndexEntry((null_entry.mode, new_entry.binsha, null_entry.stage, null_entry.path)) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments