mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.4 KiB
50 lines
1.4 KiB
// 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 |
|
// added the base commit will not have the file in its tree so 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) |
|
} |
|
|
|
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) |
|
} |
|
}
|
|
|