From 0de5b0c12db9c84230d387480e990016a8ff68e4 Mon Sep 17 00:00:00 2001
From: Istvan Soos <istvan.soos@gmail.com>
Date: Mon, 18 Jun 2018 16:07:23 +0200
Subject: [PATCH] Run pkg/pub_dartdoc instead of global dartdoc

---
 app/lib/dartdoc/dartdoc_runner.dart | 32 +++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/app/lib/dartdoc/dartdoc_runner.dart b/app/lib/dartdoc/dartdoc_runner.dart
index 853eeba5eb..fbd6ac393c 100644
--- a/app/lib/dartdoc/dartdoc_runner.dart
+++ b/app/lib/dartdoc/dartdoc_runner.dart
@@ -33,6 +33,9 @@ const _buildLogFilePath = 'log.txt';
 const _dartdocTimeout = const Duration(minutes: 10);
 final Duration _twoYears = const Duration(days: 2 * 365);
 
+final _pkgPubDartdocDir =
+    Platform.script.resolve('../../pkg/pub_dartdoc').toFilePath();
+
 class DartdocJobProcessor extends JobProcessor {
   DartdocJobProcessor({Duration lockDuration})
       : super(service: JobService.dartdoc, lockDuration: lockDuration);
@@ -179,16 +182,33 @@ class DartdocJobProcessor extends JobProcessor {
     final canonicalUrl = pkgDocUrl(job.packageName,
         version: canonicalVersion, includeHost: true, omitTrailingSlash: true);
 
-    Future<DartdocResult> runDartdoc(bool validateLinks) {
-      return toolEnv.dartdoc(
+    Future<DartdocResult> runDartdoc(bool validateLinks) async {
+      final args = [
+        '--input',
         pkgPath,
+        '--output',
         outputDir,
-        canonicalPrefix: canonicalUrl,
-        hostedUrl: siteRoot,
+        '--hosted-url',
+        siteRoot,
+        '--rel-canonical-prefix',
+        canonicalUrl,
+        '--link-to-remote',
+      ];
+      if (!validateLinks) {
+        args.add('--no-validate-links');
+      }
+      final pr = await runProc(
+        'dart',
+        ['bin/pub_dartdoc.dart']..addAll(args),
+        workingDirectory: _pkgPubDartdocDir,
         timeout: _dartdocTimeout,
-        validateLinks: validateLinks,
-        linkToRemote: true,
       );
+      final hasIndexHtml =
+          await new File(p.join(outputDir, 'index.html')).exists();
+      final hasIndexJson =
+          await new File(p.join(outputDir, 'index.json')).exists();
+      return new DartdocResult(
+          pr, pr.exitCode == 15, hasIndexHtml, hasIndexJson);
     }
 
     DartdocResult r = await runDartdoc(true);