interim commit
Some checks failed
Build Test Deploy / build-test (push) Has been cancelled
Build Test Deploy / docs (push) Has been cancelled
Build Test Deploy / deploy (push) Has been cancelled

This commit is contained in:
2025-10-08 03:17:52 +03:00
parent 6cbfd47ecd
commit cd0e64f391
21 changed files with 998 additions and 51 deletions

View File

@@ -31,6 +31,7 @@ public sealed class ExportStateManager
string? cursor,
string? targetRepository,
string exporterVersion,
bool resetBaseline,
CancellationToken cancellationToken)
{
ArgumentException.ThrowIfNullOrEmpty(exporterId);
@@ -39,36 +40,59 @@ public sealed class ExportStateManager
ArgumentException.ThrowIfNullOrEmpty(exporterVersion);
var existing = await _store.FindAsync(exporterId, cancellationToken).ConfigureAwait(false);
var repository = string.IsNullOrWhiteSpace(targetRepository) ? existing?.TargetRepository : targetRepository;
var now = _timeProvider.GetUtcNow();
var baseExportId = existing?.BaseExportId ?? exportId;
var baseDigest = existing?.BaseDigest ?? exportDigest;
if (existing is null)
{
var resolvedRepository = string.IsNullOrWhiteSpace(targetRepository) ? null : targetRepository;
return await _store.UpsertAsync(
new ExportStateRecord(
exporterId,
BaseExportId: exportId,
BaseDigest: exportDigest,
LastFullDigest: exportDigest,
LastDeltaDigest: null,
ExportCursor: cursor ?? exportDigest,
TargetRepository: resolvedRepository,
ExporterVersion: exporterVersion,
UpdatedAt: now),
cancellationToken).ConfigureAwait(false);
}
var record = existing is null
? new ExportStateRecord(
exporterId,
baseExportId,
baseDigest,
exportDigest,
LastDeltaDigest: null,
ExportCursor: cursor ?? exportDigest,
TargetRepository: repository,
ExporterVersion: exporterVersion,
UpdatedAt: now)
var repositorySpecified = !string.IsNullOrWhiteSpace(targetRepository);
var resolvedRepo = repositorySpecified ? targetRepository : existing.TargetRepository;
var repositoryChanged = repositorySpecified
&& !string.Equals(existing.TargetRepository, targetRepository, StringComparison.Ordinal);
var shouldResetBaseline =
resetBaseline
|| string.IsNullOrWhiteSpace(existing.BaseExportId)
|| string.IsNullOrWhiteSpace(existing.BaseDigest)
|| repositoryChanged;
var updatedRecord = shouldResetBaseline
? existing with
{
BaseExportId = exportId,
BaseDigest = exportDigest,
LastFullDigest = exportDigest,
LastDeltaDigest = null,
ExportCursor = cursor ?? exportDigest,
TargetRepository = resolvedRepo,
ExporterVersion = exporterVersion,
UpdatedAt = now,
}
: existing with
{
BaseExportId = baseExportId,
BaseDigest = baseDigest,
LastFullDigest = exportDigest,
LastDeltaDigest = null,
ExportCursor = cursor ?? existing.ExportCursor,
TargetRepository = repository,
TargetRepository = resolvedRepo,
ExporterVersion = exporterVersion,
UpdatedAt = now,
};
return await _store.UpsertAsync(record, cancellationToken).ConfigureAwait(false);
return await _store.UpsertAsync(updatedRecord, cancellationToken).ConfigureAwait(false);
}
public async Task<ExportStateRecord> StoreDeltaExportAsync(