From 3c256111d13fc71c7fee2c37ddf2c8995f6ec7f6 Mon Sep 17 00:00:00 2001 From: Morlay Date: Tue, 2 Jan 2024 10:43:31 +0800 Subject: [PATCH] chore(deps): updates --- go.mod | 4 +- go.sum | 4 + internal/cmd/go/internals/cfg/cfg.go | 38 +++++-- internal/cmd/go/internals/gover/toolchain.go | 7 ++ .../internals/modfetch/codehost/codehost.go | 9 +- internal/cmd/go/internals/vcs/vcs.go | 25 +++-- internal/cmd/go/internals/web/http.go | 20 ++-- internal/internals/buildcfg/zbootstrap.go | 2 +- internal/internals/godebugs/table.go | 1 + .../syscall/windows/reparse_windows.go | 1 + .../syscall/windows/syscall_windows.go | 22 +--- .../syscall/windows/zsyscall_windows.go | 102 ++++++++---------- internal/version/version.go | 4 +- pkg/modutil/revinfo.go | 14 ++- 14 files changed, 136 insertions(+), 117 deletions(-) diff --git a/go.mod b/go.mod index 91e36f1..25f74bf 100644 --- a/go.mod +++ b/go.mod @@ -18,10 +18,10 @@ require ( ) require ( - cuelabs.dev/go/oci/ociregistry v0.0.0-20231205091233-3bb0ee105e4a // indirect + cuelabs.dev/go/oci/ociregistry v0.0.0-20231217163254-6feb86eb6e06 // indirect github.com/cockroachdb/apd/v3 v3.2.1 // indirect github.com/emicklei/proto v1.13.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect diff --git a/go.sum b/go.sum index e2e8840..73fa739 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ cuelabs.dev/go/oci/ociregistry v0.0.0-20231205091233-3bb0ee105e4a h1:A56kS+m+WAytLYx0MIkFJ/rEA+yI/0LZyIB8SVHOhYA= cuelabs.dev/go/oci/ociregistry v0.0.0-20231205091233-3bb0ee105e4a/go.mod h1:XGKYSMtsJWfqQYPwq51ZygxAPqpEUj/9bdg16iDPTAA= +cuelabs.dev/go/oci/ociregistry v0.0.0-20231217163254-6feb86eb6e06 h1:X2H+7Jw/dJ5omjq/92asjuszALGZWuGx6LwyBKXF+48= +cuelabs.dev/go/oci/ociregistry v0.0.0-20231217163254-6feb86eb6e06/go.mod h1:ApHceQLLwcOkCEXM1+DyCXTHEJhNGDpJ2kmV6axsx24= cuelang.org/go v0.7.0 h1:gMztinxuKfJwMIxtboFsNc6s8AxwJGgsJV+3CuLffHI= cuelang.org/go v0.7.0/go.mod h1:ix+3dM/bSpdG9xg6qpCgnJnpeLtciZu+O/rDbywoMII= github.com/cockroachdb/apd/v3 v3.2.1 h1:U+8j7t0axsIgvQUqthuNm82HIrYXodOV2iWLWtEaIwg= @@ -14,6 +16,8 @@ github.com/go-courier/logr v0.3.0 h1:0VEQB1b53EmYQ+ZehrIgD8l2IO+WX7TY+CqzlykIFmo github.com/go-courier/logr v0.3.0/go.mod h1:OI7f/JCFZ1ZMD5qG3bIJr5WMNnGzd24+II1D9D9w5x4= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= diff --git a/internal/cmd/go/internals/cfg/cfg.go b/internal/cmd/go/internals/cfg/cfg.go index 3539762..83168f7 100755 --- a/internal/cmd/go/internals/cfg/cfg.go +++ b/internal/cmd/go/internals/cfg/cfg.go @@ -490,25 +490,43 @@ func findGOROOT(env string) string { // depend on the executable's location. return def } + + // canonical returns a directory path that represents + // the same directory as dir, + // preferring the spelling in def if the two are the same. + canonical := func(dir string) string { + if isSameDir(def, dir) { + return def + } + return dir + } + exe, err := os.Executable() if err == nil { exe, err = filepath.Abs(exe) if err == nil { + // cmd/go may be installed in GOROOT/bin or GOROOT/bin/GOOS_GOARCH, + // depending on whether it was cross-compiled with a different + // GOHOSTOS (see https://go.dev/issue/62119). Try both. if dir := filepath.Join(exe, "../.."); isGOROOT(dir) { - // If def (runtime.GOROOT()) and dir are the same - // directory, prefer the spelling used in def. - if isSameDir(def, dir) { - return def - } - return dir + return canonical(dir) + } + if dir := filepath.Join(exe, "../../.."); isGOROOT(dir) { + return canonical(dir) } + + // Depending on what was passed on the command line, it is possible + // that os.Executable is a symlink (like /usr/local/bin/go) referring + // to a binary installed in a real GOROOT elsewhere + // (like /usr/lib/go/bin/go). + // Try to find that GOROOT by resolving the symlinks. exe, err = filepath.EvalSymlinks(exe) if err == nil { if dir := filepath.Join(exe, "../.."); isGOROOT(dir) { - if isSameDir(def, dir) { - return def - } - return dir + return canonical(dir) + } + if dir := filepath.Join(exe, "../../.."); isGOROOT(dir) { + return canonical(dir) } } } diff --git a/internal/cmd/go/internals/gover/toolchain.go b/internal/cmd/go/internals/gover/toolchain.go index 5a44ef1..02c0241 100755 --- a/internal/cmd/go/internals/gover/toolchain.go +++ b/internal/cmd/go/internals/gover/toolchain.go @@ -22,6 +22,13 @@ import ( // FromToolchain("go1.2.3-bigcorp") == "1.2.3" // FromToolchain("invalid") == "" func FromToolchain(name string) string { + if strings.ContainsAny(name, "\\/") { + // The suffix must not include a path separator, since that would cause + // exec.LookPath to resolve it from a relative directory instead of from + // $PATH. + return "" + } + var v string if strings.HasPrefix(name, "go") { v = name[2:] diff --git a/internal/cmd/go/internals/modfetch/codehost/codehost.go b/internal/cmd/go/internals/modfetch/codehost/codehost.go index 7cb210b..33a92f2 100755 --- a/internal/cmd/go/internals/modfetch/codehost/codehost.go +++ b/internal/cmd/go/internals/modfetch/codehost/codehost.go @@ -380,13 +380,8 @@ func RunWithStdin(ctx context.Context, dir string, stdin io.Reader, cmdline ...a c.Stdin = stdin c.Stderr = &stderr c.Stdout = &stdout - - // only set when dir under GOMODCACHE - if strings.HasPrefix(c.Dir, cfg.GOMODCACHE) { - // For Git commands, manually supply GIT_DIR so Git works with safe.bareRepository=explicit set. Noop for other commands. - c.Env = append(c.Environ(), "GIT_DIR="+dir) - } - + // For Git commands, manually supply GIT_DIR so Git works with safe.bareRepository=explicit set. Noop for other commands. + c.Env = append(c.Environ(), "GIT_DIR="+dir) err := c.Run() if err != nil { err = &RunError{Cmd: strings.Join(cmd, " ") + " in " + dir, Stderr: stderr.Bytes(), Err: err} diff --git a/internal/cmd/go/internals/vcs/vcs.go b/internal/cmd/go/internals/vcs/vcs.go index b7c53f6..0943e7e 100755 --- a/internal/cmd/go/internals/vcs/vcs.go +++ b/internal/cmd/go/internals/vcs/vcs.go @@ -1204,18 +1204,31 @@ func repoRootFromVCSPaths(importPath string, security web.SecurityMode, vcsPaths var ok bool repoURL, ok = interceptVCSTest(repo, vcs, security) if !ok { - scheme := vcs.Scheme[0] // default to first scheme - if vcs.PingCmd != "" { - // If we know how to test schemes, scan to find one. + scheme, err := func() (string, error) { for _, s := range vcs.Scheme { if security == web.SecureOnly && !vcs.isSecureScheme(s) { continue } - if vcs.Ping(s, repo) == nil { - scheme = s - break + + // If we know how to ping URL schemes for this VCS, + // check that this repo works. + // Otherwise, default to the first scheme + // that meets the requested security level. + if vcs.PingCmd == "" { + return s, nil + } + if err := vcs.Ping(s, repo); err == nil { + return s, nil } } + securityFrag := "" + if security == web.SecureOnly { + securityFrag = "secure " + } + return "", fmt.Errorf("no %sprotocol found for repository", securityFrag) + }() + if err != nil { + return nil, err } repoURL = scheme + "://" + repo } diff --git a/internal/cmd/go/internals/web/http.go b/internal/cmd/go/internals/web/http.go index d9163e6..eba37e8 100755 --- a/internal/cmd/go/internals/web/http.go +++ b/internal/cmd/go/internals/web/http.go @@ -212,16 +212,22 @@ func get(security SecurityMode, url *urlpkg.URL) (*Response, error) { } } - if res == nil || res.Body == nil { + if err != nil { + // Per the docs for [net/http.Client.Do], “On error, any Response can be + // ignored. A non-nil Response with a non-nil error only occurs when + // CheckRedirect fails, and even then the returned Response.Body is + // already closed.” release() - } else { - body := res.Body - res.Body = hookCloser{ - ReadCloser: body, - afterClose: release, - } + return nil, nil, err } + // “If the returned error is nil, the Response will contain a non-nil Body + // which the user is expected to close.” + body := res.Body + res.Body = hookCloser{ + ReadCloser: body, + afterClose: release, + } return url, res, err } diff --git a/internal/internals/buildcfg/zbootstrap.go b/internal/internals/buildcfg/zbootstrap.go index 9f1d081..35ec40a 100755 --- a/internal/internals/buildcfg/zbootstrap.go +++ b/internal/internals/buildcfg/zbootstrap.go @@ -13,6 +13,6 @@ const defaultGOPPC64 = `power8` const defaultGOEXPERIMENT = `` const defaultGO_EXTLINK_ENABLED = `` const defaultGO_LDSO = `` -const version = `go1.21.0` +const version = `go1.21.5` const defaultGOOS = runtime.GOOS const defaultGOARCH = runtime.GOARCH diff --git a/internal/internals/godebugs/table.go b/internal/internals/godebugs/table.go index 243f9ef..b1711d9 100755 --- a/internal/internals/godebugs/table.go +++ b/internal/internals/godebugs/table.go @@ -42,6 +42,7 @@ var All = []Info{ {Name: "panicnil", Package: "runtime", Changed: 21, Old: "1"}, {Name: "randautoseed", Package: "math/rand"}, {Name: "tarinsecurepath", Package: "archive/tar"}, + {Name: "tlsmaxrsasize", Package: "crypto/tls"}, {Name: "x509sha1", Package: "crypto/x509"}, {Name: "x509usefallbackroots", Package: "crypto/x509"}, {Name: "zipinsecurepath", Package: "archive/zip"}, diff --git a/internal/internals/syscall/windows/reparse_windows.go b/internal/internals/syscall/windows/reparse_windows.go index 6e11139..6caf47e 100755 --- a/internal/internals/syscall/windows/reparse_windows.go +++ b/internal/internals/syscall/windows/reparse_windows.go @@ -12,6 +12,7 @@ import ( const ( FSCTL_SET_REPARSE_POINT = 0x000900A4 IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_DEDUP = 0x80000013 SYMLINK_FLAG_RELATIVE = 1 ) diff --git a/internal/internals/syscall/windows/syscall_windows.go b/internal/internals/syscall/windows/syscall_windows.go index 53d32a1..e9390b0 100755 --- a/internal/internals/syscall/windows/syscall_windows.go +++ b/internal/internals/syscall/windows/syscall_windows.go @@ -373,27 +373,7 @@ func ErrorLoadingGetTempPath2() error { //sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock //sys CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle syscall.Handle, err error) = kernel32.CreateEventW -//sys RtlGenRandom(buf []byte) (err error) = advapi32.SystemFunction036 - -type FILE_ID_BOTH_DIR_INFO struct { - NextEntryOffset uint32 - FileIndex uint32 - CreationTime syscall.Filetime - LastAccessTime syscall.Filetime - LastWriteTime syscall.Filetime - ChangeTime syscall.Filetime - EndOfFile uint64 - AllocationSize uint64 - FileAttributes uint32 - FileNameLength uint32 - EaSize uint32 - ShortNameLength uint32 - ShortName [12]uint16 - FileID uint64 - FileName [1]uint16 -} - -//sys GetVolumeInformationByHandle(file syscall.Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW +//sys ProcessPrng(buf []byte) (err error) = bcryptprimitives.ProcessPrng //sys RtlLookupFunctionEntry(pc uintptr, baseAddress *uintptr, table *byte) (ret uintptr) = kernel32.RtlLookupFunctionEntry //sys RtlVirtualUnwind(handlerType uint32, baseAddress uintptr, pc uintptr, entry uintptr, ctxt uintptr, data *uintptr, frame *uintptr, ctxptrs *byte) (ret uintptr) = kernel32.RtlVirtualUnwind diff --git a/internal/internals/syscall/windows/zsyscall_windows.go b/internal/internals/syscall/windows/zsyscall_windows.go index d95d6d5..31f5e93 100755 --- a/internal/internals/syscall/windows/zsyscall_windows.go +++ b/internal/internals/syscall/windows/zsyscall_windows.go @@ -37,51 +37,51 @@ func errnoErr(e syscall.Errno) error { } var ( - modadvapi32 = syscall.NewLazyDLL(sysdll.Add("advapi32.dll")) - modiphlpapi = syscall.NewLazyDLL(sysdll.Add("iphlpapi.dll")) - modkernel32 = syscall.NewLazyDLL(sysdll.Add("kernel32.dll")) - modnetapi32 = syscall.NewLazyDLL(sysdll.Add("netapi32.dll")) - modpsapi = syscall.NewLazyDLL(sysdll.Add("psapi.dll")) - moduserenv = syscall.NewLazyDLL(sysdll.Add("userenv.dll")) - modws2_32 = syscall.NewLazyDLL(sysdll.Add("ws2_32.dll")) - - procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") - procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") - procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") - procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") - procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") - procRevertToSelf = modadvapi32.NewProc("RevertToSelf") - procSetTokenInformation = modadvapi32.NewProc("SetTokenInformation") - procSystemFunction036 = modadvapi32.NewProc("SystemFunction036") - procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") - procCreateEventW = modkernel32.NewProc("CreateEventW") - procGetACP = modkernel32.NewProc("GetACP") - procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") - procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") - procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") - procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx") - procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") - procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") - procGetTempPath2W = modkernel32.NewProc("GetTempPath2W") - procGetVolumeInformationByHandleW = modkernel32.NewProc("GetVolumeInformationByHandleW") - procLockFileEx = modkernel32.NewProc("LockFileEx") - procModule32FirstW = modkernel32.NewProc("Module32FirstW") - procModule32NextW = modkernel32.NewProc("Module32NextW") - procMoveFileExW = modkernel32.NewProc("MoveFileExW") - procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") - procRtlLookupFunctionEntry = modkernel32.NewProc("RtlLookupFunctionEntry") - procRtlVirtualUnwind = modkernel32.NewProc("RtlVirtualUnwind") - procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle") - procUnlockFileEx = modkernel32.NewProc("UnlockFileEx") - procVirtualQuery = modkernel32.NewProc("VirtualQuery") - procNetShareAdd = modnetapi32.NewProc("NetShareAdd") - procNetShareDel = modnetapi32.NewProc("NetShareDel") - procNetUserGetLocalGroups = modnetapi32.NewProc("NetUserGetLocalGroups") - procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo") - procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") - procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") - procGetProfilesDirectoryW = moduserenv.NewProc("GetProfilesDirectoryW") - procWSASocketW = modws2_32.NewProc("WSASocketW") + modadvapi32 = syscall.NewLazyDLL(sysdll.Add("advapi32.dll")) + modbcryptprimitives = syscall.NewLazyDLL(sysdll.Add("bcryptprimitives.dll")) + modiphlpapi = syscall.NewLazyDLL(sysdll.Add("iphlpapi.dll")) + modkernel32 = syscall.NewLazyDLL(sysdll.Add("kernel32.dll")) + modnetapi32 = syscall.NewLazyDLL(sysdll.Add("netapi32.dll")) + modpsapi = syscall.NewLazyDLL(sysdll.Add("psapi.dll")) + moduserenv = syscall.NewLazyDLL(sysdll.Add("userenv.dll")) + modws2_32 = syscall.NewLazyDLL(sysdll.Add("ws2_32.dll")) + + procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") + procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") + procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") + procRevertToSelf = modadvapi32.NewProc("RevertToSelf") + procSetTokenInformation = modadvapi32.NewProc("SetTokenInformation") + procProcessPrng = modbcryptprimitives.NewProc("ProcessPrng") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procGetACP = modkernel32.NewProc("GetACP") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") + procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") + procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx") + procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") + procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") + procGetTempPath2W = modkernel32.NewProc("GetTempPath2W") + procLockFileEx = modkernel32.NewProc("LockFileEx") + procModule32FirstW = modkernel32.NewProc("Module32FirstW") + procModule32NextW = modkernel32.NewProc("Module32NextW") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") + procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") + procRtlLookupFunctionEntry = modkernel32.NewProc("RtlLookupFunctionEntry") + procRtlVirtualUnwind = modkernel32.NewProc("RtlVirtualUnwind") + procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle") + procUnlockFileEx = modkernel32.NewProc("UnlockFileEx") + procVirtualQuery = modkernel32.NewProc("VirtualQuery") + procNetShareAdd = modnetapi32.NewProc("NetShareAdd") + procNetShareDel = modnetapi32.NewProc("NetShareDel") + procNetUserGetLocalGroups = modnetapi32.NewProc("NetUserGetLocalGroups") + procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo") + procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") + procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") + procGetProfilesDirectoryW = moduserenv.NewProc("GetProfilesDirectoryW") + procWSASocketW = modws2_32.NewProc("WSASocketW") ) func adjustTokenPrivileges(token syscall.Token, disableAllPrivileges bool, newstate *TOKEN_PRIVILEGES, buflen uint32, prevstate *TOKEN_PRIVILEGES, returnlen *uint32) (ret uint32, err error) { @@ -149,12 +149,12 @@ func SetTokenInformation(tokenHandle syscall.Token, tokenInformationClass uint32 return } -func RtlGenRandom(buf []byte) (err error) { +func ProcessPrng(buf []byte) (err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall(procSystemFunction036.Addr(), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0) + r1, _, e1 := syscall.Syscall(procProcessPrng.Addr(), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0) if r1 == 0 { err = errnoErr(e1) } @@ -242,14 +242,6 @@ func GetTempPath2(buflen uint32, buf *uint16) (n uint32, err error) { return } -func GetVolumeInformationByHandle(file syscall.Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - func LockFileEx(file syscall.Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *syscall.Overlapped) (err error) { r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { diff --git a/internal/version/version.go b/internal/version/version.go index aa2e1c7..33201a2 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -1,8 +1,6 @@ package version -var ( - version = "v0.0.0" -) +var version string func Version() string { return version diff --git a/pkg/modutil/revinfo.go b/pkg/modutil/revinfo.go index c34b552..7f33b9d 100644 --- a/pkg/modutil/revinfo.go +++ b/pkg/modutil/revinfo.go @@ -2,8 +2,12 @@ package modutil import ( "context" + "path" + "strings" _ "unsafe" + "github.com/pkg/errors" + "golang.org/x/mod/modfile" "golang.org/x/mod/module" @@ -20,8 +24,8 @@ func newCodeRepo(code codehost.Repo, codeRoot, path string) (modfetch.Repo, erro func lookupCodeRepo(ctx context.Context, rr *vcs.RepoRoot) (codehost.Repo, error) func finalLookupCodeRepo(ctx context.Context, rr *vcs.RepoRoot, localOk bool) (codehost.Repo, error) { - if rr.VCS.Name == "Git" && localOk { - return codehost.LocalGitRepo(ctx, rr.Root) + if strings.ToLower(rr.VCS.Name) == "git" && localOk { + return codehost.LocalGitRepo(ctx, path.Join(rr.Root, ".git")) } return lookupCodeRepo(ctx, rr) } @@ -36,12 +40,12 @@ func RevInfoFromDir(ctx context.Context, dir string) (*RevInfo, error) { repo, err := c.RemoteRepo(c, rootDir) if err != nil { - return nil, err + return nil, errors.Wrap(err, "resolve remote repo failed") } head, err := c.Status(c, rootDir) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "stat faield") } rr := &vcs.RepoRoot{} @@ -77,7 +81,7 @@ func RevInfoFromDir(ctx context.Context, dir string) (*RevInfo, error) { info, err := r.Stat(ctx, head.Revision) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "stat faield") } info.Version = version.Convert(info.Version, info.Time, info.Short, head.Uncommitted)