diff options
Diffstat (limited to 'git/index/util.py')
-rw-r--r-- | git/index/util.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/git/index/util.py b/git/index/util.py index 59f8d591..064a22ce 100644 --- a/git/index/util.py +++ b/git/index/util.py @@ -3,9 +3,9 @@ import struct import tempfile import os -__all__ = ( 'TemporaryFileSwap', 'post_clear_cache', 'default_index', 'git_working_dir' ) +__all__ = ('TemporaryFileSwap', 'post_clear_cache', 'default_index', 'git_working_dir') -#{ Aliases +#{ Aliases pack = struct.pack unpack = struct.unpack @@ -13,13 +13,14 @@ unpack = struct.unpack #} END aliases class TemporaryFileSwap(object): + """Utility class moving a file to a temporary location within the same directory and moving it back on to where on object deletion.""" __slots__ = ("file_path", "tmp_file_path") def __init__(self, file_path): self.file_path = file_path - self.tmp_file_path = self.file_path + tempfile.mktemp('','','') + self.tmp_file_path = self.file_path + tempfile.mktemp('', '', '') # it may be that the source does not exist try: os.rename(self.file_path, self.tmp_file_path) @@ -34,7 +35,7 @@ class TemporaryFileSwap(object): # END temp file exists -#{ Decorators +#{ Decorators def post_clear_cache(func): """Decorator for functions that alter the index using the git command. This would @@ -45,6 +46,7 @@ def post_clear_cache(func): This decorator will not be required once all functions are implemented natively which in fact is possible, but probably not feasible performance wise. """ + def post_clear_cache_if_not_raised(self, *args, **kwargs): rval = func(self, *args, **kwargs) self._delete_entries_cache() @@ -54,22 +56,26 @@ def post_clear_cache(func): post_clear_cache_if_not_raised.__name__ = func.__name__ return post_clear_cache_if_not_raised + def default_index(func): """Decorator assuring the wrapped method may only run if we are the default repository index. This is as we rely on git commands that operate on that index only. """ + def check_default_index(self, *args, **kwargs): if self._file_path != self._index_path(): - raise AssertionError( "Cannot call %r on indices that do not represent the default git index" % func.__name__ ) + raise AssertionError("Cannot call %r on indices that do not represent the default git index" % func.__name__) return func(self, *args, **kwargs) # END wrpaper method check_default_index.__name__ = func.__name__ return check_default_index + def git_working_dir(func): - """Decorator which changes the current working dir to the one of the git + """Decorator which changes the current working dir to the one of the git repository in order to assure relative paths are handled correctly""" + def set_git_working_dir(self, *args, **kwargs): cur_wd = os.getcwd() os.chdir(self.repo.working_tree_dir) @@ -79,7 +85,7 @@ def git_working_dir(func): os.chdir(cur_wd) # END handle working dir # END wrapper - + set_git_working_dir.__name__ = func.__name__ return set_git_working_dir |