diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2012-03-08 22:01:51 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2012-03-08 22:01:51 +0200 |
commit | 9a1c148d6419ee4b1650c8266cc4ab922f935e7b (patch) | |
tree | d3f11da648bf1fba4453785ec1105477ef40d5ee /rhodecode/lib/vcs/backends/git/changeset.py | |
parent | f9e980f0c7e9196a96f3c5642071599cd1d6c1b7 (diff) |
temporarly fixed git _get_id_for_path problem in vcs.
Will iterate later while there's a nicer fix.
--HG--
branch : beta
Diffstat (limited to 'rhodecode/lib/vcs/backends/git/changeset.py')
-rw-r--r-- | rhodecode/lib/vcs/backends/git/changeset.py | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/rhodecode/lib/vcs/backends/git/changeset.py b/rhodecode/lib/vcs/backends/git/changeset.py index 33c46061..c527de7f 100644 --- a/rhodecode/lib/vcs/backends/git/changeset.py +++ b/rhodecode/lib/vcs/backends/git/changeset.py @@ -68,19 +68,24 @@ class GitChangeset(BaseChangeset): def branch(self): # TODO: Cache as we walk (id <-> branch name mapping) refs = self.repository._repo.get_refs() - heads = [(key[len('refs/heads/'):], val) for key, val in refs.items() - if key.startswith('refs/heads/')] - - for name, id in heads: + heads = {} + for key, val in refs.items(): + for ref_key in ['refs/heads/', 'refs/remotes/origin/']: + if key.startswith(ref_key): + n = key[len(ref_key):] + if n not in ['HEAD']: + heads[n] = val + + for name, id in heads.iteritems(): walker = self.repository._repo.object_store.get_graph_walker([id]) while True: - id = walker.next() - if not id: + id_ = walker.next() + if not id_: break - if id == self.id: + if id_ == self.id: return safe_unicode(name) raise ChangesetError("This should not happen... Have you manually " - "change id of the changeset?") + "change id of the changeset?") def _fix_path(self, path): """ @@ -92,6 +97,7 @@ class GitChangeset(BaseChangeset): return path def _get_id_for_path(self, path): + # FIXME: Please, spare a couple of minutes and make those codes cleaner; if not path in self._paths: path = path.strip('/') @@ -103,24 +109,23 @@ class GitChangeset(BaseChangeset): splitted = path.split('/') dirs, name = splitted[:-1], splitted[-1] curdir = '' + + # initially extract things from root dir + for item, stat, id in tree.iteritems(): + if curdir: + name = '/'.join((curdir, item)) + else: + name = item + self._paths[name] = id + self._stat_modes[name] = stat + for dir in dirs: if curdir: curdir = '/'.join((curdir, dir)) else: curdir = dir - #if curdir in self._paths: - ## This path have been already traversed - ## Update tree and continue - #tree = self.repository._repo[self._paths[curdir]] - #continue dir_id = None for item, stat, id in tree.iteritems(): - if curdir: - item_path = '/'.join((curdir, item)) - else: - item_path = item - self._paths[item_path] = id - self._stat_modes[item_path] = stat if dir == item: dir_id = id if dir_id: @@ -130,13 +135,16 @@ class GitChangeset(BaseChangeset): raise ChangesetError('%s is not a directory' % curdir) else: raise ChangesetError('%s have not been found' % curdir) - for item, stat, id in tree.iteritems(): - if curdir: - name = '/'.join((curdir, item)) - else: - name = item - self._paths[name] = id - self._stat_modes[name] = stat + + # cache all items from the given traversed tree + for item, stat, id in tree.iteritems(): + if curdir: + name = '/'.join((curdir, item)) + else: + name = item + self._paths[name] = id + self._stat_modes[name] = stat + if not path in self._paths: raise NodeDoesNotExistError("There is no file nor directory " "at the given path %r at revision %r" |