bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 0.200.910
by Jelmer Vernooij update copyright years | 1 | # Copyright (C) 2009-2010 Jelmer Vernooij <jelmer@samba.org>
 | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 2 | #
 | 
| 3 | # This program is free software; you can redistribute it and/or modify
 | |
| 4 | # it under the terms of the GNU General Public License as published by
 | |
| 5 | # the Free Software Foundation; either version 2 of the License, or
 | |
| 6 | # (at your option) any later version.
 | |
| 7 | #
 | |
| 8 | # This program is distributed in the hope that it will be useful,
 | |
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 11 | # GNU General Public License for more details.
 | |
| 12 | #
 | |
| 13 | # You should have received a copy of the GNU General Public License
 | |
| 14 | # along with this program; if not, write to the Free Software
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 16 | ||
| 0.200.405
by Jelmer Vernooij More work on commit. | 17 | |
| 18 | """Support for committing in native Git working trees."""
 | |
| 19 | ||
| 20 | ||
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 21 | from dulwich.index import ( | 
| 22 | commit_tree, | |
| 23 |     )
 | |
| 0.200.700
by Jelmer Vernooij Support committing to a git branch from a bzr working tree. | 24 | import os | 
| 0.200.405
by Jelmer Vernooij More work on commit. | 25 | import stat | 
| 26 | ||
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 27 | from bzrlib.repository import ( | 
| 28 | CommitBuilder, | |
| 29 |     )
 | |
| 30 | ||
| 31 | from dulwich.objects import ( | |
| 0.200.521
by Jelmer Vernooij Abstract out kind mapping a bit, initial work on support tree-references. | 32 | S_IFGITLINK, | 
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 33 | Blob, | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 34 | Commit, | 
| 35 |     )
 | |
| 36 | ||
| 37 | ||
| 0.200.510
by Jelmer Vernooij Fill in old entries. | 38 | from bzrlib.plugins.git.mapping import ( | 
| 39 | entry_mode, | |
| 40 |     )
 | |
| 41 | ||
| 42 | ||
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 43 | class GitCommitBuilder(CommitBuilder): | 
| 44 | ||
| 45 | def __init__(self, *args, **kwargs): | |
| 46 | super(GitCommitBuilder, self).__init__(*args, **kwargs) | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 47 | self.store = self.repository._git.object_store | 
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 48 | self._blobs = {} | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 49 | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 50 | def record_entry_contents(self, ie, parent_invs, path, tree, | 
| 51 | content_summary): | |
| 0.200.668
by Jelmer Vernooij Fix some places where we were way too much memory for repositories with a large number of entries in the inventory and a large number of revisions. | 52 | raise NotImplementedError(self.record_entry_contents) | 
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 53 | |
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 54 | def record_delete(self, path, file_id): | 
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 55 | self._blobs[path] = None | 
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 56 | self._any_changes = True | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 57 | |
| 58 | def record_iter_changes(self, workingtree, basis_revid, iter_changes): | |
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 59 | index = getattr(workingtree, "index", None) | 
| 60 | if index is not None: | |
| 61 | def index_sha1(path, file_id): | |
| 62 | return index.get_sha1(path.encode("utf-8")) | |
| 63 | text_sha1 = link_sha1 = index_sha1 | |
| 64 | else: | |
| 65 | def link_sha1(path, file_id): | |
| 66 | blob = Blob() | |
| 67 | blob.data = workingtree.get_symlink_target(file_id) | |
| 68 | return blob.id | |
| 69 | def text_sha1(path, file_id): | |
| 70 | blob = Blob() | |
| 71 | blob.data = workingtree.get_file_text(file_id, path) | |
| 72 | return blob.id | |
| 0.200.668
by Jelmer Vernooij Fix some places where we were way too much memory for repositories with a large number of entries in the inventory and a large number of revisions. | 73 | for (file_id, path, changed_content, versioned, parent, name, kind, | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 74 | executable) in iter_changes: | 
| 75 | if kind[1] in ("directory",): | |
| 76 | if kind[0] in ("file", "symlink"): | |
| 77 | self.record_delete(path[0], file_id) | |
| 78 |                 continue
 | |
| 0.200.460
by Jelmer Vernooij Somewhat fix commit in git working trees. | 79 | if path[1] is None: | 
| 80 | self.record_delete(path[0], file_id) | |
| 81 |                 continue
 | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 82 | if kind[1] == "file": | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 83 | mode = stat.S_IFREG | 
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 84 | sha = text_sha1(path[1], file_id) | 
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 85 | elif kind[1] == "symlink": | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 86 | mode = stat.S_IFLNK | 
| 0.200.459
by Jelmer Vernooij Use new commit_tree function from dulwich. | 87 | sha = link_sha1(path[1], file_id) | 
| 0.200.521
by Jelmer Vernooij Abstract out kind mapping a bit, initial work on support tree-references. | 88 | elif kind[1] == "tree-reference": | 
| 89 | mode = S_IFGITLINK | |
| 90 | sha = "FIXME" | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 91 | else: | 
| 92 | raise AssertionError("Unknown kind %r" % kind[1]) | |
| 0.200.523
by Jelmer Vernooij Fix undefined error. | 93 | if executable[1]: | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 94 | mode |= 0111 | 
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 95 | self._any_changes = True | 
| 0.200.460
by Jelmer Vernooij Somewhat fix commit in git working trees. | 96 | self._blobs[path[1].encode("utf-8")] = (mode, sha) | 
| 0.200.700
by Jelmer Vernooij Support committing to a git branch from a bzr working tree. | 97 | file_sha1 = workingtree.get_file_sha1(file_id, path[1]) | 
| 98 | yield file_id, path[1], (file_sha1, os.lstat(workingtree.abspath(path[1]))) | |
| 0.200.510
by Jelmer Vernooij Fill in old entries. | 99 |         # Fill in entries that were not changed
 | 
| 100 | basis_tree = workingtree.basis_tree() | |
| 101 | assert basis_tree.get_revision_id() == basis_revid | |
| 102 | for path, entry in basis_tree.iter_entries_by_dir(): | |
| 103 | if entry.kind not in ("file", "symlink"): | |
| 104 |                 continue
 | |
| 105 | if not path in self._blobs: | |
| 106 | blob = Blob() | |
| 107 | if entry.kind == "symlink": | |
| 108 | blob.data = basis_tree.get_symlink_target(entry.file_id) | |
| 109 | else: | |
| 110 | blob.data = basis_tree.get_file_text(entry.file_id) | |
| 111 | self._blobs[path.encode("utf-8")] = (entry_mode(entry), blob.id) | |
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 112 | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 113 | def finish_inventory(self): | 
| 0.200.510
by Jelmer Vernooij Fill in old entries. | 114 |         # eliminate blobs that were removed
 | 
| 0.200.998
by Jelmer Vernooij Don't modify dictionary during iteration. | 115 | for path, entry in iter(self._blobs.items()): | 
| 0.200.510
by Jelmer Vernooij Fill in old entries. | 116 | if entry is None: | 
| 117 | del self._blobs[path] | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 118 | |
| 0.200.737
by Jelmer Vernooij Add helper function, always set encoding to utf-8. | 119 | def _iterblobs(self): | 
| 120 | return ((path, sha, mode) for (path, (mode, sha)) in self._blobs.iteritems()) | |
| 121 | ||
| 0.200.391
by Jelmer Vernooij Fix syntax error. | 122 | def commit(self, message): | 
| 0.200.387
by Jelmer Vernooij Initial work on supporting commit in git trees. | 123 | c = Commit() | 
| 0.200.650
by Jelmer Vernooij Use standard names for lookup functions. | 124 | c.parents = [self.repository.lookup_bzr_revision_id(revid)[0] for revid in self.parents] | 
| 0.200.737
by Jelmer Vernooij Add helper function, always set encoding to utf-8. | 125 | c.tree = commit_tree(self.store, self._iterblobs()) | 
| 0.200.416
by Jelmer Vernooij Use public properties to set git objects values. | 126 | c.committer = self._committer | 
| 127 | c.author = self._revprops.get('author', self._committer) | |
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 128 | c.commit_time = int(self._timestamp) | 
| 129 | c.author_time = int(self._timestamp) | |
| 0.200.416
by Jelmer Vernooij Use public properties to set git objects values. | 130 | c.commit_timezone = self._timezone | 
| 131 | c.author_timezone = self._timezone | |
| 0.200.737
by Jelmer Vernooij Add helper function, always set encoding to utf-8. | 132 | c.encoding = 'utf-8' | 
| 0.200.416
by Jelmer Vernooij Use public properties to set git objects values. | 133 | c.message = message.encode("utf-8") | 
| 0.200.509
by Jelmer Vernooij Fix a bunch of bugs in commit, partially works now. | 134 | self.store.add_object(c) | 
| 0.200.702
by Jelmer Vernooij properly commit write group | 135 | self._new_revision_id = self.repository.get_mapping().revision_id_foreign_to_bzr(c.id) | 
| 136 | self.repository.commit_write_group() | |
| 137 | return self._new_revision_id |