forked from mozilla-b2g/gaia
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote branch 'upstream/master' into system
- Loading branch information
Showing
9 changed files
with
307 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,4 @@ apps/settings/gaia-commit.txt | |
profile/ | ||
xulrunner/ | ||
xulrunner-sdk/ | ||
apps/homescreen/apps-manifest-fallback.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
"""Usage: python %prog [ADB_PATH] | ||
ADB_PATH is the path to the |adb| executable we should run. | ||
Used by |make install-gaia| to push files to a device. You shouldn't run | ||
this file directly. | ||
""" | ||
|
||
import sys | ||
import os | ||
import hashlib | ||
import subprocess | ||
from tempfile import mkstemp | ||
|
||
def compute_local_hash(filename, hashes): | ||
h = hashlib.sha1() | ||
with open(filename,'rb') as f: | ||
for chunk in iter(lambda: f.read(256 * h.block_size), b''): | ||
h.update(chunk) | ||
hashes[filename] = h.hexdigest() | ||
|
||
def compute_local_hashes_in_dir(dir, hashes): | ||
def visit(arg, dirname, names): | ||
for filename in [os.path.join(dirname, name) for name in names]: | ||
if not os.path.isfile(filename): | ||
continue | ||
compute_local_hash(filename, hashes) | ||
|
||
os.path.walk(dir, visit, None) | ||
|
||
def compute_local_hashes(): | ||
hashes = {} | ||
compute_local_hashes_in_dir('webapps', hashes) | ||
compute_local_hashes_in_dir('OfflineCache', hashes) | ||
compute_local_hash('user.js', hashes) | ||
return hashes | ||
|
||
def adb_push(local, remote): | ||
global adb_cmd | ||
subprocess.check_call([adb_cmd, 'push', local, remote]) | ||
|
||
def adb_shell(cmd): | ||
global adb_cmd | ||
|
||
# Output the return code so we can check whether the command executed | ||
# successfully. | ||
new_cmd = cmd + '; echo "RETURN CODE: $?"' | ||
|
||
# universal_newlines=True because adb shell returns CRLF separators. | ||
proc = subprocess.Popen([adb_cmd, 'shell', new_cmd], | ||
stdout=subprocess.PIPE, | ||
stderr=subprocess.PIPE, | ||
universal_newlines=True) | ||
(stdout, stderr) = proc.communicate() | ||
if stderr.strip(): | ||
raise Exception('adb shell "%s" returned the following unexpected error: "%s"' % | ||
(cmd, stderr.strip())) | ||
if proc.returncode != 0: | ||
raise Exception('adb shell "%s" exited with error %d' % (cmd, proc.returncode)) | ||
|
||
split = [line for line in stdout.split('\n') if line.strip()] | ||
if not split[-1].startswith('RETURN CODE: 0'): | ||
raise Exception('adb shell "%s" did not complete successfully. Output:\n%s' % (cmd, stdout)) | ||
|
||
# Don't return the "RETURN CODE: 0" line! | ||
return split[0:-1] | ||
|
||
|
||
def compute_remote_hashes(): | ||
hashes = {} | ||
adb_out = adb_shell('cd /data/local && find . -type f | xargs sha1sum') | ||
for (hash, filename) in [line.split() for line in adb_out]: | ||
# Strip off './' from the filename. | ||
if filename.startswith('./'): | ||
filename = filename[2:] | ||
else: | ||
raise Exception('Unexpected filename %s' % filename) | ||
|
||
hashes[filename] = hash | ||
return hashes | ||
|
||
def remove_from_remote(local_hashes, remote_hashes): | ||
"""Remove any files from the remote device which don't appear in | ||
local_hashes. | ||
""" | ||
to_remove = list(set(remote_hashes.keys()) - set(local_hashes.keys())) | ||
if not to_remove: | ||
return | ||
print 'Removing from device:\n%s\n' % '\n'.join(to_remove) | ||
# Chunk to_remove into 25 files at a time so we don't send too much over | ||
# adb_shell at once. | ||
for files in [to_remove[pos:pos + 25] for pos in xrange(0, len(to_remove), 25)]: | ||
adb_shell('cd /data/local && rm -f %s' % ' '.join(files)) | ||
|
||
def push_to_remote(local_hashes, remote_hashes): | ||
global adb_cmd | ||
|
||
to_push = set() | ||
for (k, v) in local_hashes.items(): | ||
if k not in remote_hashes or remote_hashes[k] != local_hashes[k]: | ||
to_push.add(k) | ||
|
||
if not to_push: | ||
return | ||
|
||
print 'Pushing to device:\n%s' % '\n'.join(list(to_push)) | ||
|
||
tmpfile, tmpfilename = mkstemp() | ||
try: | ||
subprocess.check_call(['tar', '-czf', tmpfilename] + list(to_push)) | ||
adb_push(tmpfilename, '/data/local') | ||
basename = os.path.basename(tmpfilename) | ||
adb_shell('cd /data/local && tar -xzf %s && rm %s' % (basename, basename)) | ||
finally: | ||
os.remove(tmpfilename) | ||
|
||
def install_gaia_fast(): | ||
os.chdir('profile') | ||
try: | ||
local_hashes = compute_local_hashes() | ||
remote_hashes = compute_remote_hashes() | ||
remove_from_remote(local_hashes, remote_hashes) | ||
push_to_remote(local_hashes, remote_hashes) | ||
finally: | ||
os.chdir('..') | ||
|
||
def install_gaia_slow(): | ||
global adb_cmd | ||
adb_shell("rm -r /data/local/*") | ||
adb_push('profile/OfflineCache', '/data/local/OfflineCache') | ||
adb_push('profile/webapps', '/data/local/webapps') | ||
adb_push('profile/user.js', '/data/local') | ||
|
||
def install_gaia(): | ||
try: | ||
install_gaia_fast() | ||
except: | ||
# If anything goes wrong, fall back to the slow method. | ||
install_gaia_slow() | ||
|
||
if __name__ == '__main__': | ||
if len(sys.argv) > 2: | ||
print 'Too many arguments! Usage: python %s [ADB_PATH]' % __FILE__ | ||
sys.exit(1) | ||
|
||
if len(sys.argv) == 2: | ||
adb_cmd = sys.argv[1] | ||
else: | ||
adb_cmd = 'adb' | ||
|
||
install_gaia() |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#! /usr/bin/env sh | ||
APP_DIR=./apps | ||
APP_DIR_LEN=`expr $APP_DIR : '.*'` | ||
APP_WEBAPPS=$APP_DIR/webapps.json | ||
APP_DESKTOP_CACHE=$APP_DIR/homescreen/apps-manifest-fallback.json | ||
|
||
## Truncate | ||
cat < /dev/null > $APP_DESKTOP_CACHE | ||
|
||
echo "Creating Desktop App Manifest Shim ($APP_DESKTOP_CACHE)" | ||
|
||
echo "{\"webapps\": \n $(cat $APP_WEBAPPS), \"manifests\": { \n" >> $APP_DESKTOP_CACHE | ||
|
||
APP_ARR_LEN=0 | ||
APP_MANIFEST_ARR=(); | ||
|
||
for APP_LOC in `find $APP_DIR -type d -depth 1` | ||
do | ||
APP_NAME=${APP_LOC:(($APP_DIR_LEN+1))} | ||
APP_MANIFEST_FILE=$APP_LOC/manifest.json | ||
if [ -f $APP_MANIFEST_FILE ]; | ||
then | ||
APP_MANIFEST_ARR[$APP_ARR_LEN]="\"$APP_NAME\": $(cat $APP_MANIFEST_FILE)" | ||
APP_ARR_LEN=$(($APP_ARR_LEN+1)) | ||
fi | ||
done | ||
|
||
SAVE_IFS=$IFS | ||
IFS="," | ||
echo "${APP_MANIFEST_ARR[*]}" >> $APP_DESKTOP_CACHE | ||
echo "}}" >> $APP_DESKTOP_CACHE | ||
IFS=$SAVE_IFS | ||
|
||
echo "Done" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters