code: function copyFile(assetPath, dest, hexFolder) {
  
        // Copy the asset file to the hashed folder and store the mapping.
        var relativeAssetPath = stripPrefixAndNormalise(assetPath, options.srcBasePath),
            hashDir  = path.join(dest, path.dirname(relativeAssetPath), hexFolder),
            destPath = path.join(hashDir, path.basename(assetPath));
  
        if (options.hashType === 'file') {
          var ext = path.extname(assetPath),
              hashedFilename = path.basename(assetPath, ext) + '.' + hexFolder + ext;
          hashDir  = path.join(dest, path.dirname(relativeAssetPath));
          destPath = path.join(hashDir, hashedFilename);
        }
  
        var relativeDestPath = stripPrefixAndNormalise(destPath, options.destBasePath);
  
        grunt.file.copy(assetPath, destPath);
        assetFileMapping[relativeAssetPath] = relativeDestPath;
        grunt.log.writeln('Copied asset: ' + assetPath + ' -> ' + destPath);
  
        // Copy the source map file to the same hashed folder.
        var sourceMapPath = sourceMaps[assetPath];
        if (sourceMapPath) {
          var destSourceMapPath = path.join(hashDir, path.basename(sourceMapPath)),
              relativeSourceMapPath = stripPrefixAndNormalise(sourceMapPath, options.srcBasePath),
              relativeDestSourceMapPath = stripPrefixAndNormalise(destSourceMapPath, options.destBasePath);
  
          grunt.file.copy(sourceMapPath, destSourceMapPath);
          sourceFileMapping[relativeSourceMapPath] = relativeDestSourceMapPath;
          grunt.log.writeln('Copied source map: ' + destSourceMapPath);
        }
  
        if (Object.keys(assetFileMapping).length === numSourceFiles) {
          writeMappingFile();
          renameReferences();
          done();
        }
      }
docs: Copy and log the file to the output location, and signal done() when the last copy is done.