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

Unified Diff: sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart

Issue 216593006: Don't allow overlapping source directories. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 6 years, 9 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
Index: sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart b/sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart
index d1ce75f8e61f1ebe3817746ade408cb1064a8d9e..beb8c118c5615a5da8f8a0868f4772206e17b6ea 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/web_socket_api.dart
@@ -10,11 +10,9 @@ import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import '../utils.dart';
import 'build_environment.dart';
-/// The error code for a directory not being served.
-const _NOT_SERVED = 1;
-
/// Implements the [WebSocket] API for communicating with a running pub serve
/// process, mainly for use by the Editor.
///
@@ -97,7 +95,7 @@ class WebSocketApi {
return _environment.getAssetIdForUrl(url).then((id) {
if (id == null) {
- throw new json_rpc.RpcException(_NOT_SERVED,
+ throw new json_rpc.RpcException(_Error.NOT_SERVED,
'"${url.host}:${url.port}" is not being served by pub.');
}
@@ -174,7 +172,7 @@ class WebSocketApi {
return _environment.getUrlsForAssetPath(assetPath).then((urls) {
if (urls.isEmpty) {
- throw new json_rpc.RpcException(_NOT_SERVED,
+ throw new json_rpc.RpcException(_Error.NOT_SERVED,
'Asset path "$assetPath" is not currently being served.');
}
@@ -215,6 +213,19 @@ class WebSocketApi {
return {
"url": server.url.toString()
};
+ }).catchError((error) {
+ if (error is! OverlappingSourceDirectoryException) throw error;
+
+ var dir = pluralize("directory", error.overlappingDirectories.length,
+ plural: "directories");
+ var overlapping = toSentence(error.overlappingDirectories.map(
+ (dir) => '"$dir"'));
+ print("data: ${error.overlappingDirectories}");
+ throw new json_rpc.RpcException(_Error.OVERLAPPING,
+ 'Path "$rootDirectory" overlaps already served $dir $overlapping.',
+ data: {
+ "directories": error.overlappingDirectories
+ });
});
}
@@ -242,7 +253,7 @@ class WebSocketApi {
var rootDirectory = _validateRelativePath(params, "path");
return _environment.unserveDirectory(rootDirectory).then((url) {
if (url == null) {
- throw new json_rpc.RpcException(_NOT_SERVED,
+ throw new json_rpc.RpcException(_Error.NOT_SERVED,
'Directory "$rootDirectory" is not bound to a server.');
}
@@ -273,3 +284,13 @@ class WebSocketApi {
return pathString;
}
}
+
+
+/// The pub-specific JSON RPC error codes.
+class _Error {
+ /// The specified directory is not being served.
+ static const NOT_SERVED = 1;
+
+ /// The specified directory overlaps one or more ones already being served.
+ static const OVERLAPPING = 2;
+}
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/barback/build_environment.dart ('k') | sdk/lib/_internal/pub/lib/src/command/barback.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698