Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5b3b652

Browse files
committed
Greatly improved robustness of config parser - it can now take pretty much everything. Includes an updated config file which includes all the new additions
1 parentb306169 commit5b3b652

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

‎git/config.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class GitConfigParser(cp.RawConfigParser, object):
120120
# They must be compatible to the LockFile interface.
121121
# A suitable alternative would be the BlockingLockFile
122122
t_lock=LockFile
123+
re_comment=re.compile('^\s*[#;]')
123124

124125
#} END configuration
125126

@@ -211,16 +212,16 @@ def _read(self, fp, fpname):
211212
break
212213
lineno=lineno+1
213214
# comment or blank line?
214-
ifline.strip()==''orline[0]in'#;':
215+
ifline.strip()==''orself.re_comment.match(line):
215216
continue
216217
ifline.split(None,1)[0].lower()=='rem'andline[0]in"rR":
217218
# no leading whitespace
218219
continue
219220
else:
220221
# is it a section header?
221-
mo=self.SECTCRE.match(line)
222+
mo=self.SECTCRE.match(line.strip())
222223
ifmo:
223-
sectname=mo.group('header')
224+
sectname=mo.group('header').strip()
224225
ifsectnameinself._sections:
225226
cursect=self._sections[sectname]
226227
elifsectname==cp.DEFAULTSECT:
@@ -332,6 +333,10 @@ def write(self):
332333
close_fp=True
333334
else:
334335
fp.seek(0)
336+
# make sure we do not overwrite into an existing file
337+
ifhasattr(fp,'truncate'):
338+
fp.truncate()
339+
#END
335340
# END handle stream or file
336341

337342
# WRITE DATA

‎git/test/fixtures/git_config

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
[core]
22
repositoryformatversion = 0
33
filemode = true
4-
bare = false
5-
logallrefupdates = true
4+
bare = false
5+
logallrefupdates = true
66
[remote "origin"]
77
fetch = +refs/heads/*:refs/remotes/origin/*
88
url = git://gitorious.org/~byron/git-python/byrons-clone.git
99
pushurl = git@gitorious.org:~byron/git-python/byrons-clone.git
10-
[branch "master"]
10+
# a tab indented section header
11+
[branch "master"]
1112
remote = origin
1213
merge = refs/heads/master
13-
[remote "mainline"]
14+
# an space indented section header
15+
[remote "mainline"]
16+
# space indented comment
1417
url = git://gitorious.org/git-python/mainline.git
1518
fetch = +refs/heads/*:refs/remotes/mainline/*
19+
1620
[remote "MartinMarcher"]
21+
# tab indented comment
1722
url = git://gitorious.org/~martin.marcher/git-python/serverhorror.git
1823
fetch = +refs/heads/*:refs/remotes/MartinMarcher/*
19-
[gui]
24+
# can handle comments - the section name is supposed to be stripped
25+
[ gui ]
2026
geometry = 1316x820+219+243 207 192
2127
[branch "mainline_performance"]
2228
remote = mainline

‎git/test/test_config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ def test_read_write(self):
3030
w_config.read()# enforce reading
3131
assertw_config._sections
3232
w_config.write()# enforce writing
33-
assertfile_obj.getvalue()==file_obj_orig.getvalue()
33+
34+
# we stripped lines when reading, so the results differ
35+
assertfile_obj.getvalue()!=file_obj_orig.getvalue()
3436

3537
# creating an additional config writer must fail due to exclusive access
3638
self.failUnlessRaises(IOError,GitConfigParser,file_obj,read_only=False)
@@ -56,10 +58,10 @@ def test_read_write(self):
5658

5759
file_obj.seek(0)
5860
r_config=GitConfigParser(file_obj,read_only=True)
61+
#print file_obj.getvalue()
5962
assertr_config.has_section(sname)
6063
assertr_config.has_option(sname,oname)
6164
assertr_config.get(sname,oname)==val
62-
6365
# END for each filename
6466

6567
deftest_base(self):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp