mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-27 00:23:41 +09:00 
			
		
		
		
	* Implemented calling git diff-tree * Ensures wrapper function is called with valid arguments * Parses output into go struct, using strong typing when possible
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 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
 | |
| 	// added the base commit will not have the file in its tree so a mode of 0o000000 is used.
 | |
| 	EntryModeNoEntry EntryMode = 0o000000
 | |
| 	// EntryModeBlob
 | |
| 	EntryModeBlob EntryMode = 0o100644
 | |
| 	// EntryModeExec
 | |
| 	EntryModeExec EntryMode = 0o100755
 | |
| 	// EntryModeSymlink
 | |
| 	EntryModeSymlink EntryMode = 0o120000
 | |
| 	// EntryModeCommit
 | |
| 	EntryModeCommit EntryMode = 0o160000
 | |
| 	// EntryModeTree
 | |
| 	EntryModeTree EntryMode = 0o040000
 | |
| )
 | |
| 
 | |
| // String converts an EntryMode to a string
 | |
| func (e EntryMode) String() string {
 | |
| 	return strconv.FormatInt(int64(e), 8)
 | |
| }
 | |
| 
 | |
| // ToEntryMode converts a string to an EntryMode
 | |
| func ToEntryMode(value string) EntryMode {
 | |
| 	v, _ := strconv.ParseInt(value, 8, 32)
 | |
| 	return EntryMode(v)
 | |
| }
 | |
| 
 | |
| 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)
 | |
| 	}
 | |
| }
 |