public void Export(IRepoConfig config, CancellationToken cancellation) { try { UpdateRepo(config, cancellation); var changes = CollectChanges(config, cancellation); ProcessChanges(config, changes, cancellation); } catch (OperationCanceledException) { } catch (Exception exception) { logger.Error($"Failed during repo export({config})", exception); } }
private ChangedFile[] CollectChanges(IRepoConfig config, CancellationToken cancellation) { var repoDirectory = GetRepoDirectory(config); var lastRef = consul.Get(GetRefKey(config), cancellation); var currentRef = git.GetCurrentRef(repoDirectory, cancellation); if (string.IsNullOrEmpty(lastRef)) { var files = git.ListFiles(repoDirectory, cancellation); return files.Select(file => new ChangedFile {File = file, Mode = ChangeMode.Added}).ToArray(); } if (string.Equals(lastRef, currentRef, StringComparison.OrdinalIgnoreCase)) { return new ChangedFile[0]; } return git.ListChangedFiles(repoDirectory, lastRef, currentRef, cancellation); }
public EnergySummaryRepoStore( ILogger logger, IMediator mediator, IAppCache cache, IRepoConfig config, IApplicationVersion versionConfig, IEnergySummaryDocumentReadRepository energySummaryReadRepository, IEnergySummaryRepository energySummaryRepository) { _persistFunctions = new PersistToRepositoryFunctions <EnergySummary, EnergySummaryReadModel>( energySummaryReadRepository, energySummaryRepository, versionConfig, logger, config, cache, "persistEnergySummaryList", mediator, GetKeyExtensions.GetKey, GetKeyExtensions.GetKeyVersion2); }
public BatteryInverterTemperatureSummaryRepoStore( ILogger logger, IMediator mediator, IAppCache cache, IRepoConfig config, IApplicationVersion versionConfig, IInverterTemperatureSummaryDocumentReadRepository readRepo, IBatteryInverterTemperatureSummaryRepository writeRepo) { _persistFunctions = new PersistToRepositoryFunctions <InverterTemperatureSummary, BatteryInverterTemperatureSummaryReadModel>( readRepo, writeRepo, versionConfig, logger, config, cache, "persistBatteryInverterTemperatureSummaryList", mediator, GetKeyExtensions.GetKey, GetKeyExtensions.GetKeyVersion2); }
private void ProcessChanges(IRepoConfig config, ChangedFile[] changes, CancellationToken cancellation) { var repoDirectory = GetRepoDirectory(config); foreach (var changedFile in changes) { cancellation.ThrowIfCancellationRequested(); var fileKey = AppendKeyPrefix(config.MountPoint, changedFile.File); if (changedFile.Mode == ChangeMode.Deleted) { consul.Delete(fileKey); } else { var absolutePath = fs.CombinePaths(repoDirectory, changedFile.File); var fileContent = fs.ReadFileContent(absolutePath); consul.Put(fileKey, fileContent); } } var currentRef = git.GetCurrentRef(repoDirectory, cancellation); consul.Put(GetRefKey(config), currentRef); }
public PersistToRepositoryFunctions( IDocumentReadRepository <TReadModel> documentReadRepository, ISummaryRepository <TPersistedType> documentWriteRepository, IApplicationVersion versionConfig, ILogger logger, IRepoConfig repoConfig, IAppCache cache, string cacheCollectionKey, IMediator mediator, Func <TPersistedType, string> getKey, Func <TPersistedType, string> getKey2) { _documentReadRepository = documentReadRepository; _documentWriteRepository = documentWriteRepository; _getKey = getKey; _getKey2 = getKey2; _versionConfig = versionConfig; _logger = logger; _repoConfig = repoConfig; _cache = cache; _cacheCollectionKey = cacheCollectionKey; _mediator = mediator; }
private void UpdateRepo(IRepoConfig config, CancellationToken cancellation) { var repoDirectory = fs.CombinePaths(config.BaseDirectory, config.Name, config.Branch); if (fs.IsDirectoryAbsent(repoDirectory)) { fs.CreateDirectory(repoDirectory); git.Clone(repoDirectory, config.Url, config.Branch, cancellation); } else { //TODO If pull failed we should purge and clone again git.Reset(repoDirectory, cancellation); git.Pull(repoDirectory, config.Branch, cancellation); } }
private static string GetRefKey(IRepoConfig config) { return $"/easyconfig/export/ref/{config.Name.Trim('/')}/{config.Branch.Trim('/')}"; }
private string GetRepoDirectory(IRepoConfig config) { return fs.CombinePaths(config.BaseDirectory, config.Name, config.Branch); }