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:
parent
455fecff13
commit
84d10a8ea0
@ -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
|
||||
|
@ -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
|
||||
|
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user