in Core/src/Impl/Commands/CreateCommand.cs [61:100]
public async Task<int> ExecuteAsync()
{
Volatile.Write(ref mySubOpsCount, 0);
await new StorageManager(myLogger, myStorage).CreateStorageMarkersAsync(myExpectedStorageFormat);
var dstFiles = new ConcurrentDictionary<SymbolStoragePath, bool>();
var statistics = await new LocalFilesScanner(myLogger, myDegreeOfParallelism, myIsCompressPe, myIsCompressWPdb, myIsKeepNonCompressed, mySources,
async (tracer, srcDir, srcFile, dstFile) =>
{
Interlocked.Increment(ref mySubOpsCount);
if (dstFiles.TryAdd(dstFile, false))
await WriteData(Path.Combine(srcDir, srcFile), stream => myStorage.CreateForWritingAsync(dstFile, AccessMode.Public, stream));
else
tracer.Warning($"The file {dstFile} already was created");
},
async (tracer, srcDir, srcFile, dstFile) =>
{
Interlocked.Increment(ref mySubOpsCount);
if (dstFiles.TryAdd(dstFile, false))
await WriteDataPacked(Path.Combine(srcDir, srcFile), dstFile.IntoSystemPath(), stream => myStorage.CreateForWritingAsync(dstFile, AccessMode.Public, stream));
else
tracer.Warning($"The file {dstFile} already was created");
}).ExecuteAsync();
myLogger.Info($"[{DateTime.Now:s}] Done with data (warnings: {statistics.Warnings}, errors: {statistics.Errors})");
if (statistics.HasProblems)
{
myLogger.Error("Found some issues, creating was interrupted");
return 1;
}
await WriteTag(dstFiles.Select(x =>
{
var dir = SymbolStoragePath.GetDirectoryName(x.Key);
Debug.Assert(dir != null);
return dir.Value;
}));
await myStorage.InvalidateExternalServicesAsync();
return 0;
}