| Index: pkg/path/lib/path.dart
|
| diff --git a/pkg/path/lib/path.dart b/pkg/path/lib/path.dart
|
| index 3bd23323b0345de558047b114a62a37f92c7b83b..9e540b2d80fd8912178f0bee20e22e19fb605f46 100644
|
| --- a/pkg/path/lib/path.dart
|
| +++ b/pkg/path/lib/path.dart
|
| @@ -112,6 +112,23 @@ String join(String part1, [String part2, String part3, String part4,
|
| String part5, String part6, String part7, String part8]) =>
|
| _builder.join(part1, part2, part3, part4, part5, part6, part7, part8);
|
|
|
| +/// Joins the given path parts into a single path using the current platform's
|
| +/// [separator]. Example:
|
| +///
|
| +/// path.joinAll(['path', 'to', 'foo']); // -> 'path/to/foo'
|
| +///
|
| +/// If any part ends in a path separator, then a redundant separator will not
|
| +/// be added:
|
| +///
|
| +/// path.joinAll(['path/', 'to', 'foo']); // -> 'path/to/foo
|
| +///
|
| +/// If a part is an absolute path, then anything before that will be ignored:
|
| +///
|
| +/// path.joinAll(['path', '/to', 'foo']); // -> '/to/foo'
|
| +///
|
| +/// For a fixed number of parts, [join] is usually terser.
|
| +String joinAll(Iterable<String> parts) => _builder.joinAll(parts);
|
| +
|
| // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed.
|
| /// Splits [path] into its components using the current platform's [separator].
|
| ///
|
| @@ -321,15 +338,30 @@ class Builder {
|
| ///
|
| String join(String part1, [String part2, String part3, String part4,
|
| String part5, String part6, String part7, String part8]) {
|
| - var buffer = new StringBuffer();
|
| - var needsSeparator = false;
|
| -
|
| var parts = [part1, part2, part3, part4, part5, part6, part7, part8];
|
| _validateArgList("join", parts);
|
| + return joinAll(parts.where((part) => part != null));
|
| + }
|
|
|
| - for (var part in parts) {
|
| - if (part == null) continue;
|
| + /// Joins the given path parts into a single path. Example:
|
| + ///
|
| + /// builder.joinAll(['path', 'to', 'foo']); // -> 'path/to/foo'
|
| + ///
|
| + /// If any part ends in a path separator, then a redundant separator will not
|
| + /// be added:
|
| + ///
|
| + /// builder.joinAll(['path/', 'to', 'foo']); // -> 'path/to/foo
|
| + ///
|
| + /// If a part is an absolute path, then anything before that will be ignored:
|
| + ///
|
| + /// builder.joinAll(['path', '/to', 'foo']); // -> '/to/foo'
|
| + ///
|
| + /// For a fixed number of parts, [join] is usually terser.
|
| + String joinAll(Iterable<String> parts) {
|
| + var buffer = new StringBuffer();
|
| + var needsSeparator = false;
|
|
|
| + for (var part in parts) {
|
| if (this.isAbsolute(part)) {
|
| // An absolute path discards everything before it.
|
| buffer.clear();
|
|
|