summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-03-10 19:31:12 -0800
committerSteve Kondik <steve@cyngn.com>2016-03-11 16:58:16 -0800
commit771feadfe9bed8d56331f9097804f12f2dd61901 (patch)
treeaddc972975c022d76e7b5dadcad1a4c8dcaf127b /tools
parentad12b369afca4b6b3764ad0a70778c0a924cdc68 (diff)
parent57d06af7cd25a6e67ea33a4c1befecca1df623de (diff)
downloadbuild-771feadfe9bed8d56331f9097804f12f2dd61901.zip
build-771feadfe9bed8d56331f9097804f12f2dd61901.tar.gz
build-771feadfe9bed8d56331f9097804f12f2dd61901.tar.bz2
Merge tag 'android-6.0.1_r22' of https://android.googlesource.com/platform/build into cm-13.0
Android 6.0.1 release 22 Change-Id: Icd3603c1efc5fa85f48c19d13d484f0371ddae37
Diffstat (limited to 'tools')
-rw-r--r--tools/releasetools/common.py23
-rw-r--r--tools/releasetools/sparse_img.py26
2 files changed, 39 insertions, 10 deletions
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index cd35023..26cc674 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -1490,18 +1490,27 @@ fi
'bonus_args': bonus_args}
# The install script location moved from /system/etc to /system/bin
- # in the L release. Parse the init.rc file to find out where the
+ # in the L release. Parse init.*.rc files to find out where the
# target-files expects it to be, and put it there.
sh_location = "etc/install-recovery.sh"
- try:
- with open(os.path.join(input_dir, "BOOT", "RAMDISK", "init.rc")) as f:
+ found = False
+ init_rc_dir = os.path.join(input_dir, "BOOT", "RAMDISK")
+ init_rc_files = os.listdir(init_rc_dir)
+ for init_rc_file in init_rc_files:
+ if (not init_rc_file.startswith('init.') or
+ not init_rc_file.endswith('.rc')):
+ continue
+
+ with open(os.path.join(init_rc_dir, init_rc_file)) as f:
for line in f:
m = re.match(r"^service flash_recovery /system/(\S+)\s*$", line)
if m:
sh_location = m.group(1)
- print("putting script in", sh_location)
+ found = True
break
- except (OSError, IOError) as e:
- print("failed to read init.rc: %s" % e)
+ if found:
+ break
+
+ print("putting script in", sh_location)
- output_sink(sh_location, sh) \ No newline at end of file
+ output_sink(sh_location, sh)
diff --git a/tools/releasetools/sparse_img.py b/tools/releasetools/sparse_img.py
index 10022d0..fa4406c 100644
--- a/tools/releasetools/sparse_img.py
+++ b/tools/releasetools/sparse_img.py
@@ -212,6 +212,16 @@ class SparseImage(object):
nonzero_blocks = []
reference = '\0' * self.blocksize
+ # Workaround for bug 23227672. For squashfs, we don't have a system.map. So
+ # the whole system image will be treated as a single file. But for some
+ # unknown bug, the updater will be killed due to OOM when writing back the
+ # patched image to flash (observed on lenok-userdebug MEA49). Prior to
+ # getting a real fix, we evenly divide the non-zero blocks into smaller
+ # groups (currently 1024 blocks or 4MB per group).
+ # Bug: 23227672
+ MAX_BLOCKS_PER_GROUP = 1024
+ nonzero_groups = []
+
f = self.simg_f
for s, e in remaining:
for b in range(s, e):
@@ -234,12 +244,22 @@ class SparseImage(object):
nonzero_blocks.append(b)
nonzero_blocks.append(b+1)
- assert zero_blocks or nonzero_blocks or clobbered_blocks
+ if len(nonzero_blocks) >= MAX_BLOCKS_PER_GROUP:
+ nonzero_groups.append(nonzero_blocks)
+ # Clear the list.
+ nonzero_blocks = []
+
+ if nonzero_blocks:
+ nonzero_groups.append(nonzero_blocks)
+ nonzero_blocks = []
+
+ assert zero_blocks or nonzero_groups or clobbered_blocks
if zero_blocks:
out["__ZERO"] = rangelib.RangeSet(data=zero_blocks)
- if nonzero_blocks:
- out["__NONZERO"] = rangelib.RangeSet(data=nonzero_blocks)
+ if nonzero_groups:
+ for i, blocks in enumerate(nonzero_groups):
+ out["__NONZERO-%d" % i] = rangelib.RangeSet(data=blocks)
if clobbered_blocks:
out["__COPY"] = clobbered_blocks