anchor.diff:   * Utility tasks for executing pub commands.
    */
   class PubTools {
  -
     /**
      * Run `pub get` on the current project. If [force] is true, this will execute
      * even if the pubspec.lock file is up-to-date with respect to the
  
positive.code: 
      File outFile = joinFile(outDir, ["${fileName(sourceFile)}.js"]);
  
      runSdkBinary(context, 'dart2js',
          arguments: ['-o${outFile.path}', sourceFile.path]);
    }
  }
  
  String _execName(String name) {
    if (Platform.isWindows)
      return name == 'dart' ? 'dart.exe' : '${name}.bat';
  
    return name;
  }
  
negative.code:     }
    }
  
    /**
     * Run `pub upgrade` on the current project.
     */
    void upgrade(GrinderContext context) {
      runSdkBinary(context, 'pub', arguments: ['upgrade']);
    }
  
    /**
     * Deprecated in favor of [get].
     */
    @deprecated
    void install(context, {force: false}) => get(context, force: force);
  
    /**
     * Deprecated in favor of [upgrade].
     */
    @deprecated
    void update(context, {force: false}) => upgrade(context);
  }
  
  /**
   * Utility tasks for invoking dart2js.
   */
  class Dart2jsTools {
    /**
     * Invoke a dart2js compile with the given [sourceFile] as input.
     */
    void compile(GrinderContext context, File sourceFile, {Directory outDir}) {
  //    // TODO: check for the out.deps file, us it to know when to compile
  
      if (outDir == null) {
        outDir = sourceFile.parent;
  