1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-20 14:54:31 +01:00

Some CLI args are parsed before initializing packages. --board argument is parsed after. Fixes #3261

This commit is contained in:
Federico Fissore 2015-06-05 17:18:50 +02:00
parent 455fecff13
commit 84d10a8ea0
3 changed files with 37 additions and 22 deletions

View File

@ -275,6 +275,9 @@ public class Base {
BaseNoGui.notifier = new GUIUserNotifier(this);
this.recentSketchesMenuItems = new LinkedList<JMenuItem>();
CommandlineParser parser = new CommandlineParser(args);
parser.parseArgumentsPhase1();
BaseNoGui.checkInstallationFolder();
String sketchbookPath = BaseNoGui.getSketchbookPath();
@ -302,7 +305,7 @@ public class Base {
this.pdeKeywords = new PdeKeywords();
this.pdeKeywords.reload();
CommandlineParser parser = CommandlineParser.newCommandlineParser(args);
parser.parseArgumentsPhase2();
for (String path : parser.getFilenames()) {
// Correctly resolve relative paths

View File

@ -427,6 +427,9 @@ public class BaseNoGui {
}
static public void init(String[] args) throws Exception {
CommandlineParser parser = new CommandlineParser(args);
parser.parseArgumentsPhase1();
String sketchbookPath = getSketchbookPath();
// If no path is set, get the default sketchbook folder for this platform
@ -436,13 +439,13 @@ public class BaseNoGui {
else
showError(_("No sketchbook"), _("Sketchbook path not defined"), null);
}
BaseNoGui.initPackages();
// Setup board-dependent variables.
onBoardOrPortChange();
CommandlineParser parser = CommandlineParser.newCommandlineParser(args);
parser.parseArgumentsPhase2();
for (String path: parser.getFilenames()) {
// Correctly resolve relative paths

View File

@ -9,10 +9,7 @@ import processing.app.debug.TargetPlatform;
import processing.app.legacy.PApplet;
import java.io.File;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
import static processing.app.I18n._;
@ -32,6 +29,8 @@ public class CommandlineParser {
}
}
private final String[] args;
private final Map<String, ACTION> actions;
private ACTION action = ACTION.GUI;
private boolean doVerboseBuild = false;
private boolean doVerboseUpload = false;
@ -44,30 +43,24 @@ public class CommandlineParser {
private String libraryToInstall;
private List<String> filenames = new LinkedList<String>();
public static CommandlineParser newCommandlineParser(String[] args) {
return new CommandlineParser(args);
}
public CommandlineParser(String[] args) {
this.args = args;
private CommandlineParser(String[] args) {
parseArguments(args);
checkAction();
}
private void parseArguments(String[] args) {
// Map of possible actions and corresponding options
final Map<String, ACTION> actions = new HashMap<String, ACTION>();
actions = new HashMap<String, ACTION>();
actions.put("--verify", ACTION.VERIFY);
actions.put("--upload", ACTION.UPLOAD);
actions.put("--get-pref", ACTION.GET_PREF);
actions.put("--install-boards", ACTION.INSTALL_BOARD);
actions.put("--install-library", ACTION.INSTALL_LIBRARY);
}
// Check if any files were passed in on the command line
public void parseArgumentsPhase1() {
for (int i = 0; i < args.length; i++) {
ACTION a = actions.get(args[i]);
if (a != null) {
if (action != ACTION.GUI && action != ACTION.NOOP) {
String[] valid = actions.keySet().toArray(new String[0]);
Set<String> strings = actions.keySet();
String[] valid = strings.toArray(new String[strings.size()]);
String mess = I18n.format(_("Can only pass one of: {0}"), PApplet.join(valid, ", "));
BaseNoGui.showError(null, mess, 3);
}
@ -139,7 +132,6 @@ public class CommandlineParser {
i++;
if (i >= args.length)
BaseNoGui.showError(null, _("Argument required for --board"), 3);
processBoardArgument(args[i]);
if (action == ACTION.GUI)
action = ACTION.NOOP;
continue;
@ -200,6 +192,23 @@ public class CommandlineParser {
filenames.add(args[i]);
}
checkAction();
}
public void parseArgumentsPhase2() {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("--board")) {
i++;
if (i >= args.length) {
BaseNoGui.showError(null, _("Argument required for --board"), 3);
}
processBoardArgument(args[i]);
if (action == ACTION.GUI) {
action = ACTION.NOOP;
}
}
}
}
private void checkAction() {