mirror of
https://github.com/cheat/cheat.git
synced 2024-11-22 05:51:35 +01:00
feat(installer): implement "installer"
Squashed commit of the following: commit5c322e79b7
Author: Chris Lane <chris@chris-allen-lane.com> Date: Fri Mar 6 19:56:56 2020 -0500 docs(README): update the `README` Update the `README` to document the improved config-generation mechanism. commit803e1f014c
Author: Chris Lane <chris@chris-allen-lane.com> Date: Fri Mar 6 19:19:49 2020 -0500 feat(config-init): platform-specific pathing Update `--init` subcommand to rely upon the same platform-detection intelligence that was previously implemented by the "installer". The installer and `--init` should now produce identical config files. commit99c48097e2
Author: Chris Lane <chris@chris-allen-lane.com> Date: Fri Mar 6 18:26:33 2020 -0500 feat(installer): platform-correct config templating Modify the "installer" to populate cheatpaths with sensible defaults based on the detection of the user's operating system and environment. commit8e1580ff5a
Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Mar 5 20:19:58 2020 -0500 fix(tests): fix `config.Paths` tests Refactor `config.Paths` (by externalizing a call to `homedir.Dir`) to decouple it from filesystem paths, thus facilitating cleaner unit-tests. commita08dca70d9
Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Mar 5 18:14:27 2020 -0500 feat(installer): default path selection Modify the installer to improve default config and cheatsheet path selection. commite15bc6c966
Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Mar 5 17:49:50 2020 -0500 fix(typo): correct comment typo in `main.go` commitefd09575df
Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Mar 5 17:46:49 2020 -0500 feat(config): refactor config path detection Previously, failing other checks, on Unix and BSD systems, `config.Paths` would attempt to compute the user's home directory by reading the `HOME` environment variable. This change deprecates that approach with a call to `homedir.Dir`, which is used elsewhere throughout the application. commitec10244ebe
Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Mar 5 17:15:28 2020 -0500 chore(installer): delete unused file Delete `installer/installer.go`, which (in hindsight) was unnecessary. commitebd9ec6287
Author: Chris Lane <chris@chris-allen-lane.com> Date: Wed Mar 4 19:31:13 2020 -0500 wip(installer): stub experimental "installer" Stubs out an experimental "installer" that will help new users to quickly configure `cheat`. commitecac5a0971
Author: Chris Lane <chris@chris-allen-lane.com> Date: Wed Mar 4 19:30:12 2020 -0500 chore(dependencies): updates vendored dependencies
This commit is contained in:
parent
7be57cb01c
commit
ce37b670c7
@ -51,7 +51,9 @@ Installing
|
|||||||
Configuring
|
Configuring
|
||||||
-----------
|
-----------
|
||||||
### conf.yml ###
|
### conf.yml ###
|
||||||
`cheat` is configured by a YAML file that can be generated with `cheat --init`:
|
`cheat` is configured by a YAML file that will be auto-generated on first run.
|
||||||
|
Should you need to create a config file manually, you can do
|
||||||
|
so via:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mkdir -p ~/.config/cheat && cheat --init > ~/.config/cheat/conf.yml
|
mkdir -p ~/.config/cheat && cheat --init > ~/.config/cheat/conf.yml
|
||||||
@ -89,7 +91,8 @@ const squares = [1, 2, 3, 4].map(x => x * x);
|
|||||||
```
|
```
|
||||||
|
|
||||||
The `cheat` executable includes no cheatsheets, but [community-sourced
|
The `cheat` executable includes no cheatsheets, but [community-sourced
|
||||||
cheatsheets are available][cheatsheets].
|
cheatsheets are available][cheatsheets]. You will be asked if you would like to
|
||||||
|
install the community-sourced cheatsheets the first time you run `cheat`.
|
||||||
|
|
||||||
|
|
||||||
Cheatpaths
|
Cheatpaths
|
||||||
|
@ -2,9 +2,56 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/mitchellh/go-homedir"
|
||||||
|
|
||||||
|
"github.com/cheat/cheat/internal/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// cmdInit displays an example config file.
|
// cmdInit displays an example config file.
|
||||||
func cmdInit() {
|
func cmdInit() {
|
||||||
fmt.Println(configs())
|
|
||||||
|
// get the user's home directory
|
||||||
|
home, err := homedir.Dir()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to get user home directory: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// read the envvars into a map of strings
|
||||||
|
envvars := map[string]string{}
|
||||||
|
for _, e := range os.Environ() {
|
||||||
|
pair := strings.SplitN(e, "=", 2)
|
||||||
|
envvars[pair[0]] = pair[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
// load the config template
|
||||||
|
configs := configs()
|
||||||
|
|
||||||
|
// identify the os-specifc paths at which configs may be located
|
||||||
|
confpaths, err := config.Paths(runtime.GOOS, home, envvars)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to read config paths: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine the appropriate paths for config data and (optional) community
|
||||||
|
// cheatsheets based on the user's platform
|
||||||
|
confpath := confpaths[0]
|
||||||
|
confdir := path.Dir(confpath)
|
||||||
|
|
||||||
|
// create paths for community and personal cheatsheets
|
||||||
|
community := path.Join(confdir, "/cheatsheets/community")
|
||||||
|
personal := path.Join(confdir, "/cheatsheets/personal")
|
||||||
|
|
||||||
|
// template the above paths into the default configs
|
||||||
|
configs = strings.Replace(configs, "COMMUNITY_PATH", community, -1)
|
||||||
|
configs = strings.Replace(configs, "PERSONAL_PATH", personal, -1)
|
||||||
|
|
||||||
|
// output the templated configs
|
||||||
|
fmt.Println(configs)
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,16 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docopt/docopt-go"
|
"github.com/docopt/docopt-go"
|
||||||
|
"github.com/mitchellh/go-homedir"
|
||||||
|
|
||||||
"github.com/cheat/cheat/internal/cheatpath"
|
"github.com/cheat/cheat/internal/cheatpath"
|
||||||
"github.com/cheat/cheat/internal/config"
|
"github.com/cheat/cheat/internal/config"
|
||||||
|
"github.com/cheat/cheat/internal/installer"
|
||||||
)
|
)
|
||||||
|
|
||||||
const version = "3.6.0"
|
const version = "3.6.0"
|
||||||
@ -32,6 +35,13 @@ func main() {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get the user's home directory
|
||||||
|
home, err := homedir.Dir()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to get user home directory: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
// read the envvars into a map of strings
|
// read the envvars into a map of strings
|
||||||
envvars := map[string]string{}
|
envvars := map[string]string{}
|
||||||
for _, e := range os.Environ() {
|
for _, e := range os.Environ() {
|
||||||
@ -39,8 +49,8 @@ func main() {
|
|||||||
envvars[pair[0]] = pair[1]
|
envvars[pair[0]] = pair[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// load the os-specifc paths at which the config file may be located
|
// identify the os-specifc paths at which configs may be located
|
||||||
confpaths, err := config.Paths(runtime.GOOS, envvars)
|
confpaths, err := config.Paths(runtime.GOOS, home, envvars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "failed to load config: %v\n", err)
|
fmt.Fprintf(os.Stderr, "failed to load config: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -49,22 +59,79 @@ func main() {
|
|||||||
// search for the config file in the above paths
|
// search for the config file in the above paths
|
||||||
confpath, err := config.Path(confpaths)
|
confpath, err := config.Path(confpaths)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// prompt the user to create a config file
|
||||||
|
yes, err := installer.Prompt(
|
||||||
|
"A config file was not found. Would you like to create one now? [Y/n]",
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to create config: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// exit early on a negative answer
|
||||||
|
if !yes {
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// read the config template
|
||||||
|
configs := configs()
|
||||||
|
|
||||||
|
// determine the appropriate paths for config data and (optional) community
|
||||||
|
// cheatsheets based on the user's platform
|
||||||
|
confpath = confpaths[0]
|
||||||
|
confdir := path.Dir(confpath)
|
||||||
|
|
||||||
|
// create paths for community and personal cheatsheets
|
||||||
|
community := path.Join(confdir, "/cheatsheets/community")
|
||||||
|
personal := path.Join(confdir, "/cheatsheets/personal")
|
||||||
|
|
||||||
|
// template the above paths into the default configs
|
||||||
|
configs = strings.Replace(configs, "COMMUNITY_PATH", community, -1)
|
||||||
|
configs = strings.Replace(configs, "PERSONAL_PATH", personal, -1)
|
||||||
|
|
||||||
|
// prompt the user to download the community cheatsheets
|
||||||
|
yes, err = installer.Prompt(
|
||||||
|
"Would you like to download the community cheatsheets? [Y/n]",
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to create config: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// clone the community cheatsheets if so instructed
|
||||||
|
if yes {
|
||||||
|
// clone the community cheatsheets
|
||||||
|
if err := installer.Clone(community); err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "failed to create config: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// also create a directory for personal cheatsheets
|
||||||
|
if err := os.MkdirAll(personal, os.ModePerm); err != nil {
|
||||||
|
fmt.Fprintf(
|
||||||
|
os.Stderr,
|
||||||
|
"failed to create config: failed to create directory: %s: %v\n",
|
||||||
|
personal,
|
||||||
|
err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// the config file does not exist, so we'll try to create one
|
// the config file does not exist, so we'll try to create one
|
||||||
if err = config.Init(confpaths[0], configs()); err != nil {
|
if err = config.Init(confpath, configs); err != nil {
|
||||||
fmt.Fprintf(
|
fmt.Fprintf(
|
||||||
os.Stderr,
|
os.Stderr,
|
||||||
"failed to create config file: %s: %v\n",
|
"failed to create config file: %s: %v\n",
|
||||||
confpaths[0],
|
confpath,
|
||||||
err,
|
err,
|
||||||
)
|
)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
confpath = confpaths[0]
|
|
||||||
|
|
||||||
fmt.Printf("Created config file: %s\n", confpath)
|
fmt.Printf("Created config file: %s\n", confpath)
|
||||||
fmt.Println("Please edit this file now to configure cheat.")
|
fmt.Println("Please read this file for advanced configuration information.")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,33 +41,34 @@ cheatpaths:
|
|||||||
# thus be overridden by more local cheatsheets. That being the case, you
|
# thus be overridden by more local cheatsheets. That being the case, you
|
||||||
# should probably list community cheatsheets first.
|
# should probably list community cheatsheets first.
|
||||||
#
|
#
|
||||||
# Note that the paths and tags listed below are just examples. You may freely
|
# Note that the paths and tags listed below are placeholders. You may freely
|
||||||
# change them to suit your needs.
|
# change them to suit your needs.
|
||||||
#
|
#
|
||||||
# TODO: regarding community cheatsheets: these must be installed separately.
|
# Community cheatsheets must be installed separately, though you may have
|
||||||
# You may download them here:
|
# downloaded them automatically when installing 'cheat'. If not, you may
|
||||||
|
# download them here:
|
||||||
#
|
#
|
||||||
# https://github.com/cheat/cheatsheets
|
# https://github.com/cheat/cheatsheets
|
||||||
#
|
#
|
||||||
# Once downloaded, ensure that 'path' below points to the location at which
|
# Once downloaded, ensure that 'path' below points to the location at which
|
||||||
# you downloaded the community cheatsheets.
|
# you downloaded the community cheatsheets.
|
||||||
- name: community
|
- name: community
|
||||||
path: ~/cheat/cheatsheets/community
|
path: COMMUNITY_PATH
|
||||||
tags: [ community ]
|
tags: [ community ]
|
||||||
readonly: true
|
readonly: true
|
||||||
|
|
||||||
# If you have personalized cheatsheets, list them last. They will take
|
# If you have personalized cheatsheets, list them last. They will take
|
||||||
# precedence over the more global cheatsheets.
|
# precedence over the more global cheatsheets.
|
||||||
- name: personal
|
- name: personal
|
||||||
path: ~/cheat/cheatsheets/personal
|
path: PERSONAL_PATH
|
||||||
tags: [ personal ]
|
tags: [ personal ]
|
||||||
readonly: false
|
readonly: false
|
||||||
|
|
||||||
# While it requires no specific configuration here, it's also worth noting
|
# While it requires no configuration here, it's also worth noting that
|
||||||
# that 'cheat' will automatically append directories named '.cheat' within
|
# 'cheat' will automatically append directories named '.cheat' within the
|
||||||
# the current working directory to the 'cheatpath'. This can be very useful
|
# current working directory to the 'cheatpath'. This can be very useful if
|
||||||
# if you'd like to closely associate cheatsheets with, for example, a
|
# you'd like to closely associate cheatsheets with, for example, a directory
|
||||||
# directory containing source code.
|
# containing source code.
|
||||||
#
|
#
|
||||||
# Such "directory-scoped" cheatsheets will be treated as the most "local"
|
# Such "directory-scoped" cheatsheets will be treated as the most "local"
|
||||||
# cheatsheets, and will override less "local" cheatsheets. Likewise,
|
# cheatsheets, and will override less "local" cheatsheets. Likewise,
|
||||||
|
@ -32,33 +32,34 @@ cheatpaths:
|
|||||||
# thus be overridden by more local cheatsheets. That being the case, you
|
# thus be overridden by more local cheatsheets. That being the case, you
|
||||||
# should probably list community cheatsheets first.
|
# should probably list community cheatsheets first.
|
||||||
#
|
#
|
||||||
# Note that the paths and tags listed below are just examples. You may freely
|
# Note that the paths and tags listed below are placeholders. You may freely
|
||||||
# change them to suit your needs.
|
# change them to suit your needs.
|
||||||
#
|
#
|
||||||
# TODO: regarding community cheatsheets: these must be installed separately.
|
# Community cheatsheets must be installed separately, though you may have
|
||||||
# You may download them here:
|
# downloaded them automatically when installing 'cheat'. If not, you may
|
||||||
|
# download them here:
|
||||||
#
|
#
|
||||||
# https://github.com/cheat/cheatsheets
|
# https://github.com/cheat/cheatsheets
|
||||||
#
|
#
|
||||||
# Once downloaded, ensure that 'path' below points to the location at which
|
# Once downloaded, ensure that 'path' below points to the location at which
|
||||||
# you downloaded the community cheatsheets.
|
# you downloaded the community cheatsheets.
|
||||||
- name: community
|
- name: community
|
||||||
path: ~/cheat/cheatsheets/community
|
path: COMMUNITY_PATH
|
||||||
tags: [ community ]
|
tags: [ community ]
|
||||||
readonly: true
|
readonly: true
|
||||||
|
|
||||||
# If you have personalized cheatsheets, list them last. They will take
|
# If you have personalized cheatsheets, list them last. They will take
|
||||||
# precedence over the more global cheatsheets.
|
# precedence over the more global cheatsheets.
|
||||||
- name: personal
|
- name: personal
|
||||||
path: ~/cheat/cheatsheets/personal
|
path: PERSONAL_PATH
|
||||||
tags: [ personal ]
|
tags: [ personal ]
|
||||||
readonly: false
|
readonly: false
|
||||||
|
|
||||||
# While it requires no specific configuration here, it's also worth noting
|
# While it requires no configuration here, it's also worth noting that
|
||||||
# that 'cheat' will automatically append directories named '.cheat' within
|
# 'cheat' will automatically append directories named '.cheat' within the
|
||||||
# the current working directory to the 'cheatpath'. This can be very useful
|
# current working directory to the 'cheatpath'. This can be very useful if
|
||||||
# if you'd like to closely associate cheatsheets with, for example, a
|
# you'd like to closely associate cheatsheets with, for example, a directory
|
||||||
# directory containing source code.
|
# containing source code.
|
||||||
#
|
#
|
||||||
# Such "directory-scoped" cheatsheets will be treated as the most "local"
|
# Such "directory-scoped" cheatsheets will be treated as the most "local"
|
||||||
# cheatsheets, and will override less "local" cheatsheets. Likewise,
|
# cheatsheets, and will override less "local" cheatsheets. Likewise,
|
||||||
|
5
go.mod
5
go.mod
@ -6,8 +6,13 @@ require (
|
|||||||
github.com/alecthomas/chroma v0.7.1
|
github.com/alecthomas/chroma v0.7.1
|
||||||
github.com/davecgh/go-spew v1.1.1
|
github.com/davecgh/go-spew v1.1.1
|
||||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
|
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
|
||||||
|
github.com/kr/text v0.2.0 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.12
|
github.com/mattn/go-isatty v0.0.12
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||||
|
github.com/sergi/go-diff v1.1.0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 // indirect
|
||||||
|
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
|
||||||
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0
|
||||||
gopkg.in/yaml.v2 v2.2.8
|
gopkg.in/yaml.v2 v2.2.8
|
||||||
)
|
)
|
||||||
|
22
go.sum
22
go.sum
@ -7,6 +7,7 @@ github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBo
|
|||||||
github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI=
|
github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI=
|
||||||
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY=
|
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY=
|
||||||
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
|
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
|
||||||
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
||||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@ -16,6 +17,13 @@ github.com/dlclark/regexp2 v1.1.6 h1:CqB4MjHw0MFCDj+PHHjiESmHX+N7t0tJzKvC6M97BRg
|
|||||||
github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
|
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
|
||||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||||
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
|
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
|
github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
|
||||||
@ -25,22 +33,36 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
|
|||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||||
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
||||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||||
|
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
||||||
|
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35 h1:YAFjXN64LMvktoUZH9zgY4lGc/msGN7HQfoSuKCgaDU=
|
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35 h1:YAFjXN64LMvktoUZH9zgY4lGc/msGN7HQfoSuKCgaDU=
|
||||||
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
|
||||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
|
||||||
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU=
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU=
|
||||||
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
@ -9,7 +9,11 @@ import (
|
|||||||
|
|
||||||
// Paths returns config file paths that are appropriate for the operating
|
// Paths returns config file paths that are appropriate for the operating
|
||||||
// system
|
// system
|
||||||
func Paths(sys string, envvars map[string]string) ([]string, error) {
|
func Paths(
|
||||||
|
sys string,
|
||||||
|
home string,
|
||||||
|
envvars map[string]string,
|
||||||
|
) ([]string, error) {
|
||||||
|
|
||||||
// if `CHEAT_CONFIG_PATH` is set, expand ~ and return it
|
// if `CHEAT_CONFIG_PATH` is set, expand ~ and return it
|
||||||
if confpath, ok := envvars["CHEAT_CONFIG_PATH"]; ok {
|
if confpath, ok := envvars["CHEAT_CONFIG_PATH"]; ok {
|
||||||
@ -32,10 +36,10 @@ func Paths(sys string, envvars map[string]string) ([]string, error) {
|
|||||||
paths = append(paths, path.Join(xdgpath, "/cheat/conf.yml"))
|
paths = append(paths, path.Join(xdgpath, "/cheat/conf.yml"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// `HOME` will always be set on a POSIX-compliant system, though
|
// if `XDG_CONFIG_HOME` is not set, search the user's home directory
|
||||||
paths = append(paths, []string{
|
paths = append(paths, []string{
|
||||||
path.Join(envvars["HOME"], ".config/cheat/conf.yml"),
|
path.Join(home, ".config/cheat/conf.yml"),
|
||||||
path.Join(envvars["HOME"], ".cheat/conf.yml"),
|
path.Join(home, ".cheat/conf.yml"),
|
||||||
}...)
|
}...)
|
||||||
|
|
||||||
return paths, nil
|
return paths, nil
|
||||||
|
@ -11,9 +11,11 @@ import (
|
|||||||
// *nix platforms
|
// *nix platforms
|
||||||
func TestValidatePathsNix(t *testing.T) {
|
func TestValidatePathsNix(t *testing.T) {
|
||||||
|
|
||||||
|
// mock the user's home directory
|
||||||
|
home := "/home/foo"
|
||||||
|
|
||||||
// mock some envvars
|
// mock some envvars
|
||||||
envvars := map[string]string{
|
envvars := map[string]string{
|
||||||
"HOME": "/home/foo",
|
|
||||||
"XDG_CONFIG_HOME": "/home/bar",
|
"XDG_CONFIG_HOME": "/home/bar",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,7 +29,7 @@ func TestValidatePathsNix(t *testing.T) {
|
|||||||
// test each *nix os
|
// test each *nix os
|
||||||
for _, os := range oses {
|
for _, os := range oses {
|
||||||
// get the paths for the platform
|
// get the paths for the platform
|
||||||
paths, err := Paths(os, envvars)
|
paths, err := Paths(os, home, envvars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("paths returned an error: %v", err)
|
t.Errorf("paths returned an error: %v", err)
|
||||||
}
|
}
|
||||||
@ -54,10 +56,11 @@ func TestValidatePathsNix(t *testing.T) {
|
|||||||
// on *nix platforms when `XDG_CONFIG_HOME is not set
|
// on *nix platforms when `XDG_CONFIG_HOME is not set
|
||||||
func TestValidatePathsNixNoXDG(t *testing.T) {
|
func TestValidatePathsNixNoXDG(t *testing.T) {
|
||||||
|
|
||||||
|
// mock the user's home directory
|
||||||
|
home := "/home/foo"
|
||||||
|
|
||||||
// mock some envvars
|
// mock some envvars
|
||||||
envvars := map[string]string{
|
envvars := map[string]string{}
|
||||||
"HOME": "/home/foo",
|
|
||||||
}
|
|
||||||
|
|
||||||
// specify the platforms to test
|
// specify the platforms to test
|
||||||
oses := []string{
|
oses := []string{
|
||||||
@ -69,7 +72,7 @@ func TestValidatePathsNixNoXDG(t *testing.T) {
|
|||||||
// test each *nix os
|
// test each *nix os
|
||||||
for _, os := range oses {
|
for _, os := range oses {
|
||||||
// get the paths for the platform
|
// get the paths for the platform
|
||||||
paths, err := Paths(os, envvars)
|
paths, err := Paths(os, home, envvars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("paths returned an error: %v", err)
|
t.Errorf("paths returned an error: %v", err)
|
||||||
}
|
}
|
||||||
@ -95,6 +98,9 @@ func TestValidatePathsNixNoXDG(t *testing.T) {
|
|||||||
// on Windows platforms
|
// on Windows platforms
|
||||||
func TestValidatePathsWindows(t *testing.T) {
|
func TestValidatePathsWindows(t *testing.T) {
|
||||||
|
|
||||||
|
// mock the user's home directory
|
||||||
|
home := "not-used-on-windows"
|
||||||
|
|
||||||
// mock some envvars
|
// mock some envvars
|
||||||
envvars := map[string]string{
|
envvars := map[string]string{
|
||||||
"APPDATA": "/apps",
|
"APPDATA": "/apps",
|
||||||
@ -102,7 +108,7 @@ func TestValidatePathsWindows(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get the paths for the platform
|
// get the paths for the platform
|
||||||
paths, err := Paths("windows", envvars)
|
paths, err := Paths("windows", home, envvars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("paths returned an error: %v", err)
|
t.Errorf("paths returned an error: %v", err)
|
||||||
}
|
}
|
||||||
@ -126,7 +132,7 @@ func TestValidatePathsWindows(t *testing.T) {
|
|||||||
// TestValidatePathsUnsupported asserts that an error is returned on
|
// TestValidatePathsUnsupported asserts that an error is returned on
|
||||||
// unsupported platforms
|
// unsupported platforms
|
||||||
func TestValidatePathsUnsupported(t *testing.T) {
|
func TestValidatePathsUnsupported(t *testing.T) {
|
||||||
_, err := Paths("unsupported", map[string]string{})
|
_, err := Paths("unsupported", "", map[string]string{})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("failed to return error on unsupported platform")
|
t.Errorf("failed to return error on unsupported platform")
|
||||||
}
|
}
|
||||||
@ -136,15 +142,17 @@ func TestValidatePathsUnsupported(t *testing.T) {
|
|||||||
// returned when `CHEAT_CONFIG_PATH` is explicitly specified.
|
// returned when `CHEAT_CONFIG_PATH` is explicitly specified.
|
||||||
func TestValidatePathsCheatConfigPath(t *testing.T) {
|
func TestValidatePathsCheatConfigPath(t *testing.T) {
|
||||||
|
|
||||||
|
// mock the user's home directory
|
||||||
|
home := "/home/foo"
|
||||||
|
|
||||||
// mock some envvars
|
// mock some envvars
|
||||||
envvars := map[string]string{
|
envvars := map[string]string{
|
||||||
"HOME": "/home/foo",
|
|
||||||
"XDG_CONFIG_HOME": "/home/bar",
|
"XDG_CONFIG_HOME": "/home/bar",
|
||||||
"CHEAT_CONFIG_PATH": "/home/baz/conf.yml",
|
"CHEAT_CONFIG_PATH": "/home/baz/conf.yml",
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the paths for the platform
|
// get the paths for the platform
|
||||||
paths, err := Paths("linux", envvars)
|
paths, err := Paths("linux", home, envvars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("paths returned an error: %v", err)
|
t.Errorf("paths returned an error: %v", err)
|
||||||
}
|
}
|
||||||
|
24
internal/installer/clone.go
Normal file
24
internal/installer/clone.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package installer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
const cloneURL = "https://github.com/cheat/cheatsheets.git"
|
||||||
|
|
||||||
|
// Clone clones the community cheatsheets
|
||||||
|
func Clone(path string) error {
|
||||||
|
|
||||||
|
// perform the clone in a shell
|
||||||
|
cmd := exec.Command("git", "clone", cloneURL, path)
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to clone cheatsheets: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
37
internal/installer/prompt.go
Normal file
37
internal/installer/prompt.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package installer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Prompt prompts the user for a answer
|
||||||
|
func Prompt(prompt string, def bool) (bool, error) {
|
||||||
|
|
||||||
|
// initialize a line reader
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
|
||||||
|
// display the prompt
|
||||||
|
fmt.Print(fmt.Sprintf("%s: ", prompt))
|
||||||
|
|
||||||
|
// read the answer
|
||||||
|
ans, err := reader.ReadString('\n')
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("failed to parse input: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// normalize the answer
|
||||||
|
ans = strings.ToLower(strings.TrimRight(ans, "\n"))
|
||||||
|
|
||||||
|
// return the appropriate response
|
||||||
|
switch ans {
|
||||||
|
case "y":
|
||||||
|
return true, nil
|
||||||
|
case "":
|
||||||
|
return def, nil
|
||||||
|
default:
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
11
vendor/golang.org/x/sys/unix/README.md
generated
vendored
11
vendor/golang.org/x/sys/unix/README.md
generated
vendored
@ -149,6 +149,17 @@ To add a constant, add the header that includes it to the appropriate variable.
|
|||||||
Then, edit the regex (if necessary) to match the desired constant. Avoid making
|
Then, edit the regex (if necessary) to match the desired constant. Avoid making
|
||||||
the regex too broad to avoid matching unintended constants.
|
the regex too broad to avoid matching unintended constants.
|
||||||
|
|
||||||
|
### mkmerge.go
|
||||||
|
|
||||||
|
This program is used to extract duplicate const, func, and type declarations
|
||||||
|
from the generated architecture-specific files listed below, and merge these
|
||||||
|
into a common file for each OS.
|
||||||
|
|
||||||
|
The merge is performed in the following steps:
|
||||||
|
1. Construct the set of common code that is idential in all architecture-specific files.
|
||||||
|
2. Write this common code to the merged file.
|
||||||
|
3. Remove the common code from all architecture-specific files.
|
||||||
|
|
||||||
|
|
||||||
## Generated files
|
## Generated files
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
2
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@ -486,7 +486,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^TCSET/ ||
|
$2 ~ /^TCSET/ ||
|
||||||
$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
|
$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
|
||||||
$2 !~ "RTF_BITS" &&
|
$2 !~ "RTF_BITS" &&
|
||||||
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
|
$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||
|
||||||
$2 ~ /^BIOC/ ||
|
$2 ~ /^BIOC/ ||
|
||||||
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
||||||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
||||||
|
6
vendor/golang.org/x/sys/unix/syscall_freebsd.go
generated
vendored
6
vendor/golang.org/x/sys/unix/syscall_freebsd.go
generated
vendored
@ -529,12 +529,6 @@ func PtraceGetRegs(pid int, regsout *Reg) (err error) {
|
|||||||
return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
|
return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint(countin)}
|
|
||||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
|
||||||
return int(ioDesc.Len), err
|
|
||||||
}
|
|
||||||
|
|
||||||
func PtraceLwpEvents(pid int, enable int) (err error) {
|
func PtraceLwpEvents(pid int, enable int) (err error) {
|
||||||
return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
|
return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
|
||||||
}
|
}
|
||||||
|
6
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
generated
vendored
6
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
generated
vendored
@ -54,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
||||||
|
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
|
return int(ioDesc.Len), err
|
||||||
|
}
|
||||||
|
6
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
generated
vendored
6
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
generated
vendored
@ -54,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
||||||
|
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
|
return int(ioDesc.Len), err
|
||||||
|
}
|
||||||
|
6
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
generated
vendored
6
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
generated
vendored
@ -54,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
||||||
|
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
|
return int(ioDesc.Len), err
|
||||||
|
}
|
||||||
|
6
vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
generated
vendored
6
vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
generated
vendored
@ -54,3 +54,9 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
||||||
|
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
|
return int(ioDesc.Len), err
|
||||||
|
}
|
||||||
|
28
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
28
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
@ -1555,8 +1555,8 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
//sys Acct(path string) (err error)
|
//sys Acct(path string) (err error)
|
||||||
//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
|
//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
|
||||||
//sys Adjtimex(buf *Timex) (state int, err error)
|
//sys Adjtimex(buf *Timex) (state int, err error)
|
||||||
//sys Capget(hdr *CapUserHeader, data *CapUserData) (err error)
|
//sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error)
|
||||||
//sys Capset(hdr *CapUserHeader, data *CapUserData) (err error)
|
//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error)
|
||||||
//sys Chdir(path string) (err error)
|
//sys Chdir(path string) (err error)
|
||||||
//sys Chroot(path string) (err error)
|
//sys Chroot(path string) (err error)
|
||||||
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
||||||
@ -1654,6 +1654,30 @@ func Setgid(uid int) (err error) {
|
|||||||
return EOPNOTSUPP
|
return EOPNOTSUPP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
|
||||||
|
// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.
|
||||||
|
// If the call fails due to other reasons, current fsgid will be returned.
|
||||||
|
func SetfsgidRetGid(gid int) (int, error) {
|
||||||
|
return setfsgid(gid)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.
|
||||||
|
// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability
|
||||||
|
// If the call fails due to other reasons, current fsuid will be returned.
|
||||||
|
func SetfsuidRetUid(uid int) (int, error) {
|
||||||
|
return setfsuid(uid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setfsgid(gid int) error {
|
||||||
|
_, err := setfsgid(gid)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setfsuid(uid int) error {
|
||||||
|
_, err := setfsuid(uid)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
|
func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
|
||||||
return signalfd(fd, sigmask, _C__NSIG/8, flags)
|
return signalfd(fd, sigmask, _C__NSIG/8, flags)
|
||||||
}
|
}
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_386.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_386.go
generated
vendored
@ -70,8 +70,8 @@ func Pipe2(p []int, flags int) (err error) {
|
|||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32
|
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||||
//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32
|
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
||||||
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
generated
vendored
@ -55,8 +55,8 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_arm.go
generated
vendored
@ -98,8 +98,8 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
|||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32
|
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||||
//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32
|
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
|
||||||
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
generated
vendored
@ -42,8 +42,8 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
8
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
generated
vendored
8
vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
generated
vendored
@ -36,8 +36,8 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
@ -216,6 +216,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||||||
cmsg.Len = uint64(length)
|
cmsg.Len = uint64(length)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InotifyInit() (fd int, err error) {
|
||||||
|
return InotifyInit1(0)
|
||||||
|
}
|
||||||
|
|
||||||
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
||||||
|
|
||||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
generated
vendored
@ -31,8 +31,8 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
|||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
generated
vendored
@ -34,8 +34,8 @@ package unix
|
|||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
generated
vendored
@ -41,8 +41,8 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
generated
vendored
@ -34,8 +34,8 @@ import (
|
|||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
generated
vendored
@ -30,8 +30,8 @@ package unix
|
|||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
//sys Setfsgid(gid int) (err error)
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
//sys Setfsuid(uid int) (err error)
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
10
vendor/golang.org/x/sys/unix/syscall_openbsd.go
generated
vendored
10
vendor/golang.org/x/sys/unix/syscall_openbsd.go
generated
vendored
@ -72,16 +72,20 @@ func SysctlUvmexp(name string) (*Uvmexp, error) {
|
|||||||
return &u, nil
|
return &u, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//sysnb pipe(p *[2]_C_int) (err error)
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
|
return Pipe2(p, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sysnb pipe2(p *[2]_C_int, flags int) (err error)
|
||||||
|
func Pipe2(p []int, flags int) error {
|
||||||
if len(p) != 2 {
|
if len(p) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
}
|
}
|
||||||
var pp [2]_C_int
|
var pp [2]_C_int
|
||||||
err = pipe(&pp)
|
err := pipe2(&pp, flags)
|
||||||
p[0] = int(pp[0])
|
p[0] = int(pp[0])
|
||||||
p[1] = int(pp[1])
|
p[1] = int(pp[1])
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys Getdents(fd int, buf []byte) (n int, err error)
|
//sys Getdents(fd int, buf []byte) (n int, err error)
|
||||||
|
2453
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
Normal file
2453
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3325
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
3325
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3325
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
3325
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3337
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
3337
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3311
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
3311
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
3329
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3448
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
3448
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3448
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
3448
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3299
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
3299
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3445
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
3445
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3426
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
3426
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
Normal file
1825
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
generated
vendored
1825
vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
generated
vendored
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
generated
vendored
@ -350,8 +350,8 @@ func Munlockall() (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func pipe(p *[2]_C_int) (err error) {
|
func pipe2(p *[2]_C_int, flags int) (err error) {
|
||||||
_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
|
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
generated
vendored
@ -350,8 +350,8 @@ func Munlockall() (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func pipe(p *[2]_C_int) (err error) {
|
func pipe2(p *[2]_C_int, flags int) (err error) {
|
||||||
_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
|
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
generated
vendored
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
generated
vendored
@ -350,8 +350,8 @@ func Munlockall() (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func pipe(p *[2]_C_int) (err error) {
|
func pipe2(p *[2]_C_int, flags int) (err error) {
|
||||||
_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
|
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
generated
vendored
@ -350,8 +350,8 @@ func Munlockall() (err error) {
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func pipe(p *[2]_C_int) (err error) {
|
func pipe2(p *[2]_C_int, flags int) (err error) {
|
||||||
_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
|
1
vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
generated
vendored
1
vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
generated
vendored
@ -297,4 +297,5 @@ const (
|
|||||||
SYS_FSMOUNT = 432
|
SYS_FSMOUNT = 432
|
||||||
SYS_FSPICK = 433
|
SYS_FSPICK = 433
|
||||||
SYS_PIDFD_OPEN = 434
|
SYS_PIDFD_OPEN = 434
|
||||||
|
SYS_CLONE3 = 435
|
||||||
)
|
)
|
||||||
|
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
generated
vendored
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
generated
vendored
@ -423,7 +423,7 @@ type PtraceIoDesc struct {
|
|||||||
Op int32
|
Op int32
|
||||||
Offs *byte
|
Offs *byte
|
||||||
Addr *byte
|
Addr *byte
|
||||||
Len uint
|
Len uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
type Kevent_t struct {
|
type Kevent_t struct {
|
||||||
|
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
generated
vendored
@ -428,7 +428,7 @@ type PtraceIoDesc struct {
|
|||||||
Op int32
|
Op int32
|
||||||
Offs *byte
|
Offs *byte
|
||||||
Addr *byte
|
Addr *byte
|
||||||
Len uint
|
Len uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
type Kevent_t struct {
|
type Kevent_t struct {
|
||||||
|
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
generated
vendored
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
generated
vendored
@ -405,7 +405,7 @@ type PtraceIoDesc struct {
|
|||||||
Op int32
|
Op int32
|
||||||
Offs *byte
|
Offs *byte
|
||||||
Addr *byte
|
Addr *byte
|
||||||
Len uint
|
Len uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
type Kevent_t struct {
|
type Kevent_t struct {
|
||||||
|
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
generated
vendored
@ -406,7 +406,7 @@ type PtraceIoDesc struct {
|
|||||||
Op int32
|
Op int32
|
||||||
Offs *byte
|
Offs *byte
|
||||||
Addr *byte
|
Addr *byte
|
||||||
Len uint
|
Len uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
type Kevent_t struct {
|
type Kevent_t struct {
|
||||||
|
2274
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
Normal file
2274
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_386.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_386.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2234
vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
generated
vendored
2234
vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -45,7 +45,7 @@ github.com/docopt/docopt-go
|
|||||||
github.com/mattn/go-isatty
|
github.com/mattn/go-isatty
|
||||||
# github.com/mitchellh/go-homedir v1.1.0
|
# github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/mitchellh/go-homedir
|
github.com/mitchellh/go-homedir
|
||||||
# golang.org/x/sys v0.0.0-20200116001909-b77594299b42
|
# golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
# gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0
|
# gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0
|
||||||
gopkg.in/yaml.v1
|
gopkg.in/yaml.v1
|
||||||
|
Loading…
Reference in New Issue
Block a user