message: Limit concurrency on creating temp files, and add caching for when we checkout the same file multiple times
diff: import execa from 'execa';
  import { EOL } from 'os';
  +import pLimit from 'p-limit';
  import { file as tmpFile } from 'tmp-promise';
  import { Context } from '../types';
  @@ -212,11 +213,21 @@ export async function checkout(ref: string) {
  return execGitCommand(`git checkout ${ref}`);
  }
  +const fileCache = {};
  +const limitConcurrency = pLimit(10);
  export async function checkoutFile({ log }: Pick<Context, 'log'>, ref: string, fileName: string) {
  - const { path: targetFileName } = await tmpFile({ postfix: `-${fileName}` });
  - log.debug(`Checking out file ${ref}:${fileName} at ${targetFileName}`);
  - await execGitCommand(`git show ${ref}:${fileName} > ${targetFileName}`);
  + const pathspec = `${ref}:${fileName}`;
  + if (!fileCache[pathspec]) {
  + fileCache[pathspec] = limitConcurrency(async () => {
  + const { path: targetFileName } = await tmpFile({
  + postfix: `-${fileName.replace(/\//g, '--')}`,
  + });
  + log.debug(`Checking out file ${pathspec} at ${targetFileName}`);
  + await execGitCommand(`git show ${pathspec} > ${targetFileName}`);
  return targetFileName;
  + });
  + }
  + return fileCache[pathspec];
  }
  export async function checkoutPrevious() {
  