svoid copyDirectory(File src, File dest) {
  if (dest.exists())
    fail("copyDirectory: " + f2s(dest) + " exists");
  if (sameCanonicalPath(src, dest))
    ret;
  if (inPhysicalSubdirectory(dest, src))
    fail("copyDirectory: " + canonicalPath(dest) + " is subdirectory of " + canonicalPath(src));
  dest.mkdirs();
  copyAllFilesInDirectory_rec(src, dest);
}