diff options
author | Ying Wang <wangying@google.com> | 2012-11-26 18:10:23 -0800 |
---|---|---|
committer | Ying Wang <wangying@google.com> | 2012-11-27 09:57:17 -0800 |
commit | 69e9b4d6d1e9647c3f9c011bad0f22138911a413 (patch) | |
tree | 167114c44d3ad77a20e87d2d7e4b675769ed32a0 /tools/releasetools/build_image.py | |
parent | 4c057c9ab47b406a209266f520d6757f0af3b3aa (diff) | |
download | build-69e9b4d6d1e9647c3f9c011bad0f22138911a413.zip build-69e9b4d6d1e9647c3f9c011bad0f22138911a413.tar.gz build-69e9b4d6d1e9647c3f9c011bad0f22138911a413.tar.bz2 |
Run e2fsck on built sparse images.
Bug: 7591683
Change-Id: Id1cba79f7840aab1f0327cb741eda655b45d1b46
Diffstat (limited to 'tools/releasetools/build_image.py')
-rwxr-xr-x | tools/releasetools/build_image.py | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index a615d1a..94a9fda 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -21,9 +21,22 @@ Usage: build_image input_directory properties_file output_image_file """ import os +import os.path import subprocess import sys +def RunCommand(cmd): + """ Echo and run the given command + + Args: + cmd: the command represented as a list of strings. + Returns: + The exit code. + """ + print "Running: ", " ".join(cmd) + p = subprocess.Popen(cmd) + p.communicate() + return p.returncode def BuildImage(in_dir, prop_dict, out_file): """Build an image to out_file from in_dir with property prop_dict. @@ -38,10 +51,12 @@ def BuildImage(in_dir, prop_dict, out_file): """ build_command = [] fs_type = prop_dict.get("fs_type", "") + run_fsck = False if fs_type.startswith("ext"): build_command = ["mkuserimg.sh"] if "extfs_sparse_flag" in prop_dict: build_command.append(prop_dict["extfs_sparse_flag"]) + run_fsck = True build_command.extend([in_dir, out_file, fs_type, prop_dict["mount_point"]]) if "partition_size" in prop_dict: @@ -58,10 +73,27 @@ def BuildImage(in_dir, prop_dict, out_file): build_command.append(prop_dict["selinux_fc"]) build_command.append(prop_dict["mount_point"]) - print "Running: ", " ".join(build_command) - p = subprocess.Popen(build_command); - p.communicate() - return p.returncode == 0 + exit_code = RunCommand(build_command) + if exit_code != 0: + return False + + if run_fsck: + # Inflate the sparse image + unsparse_image = os.path.join( + os.path.dirname(out_file), "unsparse_" + os.path.basename(out_file)) + inflate_command = ["simg2img", out_file, unsparse_image] + exit_code = RunCommand(inflate_command) + if exit_code != 0: + os.remove(unsparse_image) + return False + + # Run e2fsck on the inflated image file + e2fsck_command = ["e2fsck", "-f", "-n", unsparse_image] + exit_code = RunCommand(e2fsck_command) + + os.remove(unsparse_image) + + return exit_code == 0 def ImagePropFromGlobalDict(glob_dict, mount_point): |