mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-03 20:58:44 +03:00

Symlinks are followed when you click on a link next to an entry, either until a file has been found or until we know that the link is dead. When the link cannot be accessed, we fall back to the current behavior of showing the document containing the target. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
// EntryMode the type of the object in the git tree
|
|
type EntryMode int
|
|
|
|
// There are only a few file modes in Git. They look like unix file modes, but they can only be
|
|
// one of these.
|
|
const (
|
|
// EntryModeNoEntry is possible if the file was added or removed in a commit. In the case of
|
|
// when adding the base commit doesn't have the file in its tree, a mode of 0o000000 is used.
|
|
EntryModeNoEntry EntryMode = 0o000000
|
|
|
|
EntryModeBlob EntryMode = 0o100644
|
|
EntryModeExec EntryMode = 0o100755
|
|
EntryModeSymlink EntryMode = 0o120000
|
|
EntryModeCommit EntryMode = 0o160000
|
|
EntryModeTree EntryMode = 0o040000
|
|
)
|
|
|
|
// String converts an EntryMode to a string
|
|
func (e EntryMode) String() string {
|
|
return strconv.FormatInt(int64(e), 8)
|
|
}
|
|
|
|
// IsSubModule if the entry is a submodule
|
|
func (e EntryMode) IsSubModule() bool {
|
|
return e == EntryModeCommit
|
|
}
|
|
|
|
// IsDir if the entry is a sub dir
|
|
func (e EntryMode) IsDir() bool {
|
|
return e == EntryModeTree
|
|
}
|
|
|
|
// IsLink if the entry is a symlink
|
|
func (e EntryMode) IsLink() bool {
|
|
return e == EntryModeSymlink
|
|
}
|
|
|
|
// IsRegular if the entry is a regular file
|
|
func (e EntryMode) IsRegular() bool {
|
|
return e == EntryModeBlob
|
|
}
|
|
|
|
// IsExecutable if the entry is an executable file (not necessarily binary)
|
|
func (e EntryMode) IsExecutable() bool {
|
|
return e == EntryModeExec
|
|
}
|
|
|
|
func ParseEntryMode(mode string) (EntryMode, error) {
|
|
switch mode {
|
|
case "000000":
|
|
return EntryModeNoEntry, nil
|
|
case "100644":
|
|
return EntryModeBlob, nil
|
|
case "100755":
|
|
return EntryModeExec, nil
|
|
case "120000":
|
|
return EntryModeSymlink, nil
|
|
case "160000":
|
|
return EntryModeCommit, nil
|
|
case "040000", "040755": // git uses 040000 for tree object, but some users may get 040755 for unknown reasons
|
|
return EntryModeTree, nil
|
|
default:
|
|
return 0, fmt.Errorf("unparsable entry mode: %s", mode)
|
|
}
|
|
}
|