Create proxy object for libgit2 options
pygit2.settings proxies though the lower-level varargs option() via getters and setters which provide a more natural abstraction.
This commit is contained in:
@@ -35,6 +35,7 @@ from _pygit2 import *
|
|||||||
# High level API
|
# High level API
|
||||||
from .repository import Repository
|
from .repository import Repository
|
||||||
from .version import __version__
|
from .version import __version__
|
||||||
|
from .settings import Settings
|
||||||
|
|
||||||
|
|
||||||
def init_repository(path, bare=False):
|
def init_repository(path, bare=False):
|
||||||
@@ -75,3 +76,5 @@ def clone_repository(
|
|||||||
_pygit2.clone_repository(
|
_pygit2.clone_repository(
|
||||||
url, path, bare, ignore_cert_errors, remote_name, checkout_branch)
|
url, path, bare, ignore_cert_errors, remote_name, checkout_branch)
|
||||||
return Repository(path)
|
return Repository(path)
|
||||||
|
|
||||||
|
settings = Settings()
|
||||||
|
52
pygit2/settings.py
Normal file
52
pygit2/settings.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright 2010-2014 The pygit2 contributors
|
||||||
|
#
|
||||||
|
# This file is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License, version 2,
|
||||||
|
# as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# In addition to the permissions in the GNU General Public License,
|
||||||
|
# the authors give you unlimited permission to link the compiled
|
||||||
|
# version of this file into combinations with other programs,
|
||||||
|
# and to distribute those combinations without any restriction
|
||||||
|
# coming from the use of this file. (The General Public License
|
||||||
|
# restrictions do apply in other respects; for example, they cover
|
||||||
|
# modification of the file, and distribution when not linked into
|
||||||
|
# a combined executable.)
|
||||||
|
#
|
||||||
|
# This file is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
from _pygit2 import option
|
||||||
|
from _pygit2 import GIT_OPT_GET_SEARCH_PATH, GIT_OPT_SET_SEARCH_PATH
|
||||||
|
from _pygit2 import GIT_OPT_GET_MWINDOW_SIZE, GIT_OPT_SET_MWINDOW_SIZE
|
||||||
|
|
||||||
|
class SearchPathList(object):
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return option(GIT_OPT_GET_SEARCH_PATH, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
option(GIT_OPT_SET_SEARCH_PATH, key, value)
|
||||||
|
|
||||||
|
class Settings(object):
|
||||||
|
|
||||||
|
__slots__ = ['mwindow_size', 'search_path']
|
||||||
|
|
||||||
|
search_path = SearchPathList()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mwindow_size(self):
|
||||||
|
return option(GIT_OPT_GET_MWINDOW_SIZE)
|
||||||
|
|
||||||
|
@mwindow_size.setter
|
||||||
|
def mwindow_size(self, value):
|
||||||
|
option(GIT_OPT_SET_MWINDOW_SIZE, value)
|
@@ -44,6 +44,12 @@ class OptionsTest(utils.NoRepoTestCase):
|
|||||||
option(GIT_OPT_SET_MWINDOW_SIZE, new_size)
|
option(GIT_OPT_SET_MWINDOW_SIZE, new_size)
|
||||||
self.assertEqual(new_size, option(GIT_OPT_GET_MWINDOW_SIZE))
|
self.assertEqual(new_size, option(GIT_OPT_GET_MWINDOW_SIZE))
|
||||||
|
|
||||||
|
def test_mwindow_size_proxy(self):
|
||||||
|
new_size = 300 * 1024
|
||||||
|
pygit2.settings.mwindow_size = new_size
|
||||||
|
|
||||||
|
self.assertEqual(new_size, pygit2.settings.mwindow_size)
|
||||||
|
|
||||||
def test_search_path(self):
|
def test_search_path(self):
|
||||||
paths = [(GIT_CONFIG_LEVEL_GLOBAL, '/tmp/global'),
|
paths = [(GIT_CONFIG_LEVEL_GLOBAL, '/tmp/global'),
|
||||||
(GIT_CONFIG_LEVEL_XDG, '/tmp/xdg'),
|
(GIT_CONFIG_LEVEL_XDG, '/tmp/xdg'),
|
||||||
@@ -53,5 +59,14 @@ class OptionsTest(utils.NoRepoTestCase):
|
|||||||
option(GIT_OPT_SET_SEARCH_PATH, level, path)
|
option(GIT_OPT_SET_SEARCH_PATH, level, path)
|
||||||
self.assertEqual(path, option(GIT_OPT_GET_SEARCH_PATH, level))
|
self.assertEqual(path, option(GIT_OPT_GET_SEARCH_PATH, level))
|
||||||
|
|
||||||
|
def test_search_path_proxy(self):
|
||||||
|
paths = [(GIT_CONFIG_LEVEL_GLOBAL, '/tmp2/global'),
|
||||||
|
(GIT_CONFIG_LEVEL_XDG, '/tmp2/xdg'),
|
||||||
|
(GIT_CONFIG_LEVEL_SYSTEM, '/tmp2/etc')]
|
||||||
|
|
||||||
|
for level, path in paths:
|
||||||
|
pygit2.settings.search_path[level] = path
|
||||||
|
self.assertEqual(path, pygit2.settings.search_path[level])
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Reference in New Issue
Block a user