Package archive :: Module tools |
[hide private]
[frames] | no frames]

# Source Code for Module archive.tools

      1  #============================================================================
      2  #Name        : tools.py
      3  #Part of     : Helium
      4
      5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
      6  #All rights reserved.
      7  #This component and the accompanying materials are made available
      8  #under the terms of the License "Eclipse Public License v1.0"
      9  #which accompanies this distribution, and is available
     10  #at the URL "http://www.eclipse.org/legal/epl-v10.html".
     11  #
     12  #Initial Contributors:
     13  #Nokia Corporation - initial contribution.
     14  #
     15  #Contributors:
     16  #
     17  #Description:
     18  #===============================================================================
     19
     20  """ Archiving operations. """
     21  import os
     22  import logging
     23  import buildtools
     24  import codecs
     25
     26  _logger = logging.getLogger('archive')
     27  #_logger.addHandler(logging.FileHandler('archive.log'))
     28  #logging.basicConfig(level=logging.DEBUG)
     29  logging.basicConfig()
     30
     31 -class Tool(object):
     32      """ Tool abstract class. """
     33 -    def extension(self):
     34          """ This method should return the extension of the generated file. """
     35          raise NotImplementedError()
     36
     37 -    def create_command(self, path, filename, manifests=None):
     38          """ This method should return an array of buildtools.Command.
     39              That list will get use to generate a build file (e.g make, ant).
     40              The list of command should support in parallel calling.
     41          """
     42          raise NotImplementedError()
     43
     44
     45 -class SevenZipArchiver(Tool):
     46      """ Creates task definitions for executing 7zip archive operations."""
     47
     48 -    def __init__(self):
     49          Tool.__init__(self)
     50
     51 -    def extension(self):
     52          """ Always return '.zip'. """
     53          return '.zip'
     54
     55 -    def create_command(self, path, name, manifests=None):
     56          """ Returns a list of one command that will use 7za to archive the content."""
     57          cmd = buildtools.Command('7za', path)
     58          cmd.addArg('a')
     59          cmd.addArg('-tzip')
     60          # Include all in the current directory by default, assuming that
     61          # an include file or specific includes will be given
     62          cmd.addArg(name + self.extension())
     63          for manifest in manifests:
     64              cmd.addArg('@' + os.path.normpath(manifest))
     65          return [cmd]
     66
     67
     68 -class ZipArchiver(Tool):
     69      """ Creates task definitions for executing zip archive operations."""
     70
     71 -    def __init__(self):
     72          Tool.__init__(self)
     73
     74 -    def extension(self):
     75          """ Always return '.zip'. """
     76          return '.zip'
     77
     78 -    def create_command(self, path, name, manifests=None):
     79          """ Returns a list of one command that will use zip to archive the content."""
     80          cmd = buildtools.Command('zip', path)
     81          cmd.addArg('-R')
     82          cmd.addArg(name + self.extension())
     83          # Include all in the current directory by default, assuming that
     84          # an include file or specific includes will be given
     85          cmd.addArg('.')
     86          for manifest in manifests:
     87              cmd.addArg('-i@' + os.path.normpath(manifest))
     88          return [cmd]
     89
     90
     91 -class Remover(Tool):
     92      """ Creates task definitions for executing zip archive operations."""
     93 -    def __init__(self):
     94          Tool.__init__(self)
     95
     96 -    def extension(self):
     97          """ Always return '' """
     98          return ''
     99
    100 -    def create_command(self, dummy_path, dummy_filename, manifests=None):
    101          """ Returns a list of one command that will use zip to archive the content."""
    102          cmds = []
    103          for manifest in manifests:
    104              file_input = codecs.open(manifest, 'r', "utf-8" )
    105              for line in file_input.readlines():
    106                  if line.strip() != "":
    107                      cmds.append(buildtools.Delete(filename=line.strip()))
    108              file_input.close()
    109          return cmds
    110
    111
    112 -def get_tool(name):
    113      """ Return a tool using its id name. """
    114      constructor = TOOL_CONSTRUCTORS[name]
    115      return constructor()
    116
    117
    118  TOOL_CONSTRUCTORS = {'zip': ZipArchiver,
    119                        '7za': SevenZipArchiver,
    120                        'remover': Remover}
    121