summaryrefslogtreecommitdiff
path: root/git/test/test_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'git/test/test_config.py')
-rw-r--r--git/test/test_config.py194
1 files changed, 109 insertions, 85 deletions
diff --git a/git/test/test_config.py b/git/test/test_config.py
index c0889c1a..32873f24 100644
--- a/git/test/test_config.py
+++ b/git/test/test_config.py
@@ -4,28 +4,45 @@
# This module is part of GitPython and is released under
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
-from git.test.lib import (
- TestCase,
- fixture_path,
- assert_equal,
-)
-from gitdb.test.lib import with_rw_directory
+import glob
+import io
+import os
+
from git import (
GitConfigParser
)
-from git.compat import (
- string_types,
-)
-import io
-import os
+from git.compat import string_types
from git.config import cp
+from git.test.lib import (
+ TestCase,
+ fixture_path,
+)
+from git.test.lib import with_rw_directory
+
+import os.path as osp
+from git.util import rmfile
+
+
+_tc_lock_fpaths = osp.join(osp.dirname(__file__), 'fixtures/*.lock')
+
+
+def _rm_lock_files():
+ for lfp in glob.glob(_tc_lock_fpaths):
+ rmfile(lfp)
class TestBase(TestCase):
+ def setUp(self):
+ _rm_lock_files()
+
+ def tearDown(self):
+ for lfp in glob.glob(_tc_lock_fpaths):
+ if osp.isfile(lfp):
+ raise AssertionError('Previous TC left hanging git-lock file: %s', lfp)
def _to_memcache(self, file_path):
- fp = open(file_path, "rb")
- sio = io.BytesIO(fp.read())
+ with open(file_path, "rb") as fp:
+ sio = io.BytesIO(fp.read())
sio.name = file_path
return sio
@@ -33,43 +50,43 @@ class TestBase(TestCase):
# writer must create the exact same file as the one read before
for filename in ("git_config", "git_config_global"):
file_obj = self._to_memcache(fixture_path(filename))
- w_config = GitConfigParser(file_obj, read_only=False)
- w_config.read() # enforce reading
- assert w_config._sections
- w_config.write() # enforce writing
-
- # we stripped lines when reading, so the results differ
- assert file_obj.getvalue()
- self.assertEqual(file_obj.getvalue(), self._to_memcache(fixture_path(filename)).getvalue())
-
- # creating an additional config writer must fail due to exclusive access
- self.failUnlessRaises(IOError, GitConfigParser, file_obj, read_only=False)
-
- # should still have a lock and be able to make changes
- assert w_config._lock._has_lock()
-
- # changes should be written right away
- sname = "my_section"
- oname = "mykey"
- val = "myvalue"
- w_config.add_section(sname)
- assert w_config.has_section(sname)
- w_config.set(sname, oname, val)
- assert w_config.has_option(sname, oname)
- assert w_config.get(sname, oname) == val
-
- sname_new = "new_section"
- oname_new = "new_key"
- ival = 10
- w_config.set_value(sname_new, oname_new, ival)
- assert w_config.get_value(sname_new, oname_new) == ival
-
- file_obj.seek(0)
- r_config = GitConfigParser(file_obj, read_only=True)
- assert r_config.has_section(sname)
- assert r_config.has_option(sname, oname)
- assert r_config.get(sname, oname) == val
- w_config.release()
+ with GitConfigParser(file_obj, read_only=False) as w_config:
+ w_config.read() # enforce reading
+ assert w_config._sections
+ w_config.write() # enforce writing
+
+ # we stripped lines when reading, so the results differ
+ assert file_obj.getvalue()
+ self.assertEqual(file_obj.getvalue(), self._to_memcache(fixture_path(filename)).getvalue())
+
+ # creating an additional config writer must fail due to exclusive access
+ with self.assertRaises(IOError):
+ GitConfigParser(file_obj, read_only=False)
+
+ # should still have a lock and be able to make changes
+ assert w_config._lock._has_lock()
+
+ # changes should be written right away
+ sname = "my_section"
+ oname = "mykey"
+ val = "myvalue"
+ w_config.add_section(sname)
+ assert w_config.has_section(sname)
+ w_config.set(sname, oname, val)
+ assert w_config.has_option(sname, oname)
+ assert w_config.get(sname, oname) == val
+
+ sname_new = "new_section"
+ oname_new = "new_key"
+ ival = 10
+ w_config.set_value(sname_new, oname_new, ival)
+ assert w_config.get_value(sname_new, oname_new) == ival
+
+ file_obj.seek(0)
+ r_config = GitConfigParser(file_obj, read_only=True)
+ assert r_config.has_section(sname)
+ assert r_config.has_option(sname, oname)
+ assert r_config.get(sname, oname) == val
# END for each filename
@with_rw_directory
@@ -82,30 +99,32 @@ class TestBase(TestCase):
with gcp as cw:
cw.set_value('include', 'some_other_value', 'b')
# ...so creating an additional config writer must fail due to exclusive access
- self.failUnlessRaises(IOError, GitConfigParser, fpl, read_only=False)
+ with self.assertRaises(IOError):
+ GitConfigParser(fpl, read_only=False)
# but work when the lock is removed
with GitConfigParser(fpl, read_only=False):
assert os.path.exists(fpl)
# reentering with an existing lock must fail due to exclusive access
- self.failUnlessRaises(IOError, gcp.__enter__)
+ with self.assertRaises(IOError):
+ gcp.__enter__()
def test_multi_line_config(self):
file_obj = self._to_memcache(fixture_path("git_config_with_comments"))
- config = GitConfigParser(file_obj, read_only=False)
- ev = "ruby -e '\n"
- ev += " system %(git), %(merge-file), %(--marker-size=%L), %(%A), %(%O), %(%B)\n"
- ev += " b = File.read(%(%A))\n"
- ev += " b.sub!(/^<+ .*\\nActiveRecord::Schema\\.define.:version => (\\d+). do\\n=+\\nActiveRecord::Schema\\."
- ev += "define.:version => (\\d+). do\\n>+ .*/) do\n"
- ev += " %(ActiveRecord::Schema.define(:version => #{[$1, $2].max}) do)\n"
- ev += " end\n"
- ev += " File.open(%(%A), %(w)) {|f| f.write(b)}\n"
- ev += " exit 1 if b.include?(%(<)*%L)'"
- assert_equal(config.get('merge "railsschema"', 'driver'), ev)
- assert_equal(config.get('alias', 'lg'),
- "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'"
- " --abbrev-commit --date=relative")
- assert len(config.sections()) == 23
+ with GitConfigParser(file_obj, read_only=False) as config:
+ ev = "ruby -e '\n"
+ ev += " system %(git), %(merge-file), %(--marker-size=%L), %(%A), %(%O), %(%B)\n"
+ ev += " b = File.read(%(%A))\n"
+ ev += " b.sub!(/^<+ .*\\nActiveRecord::Schema\\.define.:version => (\\d+). do\\n=+\\nActiveRecord::Schema\\." # noqa E501
+ ev += "define.:version => (\\d+). do\\n>+ .*/) do\n"
+ ev += " %(ActiveRecord::Schema.define(:version => #{[$1, $2].max}) do)\n"
+ ev += " end\n"
+ ev += " File.open(%(%A), %(w)) {|f| f.write(b)}\n"
+ ev += " exit 1 if b.include?(%(<)*%L)'"
+ self.assertEqual(config.get('merge "railsschema"', 'driver'), ev)
+ self.assertEqual(config.get('alias', 'lg'),
+ "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'"
+ " --abbrev-commit --date=relative")
+ self.assertEqual(len(config.sections()), 23)
def test_base(self):
path_repo = fixture_path("git_config")
@@ -129,10 +148,13 @@ class TestBase(TestCase):
assert "\n" not in val
# writing must fail
- self.failUnlessRaises(IOError, r_config.set, section, option, None)
- self.failUnlessRaises(IOError, r_config.remove_option, section, option)
+ with self.assertRaises(IOError):
+ r_config.set(section, option, None)
+ with self.assertRaises(IOError):
+ r_config.remove_option(section, option)
# END for each option
- self.failUnlessRaises(IOError, r_config.remove_section, section)
+ with self.assertRaises(IOError):
+ r_config.remove_section(section)
# END for each section
assert num_sections and num_options
assert r_config._is_initialized is True
@@ -142,7 +164,8 @@ class TestBase(TestCase):
assert r_config.get_value("doesnt", "exist", default) == default
# it raises if there is no default though
- self.failUnlessRaises(cp.NoSectionError, r_config.get_value, "doesnt", "exist")
+ with self.assertRaises(cp.NoSectionError):
+ r_config.get_value("doesnt", "exist")
@with_rw_directory
def test_config_include(self, rw_dir):
@@ -191,7 +214,8 @@ class TestBase(TestCase):
write_test_value(cw, tv)
with GitConfigParser(fpa, read_only=True) as cr:
- self.failUnlessRaises(cp.NoSectionError, check_test_value, cr, tv)
+ with self.assertRaises(cp.NoSectionError):
+ check_test_value(cr, tv)
# But can make it skip includes alltogether, and thus allow write-backs
with GitConfigParser(fpa, read_only=False, merge_includes=False) as cw:
@@ -202,22 +226,21 @@ class TestBase(TestCase):
def test_rename(self):
file_obj = self._to_memcache(fixture_path('git_config'))
- cw = GitConfigParser(file_obj, read_only=False, merge_includes=False)
-
- self.failUnlessRaises(ValueError, cw.rename_section, "doesntexist", "foo")
- self.failUnlessRaises(ValueError, cw.rename_section, "core", "include")
+ with GitConfigParser(file_obj, read_only=False, merge_includes=False) as cw:
+ with self.assertRaises(ValueError):
+ cw.rename_section("doesntexist", "foo")
+ with self.assertRaises(ValueError):
+ cw.rename_section("core", "include")
- nn = "bee"
- assert cw.rename_section('core', nn) is cw
- assert not cw.has_section('core')
- assert len(cw.items(nn)) == 4
- cw.release()
+ nn = "bee"
+ assert cw.rename_section('core', nn) is cw
+ assert not cw.has_section('core')
+ assert len(cw.items(nn)) == 4
def test_complex_aliases(self):
file_obj = self._to_memcache(fixture_path('.gitconfig'))
- w_config = GitConfigParser(file_obj, read_only=False)
- self.assertEqual(w_config.get('alias', 'rbi'), '"!g() { git rebase -i origin/${1:-master} ; } ; g"')
- w_config.release()
+ with GitConfigParser(file_obj, read_only=False) as w_config:
+ self.assertEqual(w_config.get('alias', 'rbi'), '"!g() { git rebase -i origin/${1:-master} ; } ; g"')
self.assertEqual(file_obj.getvalue(), self._to_memcache(fixture_path('.gitconfig')).getvalue())
def test_empty_config_value(self):
@@ -225,4 +248,5 @@ class TestBase(TestCase):
assert cr.get_value('core', 'filemode'), "Should read keys with values"
- self.failUnlessRaises(cp.NoOptionError, cr.get_value, 'color', 'ui')
+ with self.assertRaises(cp.NoOptionError):
+ cr.get_value('color', 'ui')