#! /usr/bin/python ############################################################################## # # Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. # Yoshinori Okuji # # WARNING: This program as such is intended to be used by professional # programmers who take the whole responsability of assessing all potential # consequences resulting from its eventual inadequacies and bugs # End users who are looking for a ready-to-use solution with commercial # garantees and support are strongly adviced to contract a Free Software # Service Company # # This program is Free Software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ############################################################################## """Generate repository information on Business Templates. """ import tarfile import os import sys import tempfile import shutil import cgi property_list = ('title', 'version', 'revision', 'description', 'license', 'dependency_list', 'provision_list', 'copyright_list') def info(message): """Print a message to stdout. """ sys.stdout.write(message) def err(message): """Print a message to stderr. """ sys.stderr.write(message) def readBusinessTemplate(tar): """Read an archived Business Template. """ property_dict = {} for info in tar: name_list = info.name.split('/') if len(name_list) == 3 and name_list[1] == 'bt' and name_list[2] in property_list: f = tar.extractfile(info) try: text = f.read() if name_list[2].endswith('_list'): property_dict[name_list[2][:-5]] = text and text.split('\n') or [] else: property_dict[name_list[2]] = text finally: f.close() return property_dict def generateInformation(fd): os.write(fd, '\n') os.write(fd, '\n') for file in os.listdir(os.getcwd()): if file.endswith('.bt5'): info('Reading %s... ' % (file,)) try: tar = tarfile.open(file, 'r:gz') except tarfile.TarError: err('An error happened in %s; skipping\n' % (file,)) continue try: property_dict = readBusinessTemplate(tar) property_id_list = property_dict.keys() property_id_list.sort() os.write(fd, ' \n') info('done\n') finally: tar.close() os.write(fd, '\n') def main(): if len(sys.argv) < 2: dir_list = ['.'] else: dir_list = sys.argv[1:] cwd = os.getcwd() for d in dir_list: os.chdir(d) fd, path = tempfile.mkstemp() try: try: generateInformation(fd) finally: os.close(fd) except: os.remove(path) raise else: shutil.move(path, 'bt5list') os.chdir(cwd) main()