anchor.diff:    Directory.current = path.dirname(fullName);
   
     log.trace("In ${Directory.current.toString()} about to run pub get");
  -  ProcessResult result = await Process.runSync("pub", ["get"]);
  -  log.trace("Pub get complete: exit code: ${result.exitCode} \n"
  -      " stdout:\n${result.stdout} \n stderr:\n${result.stderr}");
  +  Process pubProc = await Process.start("pub", ["get"], runInShell: true);
  +  pubProc.stderr.drain();
  +  pubProc.stdout.drain();
  +
  +  log.trace("Waiting for exit code");
  +  pubProc.exitCode.timeout(PUB_GET_TIMEOUT, onTimeout: () {
  +    log.trace("Pub get timeout, sending SIGKILL");
  +    bool result = pubProc.kill(ProcessSignal.SIGKILL);
  +    log.trace("SIGKILL: $result");
  +  });
  +  log.trace("Pub get concluded");
   
     Directory.current = orginalWorkingDirectory;
   }
  
positive.code: const PROJECT_NAME = "liftoff-dev";
  const PATH_NAME = "data_working";
  
  var client;
  
  Future main(List<String> args, SendPort sendPort) async {
    log.setupLogging("worker_isolate");
  
    ReceivePort receivePort = new ReceivePort();
    sendPort.send(receivePort.sendPort);
  
negative.code:     String cloudFileName) async {
    log.trace("processFile $projectName $bucketName $cloudFileName");
  
    String homeDir = Platform.environment["HOME"];
    String workingPath = homeDir + "/" + PATH_NAME;
    log.trace("workingPath: $workingPath");
  
    Directory workingDirectory = new Directory(workingPath);
    if (workingDirectory.existsSync()) {
      log.info("WorkingDirectory: ${workingDirectory.path} exists, deleting");
      workingDirectory.deleteSync(recursive: true);
    }
    log.info("Creating: ${workingDirectory.path}");
    workingDirectory.createSync();
  
    var sourceStorage = new storage.Storage(client, projectName);
  
    log.info("Downloading $bucketName/$cloudFileName");
  
    await downloadFile(
            sourceStorage.bucket(bucketName), cloudFileName, workingDirectory)
        .timeout(new Duration(seconds: 300));
  
    log.info("Downloaded. Decompressing");
    workingDirectory = new Directory(workingPath);
  
    for (var f in workingDirectory.listSync(recursive: true)) {
      log.info("Testing: ${f.path}");
  
      if (f.path.endsWith(".tar.gz")) {
        // Pub files need to be ungziped manually
        log.info("Running ungzip");
        ProcessResult gzipResult = await Process.run("gzip", ['-d', f.path]);
        log.info(
            "Ungzip finished, "
            "stdout:\n${gzipResult.stdout}\nstderr:${gzipResult.stderr}");
  
        String decompressedPath = f.path.substring(0, f.path.length - 3);
  
        log.info("Running untar");
        ProcessResult result = await Process.run(
            "tar", ['xvf', decompressedPath, '-C', workingDirectory.path]);
        log.info(
            "Untar finished, stdout:\n${result.stdout}\nstderr:${result.stderr}");
        new File(decompressedPath).deleteSync();
        log.info("Original deleted");
      }
    }
  