mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Added all required dependencies
This commit is contained in:
		
							
								
								
									
										173
									
								
								vendor/github.com/Unknwon/com/dir.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								vendor/github.com/Unknwon/com/dir.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,173 @@ | ||||
| // Copyright 2013 com authors | ||||
| // | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"): you may | ||||
| // not use this file except in compliance with the License. You may obtain | ||||
| // a copy of the License at | ||||
| // | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| // License for the specific language governing permissions and limitations | ||||
| // under the License. | ||||
|  | ||||
| package com | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // IsDir returns true if given path is a directory, | ||||
| // or returns false when it's a file or does not exist. | ||||
| func IsDir(dir string) bool { | ||||
| 	f, e := os.Stat(dir) | ||||
| 	if e != nil { | ||||
| 		return false | ||||
| 	} | ||||
| 	return f.IsDir() | ||||
| } | ||||
|  | ||||
| func statDir(dirPath, recPath string, includeDir, isDirOnly bool) ([]string, error) { | ||||
| 	dir, err := os.Open(dirPath) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer dir.Close() | ||||
|  | ||||
| 	fis, err := dir.Readdir(0) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	statList := make([]string, 0) | ||||
| 	for _, fi := range fis { | ||||
| 		if strings.Contains(fi.Name(), ".DS_Store") { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		relPath := path.Join(recPath, fi.Name()) | ||||
| 		curPath := path.Join(dirPath, fi.Name()) | ||||
| 		if fi.IsDir() { | ||||
| 			if includeDir { | ||||
| 				statList = append(statList, relPath+"/") | ||||
| 			} | ||||
| 			s, err := statDir(curPath, relPath, includeDir, isDirOnly) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			statList = append(statList, s...) | ||||
| 		} else if !isDirOnly { | ||||
| 			statList = append(statList, relPath) | ||||
| 		} | ||||
| 	} | ||||
| 	return statList, nil | ||||
| } | ||||
|  | ||||
| // StatDir gathers information of given directory by depth-first. | ||||
| // It returns slice of file list and includes subdirectories if enabled; | ||||
| // it returns error and nil slice when error occurs in underlying functions, | ||||
| // or given path is not a directory or does not exist. | ||||
| // | ||||
| // Slice does not include given path itself. | ||||
| // If subdirectories is enabled, they will have suffix '/'. | ||||
| func StatDir(rootPath string, includeDir ...bool) ([]string, error) { | ||||
| 	if !IsDir(rootPath) { | ||||
| 		return nil, errors.New("not a directory or does not exist: " + rootPath) | ||||
| 	} | ||||
|  | ||||
| 	isIncludeDir := false | ||||
| 	if len(includeDir) >= 1 { | ||||
| 		isIncludeDir = includeDir[0] | ||||
| 	} | ||||
| 	return statDir(rootPath, "", isIncludeDir, false) | ||||
| } | ||||
|  | ||||
| // GetAllSubDirs returns all subdirectories of given root path. | ||||
| // Slice does not include given path itself. | ||||
| func GetAllSubDirs(rootPath string) ([]string, error) { | ||||
| 	if !IsDir(rootPath) { | ||||
| 		return nil, errors.New("not a directory or does not exist: " + rootPath) | ||||
| 	} | ||||
| 	return statDir(rootPath, "", true, true) | ||||
| } | ||||
|  | ||||
| // GetFileListBySuffix returns an ordered list of file paths. | ||||
| // It recognize if given path is a file, and don't do recursive find. | ||||
| func GetFileListBySuffix(dirPath, suffix string) ([]string, error) { | ||||
| 	if !IsExist(dirPath) { | ||||
| 		return nil, fmt.Errorf("given path does not exist: %s", dirPath) | ||||
| 	} else if IsFile(dirPath) { | ||||
| 		return []string{dirPath}, nil | ||||
| 	} | ||||
|  | ||||
| 	// Given path is a directory. | ||||
| 	dir, err := os.Open(dirPath) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	fis, err := dir.Readdir(0) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	files := make([]string, 0, len(fis)) | ||||
| 	for _, fi := range fis { | ||||
| 		if strings.HasSuffix(fi.Name(), suffix) { | ||||
| 			files = append(files, path.Join(dirPath, fi.Name())) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return files, nil | ||||
| } | ||||
|  | ||||
| // CopyDir copy files recursively from source to target directory. | ||||
| // | ||||
| // The filter accepts a function that process the path info. | ||||
| // and should return true for need to filter. | ||||
| // | ||||
| // It returns error when error occurs in underlying functions. | ||||
| func CopyDir(srcPath, destPath string, filters ...func(filePath string) bool) error { | ||||
| 	// Check if target directory exists. | ||||
| 	if IsExist(destPath) { | ||||
| 		return errors.New("file or directory alreay exists: " + destPath) | ||||
| 	} | ||||
|  | ||||
| 	err := os.MkdirAll(destPath, os.ModePerm) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// Gather directory info. | ||||
| 	infos, err := StatDir(srcPath, true) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	var filter func(filePath string) bool | ||||
| 	if len(filters) > 0 { | ||||
| 		filter = filters[0] | ||||
| 	} | ||||
|  | ||||
| 	for _, info := range infos { | ||||
| 		if filter != nil && filter(info) { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		curPath := path.Join(destPath, info) | ||||
| 		if strings.HasSuffix(info, "/") { | ||||
| 			err = os.MkdirAll(curPath, os.ModePerm) | ||||
| 		} else { | ||||
| 			err = Copy(path.Join(srcPath, info), curPath) | ||||
| 		} | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user