daemonWorkspace function
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);
}