+# Persons caching
+__user = None
+__author = None
+__committer = None
+
+def user():
+ """Return the user information.
+ """
+ global __user
+ if not __user:
+ if config.has_option('user', 'name') \
+ and config.has_option('user', 'email'):
+ __user = Person(config.get('user', 'name'),
+ config.get('user', 'email'))
+ else:
+ raise GitException, 'unknown user details'
+ return __user;
+
+def author():
+ """Return the author information.
+ """
+ global __author
+ if not __author:
+ try:
+ # the environment variables take priority over config
+ try:
+ date = os.environ['GIT_AUTHOR_DATE']
+ except KeyError:
+ date = ''
+ __author = Person(os.environ['GIT_AUTHOR_NAME'],
+ os.environ['GIT_AUTHOR_EMAIL'],
+ date)
+ except KeyError:
+ __author = user()
+ return __author
+
+def committer():
+ """Return the author information.
+ """
+ global __committer
+ if not __committer:
+ try:
+ # the environment variables take priority over config
+ try:
+ date = os.environ['GIT_COMMITTER_DATE']
+ except KeyError:
+ date = ''
+ __committer = Person(os.environ['GIT_COMMITTER_NAME'],
+ os.environ['GIT_COMMITTER_EMAIL'],
+ date)
+ except KeyError:
+ __committer = user()
+ return __committer
+