| Index: utils/pub/utils.dart
 | 
| diff --git a/utils/pub/utils.dart b/utils/pub/utils.dart
 | 
| index b922d845d4013de9e3132acb6033f3e2e5fa86b4..544a3ce0bef5c1c9a9d99dc98154aa04694a91d3 100644
 | 
| --- a/utils/pub/utils.dart
 | 
| +++ b/utils/pub/utils.dart
 | 
| @@ -183,3 +183,14 @@ void mapAddAll(Map destination, Map source) =>
 | 
|  /// replacing `+` with ` `.
 | 
|  String urlDecode(String encoded) =>
 | 
|    decodeUriComponent(encoded.replaceAll("+", " "));
 | 
| +
 | 
| +// TODO(rnystrom): Remove this when #7781 is fixed.
 | 
| +/// When an error is rethrown in an async callback, you can end up with nested
 | 
| +/// AsyncErrors. This unwraps them to find the real originating error.
 | 
| +getRealError(error) {
 | 
| +  while (error is AsyncError) {
 | 
| +    error = error.error;
 | 
| +  }
 | 
| +
 | 
| +  return error;
 | 
| +}
 | 
| 
 |