Skip to content

Commit 1afcdc3

Browse files
author
Dimitar Tachev
authored
Merge pull request #4139 from NativeScript/tachev/store-platform-status-on-add-platform
fix: store the platform status on `platform add` in order to avoid another platform add during `prepare`.
2 parents 986673d + 03d9ba3 commit 1afcdc3

7 files changed

+32
-12
lines changed

lib/definitions/project-changes.d.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
interface IAppFilesHashes {
2-
appFilesHashes: IStringDictionary;
2+
appFilesHashes?: IStringDictionary;
33
}
44

55
interface IPrepareInfo extends IAddedNativePlatform, IAppFilesHashes {
6-
time: string;
7-
bundle: boolean;
8-
release: boolean;
9-
projectFileHash: string;
10-
changesRequireBuild: boolean;
11-
changesRequireBuildTime: string;
6+
time?: string;
7+
bundle?: boolean;
8+
release?: boolean;
9+
projectFileHash?: string;
10+
changesRequireBuild?: boolean;
11+
changesRequireBuildTime?: string;
1212
iOSProvisioningProfileUUID?: string;
1313
}
1414

lib/services/platform-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -806,10 +806,10 @@ export class PlatformService extends EventEmitter implements IPlatformService {
806806
private shouldPersistWebpackFiles(platform: string, projectData: IProjectData, prepareInfo: IPrepareInfo, appFilesUpdaterOptions: IAppFilesUpdaterOptions, nativePrepare: INativePrepare): boolean {
807807
const hasPlatformDirectory = this.hasPlatformDirectory(platform, projectData);
808808
const isWebpackWatcherStarted = this.$usbLiveSyncService.isInitialized;
809-
const hasNativePlatformStatus = !prepareInfo || !prepareInfo.nativePlatformStatus;
809+
const hasNativePlatformStatus = prepareInfo && prepareInfo.nativePlatformStatus;
810810
const requiresPlatformAdd = prepareInfo && prepareInfo.nativePlatformStatus === constants.NativePlatformStatus.requiresPlatformAdd;
811811
const shouldAddNativePlatform = !nativePrepare || !nativePrepare.skipNativePrepare;
812-
const shouldAddPlatform = hasNativePlatformStatus || (requiresPlatformAdd && shouldAddNativePlatform);
812+
const shouldAddPlatform = !hasNativePlatformStatus || (requiresPlatformAdd && shouldAddNativePlatform);
813813
const result = appFilesUpdaterOptions.bundle && isWebpackWatcherStarted && hasPlatformDirectory && shouldAddPlatform;
814814
return result;
815815
}

lib/services/prepare-platform-native-service.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme
1919
info.platformData.platformProjectService.ensureConfigurationFileInAppResources(info.projectData);
2020
await info.platformData.platformProjectService.interpolateData(info.projectData, info.config);
2121
info.platformData.platformProjectService.afterCreateProject(info.platformData.projectRoot, info.projectData);
22+
this.$projectChangesService.setNativePlatformStatus(info.platformData.normalizedPlatformName, info.projectData,
23+
{ nativePlatformStatus: constants.NativePlatformStatus.requiresPrepare });
2224
}
2325

2426
public async preparePlatform(config: IPreparePlatformJSInfo): Promise<void> {
@@ -111,7 +113,7 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme
111113
}
112114

113115
const previousPrepareInfo = this.$projectChangesService.getPrepareInfo(platform, projectData);
114-
if (!previousPrepareInfo) {
116+
if (!previousPrepareInfo || previousPrepareInfo.nativePlatformStatus !== constants.NativePlatformStatus.alreadyPrepared) {
115117
return;
116118
}
117119

lib/services/project-changes-service.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,13 @@ export class ProjectChangesService implements IProjectChangesService {
173173
this._prepareInfo = this._prepareInfo || this.getPrepareInfo(platform, projectData);
174174
if (this._prepareInfo) {
175175
this._prepareInfo.nativePlatformStatus = addedPlatform.nativePlatformStatus;
176-
this.savePrepareInfo(platform, projectData);
176+
} else {
177+
this._prepareInfo = {
178+
nativePlatformStatus: addedPlatform.nativePlatformStatus
179+
};
177180
}
181+
182+
this.savePrepareInfo(platform, projectData);
178183
}
179184

180185
private async ensurePrepareInfo(platform: string, projectData: IProjectData, projectChangesOptions: IProjectChangesOptions): Promise<boolean> {

test/platform-service.ts

+1
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ describe('Platform Service Tests', () => {
921921
appResourcesDestinationDirectoryPath: testDirData.appResourcesFolderPath,
922922
normalizedPlatformName: "Android",
923923
projectRoot: testDirData.tempFolder,
924+
configurationFileName: "configFileName",
924925
platformProjectService: {
925926
prepareProject: (): any => null,
926927
prepareAppResources: (): any => null,

test/project-changes-service.ts

+12
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,16 @@ describe("Project Changes Service Tests", () => {
176176
assert.isFalse(!!androidChanges.signingChanged, "Android signingChanged expected to be false");
177177
});
178178
});
179+
180+
describe("setNativePlatformStatus", () => {
181+
it("creates prepare info and sets only the native platform status when there isn't an existing prepare info", () => {
182+
for (const platform of ["ios", "android"]) {
183+
serviceTest.projectChangesService.setNativePlatformStatus(platform, serviceTest.projectData, { nativePlatformStatus: Constants.NativePlatformStatus.requiresPrepare });
184+
185+
const actualPrepareInfo = serviceTest.projectChangesService.getPrepareInfo(platform, serviceTest.projectData);
186+
187+
assert.deepEqual(actualPrepareInfo, { nativePlatformStatus: Constants.NativePlatformStatus.requiresPrepare });
188+
}
189+
});
190+
});
179191
});

test/stubs.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export class ProjectDataStub implements IProjectData {
303303
projectDir: string;
304304
projectName: string;
305305
get platformsDir(): string {
306-
return this.plafromsDir;
306+
return this.plafromsDir || (this.projectDir && path.join(this.projectDir, "platforms")) || "";
307307
}
308308
set platformsDir(value) {
309309
this.plafromsDir = value;

0 commit comments

Comments
 (0)