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  }