From 3fc0b893f256a2eb03d1343b9d32fa15e55942a7 Mon Sep 17 00:00:00 2001 From: Jeff Valore Date: Sat, 9 Feb 2019 09:28:46 -0500 Subject: [PATCH 1/2] fix(upgrade): Fix yarn upgrade when using --scope with exotic dependencies. Exotic dependencies (github urls for example) were not being unlocked from the lockfile when running `yarn upgrade --scope @whatever/` which was resulting in dependencies not being upgraded. This was due to trying to find the dep in the lockfile just by it's url instead of in `name@url` format. fixes #7016 --- __tests__/commands/upgrade.js | 12 ++++++++++++ .../package-not-in-registry-scoped/package.json | 5 +++++ .../upgrade/package-not-in-registry-scoped/yarn.lock | 7 +++++++ .../upgrade/package-not-in-registry/yarn.lock | 2 +- src/cli/commands/upgrade.js | 2 +- 5 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 __tests__/fixtures/upgrade/package-not-in-registry-scoped/package.json create mode 100644 __tests__/fixtures/upgrade/package-not-in-registry-scoped/yarn.lock diff --git a/__tests__/commands/upgrade.js b/__tests__/commands/upgrade.js index c3c2deeb44..90278a78dd 100644 --- a/__tests__/commands/upgrade.js +++ b/__tests__/commands/upgrade.js @@ -248,6 +248,18 @@ test.concurrent('upgrades dependency packages not in registry', (): Promise => { + return runUpgrade([], {scope: '@yarn/'}, 'package-not-in-registry-scoped', async (config): ?Promise => { + const lockfile = explodeLockfile(await fs.readFile(path.join(config.cwd, 'yarn.lock'))); + const gitRemote = 'https://github.com/yarnpkg/e2e-test-repo'; + + const lockFileIncludes = sha => lockfile.indexOf(` resolved "${gitRemote}#${sha}"`) > -1; + expect(lockfile.indexOf(`"@yarn/test-git-repo@${gitRemote}#master":`)).toBeGreaterThan(-1); + expect(lockFileIncludes('5c57959f3c55a6cd6004e3855ca59ba98bfff56c')).toEqual(false); + expect(lockFileIncludes('64ed9468f0636a76fbadde0960ed321cc2c2cab0')).toEqual(true); + }); +}); + test.concurrent('upgrades dev dependency packages not in registry', (): Promise => { const packages = ['yarn-test-git-repo', 'e2e-test-repo']; return runUpgrade(packages, {}, 'package-not-in-registry-dev', async (config): ?Promise => { diff --git a/__tests__/fixtures/upgrade/package-not-in-registry-scoped/package.json b/__tests__/fixtures/upgrade/package-not-in-registry-scoped/package.json new file mode 100644 index 0000000000..3d9835ea3a --- /dev/null +++ b/__tests__/fixtures/upgrade/package-not-in-registry-scoped/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@yarn/test-git-repo": "https://github.com/yarnpkg/e2e-test-repo#master" + } +} diff --git a/__tests__/fixtures/upgrade/package-not-in-registry-scoped/yarn.lock b/__tests__/fixtures/upgrade/package-not-in-registry-scoped/yarn.lock new file mode 100644 index 0000000000..e8312dcaea --- /dev/null +++ b/__tests__/fixtures/upgrade/package-not-in-registry-scoped/yarn.lock @@ -0,0 +1,7 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@yarn/test-git-repo@https://github.com/yarnpkg/e2e-test-repo#master": + version "1.0.0" + resolved "https://github.com/yarnpkg/e2e-test-repo#5c57959f3c55a6cd6004e3855ca59ba98bfff56c" diff --git a/__tests__/fixtures/upgrade/package-not-in-registry/yarn.lock b/__tests__/fixtures/upgrade/package-not-in-registry/yarn.lock index 81504b73c7..da9337301d 100644 --- a/__tests__/fixtures/upgrade/package-not-in-registry/yarn.lock +++ b/__tests__/fixtures/upgrade/package-not-in-registry/yarn.lock @@ -8,4 +8,4 @@ "yarn-test-git-repo@https://github.com/yarnpkg/e2e-test-repo#master": version "1.0.0" - resolved "https://github.com/yarnpkg/e2e-test-repo#64ed9468f0636a76fbadde0960ed321cc2c2cab0" + resolved "https://github.com/yarnpkg/e2e-test-repo#5c57959f3c55a6cd6004e3855ca59ba98bfff56c" diff --git a/src/cli/commands/upgrade.js b/src/cli/commands/upgrade.js index 160c552d04..9a149951c4 100644 --- a/src/cli/commands/upgrade.js +++ b/src/cli/commands/upgrade.js @@ -85,7 +85,7 @@ function getRangeOperator(version): string { // If an explicit operator was specified using --exact, --tilde, --caret, then that will take precedence. function buildPatternToUpgradeTo(dep, flags): string { if (dep.latest === 'exotic') { - return dep.url; + return `${dep.name}@${dep.url}`; } const toLatest = flags.latest; From b828db8188bccbf6ccff2cc770eadf98784fb634 Mon Sep 17 00:00:00 2001 From: Jeff Valore Date: Sat, 9 Feb 2019 09:34:25 -0500 Subject: [PATCH 2/2] updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33aab2a233..71612c1481 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Please add one entry in this file for each change in Yarn's behavior. Use the sa ## Master +- Fix yarn `upgrade --scope` when using exotic (github) dependencies. + + [#7017](https://github.com/yarnpkg/yarn/pull/7017) - [**Jeff Valore**](https://twitter.com/codingwithspike) + - Fixes occasionally mismatching upper/lowecases of drive letters in win32 pnp check [#7007](https://github.com/yarnpkg/yarn/pull/7007) - [**Christoph Werner**](https://github.com/codepunkt)