• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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