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

Unified Diff: tools/gn/command_format.cc

Issue 779883002: gn format: Add --dry-run flag for PRESUBMIT (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/command_format.cc
diff --git a/tools/gn/command_format.cc b/tools/gn/command_format.cc
index 7128577a7910d7658f2dc99f9665f95e2ebab78b..52ed48ed9ced2f62a3ed3793113a0afe5e9756e4 100644
--- a/tools/gn/command_format.cc
+++ b/tools/gn/command_format.cc
@@ -18,6 +18,7 @@
namespace commands {
+const char kSwitchDryRun[] = "dry-run";
const char kSwitchDumpTree[] = "dump-tree";
const char kSwitchInPlace[] = "in-place";
const char kSwitchStdin[] = "stdin";
@@ -31,6 +32,14 @@ const char kFormat_Help[] =
" Formats .gn file to a standard format.\n"
"\n"
"Arguments\n"
+ " --dry-run\n"
+ " Does not change or output anything, but sets the process exit code\n"
+ " based on whether output would be different than what's on disk.\n"
+ " This is useful for presubmit/lint-type checks.\n"
+ " - Exit code 0: successful format, matches on disk.\n"
+ " - Exit code 1: general failure (parse error, etc.)\n"
+ " - Exit code 2: successful format, but differs from on disk.\n"
+ "\n"
" --dump-tree\n"
" For debugging only, dumps the parse tree.\n"
"\n"
@@ -944,11 +953,20 @@ bool FormatStringToString(const std::string& input,
}
int RunFormat(const std::vector<std::string>& args) {
+ bool dry_run =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchDryRun);
bool dump_tree =
base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchDumpTree);
-
bool from_stdin =
base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchStdin);
+ bool in_place =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchInPlace);
+
+ if (dry_run) {
+ // --dry-run only works with an actual file to compare to.
+ from_stdin = false;
+ in_place = true;
+ }
if (from_stdin) {
if (args.size() != 0) {
@@ -979,8 +997,6 @@ int RunFormat(const std::vector<std::string>& args) {
std::string output_string;
if (FormatFileToString(&setup, file, dump_tree, &output_string)) {
- bool in_place =
- base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchInPlace);
if (in_place) {
base::FilePath to_write = setup.build_settings().GetFullPath(file);
std::string original_contents;
@@ -990,6 +1006,8 @@ int RunFormat(const std::vector<std::string>& args) {
std::string("\" for comparison.")).PrintToStdout();
return 1;
}
+ if (dry_run)
+ return original_contents == output_string ? 0 : 2;
if (original_contents != output_string) {
if (base::WriteFile(to_write,
output_string.data(),
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698