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.

executable.go 929B

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