Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1820)

Unified Diff: tools/gn/function_rebase_path.cc

Issue 161783002: Remove default value checking in GN, adds getenv function, reorders parameters to rebase_path. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/command_args.cc ('k') | tools/gn/function_rebase_path_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/function_rebase_path.cc
diff --git a/tools/gn/function_rebase_path.cc b/tools/gn/function_rebase_path.cc
index 97ddefeb35d03caf8e76b7027b746c95736a0e11..2f0e4b4e0dd0c8d7935c99dfee8dd0fca6698dd4 100644
--- a/tools/gn/function_rebase_path.cc
+++ b/tools/gn/function_rebase_path.cc
@@ -149,8 +149,10 @@ const char kRebasePath[] = "rebase_path";
const char kRebasePath_Help[] =
"rebase_path: Rebase a file or directory to another location.\n"
"\n"
- " converted = rebase_path(input, current_base, new_base,\n"
- " [path_separators])\n"
+ " converted = rebase_path(input,\n"
+ " new_base = \"\",\n"
+ " current_base = \".\",\n"
+ " path_separators = \"none\")\n"
"\n"
" Takes a string argument representing a file name, or a list of such\n"
" strings and converts it/them to be relative to a different base\n"
@@ -175,22 +177,22 @@ const char kRebasePath_Help[] =
" paths (\"/foo/bar.txt\"), or source absolute paths\n"
" (\"//foo/bar.txt\").\n"
"\n"
- " current_base\n"
- " Directory representing the base for relative paths in the input.\n"
- " If this is not an absolute path, it will be treated as being\n"
- " relative to the current build file. Use \".\" to convert paths\n"
- " from the current BUILD-file's directory.\n"
- "\n"
" new_base\n"
- " The directory to convert the paths to be relative to. As with the\n"
- " current_base, this can be a relative path, which will be treated\n"
- " as being relative to the current BUILD-file's directory.\n"
+ " The directory to convert the paths to be relative to. This can be\n"
+ " an absolute path or a relative path (which will be treated\n"
+ " as being relative to the current BUILD-file's directory).\n"
"\n"
- " As a special case, if new_base is the empty string, all paths\n"
- " will be converted to system-absolute native style paths with\n"
- " system path separators. This is useful for invoking external\n"
+ " As a special case, if new_base is the empty string (the default),\n"
+ " all paths will be converted to system-absolute native style paths\n"
+ " with system path separators. This is useful for invoking external\n"
" programs.\n"
"\n"
+ " current_base\n"
+ " Directory representing the base for relative paths in the input.\n"
+ " If this is not an absolute path, it will be treated as being\n"
+ " relative to the current build file. Use \".\" (the default) to\n"
+ " convert paths from the current BUILD-file's directory.\n"
+ "\n"
" path_separators\n"
" On Windows systems, indicates whether and how path separators\n"
" should be converted as part of the transformation. It can be one\n"
@@ -218,11 +220,11 @@ const char kRebasePath_Help[] =
"\n"
" # Convert a file in the current directory to be relative to the build\n"
" # directory (the current dir when executing compilers and scripts).\n"
- " foo = rebase_path(\"myfile.txt\", \".\", root_build_dir)\n"
+ " foo = rebase_path(\"myfile.txt\", root_build_dir)\n"
" # might produce \"../../project/myfile.txt\".\n"
"\n"
" # Convert a file to be system absolute:\n"
- " foo = rebase_path(\"myfile.txt\", \".\", \"\")\n"
+ " foo = rebase_path(\"myfile.txt\")\n"
" # Might produce \"D:\\source\\project\\myfile.txt\" on Windows or\n"
" # \"/home/you/source/project/myfile.txt\" on Linux.\n"
"\n"
@@ -241,9 +243,9 @@ const char kRebasePath_Help[] =
" # to be relative to the build directory:\n"
" args = [\n"
" \"--data\",\n"
- " rebase_path(\"//mything/data/input.dat\", \".\", root_build_dir),\n"
+ " rebase_path(\"//mything/data/input.dat\", root_build_dir),\n"
" \"--rel\",\n"
- " rebase_path(\"relative_path.txt\", \".\", root_build_dir)\n"
+ " rebase_path(\"relative_path.txt\", root_build_dir)\n"
" ]\n"
" }\n";
@@ -253,33 +255,48 @@ Value RunRebasePath(Scope* scope,
Err* err) {
Value result;
+ // Argument indices.
+ static const size_t kArgIndexInputs = 0;
+ static const size_t kArgIndexDest = 1;
+ static const size_t kArgIndexFrom = 2;
+ static const size_t kArgIndexPathConversion = 3;
+
// Inputs.
- if (args.size() != 3 && args.size() != 4) {
- *err = Err(function->function(), "rebase_path takes 3 or 4 args.");
+ if (args.size() < 1 || args.size() > 4) {
+ *err = Err(function->function(), "Wrong # of arguments for rebase_path.");
return result;
}
- const Value& inputs = args[0];
-
- // From path.
- if (!args[1].VerifyTypeIs(Value::STRING, err))
- return result;
- const SourceDir& current_dir = scope->GetSourceDir();
- SourceDir from_dir = current_dir.ResolveRelativeDir(args[1].string_value());
+ const Value& inputs = args[kArgIndexInputs];
// To path.
- if (!args[2].VerifyTypeIs(Value::STRING, err))
- return result;
- bool convert_to_system_absolute = false;
+ bool convert_to_system_absolute = true;
SourceDir to_dir;
- if (args[2].string_value().empty()) {
- convert_to_system_absolute = true;
+ const SourceDir& current_dir = scope->GetSourceDir();
+ if (args.size() > kArgIndexDest) {
+ if (!args[kArgIndexDest].VerifyTypeIs(Value::STRING, err))
+ return result;
+ if (!args[kArgIndexDest].string_value().empty()) {
+ to_dir =
+ current_dir.ResolveRelativeDir(args[kArgIndexDest].string_value());
+ convert_to_system_absolute = false;
+ }
+ }
+
+ // From path.
+ SourceDir from_dir;
+ if (args.size() > kArgIndexFrom) {
+ if (!args[kArgIndexFrom].VerifyTypeIs(Value::STRING, err))
+ return result;
+ from_dir =
+ current_dir.ResolveRelativeDir(args[kArgIndexFrom].string_value());
} else {
- to_dir = current_dir.ResolveRelativeDir(args[2].string_value());
+ // Default to current directory if unspecified.
+ from_dir = current_dir;
}
// Path conversion.
SeparatorConversion sep_conversion = SEP_NO_CHANGE;
- if (args.size() == 4) {
+ if (args.size() > kArgIndexPathConversion) {
if (convert_to_system_absolute) {
*err = Err(function, "Can't specify slash conversion.",
"You specified absolute system path output by using an empty string "
@@ -288,17 +305,20 @@ Value RunRebasePath(Scope* scope,
return result;
}
- if (!args[3].VerifyTypeIs(Value::STRING, err))
+ if (!args[kArgIndexPathConversion].VerifyTypeIs(Value::STRING, err))
return result;
- const std::string& sep_string = args[3].string_value();
+ const std::string& sep_string =
+ args[kArgIndexPathConversion].string_value();
if (sep_string == "to_system") {
sep_conversion = SEP_TO_SYSTEM;
} else if (sep_string == "from_system") {
sep_conversion = SEP_FROM_SYSTEM;
} else if (sep_string != "none") {
- *err = Err(args[3], "Invalid path separator conversion mode.",
+ *err = Err(args[kArgIndexPathConversion],
+ "Invalid path separator conversion mode.",
"I was expecting \"none\", \"to_system\", or \"from_system\" and\n"
- "you gave me \"" + args[3].string_value() + "\".");
+ "you gave me \"" + args[kArgIndexPathConversion].string_value() +
+ "\".");
return result;
}
}
« no previous file with comments | « tools/gn/command_args.cc ('k') | tools/gn/function_rebase_path_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698