|
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- // +build !gogit
-
- package git
-
- import (
- "strings"
- )
-
- // Tree represents a flat directory listing.
- type Tree struct {
- ID SHA1
- ResolvedID SHA1
- repo *Repository
-
- // parent tree
- ptree *Tree
-
- entries Entries
- entriesParsed bool
-
- entriesRecursive Entries
- entriesRecursiveParsed bool
- }
-
- // ListEntries returns all entries of current tree.
- func (t *Tree) ListEntries() (Entries, error) {
- if t.entriesParsed {
- return t.entries, nil
- }
-
- stdout, err := NewCommand("ls-tree", t.ID.String()).RunInDirBytes(t.repo.Path)
- if err != nil {
- if strings.Contains(err.Error(), "fatal: Not a valid object name") || strings.Contains(err.Error(), "fatal: not a tree object") {
- return nil, ErrNotExist{
- ID: t.ID.String(),
- }
- }
- return nil, err
- }
-
- t.entries, err = parseTreeEntries(stdout, t)
- if err == nil {
- t.entriesParsed = true
- }
-
- return t.entries, err
- }
-
- // ListEntriesRecursive returns all entries of current tree recursively including all subtrees
- func (t *Tree) ListEntriesRecursive() (Entries, error) {
- if t.entriesRecursiveParsed {
- return t.entriesRecursive, nil
- }
- stdout, err := NewCommand("ls-tree", "-t", "-r", t.ID.String()).RunInDirBytes(t.repo.Path)
- if err != nil {
- return nil, err
- }
-
- t.entriesRecursive, err = parseTreeEntries(stdout, t)
- if err == nil {
- t.entriesRecursiveParsed = true
- }
-
- return t.entriesRecursive, err
- }
|