view recipes/kde/enterprise/branch_3_5/kde_i18n.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 57034905ac4c
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 treepkg.util
import treepkg.run as run
from treepkg.cmdexpand import cmdexpand

import recipes.kde.enterprise.generic as generic


class SourcePackager(generic.SourcePackager):

    """Creates the debian source package for the i18n files

    This is quite complicated.  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-i18n-<version>/
      kde-i18n-<version>/kde-i18n-de-<version>.tar.bz2

    <version> is the same everywhere.

    The kde-i18n-de tarball contains the localization files for the
    entire KDE project, including KDE-PIM.  The SVN enterprise branch
    only contains the localizations for KDE-PIM, though, so we have to
    assemble a new .tar.bz2 from an original
    kde-i18n-de-<version>.tar.bz and the new files from the enterprise
    branch.
    """

    def unpack_orig_tarball(self):
        orig_tarball = self.track.orig_tarball
        run.call(cmdexpand("tar xjf $tarball -C $directory",
                           tarball=orig_tarball, directory=self.work_dir))
        tarbasename = os.path.basename(orig_tarball)
        splitext = os.path.splitext
        return os.path.join(self.work_dir,
                            splitext(splitext(tarbasename)[0])[0])

    def create_i18n_de_tarball(self, pkgbasedir, pkgbaseversion):
        """Creates a new kde-i18n-de tarball and returns its filename

        This is the tarball as it would be released by KDE.  It is not
        yet the tarball that will become the .orig.tar.gz for the debian
        package.
        """
        logging.info("Creating kde-i18n-de tarball")
        untarred_dir = self.unpack_orig_tarball()
        new_de_dir = os.path.join(pkgbasedir, "new-de")
        de_dir = os.path.join(pkgbasedir, "de")
        os.rename(de_dir, new_de_dir)
        treepkg.util.copytree(untarred_dir, de_dir)
        treepkg.util.copytree(new_de_dir, de_dir)
        logging.info("Running scripts/autogen.sh for kde-i18n-de tarball")
        run.call(cmdexpand("/bin/sh scripts/autogen.sh de"), cwd=pkgbasedir,
                 suppress_output=True)

        tarballdir = "kde-i18n-de-" + pkgbaseversion
        os.rename(de_dir, os.path.join(pkgbasedir, tarballdir))

        tarball = os.path.join(os.path.dirname(pkgbasedir),
                               tarballdir + ".tar.bz2")
        run.call(cmdexpand("tar cjf $tarball -C $pkgbasedir $tarballdir",
                           **locals()))
        logging.info("Created kde-i18n-de tarball")
        return tarball

    def prepare_sources_for_tarball(self, pkgbasedir, pkgbaseversion):
        # We have to reuse the same directory when building the
        # orig.tar.gz.  However, we need to preserve the scripts
        # sub-directory because it's not needed for the kde-i18n-de
        # tarball but for the .orig.tar.gz.
        tarball = self.create_i18n_de_tarball(pkgbasedir, pkgbaseversion)
        pkg_scripts_dir = os.path.join(pkgbasedir, "scripts")
        tmp_scripts_dir = os.path.join(self.work_dir, "scripts")
        os.rename(pkg_scripts_dir, tmp_scripts_dir)
        shutil.rmtree(pkgbasedir)
        os.mkdir(pkgbasedir)
        os.rename(tmp_scripts_dir, pkg_scripts_dir)
        os.rename(tarball, os.path.join(pkgbasedir,
                                        os.path.basename(tarball)))


class RevisionPackager(generic.RevisionPackager):

    source_packager_cls = SourcePackager


class PackageTrack(generic.PackageTrack):

    revision_packager_cls = RevisionPackager

    extra_config_desc = generic.PackageTrack.extra_config_desc \
                        + ["orig_tarball"]

    def __init__(self, *args, **kw):
        self.orig_tarball = kw.pop("orig_tarball")
        super(PackageTrack, self).__init__(*args, **kw)

    def init_treepkg(self):
        super(PackageTrack, self).init_treepkg()
        if not os.path.exists(self.orig_tarball):
            print ("TODO: The orig_tarball %s still has to be created"
                   % (self.orig_tarball,))
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)