* feat: drop Node.js <= 6.3 support BREAKING CHANGE: drop support of Node.js pre-6.3 * refactor: remove the redundant subfolder in store * refactor: rename linkPeers * refactor: remove not used code * feat: link each file separately * refactor: change store structure * refactor: resolve github dependencies to commits * chore(package.json): pass --preserve-symlinks to ts-node * test: temporarily skip failing tests * refactor(git): use more human-friendly Git IDs * refactor: resolve * refactor: divide resolution and fetching * refactor(fetch): better variable naming * feat: add shrinkwrap.yaml * test(shrinkwrap): shrinkwrap locks dependencies * style: fix typing issue * fix(fetch): properly link node_modules on repeat install * refactor: comment skipped test with single-line comments * fix: circular symlinks are avoided * refactor(fetch): remove redundant type properties * test: additional check for circular symlinks * feat: saving dependency graph in node_modules instead of in store BREAKING CHANGE: Dependency graph moved out from store * feat: add store.yaml with info about dependent projects * refactor: remove name from FetchedPackage * refactor: change the location of packages from npm in store BREAKING CHANGE: Structure of store changed * refactor: change global store path BREAKING CHANGE: Move the store path out of ~/.pnpm * refactor: remove justFetched from FetchedPackage * refactor(install): use functional programming to filter deps * refactor(install): remove redundant node_modules creation * fix(install): installation of concurent circular dependencies * feat: copy not link some packages Packages that have install lifecycle events are copied not linked. * fix(store.yaml): don't duplicate records * perf: resolve a package only once per project * test: concurrent installation of the same dependency * fix: packages are not removed in the middle of fetch * fix: dependencies are linked only once * fix: make linking work on Windows * fix: installing local dependencies on Windows * fix: don't reinstall dependencies of the same package * fix(bin): the run function always returns a Promise * fix: use hard links to link files to the .resolutions folder * fix: peers are linked into the correct location * fix: bundled dependencies are not reinstalled * refactor: remove unsymlink It is not used anymore * chore(CI): test on Node.js v4 as well * refactor: use UPPER_CASE for constants * chore(package): return support of Node.js v4 * fix: make pnpm Node.js 4 compatible again * test: don't run tsnode with --preserve-symlinks --preserve-symlinks makes tests fail on Node.js 4 * fix(bin): don't use --preserve-symlinks on Node pre-6.3 * test: use global stores in tests * fix: flat-tree installation should not work on Node 4 * fix: show warning When trying to install into a node_modules created by older pnpm * refactor: change the global store location From `~/.store` to `~/.pnpm-store` * docs: note that some of the info is out of date * test: fix typing error * test: fix frequently failing test
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import {fetchFromRemoteTarball, FetchOptions} from '../resolve/fetch'
|
|
import {ResolveResult} from '../resolve'
|
|
import createDebug from '../debug'
|
|
const debug = createDebug('pnpm:git')
|
|
import spawn = require('cross-spawn')
|
|
|
|
export default async function fetchRes (res: ResolveResult, target: string, opts: FetchOptions): Promise<void> {
|
|
if (res.tarball) {
|
|
return fetchFromRemoteTarball(target, {
|
|
shasum: res.shasum,
|
|
tarball: res.tarball
|
|
}, opts)
|
|
}
|
|
if (res.repo && res.ref) {
|
|
return clone(res.repo, res.ref, target)
|
|
}
|
|
if (res.fetch) {
|
|
return res.fetch(target)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* clone a git repository.
|
|
*/
|
|
export async function clone (repo: string, ref: string, dest: string) {
|
|
await new Promise((resolve, reject) => {
|
|
const args = ['clone', '-b', ref, repo, dest, '--single-branch']
|
|
debug(`cloning git repository from ${repo}`)
|
|
const git = spawnGit(args)
|
|
let errMsg = ''
|
|
git.stderr.on('data', (data: string) => errMsg += data)
|
|
git.on('close', (code: number) => (code ? errorHandler() : resolve()))
|
|
|
|
function errorHandler () {
|
|
debug(`failed to clone repository from ${repo}`)
|
|
reject(new Error(`failed to clone repository from ${repo}
|
|
${errMsg}`))
|
|
}
|
|
})
|
|
}
|
|
|
|
function prefixGitArgs (): string[] {
|
|
return process.platform === 'win32' ? ['-c', 'core.longpaths=true'] : []
|
|
}
|
|
|
|
function spawnGit (args: string[]) {
|
|
debug(`executing git with args ${args}`)
|
|
const fullArgs = prefixGitArgs().concat(args || [])
|
|
return spawn('git', fullArgs)
|
|
}
|