anchor.diff:      });
     }
   
  -  Future _gatherAllDeps(Future<String> specGetter, String depPath) {
  +  /**
  +   * Discover all transitive dependencies by walking the dependency graph and
  +   * resolving any found version ranges to the maximum satisfying version
  +   * along the way.
  +   *
  +   * By design, the graph is traversed in a breadth-first fashion: the top-level
  +   * dependencies from the project's bower.json are resolved first, their
  +   * immediate dependencies second, etc. This is critical for correct
  +   * precedence: higher levels should get a chance to pin versions before lower
  +   * ones.
  +   *
  +   * For example, if the top-level requests:
  +   *   "polymer": "Polymer/polymer#0.4.0",
  +   *   "platform": "Polymer/platform#0.3.0"
  +   * "platform" should resolve to "0.3.0", even though "polymer#0.4.0" depends
  +   * on "platform#^0.4.0".
  +   */
  +  Future _discoverAllDeps(Future<String> specGetter, String depPath) {
       _monitor.start("Getting Bower packages…");
   
       return specGetter.then((String spec) {
  
positive.code:     _unresolvedDepsComments.clear();
      _ignoredDepsComments.clear();
  
      return _gatherAllDeps(
          _readLocalSpecFile(specFile), 'top package'
      ).then((_) {
        return _fetchAllDeps(mode);
  
negative.code:       });
  
        // Download all the packages in parallel; also, failure to download some
        // won't affect the others.
        return Future.wait(futures);
      });
    }
  