mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-16 11:21:18 +03:00
Some CLI args are parsed before initializing packages. --board argument is parsed after. Fixes #3261
This commit is contained in:
@ -275,6 +275,9 @@ public class Base {
|
|||||||
BaseNoGui.notifier = new GUIUserNotifier(this);
|
BaseNoGui.notifier = new GUIUserNotifier(this);
|
||||||
this.recentSketchesMenuItems = new LinkedList<JMenuItem>();
|
this.recentSketchesMenuItems = new LinkedList<JMenuItem>();
|
||||||
|
|
||||||
|
CommandlineParser parser = new CommandlineParser(args);
|
||||||
|
parser.parseArgumentsPhase1();
|
||||||
|
|
||||||
BaseNoGui.checkInstallationFolder();
|
BaseNoGui.checkInstallationFolder();
|
||||||
|
|
||||||
String sketchbookPath = BaseNoGui.getSketchbookPath();
|
String sketchbookPath = BaseNoGui.getSketchbookPath();
|
||||||
@ -302,7 +305,7 @@ public class Base {
|
|||||||
this.pdeKeywords = new PdeKeywords();
|
this.pdeKeywords = new PdeKeywords();
|
||||||
this.pdeKeywords.reload();
|
this.pdeKeywords.reload();
|
||||||
|
|
||||||
CommandlineParser parser = CommandlineParser.newCommandlineParser(args);
|
parser.parseArgumentsPhase2();
|
||||||
|
|
||||||
for (String path : parser.getFilenames()) {
|
for (String path : parser.getFilenames()) {
|
||||||
// Correctly resolve relative paths
|
// Correctly resolve relative paths
|
||||||
|
@ -427,6 +427,9 @@ public class BaseNoGui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static public void init(String[] args) throws Exception {
|
static public void init(String[] args) throws Exception {
|
||||||
|
CommandlineParser parser = new CommandlineParser(args);
|
||||||
|
parser.parseArgumentsPhase1();
|
||||||
|
|
||||||
String sketchbookPath = getSketchbookPath();
|
String sketchbookPath = getSketchbookPath();
|
||||||
|
|
||||||
// If no path is set, get the default sketchbook folder for this platform
|
// If no path is set, get the default sketchbook folder for this platform
|
||||||
@ -436,13 +439,13 @@ public class BaseNoGui {
|
|||||||
else
|
else
|
||||||
showError(_("No sketchbook"), _("Sketchbook path not defined"), null);
|
showError(_("No sketchbook"), _("Sketchbook path not defined"), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseNoGui.initPackages();
|
BaseNoGui.initPackages();
|
||||||
|
|
||||||
// Setup board-dependent variables.
|
// Setup board-dependent variables.
|
||||||
onBoardOrPortChange();
|
onBoardOrPortChange();
|
||||||
|
|
||||||
CommandlineParser parser = CommandlineParser.newCommandlineParser(args);
|
parser.parseArgumentsPhase2();
|
||||||
|
|
||||||
for (String path: parser.getFilenames()) {
|
for (String path: parser.getFilenames()) {
|
||||||
// Correctly resolve relative paths
|
// Correctly resolve relative paths
|
||||||
|
@ -9,10 +9,7 @@ import processing.app.debug.TargetPlatform;
|
|||||||
import processing.app.legacy.PApplet;
|
import processing.app.legacy.PApplet;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static processing.app.I18n._;
|
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 ACTION action = ACTION.GUI;
|
||||||
private boolean doVerboseBuild = false;
|
private boolean doVerboseBuild = false;
|
||||||
private boolean doVerboseUpload = false;
|
private boolean doVerboseUpload = false;
|
||||||
@ -44,30 +43,24 @@ public class CommandlineParser {
|
|||||||
private String libraryToInstall;
|
private String libraryToInstall;
|
||||||
private List<String> filenames = new LinkedList<String>();
|
private List<String> filenames = new LinkedList<String>();
|
||||||
|
|
||||||
public static CommandlineParser newCommandlineParser(String[] args) {
|
public CommandlineParser(String[] args) {
|
||||||
return new CommandlineParser(args);
|
this.args = args;
|
||||||
}
|
|
||||||
|
|
||||||
private CommandlineParser(String[] args) {
|
actions = new HashMap<String, ACTION>();
|
||||||
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.put("--verify", ACTION.VERIFY);
|
actions.put("--verify", ACTION.VERIFY);
|
||||||
actions.put("--upload", ACTION.UPLOAD);
|
actions.put("--upload", ACTION.UPLOAD);
|
||||||
actions.put("--get-pref", ACTION.GET_PREF);
|
actions.put("--get-pref", ACTION.GET_PREF);
|
||||||
actions.put("--install-boards", ACTION.INSTALL_BOARD);
|
actions.put("--install-boards", ACTION.INSTALL_BOARD);
|
||||||
actions.put("--install-library", ACTION.INSTALL_LIBRARY);
|
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++) {
|
for (int i = 0; i < args.length; i++) {
|
||||||
ACTION a = actions.get(args[i]);
|
ACTION a = actions.get(args[i]);
|
||||||
if (a != null) {
|
if (a != null) {
|
||||||
if (action != ACTION.GUI && action != ACTION.NOOP) {
|
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, ", "));
|
String mess = I18n.format(_("Can only pass one of: {0}"), PApplet.join(valid, ", "));
|
||||||
BaseNoGui.showError(null, mess, 3);
|
BaseNoGui.showError(null, mess, 3);
|
||||||
}
|
}
|
||||||
@ -139,7 +132,6 @@ public class CommandlineParser {
|
|||||||
i++;
|
i++;
|
||||||
if (i >= args.length)
|
if (i >= args.length)
|
||||||
BaseNoGui.showError(null, _("Argument required for --board"), 3);
|
BaseNoGui.showError(null, _("Argument required for --board"), 3);
|
||||||
processBoardArgument(args[i]);
|
|
||||||
if (action == ACTION.GUI)
|
if (action == ACTION.GUI)
|
||||||
action = ACTION.NOOP;
|
action = ACTION.NOOP;
|
||||||
continue;
|
continue;
|
||||||
@ -200,6 +192,23 @@ public class CommandlineParser {
|
|||||||
|
|
||||||
filenames.add(args[i]);
|
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() {
|
private void checkAction() {
|
||||||
|
Reference in New Issue
Block a user