mirror of https://github.com/docker/cli.git
Merge pull request #5147 from thaJeztah/bump_platforms
vendor: github.com/containerd/platforms v0.2.1
This commit is contained in:
commit
7fbadef49b
|
@ -8,7 +8,7 @@ go 1.21.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
dario.cat/mergo v1.0.0
|
dario.cat/mergo v1.0.0
|
||||||
github.com/containerd/platforms v0.2.0
|
github.com/containerd/platforms v0.2.1
|
||||||
github.com/creack/pty v1.1.21
|
github.com/creack/pty v1.1.21
|
||||||
github.com/distribution/reference v0.6.0
|
github.com/distribution/reference v0.6.0
|
||||||
github.com/docker/distribution v2.8.3+incompatible
|
github.com/docker/distribution v2.8.3+incompatible
|
||||||
|
@ -56,7 +56,6 @@ require (
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||||
github.com/Microsoft/hcsshim v0.11.5 // indirect
|
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
|
|
|
@ -43,8 +43,8 @@ github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJP
|
||||||
github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4=
|
github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4=
|
||||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||||
github.com/containerd/platforms v0.2.0 h1:clGNvVIcY3k39VJSYdFGohI1b3bP/eeBUVR5+XA28oo=
|
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
|
||||||
github.com/containerd/platforms v0.2.0/go.mod h1:XOM2BS6kN6gXafPLg80V6y/QUib+xoLyC3qVmHzibko=
|
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
|
||||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2015 Microsoft
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,59 +0,0 @@
|
||||||
package osversion
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"golang.org/x/sys/windows"
|
|
||||||
)
|
|
||||||
|
|
||||||
// OSVersion is a wrapper for Windows version information
|
|
||||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
|
|
||||||
type OSVersion struct {
|
|
||||||
Version uint32
|
|
||||||
MajorVersion uint8
|
|
||||||
MinorVersion uint8
|
|
||||||
Build uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
osv OSVersion
|
|
||||||
once sync.Once
|
|
||||||
)
|
|
||||||
|
|
||||||
// Get gets the operating system version on Windows.
|
|
||||||
// The calling application must be manifested to get the correct version information.
|
|
||||||
func Get() OSVersion {
|
|
||||||
once.Do(func() {
|
|
||||||
var err error
|
|
||||||
osv = OSVersion{}
|
|
||||||
osv.Version, err = windows.GetVersion()
|
|
||||||
if err != nil {
|
|
||||||
// GetVersion never fails.
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
osv.MajorVersion = uint8(osv.Version & 0xFF)
|
|
||||||
osv.MinorVersion = uint8(osv.Version >> 8 & 0xFF)
|
|
||||||
osv.Build = uint16(osv.Version >> 16)
|
|
||||||
})
|
|
||||||
return osv
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build gets the build-number on Windows
|
|
||||||
// The calling application must be manifested to get the correct version information.
|
|
||||||
func Build() uint16 {
|
|
||||||
return Get().Build
|
|
||||||
}
|
|
||||||
|
|
||||||
// String returns the OSVersion formatted as a string. It implements the
|
|
||||||
// [fmt.Stringer] interface.
|
|
||||||
func (osv OSVersion) String() string {
|
|
||||||
return fmt.Sprintf("%d.%d.%d", osv.MajorVersion, osv.MinorVersion, osv.Build)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ToString returns the OSVersion formatted as a string.
|
|
||||||
//
|
|
||||||
// Deprecated: use [OSVersion.String].
|
|
||||||
func (osv OSVersion) ToString() string {
|
|
||||||
return osv.String()
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
package osversion
|
|
||||||
|
|
||||||
// List of stable ABI compliant ltsc releases
|
|
||||||
// Note: List must be sorted in ascending order
|
|
||||||
var compatLTSCReleases = []uint16{
|
|
||||||
V21H2Server,
|
|
||||||
}
|
|
||||||
|
|
||||||
// CheckHostAndContainerCompat checks if given host and container
|
|
||||||
// OS versions are compatible.
|
|
||||||
// It includes support for stable ABI compliant versions as well.
|
|
||||||
// Every release after WS 2022 will support the previous ltsc
|
|
||||||
// container image. Stable ABI is in preview mode for windows 11 client.
|
|
||||||
// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility
|
|
||||||
func CheckHostAndContainerCompat(host, ctr OSVersion) bool {
|
|
||||||
// check major minor versions of host and guest
|
|
||||||
if host.MajorVersion != ctr.MajorVersion ||
|
|
||||||
host.MinorVersion != ctr.MinorVersion {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// If host is < WS 2022, exact version match is required
|
|
||||||
if host.Build < V21H2Server {
|
|
||||||
return host.Build == ctr.Build
|
|
||||||
}
|
|
||||||
|
|
||||||
var supportedLtscRelease uint16
|
|
||||||
for i := len(compatLTSCReleases) - 1; i >= 0; i-- {
|
|
||||||
if host.Build >= compatLTSCReleases[i] {
|
|
||||||
supportedLtscRelease = compatLTSCReleases[i]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
package osversion
|
|
||||||
|
|
||||||
// Windows Client and Server build numbers.
|
|
||||||
//
|
|
||||||
// See:
|
|
||||||
// https://learn.microsoft.com/en-us/windows/release-health/release-information
|
|
||||||
// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info
|
|
||||||
// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information
|
|
||||||
const (
|
|
||||||
// RS1 (version 1607, codename "Redstone 1") corresponds to Windows Server
|
|
||||||
// 2016 (ltsc2016) and Windows 10 (Anniversary Update).
|
|
||||||
RS1 = 14393
|
|
||||||
// V1607 (version 1607, codename "Redstone 1") is an alias for [RS1].
|
|
||||||
V1607 = RS1
|
|
||||||
// LTSC2016 (Windows Server 2016) is an alias for [RS1].
|
|
||||||
LTSC2016 = RS1
|
|
||||||
|
|
||||||
// RS2 (version 1703, codename "Redstone 2") was a client-only update, and
|
|
||||||
// corresponds to Windows 10 (Creators Update).
|
|
||||||
RS2 = 15063
|
|
||||||
// V1703 (version 1703, codename "Redstone 2") is an alias for [RS2].
|
|
||||||
V1703 = RS2
|
|
||||||
|
|
||||||
// RS3 (version 1709, codename "Redstone 3") corresponds to Windows Server
|
|
||||||
// 1709 (Semi-Annual Channel (SAC)), and Windows 10 (Fall Creators Update).
|
|
||||||
RS3 = 16299
|
|
||||||
// V1709 (version 1709, codename "Redstone 3") is an alias for [RS3].
|
|
||||||
V1709 = RS3
|
|
||||||
|
|
||||||
// RS4 (version 1803, codename "Redstone 4") corresponds to Windows Server
|
|
||||||
// 1803 (Semi-Annual Channel (SAC)), and Windows 10 (April 2018 Update).
|
|
||||||
RS4 = 17134
|
|
||||||
// V1803 (version 1803, codename "Redstone 4") is an alias for [RS4].
|
|
||||||
V1803 = RS4
|
|
||||||
|
|
||||||
// RS5 (version 1809, codename "Redstone 5") corresponds to Windows Server
|
|
||||||
// 2019 (ltsc2019), and Windows 10 (October 2018 Update).
|
|
||||||
RS5 = 17763
|
|
||||||
// V1809 (version 1809, codename "Redstone 5") is an alias for [RS5].
|
|
||||||
V1809 = RS5
|
|
||||||
// LTSC2019 (Windows Server 2019) is an alias for [RS5].
|
|
||||||
LTSC2019 = RS5
|
|
||||||
|
|
||||||
// V19H1 (version 1903, codename 19H1) corresponds to Windows Server 1903 (semi-annual
|
|
||||||
// channel).
|
|
||||||
V19H1 = 18362
|
|
||||||
// V1903 (version 1903) is an alias for [V19H1].
|
|
||||||
V1903 = V19H1
|
|
||||||
|
|
||||||
// V19H2 (version 1909, codename 19H2) corresponds to Windows Server 1909 (semi-annual
|
|
||||||
// channel).
|
|
||||||
V19H2 = 18363
|
|
||||||
// V1909 (version 1909) is an alias for [V19H2].
|
|
||||||
V1909 = V19H2
|
|
||||||
|
|
||||||
// V20H1 (version 2004, codename 20H1) corresponds to Windows Server 2004 (semi-annual
|
|
||||||
// channel).
|
|
||||||
V20H1 = 19041
|
|
||||||
// V2004 (version 2004) is an alias for [V20H1].
|
|
||||||
V2004 = V20H1
|
|
||||||
|
|
||||||
// V20H2 corresponds to Windows Server 20H2 (semi-annual channel).
|
|
||||||
V20H2 = 19042
|
|
||||||
|
|
||||||
// V21H1 corresponds to Windows Server 21H1 (semi-annual channel).
|
|
||||||
V21H1 = 19043
|
|
||||||
|
|
||||||
// V21H2Win10 corresponds to Windows 10 (November 2021 Update).
|
|
||||||
V21H2Win10 = 19044
|
|
||||||
|
|
||||||
// V21H2Server corresponds to Windows Server 2022 (ltsc2022).
|
|
||||||
V21H2Server = 20348
|
|
||||||
// LTSC2022 (Windows Server 2022) is an alias for [V21H2Server]
|
|
||||||
LTSC2022 = V21H2Server
|
|
||||||
|
|
||||||
// V21H2Win11 corresponds to Windows 11 (original release).
|
|
||||||
V21H2Win11 = 22000
|
|
||||||
|
|
||||||
// V22H2Win10 corresponds to Windows 10 (2022 Update).
|
|
||||||
V22H2Win10 = 19045
|
|
||||||
|
|
||||||
// V22H2Win11 corresponds to Windows 11 (2022 Update).
|
|
||||||
V22H2Win11 = 22621
|
|
||||||
)
|
|
|
@ -22,7 +22,6 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Microsoft/hcsshim/osversion"
|
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"golang.org/x/sys/windows"
|
"golang.org/x/sys/windows"
|
||||||
)
|
)
|
||||||
|
@ -52,29 +51,29 @@ func (m windowsmatcher) Match(p specs.Platform) bool {
|
||||||
|
|
||||||
if match && m.OS == "windows" {
|
if match && m.OS == "windows" {
|
||||||
// HPC containers do not have OS version filled
|
// HPC containers do not have OS version filled
|
||||||
if p.OSVersion == "" {
|
if m.OSVersion == "" || p.OSVersion == "" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
hostOsVersion := GetOsVersion(m.osVersionPrefix)
|
hostOsVersion := getOSVersion(m.osVersionPrefix)
|
||||||
ctrOsVersion := GetOsVersion(p.OSVersion)
|
ctrOsVersion := getOSVersion(p.OSVersion)
|
||||||
return osversion.CheckHostAndContainerCompat(hostOsVersion, ctrOsVersion)
|
return checkHostAndContainerCompat(hostOsVersion, ctrOsVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOsVersion(osVersionPrefix string) osversion.OSVersion {
|
func getOSVersion(osVersionPrefix string) osVersion {
|
||||||
parts := strings.Split(osVersionPrefix, ".")
|
parts := strings.Split(osVersionPrefix, ".")
|
||||||
if len(parts) < 3 {
|
if len(parts) < 3 {
|
||||||
return osversion.OSVersion{}
|
return osVersion{}
|
||||||
}
|
}
|
||||||
|
|
||||||
majorVersion, _ := strconv.Atoi(parts[0])
|
majorVersion, _ := strconv.Atoi(parts[0])
|
||||||
minorVersion, _ := strconv.Atoi(parts[1])
|
minorVersion, _ := strconv.Atoi(parts[1])
|
||||||
buildNumber, _ := strconv.Atoi(parts[2])
|
buildNumber, _ := strconv.Atoi(parts[2])
|
||||||
|
|
||||||
return osversion.OSVersion{
|
return osVersion{
|
||||||
MajorVersion: uint8(majorVersion),
|
MajorVersion: uint8(majorVersion),
|
||||||
MinorVersion: uint8(minorVersion),
|
MinorVersion: uint8(minorVersion),
|
||||||
Build: uint16(buildNumber),
|
Build: uint16(buildNumber),
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
/*
|
||||||
|
Copyright The containerd Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package platforms
|
||||||
|
|
||||||
|
// osVersion is a wrapper for Windows version information
|
||||||
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
|
||||||
|
type osVersion struct {
|
||||||
|
Version uint32
|
||||||
|
MajorVersion uint8
|
||||||
|
MinorVersion uint8
|
||||||
|
Build uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
// Windows Client and Server build numbers.
|
||||||
|
//
|
||||||
|
// See:
|
||||||
|
// https://learn.microsoft.com/en-us/windows/release-health/release-information
|
||||||
|
// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info
|
||||||
|
// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information
|
||||||
|
const (
|
||||||
|
// rs5 (version 1809, codename "Redstone 5") corresponds to Windows Server
|
||||||
|
// 2019 (ltsc2019), and Windows 10 (October 2018 Update).
|
||||||
|
rs5 = 17763
|
||||||
|
|
||||||
|
// v21H2Server corresponds to Windows Server 2022 (ltsc2022).
|
||||||
|
v21H2Server = 20348
|
||||||
|
|
||||||
|
// v22H2Win11 corresponds to Windows 11 (2022 Update).
|
||||||
|
v22H2Win11 = 22621
|
||||||
|
)
|
||||||
|
|
||||||
|
// List of stable ABI compliant ltsc releases
|
||||||
|
// Note: List must be sorted in ascending order
|
||||||
|
var compatLTSCReleases = []uint16{
|
||||||
|
v21H2Server,
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckHostAndContainerCompat checks if given host and container
|
||||||
|
// OS versions are compatible.
|
||||||
|
// It includes support for stable ABI compliant versions as well.
|
||||||
|
// Every release after WS 2022 will support the previous ltsc
|
||||||
|
// container image. Stable ABI is in preview mode for windows 11 client.
|
||||||
|
// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility
|
||||||
|
func checkHostAndContainerCompat(host, ctr osVersion) bool {
|
||||||
|
// check major minor versions of host and guest
|
||||||
|
if host.MajorVersion != ctr.MajorVersion ||
|
||||||
|
host.MinorVersion != ctr.MinorVersion {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// If host is < WS 2022, exact version match is required
|
||||||
|
if host.Build < v21H2Server {
|
||||||
|
return host.Build == ctr.Build
|
||||||
|
}
|
||||||
|
|
||||||
|
var supportedLtscRelease uint16
|
||||||
|
for i := len(compatLTSCReleases) - 1; i >= 0; i-- {
|
||||||
|
if host.Build >= compatLTSCReleases[i] {
|
||||||
|
supportedLtscRelease = compatLTSCReleases[i]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build
|
||||||
|
}
|
|
@ -12,9 +12,6 @@ github.com/Microsoft/go-winio/internal/fs
|
||||||
github.com/Microsoft/go-winio/internal/socket
|
github.com/Microsoft/go-winio/internal/socket
|
||||||
github.com/Microsoft/go-winio/internal/stringbuffer
|
github.com/Microsoft/go-winio/internal/stringbuffer
|
||||||
github.com/Microsoft/go-winio/pkg/guid
|
github.com/Microsoft/go-winio/pkg/guid
|
||||||
# github.com/Microsoft/hcsshim v0.11.5
|
|
||||||
## explicit; go 1.21
|
|
||||||
github.com/Microsoft/hcsshim/osversion
|
|
||||||
# github.com/beorn7/perks v1.0.1
|
# github.com/beorn7/perks v1.0.1
|
||||||
## explicit; go 1.11
|
## explicit; go 1.11
|
||||||
github.com/beorn7/perks/quantile
|
github.com/beorn7/perks/quantile
|
||||||
|
@ -30,7 +27,7 @@ github.com/containerd/containerd/pkg/userns
|
||||||
# github.com/containerd/log v0.1.0
|
# github.com/containerd/log v0.1.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/containerd/log
|
github.com/containerd/log
|
||||||
# github.com/containerd/platforms v0.2.0
|
# github.com/containerd/platforms v0.2.1
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/containerd/platforms
|
github.com/containerd/platforms
|
||||||
# github.com/creack/pty v1.1.21
|
# github.com/creack/pty v1.1.21
|
||||||
|
|
Loading…
Reference in New Issue