예제 #1
0
 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);
     }
 }
예제 #2
0
        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);
        }
예제 #3
0
 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);
 }
예제 #5
0
        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);
        }
예제 #6
0
 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;
 }
예제 #7
0
        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);
            }    
        }
예제 #8
0
 private static string GetRefKey(IRepoConfig config)
 {
     return $"/easyconfig/export/ref/{config.Name.Trim('/')}/{config.Branch.Trim('/')}";
 }
예제 #9
0
 private string GetRepoDirectory(IRepoConfig config)
 {
     return fs.CombinePaths(config.BaseDirectory, config.Name, config.Branch);
 }