gitech

Форк
0
/
repo_tree_nogogit.go 
95 строк · 1.9 Кб
1
// Copyright 2020 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
//go:build !gogit
5

6
package git
7

8
import (
9
	"io"
10
)
11

12
func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
13
	wr, rd, cancel := repo.CatFileBatch(repo.Ctx)
14
	defer cancel()
15

16
	_, _ = wr.Write([]byte(id.String() + "\n"))
17

18
	// ignore the SHA
19
	_, typ, size, err := ReadBatchLine(rd)
20
	if err != nil {
21
		return nil, err
22
	}
23

24
	switch typ {
25
	case "tag":
26
		resolvedID := id
27
		data, err := io.ReadAll(io.LimitReader(rd, size))
28
		if err != nil {
29
			return nil, err
30
		}
31
		tag, err := parseTagData(id.Type(), data)
32
		if err != nil {
33
			return nil, err
34
		}
35
		commit, err := tag.Commit(repo)
36
		if err != nil {
37
			return nil, err
38
		}
39
		commit.Tree.ResolvedID = resolvedID
40
		return &commit.Tree, nil
41
	case "commit":
42
		commit, err := CommitFromReader(repo, id, io.LimitReader(rd, size))
43
		if err != nil {
44
			return nil, err
45
		}
46
		if _, err := rd.Discard(1); err != nil {
47
			return nil, err
48
		}
49
		commit.Tree.ResolvedID = commit.ID
50
		return &commit.Tree, nil
51
	case "tree":
52
		tree := NewTree(repo, id)
53
		tree.ResolvedID = id
54
		objectFormat, err := repo.GetObjectFormat()
55
		if err != nil {
56
			return nil, err
57
		}
58
		tree.entries, err = catBatchParseTreeEntries(objectFormat, tree, rd, size)
59
		if err != nil {
60
			return nil, err
61
		}
62
		tree.entriesParsed = true
63
		return tree, nil
64
	default:
65
		if err := DiscardFull(rd, size+1); err != nil {
66
			return nil, err
67
		}
68
		return nil, ErrNotExist{
69
			ID: id.String(),
70
		}
71
	}
72
}
73

74
// GetTree find the tree object in the repository.
75
func (repo *Repository) GetTree(idStr string) (*Tree, error) {
76
	objectFormat, err := repo.GetObjectFormat()
77
	if err != nil {
78
		return nil, err
79
	}
80
	if len(idStr) != objectFormat.FullLength() {
81
		res, err := repo.GetRefCommitID(idStr)
82
		if err != nil {
83
			return nil, err
84
		}
85
		if len(res) > 0 {
86
			idStr = res
87
		}
88
	}
89
	id, err := NewIDFromString(idStr)
90
	if err != nil {
91
		return nil, err
92
	}
93

94
	return repo.getTree(id)
95
}
96

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.