daemonWorkspace function

String daemonWorkspace(
  1. String workingDirectory, {
  2. String? daemonSharedPath,
})

The directory where lock files are kept.

Defaults to .dart_tool/build_daemon under workingDirectory.

Optionally pass daemonSharedPath to use a separate shared path for lock files. Avoid using globally shared paths on shared machines.

Implementation

String daemonWorkspace(String workingDirectory, {String? daemonSharedPath}) {
  if (daemonSharedPath == null) {
    return p.join(workingDirectory, '.dart_tool', 'build_daemon');
  }

  final segments = [daemonSharedPath];
  if (_username.isNotEmpty) segments.add(_username);

  // Canonicalize the working directory so it can be used as a key. First
  // `p.canonicalize` which makes it absolute but does not resolve symlinks.
  workingDirectory = p.canonicalize(workingDirectory);
  // Now resolve symlinks.
  try {
    workingDirectory = Directory(workingDirectory).resolveSymbolicLinksSync();
  } on FileSystemException catch (_) {
    // Probably the directory does not exist because this is a test, ignore.
  }

  final workingDirHash = base64UrlEncode(
    md5.convert(workingDirectory.codeUnits).bytes,
  );
  segments.add(workingDirHash);
  return p.joinAll(segments);
}