aboutsummaryrefslogtreecommitdiff
path: root/gitosis/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitosis/util.py')
-rw-r--r--gitosis/util.py55
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):