Make `gn refs` handle files in data directories properly.
If a target specified `data = [ "test/" ]` and you ran
`gn refs out/Default //foo //foo/test/bar.cc`, gn refs would
incorrectly think that nothing referenced bar.cc. This patch
fixes that.
R=brettw@chromium.org
BUG=628783
Review-Url: https://codereview.chromium.org/2160383002
Cr-Original-Commit-Position: refs/heads/master@{#406689}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 267b1de99ba7baf7150d4e8e1b9e42969c16c343
diff --git a/tools/gn/command_refs.cc b/tools/gn/command_refs.cc
index fcd824a..64969b9 100644
--- a/tools/gn/command_refs.cc
+++ b/tools/gn/command_refs.cc
@@ -10,6 +10,7 @@
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
#include "tools/gn/commands.h"
#include "tools/gn/deps_iterator.h"
#include "tools/gn/filesystem_utils.h"
@@ -143,6 +144,9 @@
for (const auto& cur_file : target->data()) {
if (cur_file == file.value())
return true;
+ if (cur_file.back() == '/' &&
+ base::StartsWith(file.value(), cur_file, base::CompareCase::SENSITIVE))
+ return true;
}
if (target->action_values().script().value() == file.value())