Mercurial > treepkg
view recipes/kde_enterprise_4/kde_l10n.py @ 441:eadcb1bb54e2
Merged revisions 388-399 via svnmerge from
svn+ssh://svn.wald.intevation.org/treepkg/branches/treepkg-status
........
r388 | bricks | 2010-07-28 10:38:50 +0200 (Mi, 28 Jul 2010) | 3 lines
fix if statement
upload hook should be called if it's not empty
........
r389 | bricks | 2010-07-28 13:38:00 +0200 (Mi, 28 Jul 2010) | 2 lines
only rsync specified architectures from cachedir to publishdir
........
r390 | bricks | 2010-07-29 14:07:57 +0200 (Do, 29 Jul 2010) | 2 lines
introduced after_copy_hook and made rsync upload to publishdir optional
........
r391 | bricks | 2010-07-29 15:43:39 +0200 (Do, 29 Jul 2010) | 3 lines
publish package must be default to get original behaviour
be more verbose at publishing
........
r392 | bricks | 2010-07-29 16:50:53 +0200 (Do, 29 Jul 2010) | 2 lines
fix handling of showing only successfull builds together with num packages
........
r393 | bricks | 2010-07-29 16:52:42 +0200 (Do, 29 Jul 2010) | 2 lines
fixed typo
........
r394 | bricks | 2010-07-29 16:59:10 +0200 (Do, 29 Jul 2010) | 2 lines
fixed another typo
........
r395 | bricks | 2010-07-29 18:05:54 +0200 (Do, 29 Jul 2010) | 3 lines
fixed another typo
treepkg is really slow with many revisions
........
r396 | bricks | 2010-08-02 12:41:55 +0200 (Mo, 02 Aug 2010) | 2 lines
fixed typos
........
r397 | bricks | 2010-08-02 17:36:12 +0200 (Mo, 02 Aug 2010) | 3 lines
be more error prone in listing different files
not checking if a dir exists caused several errors if a build wasn't successful
........
r398 | bricks | 2010-08-05 18:21:47 +0200 (Do, 05 Aug 2010) | 2 lines
review changes
........
r399 | bricks | 2010-08-06 13:06:08 +0200 (Fr, 06 Aug 2010) | 4 lines
cleanup modules
fix test_info testcases
added testcases for remove_trailingslashes and expand_filename
........
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Fri, 06 Aug 2010 13:41:54 +0000 |
parents | 32b09a9b92ba |
children |
line wrap: on
line source
# Copyright (C) 2007, 2008, 2009 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. import os import logging import shutil import time import treepkg.packager import treepkg.util import treepkg.subversion as subversion from base import BaseSourcePackager, BasePackageTrack class SubversionSubset(object): """Manage a subversion working copy that contains a subset of a repository The SVN repository for the enterprise 4 l10n sources contains all languages. Only a small subset of those languages are actually maintained, though. This class provides a way to manage a working copy that contains only the part that actually need to be packaged. """ def __init__(self, baseurl, localdir, subdirectories): self.baseurl = baseurl self.localdir = localdir self.subdirectories = subdirectories def update_or_checkout(self, revision=None): for desc in self.subdirectories: if len(desc) == 2: subdir, recurse = desc else: subdir = desc[0] recurse = True self.update_or_checkout_subdir(subdir, revision, recurse=recurse) def update_or_checkout_subdir(self, subdir, revision, recurse): localdir = os.path.join(self.localdir, subdir) svn_url = self.baseurl + subdir if os.path.exists(localdir): logging.info("Updating the working copy in %r", localdir) subversion.update(localdir, revision=revision, recurse=recurse) else: logging.info("The working copy in %r doesn't exist yet." " Checking out from %r", localdir, svn_url) subversion.checkout(svn_url, localdir, revision=revision, recurse=recurse) def export(self, destdir, url=None): if url is not None: baseurl = url else: baseurl = self.localdir for desc in self.subdirectories: if len(desc) == 2: subdir, recurse = desc else: subdir = desc[0] recurse = True subversion.export(os.path.join(baseurl, subdir), os.path.join(destdir, subdir), recurse=recurse) def last_changed_revision(self): return max([subversion.last_changed_revision(os.path.join(self.localdir, desc[0])) for desc in self.subdirectories]) class SourcePackager(BaseSourcePackager): """Creates the debian source package for the l10n files This is a bit more complicated than for other packages. The orig.tar.gz file of the debian source package contains one .tar.bz2 file for every language. Those .tar.bz files are the kde-18n-<lang> files released by the KDE project. For now, we only have the German localization in the enterprise source package, so the orig.tar.gz file will have the following contents: kde-l10n-<version>/ kde-l10n-<version>/kde-l10n-de-<version>.tar.bz2 <version> is the same everywhere. """ pkg_basename = "kde-l10n" createtarball_script = """\ #! /bin/bash set -e apt-get --assume-yes --force-yes install %(builddeps)s # copy the source tree to a directory that's under pbuilder control so # that it gets removed along with the build environment. Otherwise we # end up with a directory containing files that cannot be removed by # treepkg workdir=/tmp/work cp -a %(basedir)s $workdir cd $workdir # only handle the de subdirectory echo de > subdirs # create the CMakeFiles ./scripts/autogen.sh mv de kde-l10n-de-%(version)s tar cjf %(tarball)s kde-l10n-de-%(version)s """ def __init__(self, *args, **kw): super(SourcePackager, self).__init__(*args, **kw) self.enterprise_version = (time.strftime("%Y%m%d", time.localtime()) + "." + str(self.revision)) def determine_package_version(self, directory): enterprise_version = self.enterprise_version return self.track.version_template % locals() def create_l10n_de_tarball(self, pkgbasedir, pkgbaseversion): logging.info("Creating kde-l10n-de tarball") de_tarball = os.path.join(self.work_dir, "kde-l10n-de-" + pkgbaseversion + ".tar.bz2") # xutils-dev is needed for the revpath script used by # scripts/autogen.sh script = (self.createtarball_script % dict(builddeps="xutils-dev", tarball=de_tarball, basedir=pkgbasedir, version=pkgbaseversion)) script_name = os.path.join(self.work_dir, "createtarball") treepkg.util.writefile(script_name, script, 0755) treepkg.util.ensure_directory(self.src_dir) treepkg.util.ensure_directory(self.log_dir) self.track.builder.run_script([script_name], logfile=os.path.join(self.log_dir, "tarball_log.txt"), bindmounts=[self.work_dir]) return de_tarball def prepare_sources_for_tarball(self, pkgbasedir, pkgbaseversion): de_tarball = self.create_l10n_de_tarball(pkgbasedir, pkgbaseversion) shutil.rmtree(pkgbasedir) os.mkdir(pkgbasedir) os.rename(de_tarball, os.path.join(pkgbasedir, os.path.basename(de_tarball))) class RevisionPackager(treepkg.packager.RevisionPackager): source_packager_cls = SourcePackager class PackageTrack(BasePackageTrack): revision_packager_cls = RevisionPackager def __init__(self, *args, **kw): svn_url = kw["svn_url"] super(PackageTrack, self).__init__(*args, **kw) self.working_copy = SubversionSubset(svn_url, self.checkout_dir, subdirectories= [("", False), ("de",), ("scripts",)]) def export_tag(self, tag_url, to_dir): logging.info("Exporting sources from %s to %r", tag_url, to_dir) self.working_copy.export(to_dir, url=tag_url)