code.gitea.io/gitea@v1.19.3/modules/timeutil/executable.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package timeutil 5 6 import ( 7 "os" 8 "path/filepath" 9 "sync" 10 "time" 11 12 "code.gitea.io/gitea/modules/log" 13 ) 14 15 var ( 16 executablModTime = time.Now() 17 executablModTimeOnce sync.Once 18 ) 19 20 // GetExecutableModTime get executable file modified time of current process. 21 func GetExecutableModTime() time.Time { 22 executablModTimeOnce.Do(func() { 23 exePath, err := os.Executable() 24 if err != nil { 25 log.Error("os.Executable: %v", err) 26 return 27 } 28 29 exePath, err = filepath.Abs(exePath) 30 if err != nil { 31 log.Error("filepath.Abs: %v", err) 32 return 33 } 34 35 exePath, err = filepath.EvalSymlinks(exePath) 36 if err != nil { 37 log.Error("filepath.EvalSymlinks: %v", err) 38 return 39 } 40 41 st, err := os.Stat(exePath) 42 if err != nil { 43 log.Error("os.Stat: %v", err) 44 return 45 } 46 47 executablModTime = st.ModTime() 48 }) 49 return executablModTime 50 }