go dl:返回 Package 命令的相同退出状态,

axr492tv  于 10个月前  发布在  Go
关注(0)|答案(8)|浏览(86)

当前,internal/versiongotip 包中的 Run 函数在 Package 的命令失败时返回退出状态 1:

  1. if err := cmd.Run(); err != nil {
  2. // TODO: return the same exit status maybe.
  3. os.Exit(1)
  4. }
  5. os.Exit(0)

我正在开发一个 Package 各种 go 命令的软件包,并为 go 工具的不同版本添加测试支持。不幸的是,现在有一个检查退出状态 2 的测试失败了。
我正在本地使用这个修补过的版本:

  1. diff --git a/gotip/main.go b/gotip/main.go
  2. index 6338234..0a8f0db 100644
  3. --- a/gotip/main.go
  4. +++ b/gotip/main.go
  5. @@ -57,9 +57,8 @@ func main() {
  6. }
  7. cmd.Env = dedupEnv(caseInsensitiveEnv, append(os.Environ(), "GOROOT="+root, "PATH="+newPath))
  8. if err := cmd.Run(); err != nil {
  9. - if _, ok := err.(*exec.ExitError); ok {
  10. - // TODO: return the same exit status maybe.
  11. - os.Exit(1)
  12. + if err, ok := err.(*exec.ExitError); ok {
  13. + os.Exit(err.ExitCode())
  14. }
  15. log.Fatalf("gotip: failed to execute %v: %v", gobin, err)
  16. }
  17. diff --git a/internal/version/version.go b/internal/version/version.go
  18. index a63c649..349bd6e 100644
  19. --- a/internal/version/version.go
  20. +++ b/internal/version/version.go
  21. @@ -61,7 +61,9 @@ func Run(version string) {
  22. }
  23. cmd.Env = dedupEnv(caseInsensitiveEnv, append(os.Environ(), "GOROOT="+root, "PATH="+newPath))
  24. if err := cmd.Run(); err != nil {
  25. - // TODO: return the same exit status maybe.
  26. + if err, ok := err.(*exec.ExitError); ok {
  27. + os.Exit(err.ExitCode())
  28. + }
  29. os.Exit(1)
  30. }
  31. os.Exit(0)
kqqjbcuj

kqqjbcuj1#

听起来对我来说很合理!

svgewumm

svgewumm2#

https://golang.org/cl/221978提到了这个问题:dl: exit with the exit code returned by cmd.Run

nzrxty8p

nzrxty8p3#

https://golang.org/cl/221978中,我已添加了internal/compat包。如果CL被批准,gotipinternal/version包中有两个重复的函数可以移动到那里:homedirdedupdedup函数也有重复的测试。

jutyujz0

jutyujz04#

我打开了#37037,并为dl创建了一个CL链,将gotipversion合并。我已经等待了一个月的审查,但实际上所有内容都可以存在于internal/version中,避免额外的包,简化您的CL。

wgx48brx

wgx48brx5#

最终,除了 homedirdedup 之外,剩余的重复代码是 const caseInsensitiveEnvfunc exefunc gorootmain 函数。我不反对你的 CL,但我认为为具有兼容性问题的功能创建一个 compat 包会使代码更具可读性。

hmmo2u0o

hmmo2u0o6#

我已经更新了 https://golang.org/cl/221978 。除了重新基线,我还添加了新的 go:build 指令。
谢谢。

ktca8awb

ktca8awb7#

@dmitshur,当你有时间时,你能审查https://golang.org/cl/221978吗?我认为它已经准备好合并了。
谢谢。

nwlqm0z1

nwlqm0z18#

@dmitshur,既然dl包需要go 1.18版本,使用`exec.ExitError应该没问题。我已经更新了我的CL。谢谢。

相关问题