summaryrefslogtreecommitdiff
path: root/lib/git/repo.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/git/repo.py')
-rw-r--r--lib/git/repo.py53
1 files changed, 52 insertions, 1 deletions
diff --git a/lib/git/repo.py b/lib/git/repo.py
index cc4a6c6b..c53a4d9b 100644
--- a/lib/git/repo.py
+++ b/lib/git/repo.py
@@ -5,6 +5,7 @@
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
import os
+import sys
import re
import gzip
import StringIO
@@ -15,7 +16,7 @@ from cmd import Git
from actor import Actor
from refs import *
from objects import *
-
+from config import GitConfigParser
class Repo(object):
"""
@@ -30,6 +31,10 @@ class Repo(object):
re_hexsha_only = re.compile('^[0-9A-Fa-f]{40}$')
re_author_committer_start = re.compile(r'^(author|committer)')
re_tab_full_line = re.compile(r'^\t(.*)$')
+
+ # invariants
+ # represents the configuration level of a configuration file
+ config_level = ("system", "global", "repository")
def __init__(self, path=None):
"""
@@ -125,6 +130,52 @@ class Repo(object):
"""
return Tag.list_items(self)
+ def _get_config_path(self, config_level ):
+ # we do not support an absolute path of the gitconfig on windows ,
+ # use the global config instead
+ if sys.platform == "win32" and config_level == "system":
+ config_level = "global"
+
+ if config_level == "system":
+ return "/etc/gitconfig"
+ elif config_level == "global":
+ return os.path.expanduser("~/.gitconfig")
+ elif config_level == "repository":
+ return "%s/config" % self.git.git_dir
+
+ raise ValueError( "Invalid configuration level: %r" % config_level )
+
+ @property
+ def config_reader(self):
+ """
+ Returns
+ GitConfigParser allowing to read the full git configuration, but not to write it
+
+ The configuration will include values from the system, user and repository
+ configuration files.
+
+ NOTE: On windows, system configuration cannot currently be read as the path is
+ unknown, instead the global path will be used.
+ """
+ files = [ self._get_config_path(f) for f in self.config_level ]
+ return GitConfigParser(files, read_only=True)
+
+ def config_writer(self, config_level="repository"):
+ """
+ Returns
+ GitConfigParser allowing to write values of the specified configuration file level.
+ Config writers should be retrieved, used to change the configuration ,and written
+ right away as they will lock the configuration file in question and prevent other's
+ to write it.
+
+ ``config_level``
+ One of the following values
+ system = sytem wide configuration file
+ global = user level configuration file
+ repository = configuration file for this repostory only
+ """
+ return GitConfigParser(self._get_config_path(config_level), read_only = False)
+
def commit(self, rev=None):
"""
The Commit object for the specified revision