Skip to content

Commit

Permalink
fix(add): when signatures are compared
Browse files Browse the repository at this point in the history
- never compare sigs when --pure is used
- avoid re-installing ".yalc/{name}" when sigs match
- improved logic for updating package dependencies
  • Loading branch information
aleclarson committed Jan 2, 2019
1 parent b2a4f1e commit 5d8580e
Showing 1 changed file with 40 additions and 41 deletions.
81 changes: 40 additions & 41 deletions src/add.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,23 +99,12 @@ export const addPackages = async (
return null
}

const signature = readSignatureFile(storedPackageDir)
const destYalcCopyDir = join(workingDir, values.yalcPackagesFolder, name)
if (signature === readSignatureFile(destYalcCopyDir)) {
console.log(
`"${packageName}" already exists in the local ".yalc" directory`
)
return null
}

const pkg = readPackageManifest(storedPackageDir)
if (!pkg) {
return null
}

emptyDirExcludeNodeModules(destYalcCopyDir)
fs.copySync(storedPackageDir, destYalcCopyDir)

const signature = readSignatureFile(storedPackageDir)
let replacedVersion = ''
if (doPure) {
if (localPkg.workspaces) {
Expand All @@ -134,52 +123,62 @@ export const addPackages = async (
)
}
if (!doPure) {
const destModulesDir = join(workingDir, 'node_modules', name)

fs.removeSync(destModulesDir)
ensureSymlinkSync(destYalcCopyDir, destModulesDir, 'junction')

if (!options.link) {
const protocol = options.linkDep ? 'link:' : 'file:'
const localAddress =
protocol + values.yalcPackagesFolder + '/' + pkg.name

const dependencies = localPkg.dependencies || {}
const devDependencies = localPkg.devDependencies || {}
let whereToAdd = options.dev ? devDependencies : dependencies

if (options.dev) {
if (dependencies[pkg.name]) {
replacedVersion = dependencies[pkg.name]
delete dependencies[pkg.name]
}
} else {
if (!dependencies[pkg.name]) {
if (devDependencies[pkg.name]) {
whereToAdd = devDependencies
}
}
}
const whereToRemove = devDependencies[pkg.name]
? devDependencies
: dependencies

if (whereToAdd[pkg.name] !== localAddress) {
replacedVersion = replacedVersion || whereToAdd[pkg.name]
whereToAdd[pkg.name] = localAddress
localPkg.dependencies =
whereToAdd === dependencies ? dependencies : localPkg.dependencies
localPkg.devDependencies =
whereToAdd === devDependencies
replacedVersion = whereToRemove[pkg.name] || ''
if (replacedVersion !== localAddress) {
const whereToAdd =
options.dev || whereToRemove === devDependencies
? devDependencies
: localPkg.devDependencies
: dependencies

localPkgUpdated = true
whereToAdd[pkg.name] = localAddress
if (whereToAdd !== whereToRemove) {
delete whereToRemove[pkg.name]
}
} else {
replacedVersion = ''
}
replacedVersion =
replacedVersion == localAddress ? '' : replacedVersion
}

const destYalcCopyDir = join(
workingDir,
values.yalcPackagesFolder,
name
)

if (signature === readSignatureFile(destYalcCopyDir)) {
console.log(
`"${packageName}" already exists in the local ".yalc" directory`
)
return null
}

// Replace the local ".yalc/{name}" directory.
fs.removeSync(destYalcCopyDir)
fs.copySync(storedPackageDir, destYalcCopyDir)

// Replace the local "node_modules/{name}" symlink.
const nodeModulesPath = join(workingDir, 'node_modules', name)
fs.removeSync(nodeModulesPath)
ensureSymlinkSync(destYalcCopyDir, nodeModulesPath, 'junction')

const addedAction = options.link ? 'linked' : 'added'
console.log(
`Package ${pkg.name}@${
pkg.version
} ${addedAction} ==> ${destModulesDir}.`
} ${addedAction} ==> ${nodeModulesPath}.`
)
}

Expand Down

0 comments on commit 5d8580e

Please sign in to comment.