Remove duplicated -Ldependency arguments to rustc.

For more complex projects, these arguments can be repeated dozens
of times.

Change-Id: I511b09c7fb06fe3c199fa01fd3e3fff6ba86a635
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/8160
Reviewed-by: Petr Hosek <phosek@google.com>
Commit-Queue: Petr Hosek <phosek@google.com>
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc
index 5ca0750..c8f8e43 100644
--- a/src/gn/ninja_rust_binary_target_writer.cc
+++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -249,12 +249,15 @@
   out_ << "  rustdeps =";
 
   // Rust dependencies.
+  UniqueVector<SourceDir> transitive_rustdep_dirs;
   for (const auto& rustdep : transitive_rustdeps) {
     // TODO switch to using --extern priv: after stabilization
+    transitive_rustdep_dirs.push_back(
+        rustdep.AsSourceFile(settings_->build_settings()).GetDir());
+  }
+  for (const auto& rustdepdir : transitive_rustdep_dirs) {
     out_ << " -Ldependency=";
-    path_output_.WriteDir(
-        out_, rustdep.AsSourceFile(settings_->build_settings()).GetDir(),
-        PathOutput::DIR_NO_LAST_SLASH);
+    path_output_.WriteDir(out_, rustdepdir, PathOutput::DIR_NO_LAST_SLASH);
   }
 
   EscapeOptions lib_escape_opts;
diff --git a/src/gn/ninja_rust_binary_target_writer_unittest.cc b/src/gn/ninja_rust_binary_target_writer_unittest.cc
index b9c2215..4d7d114 100644
--- a/src/gn/ninja_rust_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -307,7 +307,7 @@
         "build ./foo_bar: rust_bin ../../foo/main.rs | "
         "../../foo/source.rs ../../foo/main.rs obj/bar/libmylib.rlib\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
-        "  rustdeps = -Ldependency=obj/bar -Ldependency=obj/bar\n";
+        "  rustdeps = -Ldependency=obj/bar\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }