Mercurial > hgsubversion
comparison tests/test_push_autoprops.py @ 911:772280aed751
Honor SVN auto-props (solves issue #186)
The auto-props are read from the users subversion configuration file
(~/.subversion/config on posix). System-wide configuration files are not
taken into account.
The implementation completely bypasses the subversion bindings,
because the current bindings provide little support for this functionality.
author | Ronny Voelker <ronny.voelker@googlemail.com> |
---|---|
date | Sun, 01 Jan 2012 15:59:15 +0100 |
parents | |
children | d741f536f23a |
comparison
equal
deleted
inserted
replaced
910:312f36a425f0 | 911:772280aed751 |
---|---|
1 import subprocess | |
2 import sys | |
3 import unittest | |
4 import os | |
5 | |
6 import test_util | |
7 | |
8 from hgsubversion import svnwrap | |
9 | |
10 class PushAutoPropsTests(test_util.TestBase): | |
11 def setUp(self): | |
12 test_util.TestBase.setUp(self) | |
13 repo, self.repo_path = self.load_and_fetch('emptyrepo.svndump') | |
14 | |
15 def test_push_honors_svn_autoprops(self): | |
16 self.setup_svn_config( | |
17 "[miscellany]\n" | |
18 "enable-auto-props = yes\n" | |
19 "[auto-props]\n" | |
20 "*.py = test:prop=success\n") | |
21 changes = [('test.py', 'test.py', 'echo hallo')] | |
22 self.commitchanges(changes) | |
23 self.pushrevisions(True) | |
24 prop_val = test_util.svnpropget( | |
25 self.repo_path, "trunk/test.py", 'test:prop') | |
26 self.assertEqual('success', prop_val) | |
27 | |
28 | |
29 class AutoPropsConfigTest(test_util.TestBase): | |
30 def test_use_autoprops_for_matching_file_when_enabled(self): | |
31 self.setup_svn_config( | |
32 "[miscellany]\n" | |
33 "enable-auto-props = yes\n" | |
34 "[auto-props]\n" | |
35 "*.py = test:prop=success\n") | |
36 props = self.new_autoprops_config().properties('xxx/test.py') | |
37 self.assertEqual({ 'test:prop': 'success'}, props) | |
38 | |
39 def new_autoprops_config(self): | |
40 return svnwrap.AutoPropsConfig(self.config_dir) | |
41 | |
42 def test_ignore_nonexisting_config(self): | |
43 config_file = os.path.join(self.config_dir, 'config') | |
44 os.remove(config_file) | |
45 self.assertTrue(not os.path.exists(config_file)) | |
46 props = self.new_autoprops_config().properties('xxx/test.py') | |
47 self.assertEqual({}, props) | |
48 | |
49 def test_ignore_autoprops_when_file_doesnt_match(self): | |
50 self.setup_svn_config( | |
51 "[miscellany]\n" | |
52 "enable-auto-props = yes\n" | |
53 "[auto-props]\n" | |
54 "*.py = test:prop=success\n") | |
55 props = self.new_autoprops_config().properties('xxx/test.sh') | |
56 self.assertEqual({}, props) | |
57 | |
58 def test_ignore_autoprops_when_disabled(self): | |
59 self.setup_svn_config( | |
60 "[miscellany]\n" | |
61 "#enable-auto-props = yes\n" | |
62 "[auto-props]\n" | |
63 "*.py = test:prop=success\n") | |
64 props = self.new_autoprops_config().properties('xxx/test.py') | |
65 self.assertEqual({}, props) | |
66 | |
67 def test_combine_properties_of_multiple_matches(self): | |
68 self.setup_svn_config( | |
69 "[miscellany]\n" | |
70 "enable-auto-props = yes\n" | |
71 "[auto-props]\n" | |
72 "*.py = test:prop=success\n" | |
73 "test.* = test:prop2=success\n") | |
74 props = self.new_autoprops_config().properties('xxx/test.py') | |
75 self.assertEqual({ | |
76 'test:prop': 'success', 'test:prop2': 'success'}, props) | |
77 | |
78 | |
79 class ParseAutoPropsTests(test_util.TestBase): | |
80 def test_property_value_is_optional(self): | |
81 props = svnwrap.parse_autoprops("svn:executable") | |
82 self.assertEqual({'svn:executable': ''}, props) | |
83 props = svnwrap.parse_autoprops("svn:executable=") | |
84 self.assertEqual({'svn:executable': ''}, props) | |
85 | |
86 def test_property_value_may_be_quoted(self): | |
87 props = svnwrap.parse_autoprops("svn:eol-style=\" native \"") | |
88 self.assertEqual({'svn:eol-style': ' native '}, props) | |
89 props = svnwrap.parse_autoprops("svn:eol-style=' native '") | |
90 self.assertEqual({'svn:eol-style': ' native '}, props) | |
91 | |
92 def test_surrounding_whitespaces_are_ignored(self): | |
93 props = svnwrap.parse_autoprops(" svn:eol-style = native ") | |
94 self.assertEqual({'svn:eol-style': 'native'}, props) | |
95 | |
96 def test_multiple_properties_are_separated_by_semicolon(self): | |
97 props = svnwrap.parse_autoprops( | |
98 "svn:eol-style=native;svn:executable=true\n") | |
99 self.assertEqual({ | |
100 'svn:eol-style': 'native', | |
101 'svn:executable': 'true'}, | |
102 props) | |
103 | |
104 | |
105 def suite(): | |
106 return unittest.findTestCases(sys.modules[__name__]) | |
107 |