Beispiel #1
0
        /// <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();
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        /// <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);
                }
            }
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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));
 }