예제 #1
0
        public override async ValueTask <TGitObject?> GetByIdAsync <TGitObject>(GitId id)
            where TGitObject : class
        {
            var name = id.ToString();

            string path = Path.Combine(_objectsDir, name.Substring(0, 2), name.Substring(2));

            if (!File.Exists(path))
            {
                return(null);
            }

            var fileReader = FileBucket.OpenRead(path, false);

            try
            {
                var rdr = new GitObjectFileBucket(fileReader);

                GitObject ob = await GitObject.FromBucketAsync(Repository, rdr, id).ConfigureAwait(false);

                if (ob is TGitObject tg)
                {
                    return(tg);
                }

                rdr.Dispose();

                return(null);
            }
            catch
            {
                fileReader.Dispose();
                throw;
            }
        }
예제 #2
0
        internal override bool ContainsId(GitId id)
        {
            var name = id.ToString();

            string path = Path.Combine(_objectsDir, name.Substring(0, 2), name.Substring(2));

            return(File.Exists(path));
        }
예제 #3
0
        internal override ValueTask <GitObjectBucket?> ResolveById(GitId id)
        {
            var name = id.ToString();

            string path = Path.Combine(_objectsDir, name.Substring(0, 2), name.Substring(2));

            if (!File.Exists(path))
            {
                return(default);