Skip to content

Commit

Permalink
Fix support for private git repos when using shorted repo syntax and …
Browse files Browse the repository at this point in the history
…lock file exists

Force git remote type if the resolved url it's a git private url.
  • Loading branch information
ramasilveyra committed May 17, 2017
1 parent 25890c8 commit 6a0ccb9
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 deletions.
59 changes: 59 additions & 0 deletions __tests__/package-request.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/* @flow */

import PackageRequest from '../src/package-request.js';
import * as reporters from '../src/reporters/index.js';
import PackageResolver from '../src/package-resolver.js';
import Lockfile from '../src/lockfile/wrapper.js';
import Config from '../src/config.js';

test('Produce valid remote type for a git private dep', async () => {
const pattern = 'private-dep@github:yarnpkg/private-dep#1.0.0';
const privateDepCache = {
[pattern]: {
version: '1.0.0',
resolved: 'git+ssh://git@github.com/yarnpkg/private-dep.git#d6c57894210c52be02da7859dbb5205feb85d8b0',
},
};
const lockfile = new Lockfile(privateDepCache);
const reporter = new reporters.NoopReporter({});
const depRequestPattern = {
pattern,
registry: 'npm',
hint: null,
optional: false,
};
const config = await Config.create({}, reporter);
const resolver = new PackageResolver(config, lockfile);
const request = new PackageRequest(depRequestPattern, resolver);

expect(request.getLocked('git')._remote.type).toBe('git');
expect(request.getLocked('tarball')._remote.type).toBe('git');

await reporter.close();
});

test('Produce valid remote type for a git public dep', async () => {
const pattern = 'private-dep@yarnpkg/private-dep#1fde368';
const privateDepCache = {
[pattern]: {
version: '1.0.0',
resolved: 'https://codeload.github.com/yarnpkg/public-dep/tar.gz/1fde368',
},
};
const lockfile = new Lockfile(privateDepCache);
const reporter = new reporters.NoopReporter({});
const depRequestPattern = {
pattern,
registry: 'npm',
hint: null,
optional: false,
};
const config = await Config.create({}, reporter);
const resolver = new PackageResolver(config, lockfile);
const request = new PackageRequest(depRequestPattern, resolver);

expect(request.getLocked('git')._remote.type).toBe('git');
expect(request.getLocked('tarball')._remote.type).toBe('tarball');

await reporter.close();
});
17 changes: 16 additions & 1 deletion src/package-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,16 @@ export default class PackageRequest {

if (shrunk && shrunk.resolved) {
const resolvedParts = versionUtil.explodeHashedUrl(shrunk.resolved);
// If it's a private git url set remote to 'git'.
const preferredRemoteType = resolvedParts.url.startsWith('git+ssh://') ? 'git' : remoteType;

return {
name: shrunk.name,
version: shrunk.version,
_uid: shrunk.uid,
_remote: {
resolved: shrunk.resolved,
type: remoteType,
type: preferredRemoteType,
reference: resolvedParts.url,
hash: resolvedParts.hash,
registry: shrunk.registry,
Expand Down Expand Up @@ -278,6 +280,13 @@ export default class PackageRequest {
for (const depName in info.dependencies) {
const depPattern = depName + '@' + info.dependencies[depName];
deps.push(depPattern);
console.log('qweqwe', {
pattern: depPattern,
registry: remote.registry,
// dependencies of optional dependencies should themselves be optional
optional: this.optional,
parentRequest: this,
});
promises.push(
this.resolver.find({
pattern: depPattern,
Expand All @@ -293,6 +302,12 @@ export default class PackageRequest {
for (const depName in info.optionalDependencies) {
const depPattern = depName + '@' + info.optionalDependencies[depName];
deps.push(depPattern);
console.log('qweqwe', {
pattern: depPattern,
registry: remote.registry,
optional: true,
parentRequest: this,
});
promises.push(
this.resolver.find({
pattern: depPattern,
Expand Down
5 changes: 4 additions & 1 deletion src/package-resolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,10 @@ export default class PackageResolver {
this.seedPatterns = deps.map((dep): string => dep.pattern);

//
await Promise.all(deps.map((req): Promise<void> => this.find(req)));
await Promise.all(deps.map((req): Promise<void> => {
console.log('req', req);
return this.find(req);
}));

activity.end();
this.activity = null;
Expand Down

0 comments on commit 6a0ccb9

Please sign in to comment.