[Erp5-report] r42846 rafael - in /erp5/trunk/utils/erp5.utils.dists: ./ src/ src/erp5/ src/...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Jan 31 20:07:54 CET 2011
Author: rafael
Date: Mon Jan 31 20:07:53 2011
New Revision: 42846
URL: http://svn.erp5.org?rev=42846&view=rev
Log:
Initial Commit.
Added:
erp5/trunk/utils/erp5.utils.dists/CHANGES.txt (with props)
erp5/trunk/utils/erp5.utils.dists/README.txt (with props)
erp5/trunk/utils/erp5.utils.dists/setup.py
erp5/trunk/utils/erp5.utils.dists/src/
erp5/trunk/utils/erp5.utils.dists/src/erp5/
erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py
erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py
Added: erp5/trunk/utils/erp5.utils.dists/CHANGES.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/CHANGES.txt?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/CHANGES.txt (added)
+++ erp5/trunk/utils/erp5.utils.dists/CHANGES.txt [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,8 @@
+ChangeLog
+===============
+
+0.0.1 (unreleased)
+---------------------
+
+- Initial version
+ [Rafael Monnerat]
Propchange: erp5/trunk/utils/erp5.utils.dists/CHANGES.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: erp5/trunk/utils/erp5.utils.dists/README.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/README.txt?rev=42846&view=auto
==============================================================================
(empty)
Propchange: erp5/trunk/utils/erp5.utils.dists/README.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: erp5/trunk/utils/erp5.utils.dists/setup.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/setup.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/setup.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/setup.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,40 @@
+from setuptools import setup, find_packages
+from setuptools import setup, find_packages
+import os
+
+name = "erp5.utils.dists"
+version = '0.0.1'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=( read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ author = 'Rafael Monnerat',
+ author_email = 'rafael at nexedi.com',
+ description =
+ "",
+ long_description = long_description,
+ license = "ZPL 2.1",
+ keywords = "erp5 bt5 distribute",
+ classifiers = [
+ "License :: OSI Approved :: Zope Public License",
+ "Framework :: Buildout",
+ ],
+
+ package_dir = {'': 'src'},
+ packages = find_packages('src'),
+ namespace_packages = ['erp5', 'erp5.utils'],
+ include_package_data = True,
+ install_requires = [],
+ entry_points = {
+ 'console_scripts' : ['bt5_repository_builder = erp5.utils.dists:builder',
+ 'bt5_genbt5list = erp5.utils.dists:genlist']
+ }
+ )
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,8 @@
+from repository import main as repository_builder
+from genbt5list import main as list_builder
+
+def builder():
+ repository_builder()
+
+def genlist():
+ list_builder()
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,47 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# 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.
+#
+##############################################################################
+import tarfile
+import os
+
+def compress_business_template(destination, source):
+ t = tarfile.open(destination, "w:gz")
+ def exclude_svn(filemane):
+ return ".svn" in filemane
+ t.add(source, exclude=exclude_svn)
+ t.close()
+
+def compress_business_template_list(destination, source):
+ """ Compress all business templates from source directory
+ into destination directory
+ """
+ current_dir = os.getcwd()
+ os.chdir(source)
+ for bt in os.listdir("."):
+ if bt != ".svn" and os.path.isdir(bt):
+ compress_business_template("%s/%s.bt5" % (destination,bt), bt)
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,163 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
+# Yoshinori Okuji <yo at nexedi.com>
+#
+# 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 os.path
+import sys
+import tempfile
+import shutil
+import cgi
+
+property_list = '''
+title
+version
+revision
+description
+license
+dependency_list
+provision_list
+copyright_list
+'''.strip().splitlines()
+
+bt_title_path = os.path.join('bt', 'title')
+
+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 readProperty(property_dict, property_name, property_file):
+ try:
+ text = property_file.read()
+ if property_name.endswith('_list'):
+ property_dict[property_name[:-5]] = text and text.split('\n') or []
+ else:
+ property_dict[property_name] = text
+ finally:
+ property_file.close()
+
+def readBusinessTemplate(tar):
+ """Read an archived Business Template info.
+ """
+ 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:
+ property_file = tar.extractfile(info)
+ property_name = name_list[2]
+ readProperty(property_dict, property_name, property_file)
+
+ return property_dict
+
+def readBusinessTemplateDirectory(dir):
+ """Read Business Template Directory info.
+ """
+ property_dict = {}
+ for property_name in property_list:
+ filename = os.path.join(dir, 'bt', property_name)
+ if os.path.isfile(filename):
+ property_file = open(filename, 'rb')
+ readProperty(property_dict, property_name, property_file)
+
+ return property_dict
+
+def generateInformation(fd):
+ os.write(fd, '<?xml version="1.0"?>\n')
+ os.write(fd, '<repository>\n')
+
+ for file in sorted(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)
+ finally:
+ tar.close()
+ elif os.path.isfile(os.path.join(file, bt_title_path)):
+ info('Reading Directory %s... ' % (file,))
+ property_dict = readBusinessTemplateDirectory(file)
+ else:
+ continue
+ property_id_list = property_dict.keys()
+ property_id_list.sort()
+ os.write(fd, ' <template id="%s">\n' % (file,))
+ for property_id in property_id_list:
+ property_value = property_dict[property_id]
+ if type(property_value) == type(''):
+ os.write(fd, ' <%s>%s</%s>\n' % (
+ property_id, cgi.escape(property_value), property_id))
+ else:
+ for value in property_value:
+ os.write(fd, ' <%s>%s</%s>\n' % (
+ property_id, cgi.escape(value), property_id))
+ os.write(fd, ' </template>\n')
+ info('done\n')
+ os.write(fd, '</repository>\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')
+ cur_umask = os.umask(0666)
+ os.chmod('bt5list', 0666 & ~cur_umask)
+ os.umask(cur_umask)
+ os.chdir(cwd)
+
+if __name__ == "__main__":
+ main()
Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,117 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# 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.
+#
+##############################################################################
+from optparse import OptionParser
+try:
+ from hashlib import md5
+except ImportError:
+ from md5 import new as md5
+import os
+import shutil
+import genbt5list
+from bt5 import compress_business_template_list
+
+# Lock file name
+LOCKFILE="/tmp/update_repository.lock"
+WORKDIR = "/tmp/update_repository_work"
+DOWNLOADDIR = "/tmp/update_repository_download"
+DOWNLOAD_COMMAND = "svn co --trust-server-cert --non-interactive --quiet"
+
+def load_options():
+ parser = OptionParser()
+ parser.add_option("-u", "--url", dest="url",
+ help="write report to FILE", metavar="URL",
+ default="https://svn.erp5.org/repos/public/erp5/trunk/bt5,"\
+ "https://svn.erp5.org/repos/public/erp5/trunk/products/ERP5/bootstrap")
+
+ parser.add_option("-r", "--repository",
+ dest="repository", default=os.getcwd(),
+ help="don't print status messages to stdout")
+
+ parser.add_option("-d", "--download-dir",
+ dest="downloaddir", default=DOWNLOADDIR,
+ help="don't print statu messages to stdout")
+
+ parser.add_option("-c", "--download-cmd",
+ dest="downloadcmd", default=DOWNLOAD_COMMAND,
+ help="don't print status messages to stdout")
+
+ parser.add_option("-p", "--preserve-download",
+ dest="downloadcmd", default=DOWNLOAD_COMMAND,
+ help="don't print status messages to stdout")
+
+ return parser.parse_args()
+
+def build(url_list, destination,
+ download_dir=DOWNLOADDIR,
+ download_cmd=DOWNLOAD_COMMAND,
+ preserve_download=True):
+
+ if os.path.exists(LOCKFILE):
+ raise ValueError("Lock file %s exists" % LOCKFILE)
+
+ try:
+ f = open(LOCKFILE, "w+"); f.close()
+ if not os.path.exists(download_dir):
+ os.mkdir(download_dir)
+ os.mkdir(WORKDIR)
+ for url in url_list:
+ if url != "":
+ os.chdir(download_dir)
+ repos = md5(url).hexdigest()
+ os.system("%s %s %s" % (download_cmd, url, repos))
+ compress_business_template_list(WORKDIR, repos)
+
+ ### # Publish the repository
+ for bt in os.listdir(WORKDIR):
+ bt_path = os.path.join(destination,bt)
+ if os.path.exists(bt_path):
+ os.remove(bt_path)
+ shutil.move('%s/%s' % (WORKDIR,bt), destination)
+
+ os.chdir(destination)
+ genbt5list.main()
+ finally:
+ if os.path.exists(LOCKFILE):
+ os.remove(LOCKFILE)
+ shutil.rmtree(WORKDIR)
+ if not preserve_download:
+ shutil.rmtree(download_dir)
+ return True
+
+def main():
+ (options, args) = load_options()
+ build(url_list = options.url.split(","),
+ destination = options.repository,
+ download_dir=options.downloaddir,
+ download_cmd=options.downloadcmd,
+ preserve_download=False
+ )
+
+if __name__ == "__main__":
+ main()
More information about the Erp5-report
mailing list