public bool Contains(BuildKey builder, IDependencyFingerprint fingerprint)
{
var lck = GetOrCreateLock(builder);
lck.EnterReadLock();
try
{
var dirName = GetCacheDirectoryName(builder);
if (cacheRoot.Value.ChildDirectories.Contains(dirName))
{
var cacheDir = cacheRoot.Value.GetChildDirectory(dirName);
if (cacheDir.Files.Contains(DepsFileName))
{
using (var depsStream = cacheDir.ReadBinaryFile(DepsFileName))
using (var memStream = new MemoryStream())
{
fingerprint.Save(protocolSerializer, memStream);
if (depsStream.Length != memStream.Length)
return false;
var buf1 = memStream.ToArray();
var buf2 = new byte[depsStream.Length];
depsStream.Read(buf2, 0, (int) depsStream.Length);
for (int i = 0; i < buf1.Length; i++)
if (buf1[i] != buf2[i])
return false;
return true;
}
}
}
return false;
}
finally
{
lck.ExitReadLock();
}
}