diff options
Diffstat (limited to 'gitosis/util.py')
-rw-r--r-- | gitosis/util.py | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/gitosis/util.py b/gitosis/util.py index 479b2e9..248cb7b 100644 --- a/gitosis/util.py +++ b/gitosis/util.py @@ -1,17 +1,57 @@ +""" +Some utility functions for Gitosis +""" import errno import os +import shutil from ConfigParser import NoSectionError, NoOptionError -def mkdir(*a, **kw): +def mkdir(newdir, mode=0777): + """ + Like os.mkdir, but already existing directories do not raise an error. + """ + _sysfunc(os.mkdir, [errno.EEXIST], newdir, mode) + +def unlink(filename): + """ + Like os.unlink, but non-existing files do not raise an error. + """ + _sysfunc(os.unlink, [errno.ENOENT], filename) + +def rmtree(directory): + """ + Like shutil.rmtree, but non-existing trees do not raise an error. + """ + _sysfunc(shutil.rmtree, [errno.ENOENT], directory) + +def _sysfunc(func, ignore, *args, **kwds): + """ + Run the specified function, ignoring the specified errno if raised, and + raising other errors. + """ + # We use * and ** correctly here + # pylint: disable-msg=W0142 + if not ignore: # pragma: no cover + ignore = [] try: - os.mkdir(*a, **kw) - except OSError, e: - if e.errno == errno.EEXIST: + func(*args, **kwds) + except OSError, ex: + if ex.errno in ignore: pass else: raise def getRepositoryDir(config): + """ + Find the location of the Git repositories. + + Tries: + - ``gitosis.repositories`` configuration key (see note) + - ``~/repositories`` + + Note: If the configuration key is a relative path, it is appended onto + the homedir for the gitosis user. + """ repositories = os.path.expanduser('~') try: path = config.get('gitosis', 'repositories') @@ -22,6 +62,13 @@ def getRepositoryDir(config): return repositories def getGeneratedFilesDir(config): + """ + Find the location for the generated Gitosis files. + + Tries: + - ``gitosis.generate-files-in`` configuration key + - ``~/gitosis`` + """ try: generated = config.get('gitosis', 'generate-files-in') except (NoSectionError, NoOptionError): |