github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/internal/build/env.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2016 Go Ethereum作者 10 //此文件是Go以太坊库的一部分。 11 // 12 //Go-Ethereum库是免费软件:您可以重新分发它和/或修改 13 //根据GNU发布的较低通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊图书馆的发行目的是希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU较低的通用公共许可证,了解更多详细信息。 21 // 22 //你应该收到一份GNU较低级别的公共许可证副本 23 //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 package build 26 27 import ( 28 "flag" 29 "fmt" 30 "os" 31 "strings" 32 ) 33 34 var ( 35 //这些标志覆盖build env中的值。 36 GitCommitFlag = flag.String("git-commit", "", `Overrides git commit hash embedded into executables`) 37 GitBranchFlag = flag.String("git-branch", "", `Overrides git branch being built`) 38 GitTagFlag = flag.String("git-tag", "", `Overrides git tag being built`) 39 BuildnumFlag = flag.String("buildnum", "", `Overrides CI build number`) 40 PullRequestFlag = flag.Bool("pull-request", false, `Overrides pull request status of the build`) 41 CronJobFlag = flag.Bool("cron-job", false, `Overrides cron job status of the build`) 42 ) 43 44 //环境包含由生成环境提供的元数据。 45 type Environment struct { 46 Name string //环境名称 47 Repo string //Github回购的名称 48 Commit, Branch, Tag string //GIT信息 49 Buildnum string 50 IsPullRequest bool 51 IsCronJob bool 52 } 53 54 func (env Environment) String() string { 55 return fmt.Sprintf("%s env (commit:%s branch:%s tag:%s buildnum:%s pr:%t)", 56 env.Name, env.Commit, env.Branch, env.Tag, env.Buildnum, env.IsPullRequest) 57 } 58 59 //env返回有关当前CI环境的元数据,返回到localenv 60 //如果不在CI上运行。 61 func Env() Environment { 62 switch { 63 case os.Getenv("CI") == "true" && os.Getenv("TRAVIS") == "true": 64 return Environment{ 65 Name: "travis", 66 Repo: os.Getenv("TRAVIS_REPO_SLUG"), 67 Commit: os.Getenv("TRAVIS_COMMIT"), 68 Branch: os.Getenv("TRAVIS_BRANCH"), 69 Tag: os.Getenv("TRAVIS_TAG"), 70 Buildnum: os.Getenv("TRAVIS_BUILD_NUMBER"), 71 IsPullRequest: os.Getenv("TRAVIS_PULL_REQUEST") != "false", 72 IsCronJob: os.Getenv("TRAVIS_EVENT_TYPE") == "cron", 73 } 74 case os.Getenv("CI") == "True" && os.Getenv("APPVEYOR") == "True": 75 return Environment{ 76 Name: "appveyor", 77 Repo: os.Getenv("APPVEYOR_REPO_NAME"), 78 Commit: os.Getenv("APPVEYOR_REPO_COMMIT"), 79 Branch: os.Getenv("APPVEYOR_REPO_BRANCH"), 80 Tag: os.Getenv("APPVEYOR_REPO_TAG_NAME"), 81 Buildnum: os.Getenv("APPVEYOR_BUILD_NUMBER"), 82 IsPullRequest: os.Getenv("APPVEYOR_PULL_REQUEST_NUMBER") != "", 83 IsCronJob: os.Getenv("APPVEYOR_SCHEDULED_BUILD") == "True", 84 } 85 default: 86 return LocalEnv() 87 } 88 } 89 90 //localenv返回从git收集的生成环境元数据。 91 func LocalEnv() Environment { 92 env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"}) 93 94 head := readGitFile("HEAD") 95 if splits := strings.Split(head, " "); len(splits) == 2 { 96 head = splits[1] 97 } else { 98 return env 99 } 100 if env.Commit == "" { 101 env.Commit = readGitFile(head) 102 } 103 if env.Branch == "" { 104 if head != "HEAD" { 105 env.Branch = strings.TrimPrefix(head, "refs/heads/") 106 } 107 } 108 if info, err := os.Stat(".git/objects"); err == nil && info.IsDir() && env.Tag == "" { 109 env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD")) 110 } 111 return env 112 } 113 114 func firstLine(s string) string { 115 return strings.Split(s, "\n")[0] 116 } 117 118 func applyEnvFlags(env Environment) Environment { 119 if !flag.Parsed() { 120 panic("you need to call flag.Parse before Env or LocalEnv") 121 } 122 if *GitCommitFlag != "" { 123 env.Commit = *GitCommitFlag 124 } 125 if *GitBranchFlag != "" { 126 env.Branch = *GitBranchFlag 127 } 128 if *GitTagFlag != "" { 129 env.Tag = *GitTagFlag 130 } 131 if *BuildnumFlag != "" { 132 env.Buildnum = *BuildnumFlag 133 } 134 if *PullRequestFlag { 135 env.IsPullRequest = true 136 } 137 if *CronJobFlag { 138 env.IsCronJob = true 139 } 140 return env 141 }