diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-01-10 13:48:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-10 13:48:28 +0100 |
commit | 25c024acfd8a44c1f00029955e566a955b6f3527 (patch) | |
tree | f8cf8c3eb40ffda930a2e8c1abeb99b831a3bbec | |
parent | f8da87c763e8097ddb4184f4213325c3e532b0fe (diff) | |
parent | 0218494e6bfc836bd40ff63db9b20ad23c880083 (diff) |
Merge pull request #33149 from Calinou/cli-scene-path-parsing-stricter
Be stricter on what's considered a scene path in CLI argument parsing
-rw-r--r-- | main/main.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/main/main.cpp b/main/main.cpp index 7ff283bab0..5cfab3dc4a 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1402,6 +1402,7 @@ bool Main::start() { bool hasicon = false; String doc_tool; List<String> removal_docs; + String positional_arg; String game_path; String script; String test; @@ -1429,8 +1430,18 @@ bool Main::start() { } else if (args[i] == "-p" || args[i] == "--project-manager") { project_manager = true; #endif - } else if (args[i].length() && args[i][0] != '-' && game_path == "") { - game_path = args[i]; + } else if (args[i].length() && args[i][0] != '-' && positional_arg == "") { + positional_arg = args[i]; + + if (args[i].ends_with(".scn") || args[i].ends_with(".tscn") || args[i].ends_with(".escn")) { + // Only consider the positional argument to be a scene path if it ends with + // a file extension associated with Godot scenes. This makes it possible + // for projects to parse command-line arguments for custom CLI arguments + // or other file extensions without trouble. This can be used to implement + // "drag-and-drop onto executable" logic, which can prove helpful + // for non-game applications. + game_path = args[i]; + } } //parameters that have an argument to the right else if (i < (args.size() - 1)) { @@ -1525,7 +1536,7 @@ bool Main::start() { } if (_export_preset != "") { - if (game_path == "") { + if (positional_arg == "") { String err = "Command line includes export parameter option, but no destination path was given.\n"; err += "Please specify the binary's file path to export to. Aborting export."; ERR_PRINT(err); @@ -1716,7 +1727,7 @@ bool Main::start() { sml->get_root()->add_child(editor_node); if (_export_preset != "") { - editor_node->export_preset(_export_preset, game_path, export_debug, export_pack_only); + editor_node->export_preset(_export_preset, positional_arg, export_debug, export_pack_only); game_path = ""; // Do not load anything. } } |