Refactor gitosis-gitweb to move temp file handling out of main.

This commit is contained in:
Tommi Virtanen 2007-09-01 18:20:16 -07:00
parent 0dbee1fadd
commit a786d30f5a
2 changed files with 29 additions and 17 deletions

View file

@ -37,7 +37,7 @@ def _escape_filename(s):
s = s.replace('"', '\\"') s = s.replace('"', '\\"')
return s return s
def generate(config, fp): def generate_fp(config, fp):
""" """
Generate a config file and projects list for ``gitweb``. Generate a config file and projects list for ``gitweb``.
@ -94,6 +94,26 @@ def generate(config, fp):
line = ' '.join([urllib.quote_plus(s) for s in response]) line = ' '.join([urllib.quote_plus(s) for s in response])
print >>fp, line print >>fp, line
def generate(config, path):
"""
Generate a config file and projects list for ``gitweb``.
:param config: configuration to read projects from
:type config: RawConfigParser
:param path: path to write projects list to
:type path: str
"""
tmp = '%s.%d.tmp' % (path, os.getpid())
f = file(tmp, 'w')
try:
generate_fp(config=config, fp=f)
finally:
f.close()
os.rename(tmp, path)
def _getParser(): def _getParser():
import optparse import optparse
parser = optparse.OptionParser( parser = optparse.OptionParser(
@ -120,12 +140,4 @@ def main():
cfg = RawConfigParser() cfg = RawConfigParser()
cfg.read(options.config) cfg.read(options.config)
tmp = '%s.%d.tmp' % (path, os.getpid()) generate(config=cfg, path=path)
f = file(tmp, 'w')
try:
generate(config=cfg, fp=f)
finally:
f.close()
os.rename(tmp, path)

View file

@ -10,7 +10,7 @@ from gitosis.test.util import mkdir, maketemp
def test_projectsList_empty(): def test_projectsList_empty():
cfg = RawConfigParser() cfg = RawConfigParser()
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -20,7 +20,7 @@ def test_projectsList_repoDenied():
cfg = RawConfigParser() cfg = RawConfigParser()
cfg.add_section('repo foo/bar') cfg.add_section('repo foo/bar')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -31,7 +31,7 @@ def test_projectsList_noOwner():
cfg.add_section('repo foo/bar') cfg.add_section('repo foo/bar')
cfg.set('repo foo/bar', 'gitweb', 'yes') cfg.set('repo foo/bar', 'gitweb', 'yes')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -44,7 +44,7 @@ def test_projectsList_haveOwner():
cfg.set('repo foo/bar', 'gitweb', 'yes') cfg.set('repo foo/bar', 'gitweb', 'yes')
cfg.set('repo foo/bar', 'owner', 'John Doe') cfg.set('repo foo/bar', 'owner', 'John Doe')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -60,7 +60,7 @@ def test_projectsList_multiple():
cfg.add_section('repo quux') cfg.add_section('repo quux')
cfg.set('repo quux', 'gitweb', 'yes') cfg.set('repo quux', 'gitweb', 'yes')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -81,7 +81,7 @@ def test_projectsList_multiple_globalGitwebYes():
# this is still hidden # this is still hidden
cfg.set('repo thud', 'gitweb', 'no') cfg.set('repo thud', 'gitweb', 'no')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\
@ -99,7 +99,7 @@ def test_projectsList_reallyEndsWithGit():
cfg.add_section('repo foo') cfg.add_section('repo foo')
cfg.set('repo foo', 'gitweb', 'yes') cfg.set('repo foo', 'gitweb', 'yes')
got = StringIO() got = StringIO()
gitweb.generate( gitweb.generate_fp(
config=cfg, config=cfg,
fp=got) fp=got)
eq(got.getvalue(), '''\ eq(got.getvalue(), '''\