hunk.code_window:     .map(shortId => shortIdToFullId(shortId, shrinkwrap.registry))
     const newPkgs = R.props<DependencyTreeNode>(newPkgResolvedIds, pkgsToLink)
     await linkAllPkgs(newPkgs, opts)
     if (!opts.force) {
       // add subdependencies that have been updated
       // TODO: no need to relink everything. Can be relinked only what was changed
       for (const shortId of nextPkgResolvedIds) {
  
hunk.labels: keep keep keep keep replace keep keep keep keep keep
hunk.after_edit:   try {
       await linkAllPkgs(linkPkg, newPkgs, opts)
     } catch (err) {
       if (!err.message.startsWith('EXDEV: cross-device link not permitted')) throw err
       logger.warn(err.message)
       logger.info('Falling back to copying packages from store')
       await linkAllPkgs(copyPkg, newPkgs, opts)
     }
  
hunk.file_path: src/link/index.ts
hunk.type: replace
file: import path = require('path')
  import {fromDir as readPkgFromDir} from '../fs/readPkg'
  import {
    PackageSpec,
    ResolveOptions,
    TarballResolution,
    DirectoryResolution,
    ResolveResult,
  } from '.'
  import fs = require('mz/fs')
  import normalize = require('normalize-path')
  
  /**
   * Resolves a package hosted on the local filesystem
   */
  export default async function resolveLocal (spec: PackageSpec, opts: ResolveOptions): Promise<ResolveResult> {
    const dependencyPath = normalize(path.relative(opts.prefix, spec.fetchSpec))
    const id = `file:${dependencyPath}`
  
    if (spec.type === 'file') {
      const resolution: TarballResolution = {
        tarball: id,
      }
      return {
        id,
        resolution,
      }
    }
  
    const localPkg = await readPkgFromDir(dependencyPath)
    const resolution: DirectoryResolution = {
      type: 'directory',
      directory: dependencyPath,
    }
    return {
      id,
      resolution,
    }
  }
  