Index: pkg/docgen/lib/docgen.dart |
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart |
index 43a22a72059628cc1cc31251f61d45419dc6921a..1609d75d932de978c7351e90a82a8ce1ea7cb804 100644 |
--- a/pkg/docgen/lib/docgen.dart |
+++ b/pkg/docgen/lib/docgen.dart |
@@ -664,6 +664,38 @@ class _Viewer { |
static Directory _webDocsDir; |
static bool movedViewerCode = false; |
+ static String _viewerCodePath; |
+ |
+ /* |
+ * dartdoc-viewer currently has the web app code under a 'client' directory |
+ * |
+ * This is confusing for folks that want to clone and modify the code. |
+ * It also includes a number of python files and other content related to |
+ * app engine hosting that are not needed. |
+ * |
+ * This logic exists to support the current model and a (future) updated |
+ * dartdoc-viewer repo where the 'client' content exists at the root of the |
+ * project and the other content is removed. |
+ */ |
+ static String get viewerCodePath { |
+ if(_viewerCodePath == null) { |
+ var pubspecFileName = 'pubspec.yaml'; |
+ |
+ var thePath = _dartdocViewerDir.path; |
+ |
+ if(!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
+ thePath = path.join(thePath, 'client'); |
+ print('trying the fallback: $thePath'); |
+ if (!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
+ throw new StateError('Could not find a pubspec file'); |
+ } |
+ } |
+ |
+ _viewerCodePath = thePath; |
+ } |
+ return _viewerCodePath; |
+ } |
+ |
/// If our dartdoc-viewer code is already checked out, move it to a temporary |
/// directory outside of the package directory, so we don't try to process it |
/// for documentation. |
@@ -698,13 +730,13 @@ class _Viewer { |
/// directory, to run as a webpage. |
var processResult = Process.runSync(_Generator._pubScript, |
['upgrade'], runInShell: true, |
- workingDirectory: path.join(_dartdocViewerDir.path, 'client')); |
+ workingDirectory: path.join(viewerCodePath, 'client')); |
print('process output: ${processResult.stdout}'); |
print('process stderr: ${processResult.stderr}'); |
var dir = new Directory(_Generator._outputDirectory == null? 'docs' : |
_Generator._outputDirectory); |
- _webDocsDir = new Directory(path.join(_dartdocViewerDir.path, 'client', |
+ _webDocsDir = new Directory(path.join(viewerCodePath, 'client', |
'web', 'docs')); |
if (dir.existsSync()) { |
// Move the docs folder to dartdoc-viewer/client/web/docs |
@@ -723,11 +755,11 @@ class _Viewer { |
// Compile the code to JavaScript so we can run on any browser. |
print('Compile app to JavaScript for viewing.'); |
var processResult = Process.runSync(_Generator._dartBinary, |
- ['deploy.dart'], workingDirectory : path.join(_dartdocViewerDir.path, |
+ ['deploy.dart'], workingDirectory : path.join(viewerCodePath, |
'client'), runInShell: true); |
print('process output: ${processResult.stdout}'); |
print('process stderr: ${processResult.stderr}'); |
- var outputDir = path.join(_dartdocViewerDir.path, 'client', 'out', 'web'); |
+ var outputDir = path.join(viewerCodePath, 'client', 'out', 'web'); |
print('Docs are available at $outputDir'); |
} |
} |
@@ -741,7 +773,7 @@ class _Viewer { |
'http://localhost:${httpServer.port}'); |
httpServer.listen((HttpRequest request) { |
var response = request.response; |
- var basePath = path.join(_dartdocViewerDir.path, 'client', 'out', |
+ var basePath = path.join(viewerCodePath, 'client', 'out', |
'web'); |
var requestPath = path.join(basePath, request.uri.path.substring(1)); |
bool found = true; |