Skip to content

Commit 451ae8e

Browse files
yyosifovdtopuzov
authored andcommitted
Respect current version of CLI when searching for runtimes (#2793)
* Fix search for compatible version to omit the minor version * Update semver and respect if the user has pre-release version of the CLI * Adding test to ensure if CLI is 2.5.4 we can find 2.5.2 for ios-runtime package
1 parent 3125a9e commit 451ae8e

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

lib/npm-installation-manager.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,22 @@ export class NpmInstallationManager implements INpmInstallationManager {
2626

2727
public getLatestCompatibleVersion(packageName: string): IFuture<string> {
2828
return (() => {
29+
const configVersion = this.$staticConfig.version;
30+
const isPreReleaseVersion = (<any>semver).prerelease(configVersion) !== null;
31+
let cliVersionRange = `~${semver.major(configVersion)}.${(<any>semver).minor(configVersion)}.0`;
32+
if(isPreReleaseVersion) {
33+
// if the user has some 0-19 pre-release version, include pre-release versions in the search query.
34+
cliVersionRange = `~${configVersion}`;
35+
}
2936

30-
let cliVersionRange = `~${this.$staticConfig.version}`;
3137
let latestVersion = this.getLatestVersion(packageName).wait();
3238
if (semver.satisfies(latestVersion, cliVersionRange)) {
3339
return latestVersion;
3440
}
3541
let data = this.$npm.view(packageName, { json: true, "versions": true }).wait();
3642

37-
return semver.maxSatisfying(data, cliVersionRange) || latestVersion;
43+
let maxSatisfying = semver.maxSatisfying(data, cliVersionRange);
44+
return maxSatisfying || latestVersion;
3845
}).future<string>()();
3946
}
4047

lib/services/project-service.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as shelljs from "shelljs";
66
export class ProjectService implements IProjectService {
77

88
constructor(private $npm: INodePackageManager,
9+
private $npmInstallationManager: INpmInstallationManager,
910
private $errors: IErrors,
1011
private $fs: IFileSystem,
1112
private $logger: ILogger,
@@ -166,7 +167,8 @@ export class ProjectService implements IProjectService {
166167
if (tnsModulesVersion) {
167168
packageName = `${packageName}@${tnsModulesVersion}`;
168169
}
169-
this.$npm.install(packageName, projectDir, { save: true, "save-exact": true }).wait();
170+
171+
this.$npmInstallationManager.install(packageName, projectDir, { dependencyType: "save" }).wait();
170172
}).future<void>()();
171173
}
172174

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"properties-parser": "0.2.3",
6767
"ref": "https://github.com/icenium/ref/tarball/v1.3.2.3",
6868
"ref-struct": "https://github.com/telerik/ref-struct/tarball/v1.0.2.5",
69-
"semver": "5.0.1",
69+
"semver": "5.3.0",
7070
"shelljs": "0.7.6",
7171
"source-map": "0.5.6",
7272
"tabtab": "https://github.com/Icenium/node-tabtab/tarball/master",

test/npm-installation-manager.ts

+7
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ describe("Npm installation manager tests", () => {
149149
packageLatestVersion: "1.4.0",
150150
cliVersion: "1.6.0-2016-10-01-182",
151151
expectedResult: "1.4.0"
152+
},
153+
154+
"When CLI Version has patch version larger than an existing package, should return max compliant package from the same major.minor version": {
155+
versions: ["1.0.0", "1.0.1", "1.4.0", "2.5.0", "2.5.1", "2.5.2"],
156+
packageLatestVersion: "3.0.0",
157+
cliVersion: "2.5.4",
158+
expectedResult: "2.5.2"
152159
}
153160
};
154161

0 commit comments

Comments
 (0)