From 593de59e97716db7c44e803457a21f92b80aab1c Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Tue, 20 Jan 2009 14:07:17 -0600 Subject: Generate a cgitrc --- cgitrc.txt | 23 +++++++++++++++++++++++ gitsymlinks.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 cgitrc.txt diff --git a/cgitrc.txt b/cgitrc.txt new file mode 100644 index 0000000..16af81d --- /dev/null +++ b/cgitrc.txt @@ -0,0 +1,23 @@ +cache-size=1000 +css=/cgit-data/cgit.css +enable-index-links=1 +enable-log-filecount=1 +enable-log-linecount=1 +logo=/cgit-data/cgit.png +root-title=Fedora People's Git Repositories +snapshots=tar.gz tar.bz2 zip +{% for group_name, group_repos in repos %}\ +{% if group_repos %}\ + +repo.group=${group_name} +{% for repo in group_repos %}\ + +repo.url=${repo.url} +repo.path=${repo.path} +repo.owner=${repo.owner} +{% if repo.desc is not None %}\ +repo.desc=${repo.desc} +{% end %}\ +{% end %}\ +{% end %}\ +{% end %}\ diff --git a/gitsymlinks.py b/gitsymlinks.py index 3551d24..7fed1df 100644 --- a/gitsymlinks.py +++ b/gitsymlinks.py @@ -33,6 +33,10 @@ For safety this should be run as a non-root user. import os import pwd import sys +import genshi.template + +class Repo: + pass if os.getuid() == 0: sys.stderr.write('Do not run this as root!') @@ -53,6 +57,7 @@ for filename in os.listdir(symlink_dir): unneeded_symlinks = existing_symlinks.copy() needed_symlinks = {} +git_users = [] for (username, uid, gid, passwd, gecos, homedir, shell) in pwd.getpwall(): if uid < 100000: @@ -63,6 +68,8 @@ for (username, uid, gid, passwd, gecos, homedir, shell) in pwd.getpwall(): if not os.path.exists(src): continue + git_users.append((username, gecos, src)) + dst = os.path.join(symlink_dir, username) needed_symlinks[dst] = src @@ -93,3 +100,45 @@ for dst, src in needed_symlinks.iteritems(): for dst, src in unneeded_symlinks.iteritems(): sys.stdout.write("deleting symlink %s -> %s\n" % (dst, src)) os.unlink(dst) + +git_users.sort(lambda a, b: cmp(a[0], b[0])) +repos = [] + +for username, gecos, src in git_users: + gecos = gecos.decode('utf-8', 'replace') + username = username.decode('utf-8', 'replace') + + group_repos = [] + + filenames = os.listdir(src) + filenames.sort() + + for filename in filenames: + if not filename.endswith('.git'): + continue + + path = os.path.join(src, filename) + if not os.path.isdir(path): + continue + + repo = Repo() + + repo.url = u'%s/%s' % (username, filename.decode('utf-8', 'replace')) + repo.path = path + repo.owner = gecos + + try: + repo.desc = file(os.path.join(path, 'description')).readline().decode('utf-8', 'replace').strip() + if repo.desc == '' or repo.desc == u'Unnamed repository; edit this file to name it for gitweb.': + repo.desc = None + except IOError: + repo.desc = None + + group_repos.append(repo) + + repos.append((gecos, group_repos)) + +loader = genshi.template.TemplateLoader(search_path = ['.'], default_class = genshi.template.NewTextTemplate) +template = loader.load('cgitrc.txt') +stream = template.generate(repos = repos) +file('cgitrc', 'wb').write(stream.render()) -- cgit