/// <inheritdoc/> public TResult Execute <TResult>(RepositoryDescription description, Func <IRepository, TResult> processor) { if (description == null) { throw new ArgumentNullException(nameof(description)); } if (processor == null) { throw new ArgumentNullException(nameof(processor)); } var entry = GetEntry(description); try { return(processor(entry.Repository)); } finally { lock (_syncLock) { entry.Counter--; } StartScanForExpiredItems(); } }
CacheEntry GetEntry(RepositoryDescription description) { lock (_syncLock) { if (!_dictionary.TryGetValue(description, out var result)) { _dictionary[description] = result = new CacheEntry(_repositoryFactory.CreateRepository(description)); } result.Counter++; result.LastUsed = DateTimeOffset.UtcNow; return(result); } }
/// <inheritdoc/> public void Evict(RepositoryDescription description) { if (description == null) { throw new ArgumentNullException(nameof(description)); } lock (_syncLock) { var kvp = _dictionary.FirstOrDefault(k => k.Key.Equals(description)); if (kvp.Key != null) { Evict(kvp); } } }
/// <inheritdoc/> public IRepository CreateRepository(RepositoryDescription description) { if (description == null) { throw new ArgumentNullException(nameof(description)); } var repository = new Repository(description.Path); if (description.Backend != null) { repository.ObjectDatabase.AddBackend(description.Backend, priority: 5); } return(repository); }
/// <inheritdoc/> public void Execute(RepositoryDescription description, Action <IRepository> processor) { if (description == null) { throw new ArgumentNullException(nameof(description)); } if (processor == null) { throw new ArgumentNullException(nameof(processor)); } Execute(description, repository => { processor(repository); return(default(object)); }); }
/// <inheritdoc/> public IRepository CreateRepository(RepositoryDescription description) { if (description == null) { throw new ArgumentNullException(nameof(description)); } var repository = new Repository(description.Path); if (description.Backend != null) { var backend = description.Backend(); if (backend == null) { throw new GitObjectDbException("Backend returned by factory cannot be null."); } repository.ObjectDatabase.AddBackend(backend, priority: 5); } return(repository); }
public void SetRepositoryData(GitObjectDb.Git.RepositoryDescription repositoryDescription, LibGit2Sharp.ObjectId commitId) { RepositoryDescription = repositoryDescription ?? throw new ArgumentNullException(nameof(repositoryDescription)); CommitId = commitId ?? throw new ArgumentNullException(nameof(commitId)); }