mirror of
				https://github.com/rclone/rclone.git
				synced 2025-10-30 23:17:59 +02:00 
			
		
		
		
	vendor: vfs add vendor/github.com/djherbis/times
This commit is contained in:
		
							
								
								
									
										8
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							| @@ -79,6 +79,12 @@ | ||||
|   revision = "d2709f9f1f31ebcda9651b03077758c1f3a0018c" | ||||
|   version = "v3.0.0" | ||||
|  | ||||
| [[projects]] | ||||
|   name = "github.com/djherbis/times" | ||||
|   packages = ["."] | ||||
|   revision = "95292e44976d1217cf3611dc7c8d9466877d3ed5" | ||||
|   version = "v1.0.1" | ||||
|  | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "github.com/dropbox/dropbox-sdk-go-unofficial" | ||||
| @@ -303,6 +309,6 @@ | ||||
| [solve-meta] | ||||
|   analyzer-name = "dep" | ||||
|   analyzer-version = 1 | ||||
|   inputs-digest = "f53d8d2a21862f225ba86e4575a68ce73db8957959ca507e5eded837c5dbcf73" | ||||
|   inputs-digest = "9d4dcfb143037fc27aa71f0eb309c9754ba348ff7585a39e575fba28265cac7d" | ||||
|   solver-name = "gps-cdcl" | ||||
|   solver-version = 1 | ||||
|   | ||||
							
								
								
									
										22
									
								
								vendor/github.com/djherbis/times/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/djherbis/times/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| language: go | ||||
| go: | ||||
| - 1.5 | ||||
| before_install: | ||||
| - go get github.com/golang/lint/golint | ||||
| - go get github.com/axw/gocov/gocov | ||||
| - go get github.com/mattn/goveralls | ||||
| - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; | ||||
|   fi | ||||
| script: | ||||
| - '[ "${TRAVIS_PULL_REQUEST}" != "false" ] || $HOME/gopath/bin/goveralls -service=travis-ci | ||||
|   -repotoken $COVERALLS_TOKEN' | ||||
| - "$HOME/gopath/bin/golint ./..." | ||||
| - go vet | ||||
| - go test -bench=.* -v ./... | ||||
| notifications: | ||||
|   email: | ||||
|     on_success: never | ||||
|     on_failure: change | ||||
| env: | ||||
|   global: | ||||
|     secure: JLdvT4dl+oifYzbQN5I0G8mZi1KVj3D3zTC8N3D9eLEvHY26QggS2I6M5CNAYkbGSB2RDp7gZLHui8zVzvudD5GuxP2xZe+WN4+n9lf+jLnCuB77ZjKCuDa1+Wg/o466L4PK0BaiTQahbk9qsDNOdfTzXXLEnqBDo1WtvLJ1mn02pL5Wyt3aAA4yeK3z7eUYFNxyi/KJ22bwhjIv6Qa9RHT7ZfR6x9YQSGeLZIWPUx5S+vmySd7sM7gRTw+lRmR/i0PNMHjlOKoyedAT8YLAWX28xgPtc7E5j+pBm6ZmDcN79tTelhiAS9uifEKkdsugZZjfnLBl9gks19bmXP4mxUIo1iKQgIbKVs7R/QMdH7RXW+isfQP/vtk6SNC86os+r7tSJ1EOtF1cZfQ7H4o2RevA3VVTVZ+45gnrK8v00eckbLmsGGho7RGORIt+JGvD0oe84dXdk/lFtBTzWhOJn2Ujlm6L3z3r/YMN2CGFfH5JGpsUKJh1uRzJ5MPqkdxRwcGrtN4DGC1L8tRMfYPo06dQxa8p4TnbYQSZ6qwuVZMMcNvr9c/edwLizMh9KXivPodmHpLAMAUPSyWLtF8pp305DUhajpRsUEvTvs082KJAK4bUNE+AxRIBwtuB0Z2r0DpgfVwAUIXh42l9RDxEA1mwUyX2EKolyRqxQGPv9NQ= | ||||
							
								
								
									
										22
									
								
								vendor/github.com/djherbis/times/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/djherbis/times/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2015 Dustin H | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
|  | ||||
							
								
								
									
										63
									
								
								vendor/github.com/djherbis/times/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/github.com/djherbis/times/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| times  | ||||
| ========== | ||||
|  | ||||
| [](https://godoc.org/github.com/djherbis/times) | ||||
| [](https://github.com/djherbis/times/releases/latest) | ||||
| [](LICENSE.txt) | ||||
| [](https://travis-ci.org/djherbis/times) | ||||
| [](https://coveralls.io/r/djherbis/times?branch=master) | ||||
| [](https://goreportcard.com/report/github.com/djherbis/times) | ||||
|  | ||||
| Usage | ||||
| ------------ | ||||
| File Times for #golang | ||||
|  | ||||
| Go has a hidden time functions for most platforms, this repo makes them accessible. | ||||
|  | ||||
| ```go | ||||
| package main | ||||
|  | ||||
| import ( | ||||
|   "log" | ||||
|  | ||||
|   "github.com/djherbis/times" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
|   t, err := times.Stat("myfile") | ||||
|   if err != nil { | ||||
|     log.Fatal(err.Error()) | ||||
|   } | ||||
|  | ||||
|   log.Println(t.AccessTime()) | ||||
|   log.Println(t.ModTime()) | ||||
|  | ||||
|   if t.HasChangeTime() { | ||||
|     log.Println(t.ChangeTime()) | ||||
|   } | ||||
|  | ||||
|   if t.HasBirthTime() { | ||||
|     log.Println(t.BirthTime()) | ||||
|   } | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Supported Times | ||||
| ------------ | ||||
| |  | windows | linux | solaris | dragonfly | nacl | freebsd | darwin | netbsd | openbsd | plan9 | | ||||
| |:-----:|:-------:|:-----:|:-------:|:---------:|:------:|:-------:|:----:|:------:|:-------:|:-----:| | ||||
| | atime | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ||||
| | mtime | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ||||
| | ctime | ✓* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  | | ||||
| | btime | ✓ |  |  |  |  | ✓ |  ✓| ✓ |   | ||||
|  | ||||
| * Windows XP does not have ChangeTime so HasChangeTime = false,  | ||||
| however Vista onward does have ChangeTime so Timespec.HasChangeTime() will  | ||||
| only return false on those platforms when the syscall used to obtain them fails. | ||||
| * Also note, Get(FileInfo) will now only return values available in FileInfo.Sys(), this means Stat() is required to get ChangeTime on Windows | ||||
|  | ||||
| Installation | ||||
| ------------ | ||||
| ```sh | ||||
| go get github.com/djherbis/times | ||||
| ``` | ||||
							
								
								
									
										29
									
								
								vendor/github.com/djherbis/times/bench_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/djherbis/times/bench_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func BenchmarkGet(t *testing.B) { | ||||
| 	fileTest(t, func(f *os.File) { | ||||
| 		fi, err := os.Stat(f.Name()) | ||||
| 		if err != nil { | ||||
| 			t.Error(err) | ||||
| 		} | ||||
|  | ||||
| 		for i := 0; i < t.N; i++ { | ||||
| 			Get(fi) | ||||
| 		} | ||||
| 	}) | ||||
| 	t.ReportAllocs() | ||||
| } | ||||
|  | ||||
| func BenchmarkStat(t *testing.B) { | ||||
| 	fileTest(t, func(f *os.File) { | ||||
| 		for i := 0; i < t.N; i++ { | ||||
| 			Stat(f.Name()) | ||||
| 		} | ||||
| 	}) | ||||
| 	t.ReportAllocs() | ||||
| } | ||||
							
								
								
									
										96
									
								
								vendor/github.com/djherbis/times/ctime_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								vendor/github.com/djherbis/times/ctime_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| type timespecEx struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	btime | ||||
| } | ||||
|  | ||||
| // StatFile finds a Windows Timespec with ChangeTime. | ||||
| func StatFile(file *os.File) (Timespec, error) { | ||||
| 	return statFile(syscall.Handle(file.Fd())) | ||||
| } | ||||
|  | ||||
| func statFile(h syscall.Handle) (Timespec, error) { | ||||
| 	var fileInfo fileBasicInfo | ||||
| 	if err := getFileInformationByHandleEx(h, &fileInfo); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	var t timespecEx | ||||
| 	t.atime.v = time.Unix(0, fileInfo.LastAccessTime.Nanoseconds()) | ||||
| 	t.mtime.v = time.Unix(0, fileInfo.LastWriteTime.Nanoseconds()) | ||||
| 	t.ctime.v = time.Unix(0, fileInfo.ChangeTime.Nanoseconds()) | ||||
| 	t.btime.v = time.Unix(0, fileInfo.CreationTime.Nanoseconds()) | ||||
| 	return t, nil | ||||
| } | ||||
|  | ||||
| const hasPlatformSpecificStat = true | ||||
|  | ||||
| func platformSpecficStat(name string) (Timespec, error) { | ||||
| 	if findProcErr != nil { | ||||
| 		return nil, findProcErr | ||||
| 	} | ||||
|  | ||||
| 	f, err := os.Open(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer f.Close() | ||||
|  | ||||
| 	return statFile(syscall.Handle(f.Fd())) | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	findProcErr                      error | ||||
| 	procGetFileInformationByHandleEx *syscall.Proc | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	var modkernel32 *syscall.DLL | ||||
| 	if modkernel32, findProcErr = syscall.LoadDLL("kernel32.dll"); findProcErr == nil { | ||||
| 		procGetFileInformationByHandleEx, findProcErr = modkernel32.FindProc("GetFileInformationByHandleEx") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // fileBasicInfo holds the C++ data for FileTimes. | ||||
| // | ||||
| // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364217(v=vs.85).aspx | ||||
| type fileBasicInfo struct { | ||||
| 	CreationTime   syscall.Filetime | ||||
| 	LastAccessTime syscall.Filetime | ||||
| 	LastWriteTime  syscall.Filetime | ||||
| 	ChangeTime     syscall.Filetime | ||||
| 	FileAttributes uint32 | ||||
| 	_              uint32 // padding | ||||
| } | ||||
|  | ||||
| type fileInformationClass int | ||||
|  | ||||
| const ( | ||||
| 	fileBasicInfoClass fileInformationClass = iota | ||||
| ) | ||||
|  | ||||
| func getFileInformationByHandleEx(handle syscall.Handle, data *fileBasicInfo) (err error) { | ||||
| 	if findProcErr != nil { | ||||
| 		return findProcErr | ||||
| 	} | ||||
|  | ||||
| 	r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(fileBasicInfoClass), uintptr(unsafe.Pointer(data)), unsafe.Sizeof(*data), 0, 0) | ||||
| 	if r1 == 0 { | ||||
| 		if e1 != 0 { | ||||
| 			err = error(e1) | ||||
| 		} else { | ||||
| 			err = syscall.EINVAL | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
							
								
								
									
										79
									
								
								vendor/github.com/djherbis/times/times.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/djherbis/times/times.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| // Package times provides a platform-independent way to get atime, mtime, ctime and btime for files. | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // Get returns the Timespec for the given FileInfo | ||||
| func Get(fi os.FileInfo) Timespec { | ||||
| 	return getTimespec(fi) | ||||
| } | ||||
|  | ||||
| // Stat returns the Timespec for the given filename. | ||||
| func Stat(name string) (Timespec, error) { | ||||
| 	if hasPlatformSpecificStat { | ||||
| 		if ts, err := platformSpecficStat(name); err == nil { | ||||
| 			return ts, nil | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	fi, err := os.Stat(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return getTimespec(fi), nil | ||||
| } | ||||
|  | ||||
| // Timespec provides access to file times. | ||||
| // ChangeTime() panics unless HasChangeTime() is true and | ||||
| // BirthTime() panics unless HasBirthTime() is true. | ||||
| type Timespec interface { | ||||
| 	ModTime() time.Time | ||||
| 	AccessTime() time.Time | ||||
| 	ChangeTime() time.Time | ||||
| 	BirthTime() time.Time | ||||
| 	HasChangeTime() bool | ||||
| 	HasBirthTime() bool | ||||
| } | ||||
|  | ||||
| type atime struct { | ||||
| 	v time.Time | ||||
| } | ||||
|  | ||||
| func (a atime) AccessTime() time.Time { return a.v } | ||||
|  | ||||
| type ctime struct { | ||||
| 	v time.Time | ||||
| } | ||||
|  | ||||
| func (ctime) HasChangeTime() bool { return true } | ||||
|  | ||||
| func (c ctime) ChangeTime() time.Time { return c.v } | ||||
|  | ||||
| type mtime struct { | ||||
| 	v time.Time | ||||
| } | ||||
|  | ||||
| func (m mtime) ModTime() time.Time { return m.v } | ||||
|  | ||||
| type btime struct { | ||||
| 	v time.Time | ||||
| } | ||||
|  | ||||
| func (btime) HasBirthTime() bool { return true } | ||||
|  | ||||
| func (b btime) BirthTime() time.Time { return b.v } | ||||
|  | ||||
| type noctime struct{} | ||||
|  | ||||
| func (noctime) HasChangeTime() bool { return false } | ||||
|  | ||||
| func (noctime) ChangeTime() time.Time { panic("ctime not available") } | ||||
|  | ||||
| type nobtime struct{} | ||||
|  | ||||
| func (nobtime) HasBirthTime() bool { return false } | ||||
|  | ||||
| func (nobtime) BirthTime() time.Time { panic("birthtime not available") } | ||||
							
								
								
									
										40
									
								
								vendor/github.com/djherbis/times/times_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/djherbis/times/times_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_darwin.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = true | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	btime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atimespec) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtimespec) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctimespec) | ||||
| 	t.btime.v = timespecToTime(stat.Birthtimespec) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/djherbis/times/times_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/djherbis/times/times_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_dragonfly.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atim) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtim) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctim) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										40
									
								
								vendor/github.com/djherbis/times/times_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/djherbis/times/times_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_freebsd.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = true | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	btime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atimespec) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtimespec) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctimespec) | ||||
| 	t.btime.v = timespecToTime(stat.Birthtimespec) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/djherbis/times/times_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/djherbis/times/times_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_linux.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atim) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtim) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctim) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/djherbis/times/times_nacl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/djherbis/times/times_nacl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_nacl.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func timespecToTime(sec, nsec int64) time.Time { | ||||
| 	return time.Unix(sec, nsec) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atime, stat.AtimeNsec) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtime, stat.MtimeNsec) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctime, stat.CtimeNsec) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										40
									
								
								vendor/github.com/djherbis/times/times_netbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/djherbis/times/times_netbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_netbsd.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = true | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	btime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atimespec) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtimespec) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctimespec) | ||||
| 	t.btime.v = timespecToTime(stat.Birthtimespec) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/djherbis/times/times_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/djherbis/times/times_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_openbsd.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atim) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtim) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctim) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										34
									
								
								vendor/github.com/djherbis/times/times_plan9.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/djherbis/times/times_plan9.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_plan9.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = false | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	noctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Dir) | ||||
| 	t.atime.v = time.Unix(int64(stat.Atime), 0) | ||||
| 	t.mtime.v = time.Unix(int64(stat.Mtime), 0) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/djherbis/times/times_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/djherbis/times/times_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_solaris.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = true | ||||
| 	HasBirthTime  = false | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	ctime | ||||
| 	nobtime | ||||
| } | ||||
|  | ||||
| func timespecToTime(ts syscall.Timespec) time.Time { | ||||
| 	return time.Unix(int64(ts.Sec), int64(ts.Nsec)) | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) (t timespec) { | ||||
| 	stat := fi.Sys().(*syscall.Stat_t) | ||||
| 	t.atime.v = timespecToTime(stat.Atim) | ||||
| 	t.mtime.v = timespecToTime(stat.Mtim) | ||||
| 	t.ctime.v = timespecToTime(stat.Ctim) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										65
									
								
								vendor/github.com/djherbis/times/times_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								vendor/github.com/djherbis/times/times_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| func TestStat(t *testing.T) { | ||||
| 	fileTest(t, func(f *os.File) { | ||||
| 		ts, err := Stat(f.Name()) | ||||
| 		if err != nil { | ||||
| 			t.Error(err.Error()) | ||||
| 		} | ||||
| 		timespecTest(ts, newInterval(time.Now(), time.Second), t) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestGet(t *testing.T) { | ||||
| 	fileTest(t, func(f *os.File) { | ||||
| 		fi, err := os.Stat(f.Name()) | ||||
| 		if err != nil { | ||||
| 			t.Error(err.Error()) | ||||
| 		} | ||||
| 		timespecTest(Get(fi), newInterval(time.Now(), time.Second), t) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestStatErr(t *testing.T) { | ||||
| 	_, err := Stat("badfile?") | ||||
| 	if err == nil { | ||||
| 		t.Error("expected an error") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestCheat(t *testing.T) { | ||||
| 	// not all times are available for all platforms | ||||
| 	// this allows us to get 100% test coverage for platforms which do not have | ||||
| 	// ChangeTime/BirthTime | ||||
| 	var c ctime | ||||
| 	if c.HasChangeTime() { | ||||
| 		c.ChangeTime() | ||||
| 	} | ||||
|  | ||||
| 	var b btime | ||||
| 	if b.HasBirthTime() { | ||||
| 		b.BirthTime() | ||||
| 	} | ||||
|  | ||||
| 	var nc noctime | ||||
| 	func() { | ||||
| 		if !nc.HasChangeTime() { | ||||
| 			defer func() { recover() }() | ||||
| 		} | ||||
| 		nc.ChangeTime() | ||||
| 	}() | ||||
|  | ||||
| 	var nb nobtime | ||||
| 	func() { | ||||
| 		if !nb.HasBirthTime() { | ||||
| 			defer func() { recover() }() | ||||
| 		} | ||||
| 		nb.BirthTime() | ||||
| 	}() | ||||
| } | ||||
							
								
								
									
										36
									
								
								vendor/github.com/djherbis/times/times_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/github.com/djherbis/times/times_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // http://golang.org/src/os/stat_windows.go | ||||
|  | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // HasChangeTime and HasBirthTime are true if and only if | ||||
| // the target OS supports them. | ||||
| const ( | ||||
| 	HasChangeTime = false | ||||
| 	HasBirthTime  = true | ||||
| ) | ||||
|  | ||||
| type timespec struct { | ||||
| 	atime | ||||
| 	mtime | ||||
| 	noctime | ||||
| 	btime | ||||
| } | ||||
|  | ||||
| func getTimespec(fi os.FileInfo) Timespec { | ||||
| 	var t timespec | ||||
| 	stat := fi.Sys().(*syscall.Win32FileAttributeData) | ||||
| 	t.atime.v = time.Unix(0, stat.LastAccessTime.Nanoseconds()) | ||||
| 	t.mtime.v = time.Unix(0, stat.LastWriteTime.Nanoseconds()) | ||||
| 	t.btime.v = time.Unix(0, stat.CreationTime.Nanoseconds()) | ||||
| 	return t | ||||
| } | ||||
							
								
								
									
										10
									
								
								vendor/github.com/djherbis/times/use_generic_stat.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/djherbis/times/use_generic_stat.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| // +build !windows | ||||
|  | ||||
| package times | ||||
|  | ||||
| const hasPlatformSpecificStat = false | ||||
|  | ||||
| // do not use, only here to prevent "undefined" method error. | ||||
| func platformSpecficStat(name string) (Timespec, error) { | ||||
| 	return nil, nil | ||||
| } | ||||
							
								
								
									
										50
									
								
								vendor/github.com/djherbis/times/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								vendor/github.com/djherbis/times/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| package times | ||||
|  | ||||
| import ( | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| type timeRange struct { | ||||
| 	start time.Time | ||||
| 	end   time.Time | ||||
| } | ||||
|  | ||||
| func newInterval(t time.Time, dur time.Duration) timeRange { | ||||
| 	return timeRange{start: t.Add(-dur), end: t.Add(dur)} | ||||
| } | ||||
|  | ||||
| func (t timeRange) Contains(findTime time.Time) bool { | ||||
| 	return !findTime.Before(t.start) && !findTime.After(t.end) | ||||
| } | ||||
|  | ||||
| // creates a file and cleans it up after the test is run. | ||||
| func fileTest(t testing.TB, testFunc func(f *os.File)) { | ||||
| 	f, err := ioutil.TempFile("", "") | ||||
| 	if err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| 	defer os.Remove(f.Name()) | ||||
| 	defer f.Close() | ||||
| 	testFunc(f) | ||||
| } | ||||
|  | ||||
| func timespecTest(ts Timespec, r timeRange, t testing.TB) { | ||||
| 	if !r.Contains(ts.AccessTime()) { | ||||
| 		t.Errorf("expected %s to be in range: %s\n", ts.AccessTime(), r.start) | ||||
| 	} | ||||
|  | ||||
| 	if !r.Contains(ts.ModTime()) { | ||||
| 		t.Errorf("expected %s to be in range: %s\n", ts.ModTime(), r.start) | ||||
| 	} | ||||
|  | ||||
| 	if ts.HasChangeTime() && !r.Contains(ts.ChangeTime()) { | ||||
| 		t.Errorf("expected %s to be in range: %s\n", ts.ChangeTime(), r.start) | ||||
| 	} | ||||
|  | ||||
| 	if ts.HasBirthTime() && !r.Contains(ts.BirthTime()) { | ||||
| 		t.Errorf("expected %s to be in range: %s\n", ts.BirthTime(), r.start) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user