From 1d08fcd6c730794f062a5da847db6875559b28b7 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Fri, 28 Sep 2018 10:01:25 +0100 Subject: [PATCH 1/2] feat(@angular/cli): deprecate defaultProject --- docs/documentation/angular-workspace.md | 2 +- packages/angular/cli/lib/config/schema.json | 2 +- packages/angular/cli/models/architect-command.ts | 9 +++++---- packages/angular/cli/models/schematic-command.ts | 16 +--------------- packages/angular/cli/utilities/config.ts | 14 +++++++++++++- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/docs/documentation/angular-workspace.md b/docs/documentation/angular-workspace.md index 48be62aa0e8f..7f86bef192d1 100644 --- a/docs/documentation/angular-workspace.md +++ b/docs/documentation/angular-workspace.md @@ -8,7 +8,7 @@ - **newProjectRoot** (`string`): Path where new projects will be created. -- **defaultProject** (`string`): Default project name used in commands. +- **defaultProject** (`string`): (**DEPRECATED**) Default project name used in commands. - **cli**: Workspace configuration options for Angular CLI. - *defaultCollection* (`string`): The default schematics collection to use. diff --git a/packages/angular/cli/lib/config/schema.json b/packages/angular/cli/lib/config/schema.json index ba1c6a7b66e6..e8aea5500a10 100644 --- a/packages/angular/cli/lib/config/schema.json +++ b/packages/angular/cli/lib/config/schema.json @@ -22,7 +22,7 @@ }, "defaultProject": { "type": "string", - "description": "Default project name used in commands." + "description": "(DEPRECATED) Default project name used in commands." }, "projects": { "type": "object", diff --git a/packages/angular/cli/models/architect-command.ts b/packages/angular/cli/models/architect-command.ts index 729afd19966f..a84c1b3885be 100644 --- a/packages/angular/cli/models/architect-command.ts +++ b/packages/angular/cli/models/architect-command.ts @@ -15,6 +15,7 @@ import { experimental, json, schema, tags } from '@angular-devkit/core'; import { NodeJsSyncHost, createConsoleLogger } from '@angular-devkit/core/node'; import { from } from 'rxjs'; import { concatMap, map, tap, toArray } from 'rxjs/operators'; +import { getProjectByCwd } from '../utilities/config'; import { parseJsonSchemaToOptions } from '../utilities/json-schema'; import { BaseCommandOptions, Command } from './command'; import { Arguments } from './interface'; @@ -212,11 +213,11 @@ export abstract class ArchitectCommand< // For multi target commands, we always list all projects that have the target. return allProjectsForTargetName; } else { - // For single target commands, we try the default project first, + // For single target commands, we try the current project first, // then the full list if it has a single project, then error out. - const maybeDefaultProject = this._workspace.getDefaultProjectName(); - if (maybeDefaultProject && allProjectsForTargetName.includes(maybeDefaultProject)) { - return [maybeDefaultProject]; + const maybeCurrentProject = getProjectByCwd(this._workspace, this.logger); + if (maybeCurrentProject && allProjectsForTargetName.includes(maybeCurrentProject)) { + return [maybeCurrentProject]; } if (allProjectsForTargetName.length === 1) { diff --git a/packages/angular/cli/models/schematic-command.ts b/packages/angular/cli/models/schematic-command.ts index 1b52865ee85c..8ef56645726d 100644 --- a/packages/angular/cli/models/schematic-command.ts +++ b/packages/angular/cli/models/schematic-command.ts @@ -271,21 +271,7 @@ export abstract class SchematicCommand< workflow.registry.addSmartDefaultProvider('projectName', () => { if (this._workspace) { - try { - return this._workspace.getProjectByPath(normalize(process.cwd())) - || this._workspace.getDefaultProjectName(); - } catch (e) { - if (e instanceof experimental.workspace.AmbiguousProjectPathException) { - this.logger.warn(tags.oneLine` - Two or more projects are using identical roots. - Unable to determine project using current working directory. - Using default workspace project instead. - `); - - return this._workspace.getDefaultProjectName(); - } - throw e; - } + return getProjectByCwd(this._workspace, this.logger); } return undefined; diff --git a/packages/angular/cli/utilities/config.ts b/packages/angular/cli/utilities/config.ts index abad429d7b1f..3616cbd2268d 100644 --- a/packages/angular/cli/utilities/config.ts +++ b/packages/angular/cli/utilities/config.ts @@ -11,9 +11,11 @@ import { JsonObject, JsonParseMode, experimental, + logging, normalize, parseJson, parseJsonAst, + tags, virtualFs, } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; @@ -140,11 +142,21 @@ export function validateWorkspace(json: JsonObject) { return true; } -export function getProjectByCwd(workspace: experimental.workspace.Workspace): string | null { +export function getProjectByCwd( + workspace: experimental.workspace.Workspace, + logger: logging.Logger = new logging.NullLogger(), +): string | null { try { return workspace.getProjectByPath(normalize(process.cwd())); } catch (e) { if (e instanceof experimental.workspace.AmbiguousProjectPathException) { + logger.warn(tags.oneLine` + Two or more projects are using identical roots. + Unable to determine project using current working directory. + Using default workspace project instead. + `); + logger.warn(`The defaultProject property is DEPRECATED and will be removed in CLI v8.`); + return workspace.getDefaultProjectName(); } throw e; From a1587c50bab71fdd60ac3b6be0276ceb6809b7fa Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Fri, 28 Sep 2018 10:02:13 +0100 Subject: [PATCH 2/2] feat(@angular-devkit/core): deprecate defaultProject --- .../angular_devkit/core/src/workspace/workspace-schema.json | 2 +- packages/angular_devkit/core/src/workspace/workspace-schema.ts | 1 + packages/angular_devkit/core/src/workspace/workspace.ts | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/angular_devkit/core/src/workspace/workspace-schema.json b/packages/angular_devkit/core/src/workspace/workspace-schema.json index a030a6753d55..5b479e00585a 100644 --- a/packages/angular_devkit/core/src/workspace/workspace-schema.json +++ b/packages/angular_devkit/core/src/workspace/workspace-schema.json @@ -19,7 +19,7 @@ }, "defaultProject": { "type": "string", - "description": "The default project." + "description": "(DEPRECATED) The default project." }, "cli": { "$ref": "#/definitions/tool", diff --git a/packages/angular_devkit/core/src/workspace/workspace-schema.ts b/packages/angular_devkit/core/src/workspace/workspace-schema.ts index f10dbc18a688..f485a41efcfa 100644 --- a/packages/angular_devkit/core/src/workspace/workspace-schema.ts +++ b/packages/angular_devkit/core/src/workspace/workspace-schema.ts @@ -20,6 +20,7 @@ export interface WorkspaceSchema { */ newProjectRoot?: string; /** + * @deprecated From 7.0.0 * The default project. */ defaultProject?: string; diff --git a/packages/angular_devkit/core/src/workspace/workspace.ts b/packages/angular_devkit/core/src/workspace/workspace.ts index d03bdb42c898..534f3fa30c35 100644 --- a/packages/angular_devkit/core/src/workspace/workspace.ts +++ b/packages/angular_devkit/core/src/workspace/workspace.ts @@ -140,6 +140,9 @@ export class Workspace { return workspaceProjectClone; } + /** + * @deprecated From 7.0.0 + */ getDefaultProjectName(): string | null { this._assertLoaded();