anchor.diff:        return _resolveWith(_Ignored.PER_CONFIG_DIRECTIVE);
       }
   
  -    if (fullPath == '*') {
  -      // Handle "*" in the dependency path.
  -      return _resolveWith(_Unresolved.STAR_PATH);
  -    }
  -
       if (hash == 'master') {
         _resolvedDirectTag = 'master';
         return _resolveWith(_Resolved.USED_AS_IS);
       }
   
  +    return _resolvePath().then((_) => _resolveTag());
  +  }
  +
  +  Future _resolvePath() {
  +    // TODO(ussuri): See above. This, too, allows only either a "*" path,
  +    // or a non-* path with a hash, but not a direct version/tag without a path.
  +    if (path != null && path != '*') {
  +      return new Future.value();
  +    } else {
  +      return util.downloadFileViaXhr(getRegistryInfoUrl()).then(
  +          (String regResponse) {
  +        Map<String, dynamic> regInfo;
  +        try {
  +          regInfo = JSON.decode(regResponse);
  +        } on FormatException catch (e) {
  +          // Also handles registryResponse=='Package not found'.
  +          return _resolveWith(_Unresolved.STAR_PATH_FOR_UNKNOWN_PACKAGE);
  +        }
  +
  +        Match m = _BOWER_REGISTRY_INFO_URL_REGEXP.matchAsPrefix(regInfo['url']);
  +        if (m == null) {
  +          return _resolveWith(_Unresolved.MALFORMED_BOWER_REGISTRY_INFO);
  +        }
  +        path = m.group(1);
  +        if (path == null) {
  +          return _resolveWith(_Unresolved.MALFORMED_BOWER_REGISTRY_INFO);
  +        }
  +        path = path.replaceFirst(new RegExp(r'.git$'), '');
  +        return new Future.value();
  +      });
  +    }
  +  }
  +
  +  Future _resolveTag() {
       semver.VersionConstraint constraint;
   
       if (hash == null || hash == 'latest') {
  
positive.code: 
    static const MALFORMED_SPEC = const _Unresolved._(
        'unrecognized dependency specification; replace with a supported one');
    static const STAR_PATH = const _Unresolved._(
        'replace "*" path with an explicit one');
    static const VERSION_RANGE_UNRESOLVED = const _Unresolved._(
        'replace the version range with a pinned version in "dependencies" key '
        'or override it in "resolutions" key in top-level "bower.json"');
  
negative.code:   String get enumName => '_Resolved';
  
    static const USED_AS_IS = const _Resolved._('');
    static const NORMAL_PATH_OVERRIDDEN = const _Resolved._(
        'original path overridden using mappings from config files');
    static const VERSION_RANGE_RESOLVED = const _Resolved._(
  