31
30
def __init__(self, gitdir, lockfiles):
32
31
self.bzrdir = gitdir
33
32
self.control_files = lockfiles
34
gitdirectory = urlutils.local_path_from_url(gitdir.transport.base)
35
self.git = GitModel(gitdirectory)
33
gitdirectory = gitdir.transport.local_abspath('.')
34
self._git = model.GitModel(gitdirectory)
36
35
self._revision_cache = {}
38
37
def _ancestor_revisions(self, revision_ids):
63
62
def get_revision(self, revision_id):
64
63
if revision_id in self._revision_cache:
65
64
return self._revision_cache[revision_id]
66
raw = self.git.rev_list([gitrevid_from_bzr(revision_id)], max_count=1,
65
raw = self._git.rev_list([gitrevid_from_bzr(revision_id)], max_count=1,
68
67
return self.parse_rev(raw)
70
69
def has_revision(self, revision_id):
112
111
result.inventory_sha1 = ""
113
112
result.timezone = timezone and int(timezone)
114
113
result.timestamp = float(timestamp)
115
result.committer = committer
114
result.committer = committer
116
115
result.properties['git-tree-id'] = tree_id
129
128
tree_id = revision.properties['git-tree-id']
130
129
type_map = {'blob': 'file', 'tree': 'directory' }
131
130
def get_inventory(tree_id, prefix):
132
for perms, type, obj_id, name in self.git.get_inventory(tree_id):
131
for perms, type, obj_id, name in self._git.get_inventory(tree_id):
133
132
full_path = prefix + name
134
133
if type == 'blob':
135
134
text_sha1 = obj_id
153
152
self.inventory = repository.get_inventory(revision_id)
155
154
def get_file(self, file_id):
155
return iterablefile.IterableFile(self.get_file_lines(file_id))
157
def get_file_lines(self, file_id):
156
158
obj_id = self.inventory[file_id].text_sha1
157
lines = self.repository.git.cat_file('blob', obj_id)
158
return iterablefile.IterableFile(lines)
159
return self.repository._git.cat_file('blob', obj_id)
160
161
def is_executable(self, file_id):
161
162
return self.inventory[file_id].executable
165
class GitInventory(object):
167
def __init__(self, revision_id):
169
self.root = GitEntry('', 'directory', revision_id)
170
self.entries[''] = self.root
172
def __getitem__(self, key):
173
return self.entries[key]
175
def iter_entries(self):
176
return iter(sorted(self.entries.items()))
178
def iter_entries_by_dir(self):
179
return self.iter_entries()
182
return len(self.entries)
185
class GitEntry(object):
187
def __init__(self, path, kind, revision, text_sha1=None, executable=False,
192
self.executable = executable
193
self.name = osutils.basename(path)
195
self.parent_id = None
197
self.parent_id = osutils.dirname(path)
198
self.revision = revision
199
self.symlink_target = None
200
self.text_sha1 = text_sha1
201
self.text_size = None
204
return "GitEntry(%r, %r, %r, %r)" % (self.path, self.kind,
205
self.revision, self.parent_id)