Home | History | Annotate | Download | only in build
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 2012 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the 'License');
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an 'AS IS' BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 #
     17 
     18 # copy related utils for all PDK scripts
     19 
     20 import os, string, sys, shutil, zipfile
     21 
     22 def copy_dir(src_top, dest_top, dir_name, cp_option = ""):
     23   """copy all the files under src_top/dir_name to dest_top/dir_name."""
     24   src_full_path = src_top + "/" + dir_name
     25   # do not create the leaf dir as cp will create it
     26   [mid_path, leaf_path] = dir_name.rsplit("/", 1)
     27   dest_full_path = dest_top + "/" + mid_path
     28   if not os.path.isdir(dest_full_path):
     29     os.makedirs(dest_full_path)
     30   print "copy dir ", src_full_path, " to ", dest_full_path
     31   os.system("cp -a " + " " + cp_option + " " + src_full_path + " " + dest_full_path)
     32 
     33 
     34 def copy_dir_only_file(src_top, dest_top, dir_name):
     35   """copy only files directly under the given dir_name"""
     36   src_full_path = src_top + "/" + dir_name
     37   dest_full_path = dest_top + "/" + dir_name
     38   if not os.path.isdir(dest_full_path):
     39     os.makedirs(dest_full_path)
     40   children = os.listdir(src_full_path)
     41   for child in children:
     42     child_full_name = src_full_path + "/" + child
     43     if os.path.isfile(child_full_name):
     44       print "copy file ", child_full_name, " to ", dest_full_path
     45       os.system("cp -a " + child_full_name + " " + dest_full_path)
     46 
     47 
     48 def copy_files(src_top, dest_top, files_name):
     49   """copy files from src_top to dest_top.
     50      Note that files_name can include directories which will be created
     51      under dest_top"""
     52   src_full_path = src_top + "/" + files_name
     53   # do not create the leaf dir as cp will create it
     54   [mid_path, leaf_path] = files_name.rsplit("/", 1)
     55   dest_full_path = dest_top + "/" + mid_path
     56   if not os.path.isdir(dest_full_path):
     57     os.makedirs(dest_full_path)
     58   print "copy files ", src_full_path, " to ", dest_full_path
     59   os.system("cp -a " + src_full_path + " " + dest_full_path)
     60 
     61 
     62 def copy_file_if_exists(src_top, dest_top, file_name):
     63   """copy file src_top/file_name to dest_top/file_name
     64      returns false if such file does not exist in source."""
     65   src_full_name = src_top + "/" + file_name
     66   if not os.path.isfile(src_full_name):
     67     print "file " + src_full_name + " not found"
     68     return False
     69   dest_file = dest_top + "/" + file_name
     70   dest_dir = os.path.dirname(dest_file)
     71   if not os.path.isdir(dest_dir):
     72     os.makedirs(dest_dir)
     73   print "copy file ", src_full_name, " to ", dest_file
     74   os.system("cp -a " + src_full_name + " " +  dest_file)
     75   return True
     76 
     77 
     78 def copy_file_new_name_if_exists(src_full_name, dest_dir, dest_file):
     79   """copy src_full_name (including dir + file name) to dest_dir/dest_file
     80      will be used when renaming is necessary"""
     81   if not os.path.isfile(src_full_name):
     82     print "file " + src_full_name + " not found"
     83     return False
     84   dest_full_name = dest_dir + "/" + dest_file
     85   if not os.path.isdir(dest_dir):
     86     os.makedirs(dest_dir)
     87   print "copy file ", src_full_name, " to ", dest_full_name
     88   os.system("cp -a " + src_full_name + " " + dest_full_name)
     89   return True
     90 
     91 def list_files(dir_name, dir_exclusion_filter = ""):
     92   """recursively list all files under given dir_name directory.
     93      exluding subdirs ending with dir_exlusion_filter in name
     94      returns list of files which can be [] if there is no file"""
     95   file_list = []
     96   if dir_exclusion_filter != "" and dir_name.endswith(dir_exclusion_filter):
     97     return file_list
     98   for item in os.listdir(dir_name):
     99     item_full_path = dir_name + "/" + item
    100     # do not include symbolic link to recursion
    101     if os.path.islink(item_full_path) or os.path.isfile(item_full_path):
    102       file_list.append(item_full_path)
    103     elif os.path.isdir(item_full_path):
    104       result_list = list_files(item_full_path, dir_exclusion_filter)
    105       for file_name in result_list:
    106         file_list.append(file_name)
    107   return file_list
    108 
    109 def src_newer_than_dest(src, dest):
    110   """return True if src file/dir is newer than dest file/dir"""
    111   result = True
    112   src_mod_time = os.path.getmtime(src)
    113   if os.path.isfile(dest) or os.path.isdir(dest):
    114     dest_mod_time = os.path.getmtime(dest)
    115     if dest_mod_time > src_mod_time:
    116       result = False
    117   return result
    118 
    119 def remove_if_exists(entry):
    120   if os.path.exists(entry):
    121     os.system("rm -rf " + entry)
    122 
    123 
    124 def list_files_in_zip(zip_file_path, no_directory = True):
    125   """ list all files/directories inside the given zip_file_path.
    126       Directories are not included if no_directory is True"""
    127   entry_list = []
    128   if not zipfile.is_zipfile(zip_file_path):
    129     return entry_list
    130   zip_file = zipfile.ZipFile(zip_file_path, 'r')
    131   entries =  zip_file.namelist()
    132   for entry in entries:
    133     if not no_directory or not entry.endswith("/"):
    134       entry_list.append(entry)
    135 
    136   #print entry_list
    137   return entry_list
    138 
    139 def save_list(list_to_save, file_name):
    140   f = open(file_name, "w")
    141   for entry in list_to_save:
    142     f.write("%s\n" % entry)
    143   f.close()
    144 
    145 def load_list(file_name):
    146   result = []
    147   if not os.path.isfile(file_name):
    148     return result
    149 
    150   for line in open(file_name, "r"):
    151     result.append(line.strip())
    152 
    153   #print result
    154   return result
    155 
    156 def remove_files_listed(top_dir, files_list):
    157   top_dir_ = top_dir + "/"
    158   for entry in files_list:
    159     path = top_dir_ + entry
    160     print "remove " + path
    161     os.system("rm -f " + path)
    162 
    163 def execute_command(command, error_msg):
    164   if os.system(command) != 0:
    165     raise RuntimeError(error_msg)
    166