From a0848ecfc1bee1de93d47e15c9cc3ec49b5a6516 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Karl=20Hasselstr=C3=B6m?= Date: Sun, 27 Jan 2008 09:06:15 +0100 Subject: [PATCH] Create index and worktree objects just once MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Create the objects for a repository's default index, worktree, and index+worktree just once. Both for performance (though the gain is probably negligible), and for future-proofing if we ever add mutable state to those objects. And make them properties while we're at it. Signed-off-by: Karl Hasselström --- stgit/commands/coalesce.py | 2 +- stgit/commands/commit.py | 2 +- stgit/commands/goto.py | 2 +- stgit/lib/git.py | 34 ++++++++++++++++++++++++---------- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/stgit/commands/coalesce.py b/stgit/commands/coalesce.py index d2cba3e..291a537 100644 --- a/stgit/commands/coalesce.py +++ b/stgit/commands/coalesce.py @@ -118,5 +118,5 @@ def func(parser, options, args): + list(stack.patchorder.unapplied))) if len(patches) < 2: raise common.CmdException('Need at least two patches') - return _coalesce(stack, stack.repository.default_iw(), options.name, + return _coalesce(stack, stack.repository.default_iw, options.name, options.message, options.save_template, patches) diff --git a/stgit/commands/commit.py b/stgit/commands/commit.py index 1d741b3..bff94ce 100644 --- a/stgit/commands/commit.py +++ b/stgit/commands/commit.py @@ -68,7 +68,7 @@ def func(parser, options, args): if not patches: raise common.CmdException('No patches to commit') - iw = stack.repository.default_iw() + iw = stack.repository.default_iw trans = transaction.StackTransaction(stack, 'stg commit') try: common_prefix = 0 diff --git a/stgit/commands/goto.py b/stgit/commands/goto.py index 763a8af..fe13e49 100644 --- a/stgit/commands/goto.py +++ b/stgit/commands/goto.py @@ -35,7 +35,7 @@ def func(parser, options, args): patch = args[0] stack = directory.repository.current_stack - iw = stack.repository.default_iw() + iw = stack.repository.default_iw trans = transaction.StackTransaction(stack, 'stg goto') if patch in trans.applied: to_pop = set(trans.applied[trans.applied.index(patch)+1:]) diff --git a/stgit/lib/git.py b/stgit/lib/git.py index 118c9b2..2af1844 100644 --- a/stgit/lib/git.py +++ b/stgit/lib/git.py @@ -211,6 +211,9 @@ class Repository(RunWithEnv): self.__refs = Refs(self) self.__trees = ObjectCache(lambda sha1: Tree(sha1)) self.__commits = ObjectCache(lambda sha1: Commit(self, sha1)) + self.__default_index = None + self.__default_worktree = None + self.__default_iw = None env = property(lambda self: { 'GIT_DIR': self.__git_dir }) @classmethod def default(cls): @@ -220,21 +223,32 @@ class Repository(RunWithEnv): ).output_one_line()) except run.RunException: raise RepositoryException('Cannot find git repository') + @property def default_index(self): - return Index(self, (os.environ.get('GIT_INDEX_FILE', None) - or os.path.join(self.__git_dir, 'index'))) + if self.__default_index == None: + self.__default_index = Index( + self, (os.environ.get('GIT_INDEX_FILE', None) + or os.path.join(self.__git_dir, 'index'))) + return self.__default_index def temp_index(self): return Index(self, self.__git_dir) + @property def default_worktree(self): - path = os.environ.get('GIT_WORK_TREE', None) - if not path: - o = run.Run('git', 'rev-parse', '--show-cdup').output_lines() - o = o or ['.'] - assert len(o) == 1 - path = o[0] - return Worktree(path) + if self.__default_worktree == None: + path = os.environ.get('GIT_WORK_TREE', None) + if not path: + o = run.Run('git', 'rev-parse', '--show-cdup').output_lines() + o = o or ['.'] + assert len(o) == 1 + path = o[0] + self.__default_worktree = Worktree(path) + return self.__default_worktree + @property def default_iw(self): - return IndexAndWorktree(self.default_index(), self.default_worktree()) + if self.__default_iw == None: + self.__default_iw = IndexAndWorktree(self.default_index, + self.default_worktree) + return self.__default_iw directory = property(lambda self: self.__git_dir) refs = property(lambda self: self.__refs) def cat_object(self, sha1): -- 2.11.0