diff options
| author | Raphael <raphael@google.com> | 2009-06-10 11:34:08 -0700 |
|---|---|---|
| committer | Raphael <raphael@google.com> | 2009-06-10 11:34:08 -0700 |
| commit | 61df13dec40be51729ebf96769b3bc6c716e16cc (patch) | |
| tree | 63109149f6be2971df77c3de3412a33feceaba01 /tools/sdkmanager/app | |
| parent | 891968b78e9604e0c6f06c3b142bb7274c24bc5b (diff) | |
| download | android_development-61df13dec40be51729ebf96769b3bc6c716e16cc.tar.gz android_development-61df13dec40be51729ebf96769b3bc6c716e16cc.tar.bz2 android_development-61df13dec40be51729ebf96769b3bc6c716e16cc.zip | |
ADT #1856119: 'android update project' can now update sub-projects.
Diffstat (limited to 'tools/sdkmanager/app')
4 files changed, 89 insertions, 52 deletions
diff --git a/tools/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java b/tools/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java index 4a3c16c97..d4da21bee 100644 --- a/tools/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java +++ b/tools/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java @@ -85,13 +85,13 @@ public class CommandLineProcessor { mLog = logger; mActions = actions; - define(MODE.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "v", KEY_VERBOSE, + define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "v", KEY_VERBOSE, "Verbose mode: errors, warnings and informational messages are printed.", false); - define(MODE.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "s", KEY_SILENT, + define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "s", KEY_SILENT, "Silent mode: only errors are printed out.", false); - define(MODE.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "h", KEY_HELP, + define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "h", KEY_HELP, "This help.", false); } @@ -507,7 +507,7 @@ public class CommandLineProcessor { } } else if (arg.getDefaultValue() != null) { Object v = arg.getDefaultValue(); - if (arg.getMode() != MODE.BOOLEAN || v.equals(Boolean.TRUE)) { + if (arg.getMode() != Mode.BOOLEAN || v.equals(Boolean.TRUE)) { value = v.toString(); } } @@ -537,7 +537,7 @@ public class CommandLineProcessor { * The mode of an argument specifies the type of variable it represents, * whether an extra parameter is required after the flag and how to parse it. */ - static enum MODE { + static enum Mode { /** Argument value is a Boolean. Default value is a Boolean. */ BOOLEAN { @Override @@ -628,7 +628,7 @@ public class CommandLineProcessor { * An argument accepted by the command-line, also called "a flag". * Arguments must have a short version (one letter), a long version name and a description. * They can have a default value, or it can be null. - * Depending on the {@link MODE}, the default value can be a Boolean, an Integer, a String + * Depending on the {@link Mode}, the default value can be a Boolean, an Integer, a String * or a String array (in which case the first item is the current by default.) */ static class Arg { @@ -645,7 +645,7 @@ public class CommandLineProcessor { /** A default value. Can be null. */ private final Object mDefaultValue; /** The argument mode (type + process method). Never null. */ - private final MODE mMode; + private final Mode mMode; /** True if this argument is mandatory for this verb/directobject. */ private final boolean mMandatory; /** Current value. Initially set to the default value. */ @@ -656,15 +656,15 @@ public class CommandLineProcessor { /** * Creates a new argument flag description. * - * @param mode The {@link MODE} for the argument. + * @param mode The {@link Mode} for the argument. * @param mandatory True if this argument is mandatory for this action. * @param directObject The action name. Can be #NO_VERB_OBJECT or #INTERNAL_FLAG. * @param shortName The one-letter short argument name. Cannot be empty nor null. * @param longName The long argument name. Cannot be empty nor null. * @param description The description. Cannot be null. - * @param defaultValue The default value (or values), which depends on the selected {@link MODE}. + * @param defaultValue The default value (or values), which depends on the selected {@link Mode}. */ - public Arg(MODE mode, + public Arg(Mode mode, boolean mandatory, String verb, String directObject, @@ -734,7 +734,7 @@ public class CommandLineProcessor { } /** Returns the argument mode (type + process method). Never null. */ - public MODE getMode() { + public Mode getMode() { return mMode; } @@ -752,21 +752,21 @@ public class CommandLineProcessor { /** * Internal helper to define a new argument for a give action. * - * @param mode The {@link MODE} for the argument. + * @param mode The {@link Mode} for the argument. * @param verb The verb name. Can be #INTERNAL_VERB. * @param directObject The action name. Can be #NO_VERB_OBJECT or #INTERNAL_FLAG. * @param shortName The one-letter short argument name. Cannot be empty nor null. * @param longName The long argument name. Cannot be empty nor null. * @param description The description. Cannot be null. - * @param defaultValue The default value (or values), which depends on the selected {@link MODE}. + * @param defaultValue The default value (or values), which depends on the selected {@link Mode}. */ - protected void define(MODE mode, + protected void define(Mode mode, boolean mandatory, String verb, String directObject, String shortName, String longName, String description, Object defaultValue) { - assert(mandatory || mode == MODE.BOOLEAN); // a boolean mode cannot be mandatory + assert(mandatory || mode == Mode.BOOLEAN); // a boolean mode cannot be mandatory if (directObject == null) { directObject = NO_VERB_OBJECT; diff --git a/tools/sdkmanager/app/src/com/android/sdkmanager/Main.java b/tools/sdkmanager/app/src/com/android/sdkmanager/Main.java index 1836d330b..b5988ffc3 100644 --- a/tools/sdkmanager/app/src/com/android/sdkmanager/Main.java +++ b/tools/sdkmanager/app/src/com/android/sdkmanager/Main.java @@ -337,6 +337,33 @@ class Main { creator.updateProject(projectDir, target, mSdkCommandLine.getParamName()); + + boolean doSubProjects = mSdkCommandLine.getParamSubProject(); + boolean couldHaveDone = false; + + // If there are any sub-folders with a manifest, try to update them as projects + // too. This will take care of updating any underlying test project even if the + // user changed the folder name. + File[] files = new File(projectDir).listFiles(); + if (files != null) { + for (File dir : files) { + if (dir.isDirectory() && + new File(dir, SdkConstants.FN_ANDROID_MANIFEST_XML).isFile()) { + if (doSubProjects) { + creator.updateProject(dir.getPath(), + target, + mSdkCommandLine.getParamName()); + } else { + couldHaveDone = true; + } + } + } + } + + if (couldHaveDone) { + mSdkLog.printf("It seems that there are sub-projects. If you want to update them\nplease use the --%1$s parameter.", + SdkCommandLine.KEY_SUBPROJECTS); + } } /** diff --git a/tools/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java b/tools/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java index 2ff0c5326..c48a3860b 100644 --- a/tools/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java +++ b/tools/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java @@ -38,20 +38,21 @@ public class SdkCommandLine extends CommandLineProcessor { public static final String OBJECT_PROJECT = "project"; public static final String OBJECT_ADB = "adb"; - public static final String ARG_ALIAS = "alias"; - public static final String ARG_ACTIVITY = "activity"; - - public static final String KEY_ACTIVITY = ARG_ACTIVITY; - public static final String KEY_PACKAGE = "package"; - public static final String KEY_MODE = "mode"; - public static final String KEY_TARGET_ID = OBJECT_TARGET; - public static final String KEY_NAME = "name"; - public static final String KEY_PATH = "path"; - public static final String KEY_FILTER = "filter"; - public static final String KEY_SKIN = "skin"; - public static final String KEY_SDCARD = "sdcard"; - public static final String KEY_FORCE = "force"; - public static final String KEY_RENAME = "rename"; + public static final String ARG_ALIAS = "alias"; + public static final String ARG_ACTIVITY = "activity"; + + public static final String KEY_ACTIVITY = ARG_ACTIVITY; + public static final String KEY_PACKAGE = "package"; + public static final String KEY_MODE = "mode"; + public static final String KEY_TARGET_ID = OBJECT_TARGET; + public static final String KEY_NAME = "name"; + public static final String KEY_PATH = "path"; + public static final String KEY_FILTER = "filter"; + public static final String KEY_SKIN = "skin"; + public static final String KEY_SDCARD = "sdcard"; + public static final String KEY_FORCE = "force"; + public static final String KEY_RENAME = "rename"; + public static final String KEY_SUBPROJECTS = "subprojects"; /** * Action definitions for SdkManager command line. @@ -97,46 +98,46 @@ public class SdkCommandLine extends CommandLineProcessor { // --- create avd --- - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_CREATE, OBJECT_AVD, "p", KEY_PATH, "Location path of the directory where the new AVD will be created", null); - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_CREATE, OBJECT_AVD, "n", KEY_NAME, "Name of the new AVD", null); - define(MODE.INTEGER, true, + define(Mode.INTEGER, true, VERB_CREATE, OBJECT_AVD, "t", KEY_TARGET_ID, "Target id of the new AVD", null); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_CREATE, OBJECT_AVD, "s", KEY_SKIN, "Skin of the new AVD", null); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_CREATE, OBJECT_AVD, "c", KEY_SDCARD, "Path to a shared SD card image, or size of a new sdcard for the new AVD", null); - define(MODE.BOOLEAN, false, + define(Mode.BOOLEAN, false, VERB_CREATE, OBJECT_AVD, "f", KEY_FORCE, "Force creation (override an existing AVD)", false); // --- delete avd --- - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_DELETE, OBJECT_AVD, "n", KEY_NAME, "Name of the AVD to delete", null); // --- move avd --- - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_MOVE, OBJECT_AVD, "n", KEY_NAME, "Name of the AVD to move or rename", null); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_MOVE, OBJECT_AVD, "r", KEY_RENAME, "New name of the AVD to rename", null); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_MOVE, OBJECT_AVD, "p", KEY_PATH, "New location path of the directory where to move the AVD", null); // --- update avd --- - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_UPDATE, OBJECT_AVD, "n", KEY_NAME, "Name of the AVD to update", null); @@ -145,41 +146,45 @@ public class SdkCommandLine extends CommandLineProcessor { /* Disabled for ADT 0.9 / Cupcake SDK 1.5_r1 release. [bug #1795718]. This currently does not work, the alias build rules need to be fixed. - define(MODE.ENUM, true, + define(Mode.ENUM, true, VERB_CREATE, OBJECT_PROJECT, "m", KEY_MODE, "Project mode", new String[] { ARG_ACTIVITY, ARG_ALIAS }); */ - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_CREATE, OBJECT_PROJECT, "p", KEY_PATH, "Location path of new project", null); - define(MODE.INTEGER, true, + define(Mode.INTEGER, true, VERB_CREATE, OBJECT_PROJECT, "t", KEY_TARGET_ID, "Target id of the new project", null); - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_CREATE, OBJECT_PROJECT, "k", KEY_PACKAGE, "Package name", null); - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_CREATE, OBJECT_PROJECT, "a", KEY_ACTIVITY, "Activity name", null); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_CREATE, OBJECT_PROJECT, "n", KEY_NAME, "Project name", null); // --- update project --- - define(MODE.STRING, true, + define(Mode.STRING, true, VERB_UPDATE, OBJECT_PROJECT, "p", KEY_PATH, "Location path of the project", null); - define(MODE.INTEGER, true, + define(Mode.INTEGER, true, VERB_UPDATE, OBJECT_PROJECT, "t", KEY_TARGET_ID, "Target id to set for the project", -1); - define(MODE.STRING, false, + define(Mode.STRING, false, VERB_UPDATE, OBJECT_PROJECT, "n", KEY_NAME, "Project name", null); + define(Mode.BOOLEAN, false, + VERB_UPDATE, OBJECT_PROJECT, + "s", KEY_SUBPROJECTS, + "Also update any projects in sub-folders, such as test projects.", false); } @Override @@ -234,8 +239,13 @@ public class SdkCommandLine extends CommandLineProcessor { return ((String) getValue(null, OBJECT_PROJECT, KEY_PACKAGE)); } - /** Helper to retrieve the --activity for the new project action. */ + /** Helper to retrieve the --activity for any project action. */ public String getParamProjectActivity() { return ((String) getValue(null, OBJECT_PROJECT, KEY_ACTIVITY)); } + + /** Helper to retrieve the --subprojects for any project action. */ + public boolean getParamSubProject() { + return ((Boolean) getValue(null, OBJECT_PROJECT, KEY_SUBPROJECTS)).booleanValue(); + } } diff --git a/tools/sdkmanager/app/tests/com/android/sdkmanager/CommandLineProcessorTest.java b/tools/sdkmanager/app/tests/com/android/sdkmanager/CommandLineProcessorTest.java index 918591b53..a213652d7 100644 --- a/tools/sdkmanager/app/tests/com/android/sdkmanager/CommandLineProcessorTest.java +++ b/tools/sdkmanager/app/tests/com/android/sdkmanager/CommandLineProcessorTest.java @@ -41,9 +41,9 @@ public class CommandLineProcessorTest extends TestCase { { "verb1", "action1", "Some action" }, { "verb1", "action2", "Another action" }, }); - define(MODE.STRING, false /*mandatory*/, + define(Mode.STRING, false /*mandatory*/, "verb1", "action1", "1", "first", "non-mandatory flag", null); - define(MODE.STRING, true /*mandatory*/, + define(Mode.STRING, true /*mandatory*/, "verb1", "action1", "2", "second", "mandatory flag", null); } |
