CB-12546: more specs for android_sdk and check_reqs. added fixtures for sdk targets. refactored target listing.

This commit is contained in:
filmaj
2017-03-15 07:47:51 -07:00
parent f7687a2567
commit 3554267adf
6 changed files with 1453 additions and 32 deletions

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env node
/*
Licensed to the Apache Software Foundation (ASF) under one
@@ -44,51 +44,68 @@ module.exports.version_string_to_api_level = {
'7.1.1': 25
};
module.exports.list_targets = function() {
module.exports.list_targets_with_android = function() {
return superspawn.spawn('android', ['list', 'targets'])
.then(function(stdout) {
var target_out = stdout.split('\n');
var targets = [];
for (var i = target_out.length; i >= 0; i--) {
for (var i = target_out.length - 1; i >= 0; i--) {
if(target_out[i].match(/id:/)) {
targets.push(targets[i].split(' ')[1]);
targets.push(target_out[i].match(/"(.+)"/)[1]);
}
}
return targets;
}).catch(function(err) {
});
};
module.exports.list_targets_with_sdkmanager = function() {
return superspawn.spawn('sdkmanager', ['--list'])
.then(function(stdout) {
var parsing_installed_packages = false;
var lines = stdout.split('\n');
var targets = [];
for (var i = 0, l = lines.length; i < l; i++) {
var line = lines[i];
if (line.match(/Installed packages/)) {
parsing_installed_packages = true;
} else if (line.match(/Available Packages/) || line.match(/Available Updates/)) {
// we are done working through installed packages, exit
break;
}
if (parsing_installed_packages) {
// Match stock android platform
if (line.match(/platforms;android-\d+/)) {
targets.push(line.match(/(android-\d+)/)[1]);
}
// Match Google APIs
if (line.match(/addon-google_apis-google-\d+/)) {
var description = lines[i + 1];
// munge description to match output from old android sdk tooling
var api_level = description.match(/Android (\d+)/); //[1];
if (api_level) {
targets.push('Google Inc.:Google APIs:' + api_level[1]);
}
}
// TODO: match anything else?
}
}
return targets;
});
};
module.exports.list_targets = function() {
return module.exports.list_targets_with_android()
.catch(function(err) {
// there's a chance `android` no longer works.
// lets see if `sdkmanager` is available and we can figure it out
var avail_regex = /android command is no longer available/;
if (err.code && (err.stdout.match(avail_regex) || err.stderr.match(avail_regex))) {
return superspawn.spawn('sdkmanager', ['--list'])
.then(function(stdout) {
var parsing_installed_packages = false;
var lines = stdout.split('\n');
var targets = [];
for (var i = 0, l = lines.length; i < l; i++) {
var line = lines[i];
if (line.match(/Installed packages/)) {
parsing_installed_packages = true;
} else if (line.match(/Available Packages/) || line.match(/Available Updates/)) {
// we are done working through installed packages, exit
break;
}
if (parsing_installed_packages && line.match(/platforms;android-\d+/)) {
targets.push(line.match(/android-\d+/)[0].split('-')[1]);
}
}
return targets;
});
return module.exports.list_targets_with_sdkmanager();
} else throw err;
}).then(function(targets) {
if (targets.length === 0) {
return Q.reject(new Error('No android targets (SDKs) installed!'));
} else {
// Ensure we are working with integers
targets = targets.map(function(t) { return parseInt(t); });
// Sort them in descending order.
targets.sort(function(a, b) { return b-a; });
return targets;
}
return targets;
});
};

View File

@@ -317,8 +317,7 @@ module.exports.check_android_target = function(originalError) {
// android-L
// Google Inc.:Google APIs:20
// Google Inc.:Glass Development Kit Preview:20
var desired_api_level = parseInt(module.exports.get_target().replace(/android-/, ''));
// Changing "targets" to "target" is stupid and makes more code. Thanks Google!
var desired_api_level = module.exports.get_target();
return android_sdk.list_targets()
.then(function(targets) {
if (targets.indexOf(desired_api_level) >= 0) {