Updated to current build process (#2)
* Dropped vendoring directory * Updated to current build process
This commit is contained in:
		
							parent
							
								
									95de7263bd
								
							
						
					
					
						commit
						8616c56d7b
					
				
							
								
								
									
										68
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | ||||
| version: '{build}' | ||||
| image: 'Visual Studio 2017' | ||||
| platform: 'x64' | ||||
| 
 | ||||
| clone_folder: 'c:\gopath\src\github.com\drone-plugins\drone-gitea-release' | ||||
| max_jobs: 1 | ||||
| 
 | ||||
| environment: | ||||
|   GOPATH: c:\gopath | ||||
|   DOCKER_USERNAME: | ||||
|     secure: '4YzzahbEiMZQJpOCOd1LAw==' | ||||
|   DOCKER_PASSWORD: | ||||
|     secure: 'VqO/G3Zfslu6zSLdwHKO+Q==' | ||||
| 
 | ||||
| install: | ||||
|   - ps: | | ||||
|       docker version | ||||
|       go version | ||||
|   - ps: | | ||||
|       $env:Path = "c:\gopath\bin;$env:Path" | ||||
| 
 | ||||
| build_script: | ||||
|   - ps: | | ||||
|       go get -u github.com/golang/dep/cmd/dep | ||||
|       dep ensure | ||||
| 
 | ||||
|       if ( $env:APPVEYOR_REPO_TAG -eq 'false' ) { | ||||
|         go build -ldflags "-X main.build=$env:APPVEYOR_BUILD_VERSION" -a -o release/drone-gitea-release.exe | ||||
|       } else { | ||||
|         $version = $env:APPVEYOR_REPO_TAG_NAME.substring(1) | ||||
|         go build -ldflags "-X main.version=$version -X main.build=$env:APPVEYOR_BUILD_VERSION" -a -o release/drone-gitea-release.exe | ||||
|       } | ||||
| 
 | ||||
|       docker pull microsoft/nanoserver:10.0.14393.1593 | ||||
|       docker build -f Dockerfile.windows -t plugins/gitea-release:windows-amd64 . | ||||
| 
 | ||||
| test_script: | ||||
|   - ps: | | ||||
|       docker run --rm plugins/gitea-release:windows-amd64 --version | ||||
| 
 | ||||
| deploy_script: | ||||
|   - ps: | | ||||
|       $ErrorActionPreference = 'Stop'; | ||||
| 
 | ||||
|       if ( $env:APPVEYOR_PULL_REQUEST_NUMBER ) { | ||||
|         Write-Host Nothing to deploy. | ||||
|       } else { | ||||
|         docker login --username $env:DOCKER_USERNAME --password $env:DOCKER_PASSWORD | ||||
| 
 | ||||
|         if ( $env:APPVEYOR_REPO_TAG -eq 'true' ) { | ||||
|           $major,$minor,$patch = $env:APPVEYOR_REPO_TAG_NAME.substring(1).split('.') | ||||
| 
 | ||||
|           docker push plugins/gitea-release:windows-amd64 | ||||
| 
 | ||||
|           docker tag plugins/gitea-release:windows-amd64 plugins/gitea-release:$major.$minor.$patch-windows-amd64 | ||||
|           docker push plugins/gitea-release:$major.$minor.$patch-windows-amd64 | ||||
| 
 | ||||
|           docker tag plugins/gitea-release:windows-amd64 plugins/gitea-release:$major.$minor-windows-amd64 | ||||
|           docker push plugins/gitea-release:$major.$minor-windows-amd64 | ||||
| 
 | ||||
|           docker tag plugins/gitea-release:windows-amd64 plugins/gitea-release:$major-windows-amd64 | ||||
|           docker push plugins/gitea-release:$major-windows-amd64 | ||||
|         } else { | ||||
|           if ( $env:APPVEYOR_REPO_BRANCH -eq 'master' ) { | ||||
|             docker push plugins/gitea-release:windows-amd64 | ||||
|           } | ||||
|         } | ||||
|       } | ||||
							
								
								
									
										141
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								.drone.yml
									
									
									
									
									
								
							| @ -3,15 +3,22 @@ workspace: | ||||
|   path: src/github.com/drone-plugins/drone-gitea-release | ||||
| 
 | ||||
| pipeline: | ||||
|   test: | ||||
|     image: golang:1.9 | ||||
|   deps: | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     commands: | ||||
|       - go vet | ||||
|       - go test -cover -coverprofile=coverage.out | ||||
|       - go get -u github.com/golang/dep/cmd/dep | ||||
|       - dep ensure | ||||
| 
 | ||||
|   test: | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     commands: | ||||
|       - go vet ./... | ||||
|       - go test -cover ./... | ||||
| 
 | ||||
|   build_linux_amd64: | ||||
|     image: golang:1.9 | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     group: build | ||||
|     environment: | ||||
| @ -19,10 +26,31 @@ pipeline: | ||||
|       - GOARCH=amd64 | ||||
|       - CGO_ENABLED=0 | ||||
|     commands: | ||||
|       - go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/amd64/drone-gitea-release | ||||
|       - | | ||||
|         if test "${DRONE_TAG}" = ""; then | ||||
|           go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/amd64/drone-gitea-release | ||||
|         else | ||||
|           go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/amd64/drone-gitea-release | ||||
|         fi | ||||
| 
 | ||||
|   build_linux_i386: | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     group: build | ||||
|     environment: | ||||
|       - GOOS=linux | ||||
|       - GOARCH=386 | ||||
|       - CGO_ENABLED=0 | ||||
|     commands: | ||||
|       - | | ||||
|         if test "${DRONE_TAG}" = ""; then | ||||
|           go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/i386/drone-gitea-release | ||||
|         else | ||||
|           go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/i386/drone-gitea-release | ||||
|         fi | ||||
| 
 | ||||
|   build_linux_arm64: | ||||
|     image: golang:1.9 | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     group: build | ||||
|     environment: | ||||
| @ -30,10 +58,15 @@ pipeline: | ||||
|       - GOARCH=arm64 | ||||
|       - CGO_ENABLED=0 | ||||
|     commands: | ||||
|       - go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm64/drone-gitea-release | ||||
|       - | | ||||
|         if test "${DRONE_TAG}" = ""; then | ||||
|           go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm64/drone-gitea-release | ||||
|         else | ||||
|           go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm64/drone-gitea-release | ||||
|         fi | ||||
| 
 | ||||
|   build_linux_arm: | ||||
|     image: golang:1.9 | ||||
|     image: golang:1.10 | ||||
|     pull: true | ||||
|     group: build | ||||
|     environment: | ||||
| @ -42,58 +75,74 @@ pipeline: | ||||
|       - CGO_ENABLED=0 | ||||
|       - GOARM=7 | ||||
|     commands: | ||||
|       - go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm/drone-gitea-release | ||||
| 
 | ||||
|   # build_windows_amd64: | ||||
|   #   image: golang:1.9-nanoserver | ||||
|   #   pull: true | ||||
|   #   group: build | ||||
|   #   environment: | ||||
|   #     - GOOS=windows | ||||
|   #     - GOARCH=amd64 | ||||
|   #     - CGO_ENABLED=0 | ||||
|   #   commands: | ||||
|   #     - go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/windows/amd64/drone-gitea-release | ||||
|       - | | ||||
|         if test "${DRONE_TAG}" = ""; then | ||||
|           go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm/drone-gitea-release | ||||
|         else | ||||
|           go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -o release/linux/arm/drone-gitea-release | ||||
|         fi | ||||
| 
 | ||||
|   publish_linux_amd64: | ||||
|     image: plugins/docker:17.05 | ||||
|     image: plugins/docker:17.12 | ||||
|     pull: true | ||||
|     repo: plugins/gitea-release | ||||
|     tags: [ latest, 1.0.0, 1.0, 1 ] | ||||
|     secrets: [ docker_username, docker_password ] | ||||
|     group: docker | ||||
|     repo: plugins/gitea-release | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: linux-amd64 | ||||
|     dockerfile: Dockerfile | ||||
|     when: | ||||
|       branch: master | ||||
|       event: push | ||||
|       event: [ push, tag ] | ||||
| 
 | ||||
|   publish_linux_i386: | ||||
|     image: plugins/docker:17.12 | ||||
|     pull: true | ||||
|     secrets: [ docker_username, docker_password ] | ||||
|     group: docker | ||||
|     repo: plugins/gitea-release | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: linux-i386 | ||||
|     dockerfile: Dockerfile.i386 | ||||
|     when: | ||||
|       event: [ push, tag ] | ||||
| 
 | ||||
|   publish_linux_arm64: | ||||
|     image: plugins/docker:17.05 | ||||
|     image: plugins/docker:17.12 | ||||
|     pull: true | ||||
|     repo: plugins/gitea-release | ||||
|     tags: [ linux-arm64 ] | ||||
|     secrets: [ docker_username, docker_password ] | ||||
|     group: docker | ||||
|     repo: plugins/gitea-release | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: linux-arm64 | ||||
|     dockerfile: Dockerfile.arm64 | ||||
|     when: | ||||
|       branch: master | ||||
|       event: push | ||||
|       event: [ push, tag ] | ||||
| 
 | ||||
|   publish_linux_arm: | ||||
|     image: plugins/docker:17.05 | ||||
|     image: plugins/docker:17.12 | ||||
|     pull: true | ||||
|     repo: plugins/gitea-release | ||||
|     tags: [ linux-arm ] | ||||
|     secrets: [ docker_username, docker_password ] | ||||
|     group: docker | ||||
|     repo: plugins/gitea-release | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: linux-arm | ||||
|     dockerfile: Dockerfile.arm | ||||
|     when: | ||||
|       branch: master | ||||
|       event: push | ||||
|       event: [ push, tag ] | ||||
| 
 | ||||
|   # publish_windows_amd64: | ||||
|   #   image: plugins/docker:17.05 | ||||
|   #   pull: true | ||||
|   #   repo: plugins/github-release | ||||
|   #   tags: [ windows-amd64 ] | ||||
|   #   secrets: [ docker_username, docker_password ] | ||||
|   #   dockerfile: Dockerfile.windows | ||||
|   #   when: | ||||
|   #     branch: master | ||||
|   #     event: push | ||||
|   manifests: | ||||
|     image: plugins/manifest:1 | ||||
|     pull: true | ||||
|     secrets: [ docker_username, docker_password ] | ||||
|     spec: manifest.tmpl | ||||
|     auto_tag: true | ||||
|     ignore_missing: true | ||||
|     when: | ||||
|       event: [ push, tag ] | ||||
| 
 | ||||
|   microbadger: | ||||
|     image: plugins/webhook:1 | ||||
|     pull: true | ||||
|     secrets: [ webhook_url ] | ||||
|     when: | ||||
|       status: [ success ] | ||||
|  | ||||
							
								
								
									
										0
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -22,8 +22,9 @@ _testmain.go | ||||
| *.exe | ||||
| *.test | ||||
| *.prof | ||||
| .env | ||||
| 
 | ||||
| release/* | ||||
| release/ | ||||
| vendor/ | ||||
| 
 | ||||
| coverage.out | ||||
| drone-gitea-release | ||||
|  | ||||
							
								
								
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							| @ -1,11 +1,9 @@ | ||||
| FROM plugins/base:multiarch | ||||
| MAINTAINER Drone.IO Community <drone-dev@googlegroups.com> | ||||
| 
 | ||||
| LABEL org.label-schema.version=latest | ||||
| LABEL org.label-schema.vcs-url="https://github.com/drone-plugins/drone-gitea-release.git" | ||||
| LABEL org.label-schema.name="Drone Gitea Release" | ||||
| LABEL org.label-schema.vendor="Drone.IO Community" | ||||
| LABEL org.label-schema.schema-version="1.0" | ||||
| LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" \ | ||||
|   org.label-schema.name="Drone Gitea Release" \ | ||||
|   org.label-schema.vendor="Drone.IO Community" \ | ||||
|   org.label-schema.schema-version="1.0" | ||||
| 
 | ||||
| ADD release/linux/amd64/drone-gitea-release /bin/ | ||||
| ENTRYPOINT ["/bin/drone-gitea-release"] | ||||
|  | ||||
| @ -1,11 +1,9 @@ | ||||
| FROM plugins/base:multiarch | ||||
| MAINTAINER Drone.IO Community <drone-dev@googlegroups.com> | ||||
| 
 | ||||
| LABEL org.label-schema.version=latest | ||||
| LABEL org.label-schema.vcs-url="https://gitea.com/drone-plugins/drone-gitea-release.git" | ||||
| LABEL org.label-schema.name="Drone Gitea Release" | ||||
| LABEL org.label-schema.vendor="Drone.IO Community" | ||||
| LABEL org.label-schema.schema-version="1.0" | ||||
| LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" \ | ||||
|   org.label-schema.name="Drone Gitea Release" \ | ||||
|   org.label-schema.vendor="Drone.IO Community" \ | ||||
|   org.label-schema.schema-version="1.0" | ||||
| 
 | ||||
| ADD release/linux/arm/drone-gitea-release /bin/ | ||||
| ENTRYPOINT [ "/bin/drone-gitea-release" ] | ||||
|  | ||||
| @ -1,11 +1,9 @@ | ||||
| FROM plugins/base:multiarch | ||||
| MAINTAINER Drone.IO Community <drone-dev@googlegroups.com> | ||||
| 
 | ||||
| LABEL org.label-schema.version=latest | ||||
| LABEL org.label-schema.vcs-url="https://github.com/drone-plugins/drone-gitea-release.git" | ||||
| LABEL org.label-schema.name="Drone Gitea Release" | ||||
| LABEL org.label-schema.vendor="Drone.IO Community" | ||||
| LABEL org.label-schema.schema-version="1.0" | ||||
| LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" \ | ||||
|   org.label-schema.name="Drone Gitea Release" \ | ||||
|   org.label-schema.vendor="Drone.IO Community" \ | ||||
|   org.label-schema.schema-version="1.0" | ||||
| 
 | ||||
| ADD release/linux/arm64/drone-gitea-release /bin/ | ||||
| ENTRYPOINT [ "/bin/drone-gitea-release" ] | ||||
|  | ||||
							
								
								
									
										9
									
								
								Dockerfile.i386
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Dockerfile.i386
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| FROM plugins/base:i386 | ||||
| 
 | ||||
| LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" \ | ||||
|   org.label-schema.name="Drone Gitea Release" \ | ||||
|   org.label-schema.vendor="Drone.IO Community" \ | ||||
|   org.label-schema.schema-version="1.0" | ||||
| 
 | ||||
| ADD release/linux/i386/drone-gitea-release /bin/ | ||||
| ENTRYPOINT ["/bin/drone-gitea-release"] | ||||
| @ -1,11 +1,12 @@ | ||||
| FROM microsoft/nanoserver:latest | ||||
| MAINTAINER Drone.IO Community <drone-dev@googlegroups.com> | ||||
| # escape=` | ||||
| FROM microsoft/nanoserver:10.0.14393.1593 | ||||
| 
 | ||||
| LABEL org.label-schema.version=latest | ||||
| LABEL org.label-schema.vcs-url="https://github.com/drone-plugins/drone-gitea-release.git" | ||||
| LABEL org.label-schema.name="Drone Gitea Release" | ||||
| LABEL org.label-schema.vendor="Drone.IO Community" | ||||
| LABEL org.label-schema.schema-version="1.0" | ||||
| LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" ` | ||||
|   org.label-schema.name="Drone Gitea Release" ` | ||||
|   org.label-schema.vendor="Drone.IO Community" ` | ||||
|   org.label-schema.schema-version="1.0" | ||||
| 
 | ||||
| ADD release/windows/amd64/drone-gitea-release /bin/ | ||||
| ENTRYPOINT [ "/bin/drone-gitea-release" ] | ||||
| SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] | ||||
| 
 | ||||
| ADD release\drone-gitea-release.exe c:\drone-gitea-release.exe | ||||
| ENTRYPOINT [ "c:\\drone-gitea-release.exe" ] | ||||
|  | ||||
							
								
								
									
										48
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. | ||||
| 
 | ||||
| 
 | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "code.gitea.io/sdk" | ||||
|   packages = ["gitea"] | ||||
|   revision = "fa91af7569e6ba34bfa382109847cbc79c3fdad8" | ||||
| 
 | ||||
| [[projects]] | ||||
|   name = "github.com/Sirupsen/logrus" | ||||
|   packages = ["."] | ||||
|   revision = "c155da19408a8799da419ed3eeb0cb5db0ad5dbc" | ||||
|   version = "v1.0.5" | ||||
| 
 | ||||
| [[projects]] | ||||
|   name = "github.com/joho/godotenv" | ||||
|   packages = ["."] | ||||
|   revision = "a79fa1e548e2c689c241d10173efd51e5d689d5b" | ||||
|   version = "v1.2.0" | ||||
| 
 | ||||
| [[projects]] | ||||
|   name = "github.com/urfave/cli" | ||||
|   packages = ["."] | ||||
|   revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1" | ||||
|   version = "v1.20.0" | ||||
| 
 | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/crypto" | ||||
|   packages = ["ssh/terminal"] | ||||
|   revision = "21652f85b0fdddb6c2b6b77a5beca5c5a908174a" | ||||
| 
 | ||||
| [[projects]] | ||||
|   branch = "master" | ||||
|   name = "golang.org/x/sys" | ||||
|   packages = [ | ||||
|     "unix", | ||||
|     "windows" | ||||
|   ] | ||||
|   revision = "cc7307a45468e49eaf2997c890f14aa03a26917b" | ||||
| 
 | ||||
| [solve-meta] | ||||
|   analyzer-name = "dep" | ||||
|   analyzer-version = 1 | ||||
|   inputs-digest = "7cb00c5086c5910b3f5a952158b3c99e8a3c41acb235f0591f74545909a00d34" | ||||
|   solver-name = "gps-cdcl" | ||||
|   solver-version = 1 | ||||
							
								
								
									
										46
									
								
								Gopkg.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								Gopkg.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | ||||
| # Gopkg.toml example | ||||
| # | ||||
| # Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md | ||||
| # for detailed Gopkg.toml documentation. | ||||
| # | ||||
| # required = ["github.com/user/thing/cmd/thing"] | ||||
| # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] | ||||
| # | ||||
| # [[constraint]] | ||||
| #   name = "github.com/user/project" | ||||
| #   version = "1.0.0" | ||||
| # | ||||
| # [[constraint]] | ||||
| #   name = "github.com/user/project2" | ||||
| #   branch = "dev" | ||||
| #   source = "github.com/myfork/project2" | ||||
| # | ||||
| # [[override]] | ||||
| #   name = "github.com/x/y" | ||||
| #   version = "2.4.0" | ||||
| # | ||||
| # [prune] | ||||
| #   non-go = false | ||||
| #   go-tests = true | ||||
| #   unused-packages = true | ||||
| 
 | ||||
| 
 | ||||
| [[constraint]] | ||||
|   branch = "master" | ||||
|   name = "code.gitea.io/sdk" | ||||
| 
 | ||||
| [[constraint]] | ||||
|   name = "github.com/Sirupsen/logrus" | ||||
|   version = "1.0.5" | ||||
| 
 | ||||
| [[constraint]] | ||||
|   name = "github.com/joho/godotenv" | ||||
|   version = "1.2.0" | ||||
| 
 | ||||
| [[constraint]] | ||||
|   name = "github.com/urfave/cli" | ||||
|   version = "1.20.0" | ||||
| 
 | ||||
| [prune] | ||||
|   go-tests = true | ||||
|   unused-packages = true | ||||
							
								
								
									
										7
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								main.go
									
									
									
									
									
								
							| @ -9,14 +9,17 @@ import ( | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| var build = "0" // build number set at compile-time
 | ||||
| var ( | ||||
| 	version = "0.0.0" | ||||
| 	build   = "0" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 	app := cli.NewApp() | ||||
| 	app.Name = "gitea-release plugin" | ||||
| 	app.Usage = "gitea-release plugin" | ||||
| 	app.Version = fmt.Sprintf("%s+%s", version, build) | ||||
| 	app.Action = run | ||||
| 	app.Version = fmt.Sprintf("1.0.0+%s", build) | ||||
| 	app.Flags = []cli.Flag{ | ||||
| 		cli.StringFlag{ | ||||
| 			Name:   "api-key", | ||||
|  | ||||
							
								
								
									
										33
									
								
								manifest.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								manifest.tmpl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}{{else}}latest{{/if}} | ||||
| {{#if build.tags}} | ||||
| tags: | ||||
| {{#each build.tags}} | ||||
|   - {{this}} | ||||
| {{/each}} | ||||
| {{/if}} | ||||
| manifests: | ||||
|   - | ||||
|     image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-amd64 | ||||
|     platform: | ||||
|       architecture: amd64 | ||||
|       os: linux | ||||
|   - | ||||
|     image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-i386 | ||||
|     platform: | ||||
|       architecture: 386 | ||||
|       os: linux | ||||
|   - | ||||
|     image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-arm64 | ||||
|     platform: | ||||
|       architecture: arm64 | ||||
|       os: linux | ||||
|   - | ||||
|     image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-arm | ||||
|     platform: | ||||
|       architecture: arm | ||||
|       os: linux | ||||
|   - | ||||
|     image: plugins/gitea-release:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}windows-amd64 | ||||
|     platform: | ||||
|       architecture: amd64 | ||||
|       os: windows | ||||
							
								
								
									
										20
									
								
								vendor/code.gitea.io/sdk/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/code.gitea.io/sdk/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,20 +0,0 @@ | ||||
| Copyright (c) 2016 The Gitea Authors | ||||
| Copyright (c) 2014 The Gogs Authors | ||||
| 
 | ||||
| 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. | ||||
							
								
								
									
										22
									
								
								vendor/code.gitea.io/sdk/gitea/admin_org.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/code.gitea.io/sdk/gitea/admin_org.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,22 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // AdminCreateOrg create an organization
 | ||||
| func (c *Client) AdminCreateOrg(user string, opt CreateOrgOption) (*Organization, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	org := new(Organization) | ||||
| 	return org, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/orgs", user), | ||||
| 		jsonHeader, bytes.NewReader(body), org) | ||||
| } | ||||
							
								
								
									
										22
									
								
								vendor/code.gitea.io/sdk/gitea/admin_repo.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/code.gitea.io/sdk/gitea/admin_repo.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,22 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // AdminCreateRepo create a repo
 | ||||
| func (c *Client) AdminCreateRepo(user string, opt CreateRepoOption) (*Repository, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	repo := new(Repository) | ||||
| 	return repo, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/repos", user), | ||||
| 		jsonHeader, bytes.NewReader(body), repo) | ||||
| } | ||||
							
								
								
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/admin_user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/admin_user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,80 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // CreateUserOption create user options
 | ||||
| type CreateUserOption struct { | ||||
| 	SourceID  int64  `json:"source_id"` | ||||
| 	LoginName string `json:"login_name"` | ||||
| 	// required: true
 | ||||
| 	Username string `json:"username" binding:"Required;AlphaDashDot;MaxSize(35)"` | ||||
| 	FullName string `json:"full_name" binding:"MaxSize(100)"` | ||||
| 	// required: true
 | ||||
| 	// swagger:strfmt email
 | ||||
| 	Email string `json:"email" binding:"Required;Email;MaxSize(254)"` | ||||
| 	// required: true
 | ||||
| 	Password   string `json:"password" binding:"Required;MaxSize(255)"` | ||||
| 	SendNotify bool   `json:"send_notify"` | ||||
| } | ||||
| 
 | ||||
| // AdminCreateUser create a user
 | ||||
| func (c *Client) AdminCreateUser(opt CreateUserOption) (*User, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	user := new(User) | ||||
| 	return user, c.getParsedResponse("POST", "/admin/users", jsonHeader, bytes.NewReader(body), user) | ||||
| } | ||||
| 
 | ||||
| // EditUserOption edit user options
 | ||||
| type EditUserOption struct { | ||||
| 	SourceID  int64  `json:"source_id"` | ||||
| 	LoginName string `json:"login_name"` | ||||
| 	FullName  string `json:"full_name" binding:"MaxSize(100)"` | ||||
| 	// required: true
 | ||||
| 	// swagger:strfmt email
 | ||||
| 	Email            string `json:"email" binding:"Required;Email;MaxSize(254)"` | ||||
| 	Password         string `json:"password" binding:"MaxSize(255)"` | ||||
| 	Website          string `json:"website" binding:"MaxSize(50)"` | ||||
| 	Location         string `json:"location" binding:"MaxSize(50)"` | ||||
| 	Active           *bool  `json:"active"` | ||||
| 	Admin            *bool  `json:"admin"` | ||||
| 	AllowGitHook     *bool  `json:"allow_git_hook"` | ||||
| 	AllowImportLocal *bool  `json:"allow_import_local"` | ||||
| 	MaxRepoCreation  *int   `json:"max_repo_creation"` | ||||
| } | ||||
| 
 | ||||
| // AdminEditUser modify user informations
 | ||||
| func (c *Client) AdminEditUser(user string, opt EditUserOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PATCH", fmt.Sprintf("/admin/users/%s", user), jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // AdminDeleteUser delete one user according name
 | ||||
| func (c *Client) AdminDeleteUser(user string) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/admin/users/%s", user), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // AdminCreateUserPublicKey create one user with options
 | ||||
| func (c *Client) AdminCreateUserPublicKey(user string, opt CreateKeyOption) (*PublicKey, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	key := new(PublicKey) | ||||
| 	return key, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/keys", user), jsonHeader, bytes.NewReader(body), key) | ||||
| } | ||||
							
								
								
									
										92
									
								
								vendor/code.gitea.io/sdk/gitea/attachment.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										92
									
								
								vendor/code.gitea.io/sdk/gitea/attachment.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,92 +0,0 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea // import "code.gitea.io/sdk/gitea"
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"mime/multipart" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Attachment a generic attachment
 | ||||
| // swagger:model
 | ||||
| type Attachment struct { | ||||
| 	ID            int64  `json:"id"` | ||||
| 	Name          string `json:"name"` | ||||
| 	Size          int64  `json:"size"` | ||||
| 	DownloadCount int64  `json:"download_count"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created     time.Time `json:"created_at"` | ||||
| 	UUID        string    `json:"uuid"` | ||||
| 	DownloadURL string    `json:"browser_download_url"` | ||||
| } | ||||
| 
 | ||||
| // ListReleaseAttachments list release's attachments
 | ||||
| func (c *Client) ListReleaseAttachments(user, repo string, release int64) ([]*Attachment, error) { | ||||
| 	attachments := make([]*Attachment, 0, 10) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d/assets", user, repo, release), | ||||
| 		nil, nil, &attachments) | ||||
| 	return attachments, err | ||||
| } | ||||
| 
 | ||||
| // ListReleaseAttachments list release's attachments
 | ||||
| func (c *Client) GetReleaseAttachment(user, repo string, release int64, id int64) (*Attachment, error) { | ||||
| 	a := new(Attachment) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d/assets/%d", user, repo, release, id), | ||||
| 		nil, nil, &a) | ||||
| 	return a, err | ||||
| } | ||||
| 
 | ||||
| // CreateReleaseAttachment creates an attachment for the given release
 | ||||
| func (c *Client) CreateReleaseAttachment(user, repo string, release int64, file io.Reader, filename string) (*Attachment, error) { | ||||
| 	// Write file to body
 | ||||
| 	body := new(bytes.Buffer) | ||||
| 	writer := multipart.NewWriter(body) | ||||
| 	part, err := writer.CreateFormFile("attachment", filename) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if _, err = io.Copy(part, file); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if err = writer.Close(); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// Send request
 | ||||
| 	attachment := new(Attachment) | ||||
| 	err = c.getParsedResponse("POST", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d/assets", user, repo, release), | ||||
| 		http.Header{"Content-Type": {writer.FormDataContentType()}}, body, &attachment) | ||||
| 	return attachment, err | ||||
| } | ||||
| 
 | ||||
| // EditReleaseAttachment updates the given attachment with the given options
 | ||||
| func (c *Client) EditReleaseAttachment(user, repo string, release int64, attachment int64, form EditAttachmentOptions) (*Attachment, error) { | ||||
| 	body, err := json.Marshal(&form) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	attach := new(Attachment) | ||||
| 	return attach, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/releases/%d/assets/%d", user, repo, release, attachment), jsonHeader, bytes.NewReader(body), attach) | ||||
| } | ||||
| 
 | ||||
| // DeleteReleaseAttachment deletes the given attachment including the uploaded file
 | ||||
| func (c *Client) DeleteReleaseAttachment(user, repo string, release int64, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d/assets/%d", user, repo, release, id), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // EditAttachmentOptions options for editing attachments
 | ||||
| // swagger:model
 | ||||
| type EditAttachmentOptions struct { | ||||
| 	Name string `json:"name"` | ||||
| } | ||||
							
								
								
									
										5
									
								
								vendor/code.gitea.io/sdk/gitea/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/code.gitea.io/sdk/gitea/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,5 +0,0 @@ | ||||
| // Copyright 2016 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea // import "code.gitea.io/sdk/gitea"
 | ||||
							
								
								
									
										39
									
								
								vendor/code.gitea.io/sdk/gitea/fork.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/code.gitea.io/sdk/gitea/fork.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,39 +0,0 @@ | ||||
| // Copyright 2016 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // ListForks list a repository's forks
 | ||||
| func (c *Client) ListForks(user, repo string) ([]*Repository, error) { | ||||
| 	forks := make([]*Repository, 10) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/forks", user, repo), | ||||
| 		nil, nil, &forks) | ||||
| 	return forks, err | ||||
| } | ||||
| 
 | ||||
| // CreateForkOption options for creating a fork
 | ||||
| type CreateForkOption struct { | ||||
| 	// organization name, if forking into an organization
 | ||||
| 	Organization *string `json:"organization"` | ||||
| } | ||||
| 
 | ||||
| // CreateFork create a fork of a repository
 | ||||
| func (c *Client) CreateFork(user, repo string, form CreateForkOption) (*Repository, error) { | ||||
| 	body, err := json.Marshal(form) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	fork := new(Repository) | ||||
| 	err = c.getParsedResponse("POST", | ||||
| 		fmt.Sprintf("/repos/%s/%s/forks", user, repo), | ||||
| 		jsonHeader, bytes.NewReader(body), &fork) | ||||
| 	return fork, err | ||||
| } | ||||
							
								
								
									
										104
									
								
								vendor/code.gitea.io/sdk/gitea/gitea.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										104
									
								
								vendor/code.gitea.io/sdk/gitea/gitea.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,104 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // Version return the library version
 | ||||
| func Version() string { | ||||
| 	return "0.12.3" | ||||
| } | ||||
| 
 | ||||
| // Client represents a Gogs API client.
 | ||||
| type Client struct { | ||||
| 	url         string | ||||
| 	accessToken string | ||||
| 	client      *http.Client | ||||
| } | ||||
| 
 | ||||
| // NewClient initializes and returns a API client.
 | ||||
| func NewClient(url, token string) *Client { | ||||
| 	return &Client{ | ||||
| 		url:         strings.TrimSuffix(url, "/"), | ||||
| 		accessToken: token, | ||||
| 		client:      &http.Client{}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // SetHTTPClient replaces default http.Client with user given one.
 | ||||
| func (c *Client) SetHTTPClient(client *http.Client) { | ||||
| 	c.client = client | ||||
| } | ||||
| 
 | ||||
| func (c *Client) doRequest(method, path string, header http.Header, body io.Reader) (*http.Response, error) { | ||||
| 	req, err := http.NewRequest(method, c.url+"/api/v1"+path, body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	req.Header.Set("Authorization", "token "+c.accessToken) | ||||
| 	for k, v := range header { | ||||
| 		req.Header[k] = v | ||||
| 	} | ||||
| 
 | ||||
| 	return c.client.Do(req) | ||||
| } | ||||
| 
 | ||||
| func (c *Client) getResponse(method, path string, header http.Header, body io.Reader) ([]byte, error) { | ||||
| 	resp, err := c.doRequest(method, path, header, body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 
 | ||||
| 	data, err := ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	switch resp.StatusCode { | ||||
| 	case 403: | ||||
| 		return nil, errors.New("403 Forbidden") | ||||
| 	case 404: | ||||
| 		return nil, errors.New("404 Not Found") | ||||
| 	case 422: | ||||
| 		return nil, fmt.Errorf("422 Unprocessable Entity: %s", string(data)) | ||||
| 	} | ||||
| 
 | ||||
| 	if resp.StatusCode/100 != 2 { | ||||
| 		errMap := make(map[string]interface{}) | ||||
| 		if err = json.Unmarshal(data, &errMap); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return nil, errors.New(errMap["message"].(string)) | ||||
| 	} | ||||
| 
 | ||||
| 	return data, nil | ||||
| } | ||||
| 
 | ||||
| func (c *Client) getParsedResponse(method, path string, header http.Header, body io.Reader, obj interface{}) error { | ||||
| 	data, err := c.getResponse(method, path, header, body) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return json.Unmarshal(data, obj) | ||||
| } | ||||
| 
 | ||||
| func (c *Client) getStatusCode(method, path string, header http.Header, body io.Reader) (int, error) { | ||||
| 	resp, err := c.doRequest(method, path, header, body) | ||||
| 	if err != nil { | ||||
| 		return -1, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 
 | ||||
| 	return resp.StatusCode, nil | ||||
| } | ||||
							
								
								
									
										407
									
								
								vendor/code.gitea.io/sdk/gitea/hook.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										407
									
								
								vendor/code.gitea.io/sdk/gitea/hook.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,407 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	// ErrInvalidReceiveHook FIXME
 | ||||
| 	ErrInvalidReceiveHook = errors.New("Invalid JSON payload received over webhook") | ||||
| ) | ||||
| 
 | ||||
| // Hook a hook is a web hook when one repository changed
 | ||||
| type Hook struct { | ||||
| 	ID     int64             `json:"id"` | ||||
| 	Type   string            `json:"type"` | ||||
| 	URL    string            `json:"-"` | ||||
| 	Config map[string]string `json:"config"` | ||||
| 	Events []string          `json:"events"` | ||||
| 	Active bool              `json:"active"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated time.Time `json:"updated_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at"` | ||||
| } | ||||
| 
 | ||||
| // HookList represents a list of API hook.
 | ||||
| type HookList []*Hook | ||||
| 
 | ||||
| // ListOrgHooks list all the hooks of one organization
 | ||||
| func (c *Client) ListOrgHooks(org string) (HookList, error) { | ||||
| 	hooks := make([]*Hook, 0, 10) | ||||
| 	return hooks, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/hooks", org), nil, nil, &hooks) | ||||
| } | ||||
| 
 | ||||
| // ListRepoHooks list all the hooks of one repository
 | ||||
| func (c *Client) ListRepoHooks(user, repo string) (HookList, error) { | ||||
| 	hooks := make([]*Hook, 0, 10) | ||||
| 	return hooks, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/hooks", user, repo), nil, nil, &hooks) | ||||
| } | ||||
| 
 | ||||
| // GetOrgHook get a hook of an organization
 | ||||
| func (c *Client) GetOrgHook(org string, id int64) (*Hook, error) { | ||||
| 	h := new(Hook) | ||||
| 	return h, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), nil, nil, h) | ||||
| } | ||||
| 
 | ||||
| // GetRepoHook get a hook of a repository
 | ||||
| func (c *Client) GetRepoHook(user, repo string, id int64) (*Hook, error) { | ||||
| 	h := new(Hook) | ||||
| 	return h, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), nil, nil, h) | ||||
| } | ||||
| 
 | ||||
| // CreateHookOption options when create a hook
 | ||||
| type CreateHookOption struct { | ||||
| 	// required: true
 | ||||
| 	// enum: gitea,gogs,slack,discord
 | ||||
| 	Type string `json:"type" binding:"Required"` | ||||
| 	// required: true
 | ||||
| 	Config map[string]string `json:"config" binding:"Required"` | ||||
| 	Events []string          `json:"events"` | ||||
| 	// default: false
 | ||||
| 	Active bool `json:"active"` | ||||
| } | ||||
| 
 | ||||
| // CreateOrgHook create one hook for an organization, with options
 | ||||
| func (c *Client) CreateOrgHook(org string, opt CreateHookOption) (*Hook, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	h := new(Hook) | ||||
| 	return h, c.getParsedResponse("POST", fmt.Sprintf("/orgs/%s/hooks", org), jsonHeader, bytes.NewReader(body), h) | ||||
| } | ||||
| 
 | ||||
| // CreateRepoHook create one hook for a repository, with options
 | ||||
| func (c *Client) CreateRepoHook(user, repo string, opt CreateHookOption) (*Hook, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	h := new(Hook) | ||||
| 	return h, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/hooks", user, repo), jsonHeader, bytes.NewReader(body), h) | ||||
| } | ||||
| 
 | ||||
| // EditHookOption options when modify one hook
 | ||||
| type EditHookOption struct { | ||||
| 	Config map[string]string `json:"config"` | ||||
| 	Events []string          `json:"events"` | ||||
| 	Active *bool             `json:"active"` | ||||
| } | ||||
| 
 | ||||
| // EditOrgHook modify one hook of an organization, with hook id and options
 | ||||
| func (c *Client) EditOrgHook(org string, id int64, opt EditHookOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PATCH", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // EditRepoHook modify one hook of a repository, with hook id and options
 | ||||
| func (c *Client) EditRepoHook(user, repo string, id int64, opt EditHookOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // DeleteOrgHook delete one hook from an organization, with hook id
 | ||||
| func (c *Client) DeleteOrgHook(org string, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/org/%s/hooks/%d", org, id), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // DeleteRepoHook delete one hook from a repository, with hook id
 | ||||
| func (c *Client) DeleteRepoHook(user, repo string, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // Payloader payload is some part of one hook
 | ||||
| type Payloader interface { | ||||
| 	SetSecret(string) | ||||
| 	JSONPayload() ([]byte, error) | ||||
| } | ||||
| 
 | ||||
| // PayloadUser represents the author or committer of a commit
 | ||||
| type PayloadUser struct { | ||||
| 	// Full name of the commit author
 | ||||
| 	Name string `json:"name"` | ||||
| 	// swagger:strfmt email
 | ||||
| 	Email    string `json:"email"` | ||||
| 	UserName string `json:"username"` | ||||
| } | ||||
| 
 | ||||
| // FIXME: consider using same format as API when commits API are added.
 | ||||
| //        applies to PayloadCommit and PayloadCommitVerification
 | ||||
| 
 | ||||
| // PayloadCommit represents a commit
 | ||||
| type PayloadCommit struct { | ||||
| 	// sha1 hash of the commit
 | ||||
| 	ID           string                     `json:"id"` | ||||
| 	Message      string                     `json:"message"` | ||||
| 	URL          string                     `json:"url"` | ||||
| 	Author       *PayloadUser               `json:"author"` | ||||
| 	Committer    *PayloadUser               `json:"committer"` | ||||
| 	Verification *PayloadCommitVerification `json:"verification"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Timestamp time.Time `json:"timestamp"` | ||||
| } | ||||
| 
 | ||||
| // PayloadCommitVerification represents the GPG verification of a commit
 | ||||
| type PayloadCommitVerification struct { | ||||
| 	Verified  bool   `json:"verified"` | ||||
| 	Reason    string `json:"reason"` | ||||
| 	Signature string `json:"signature"` | ||||
| 	Payload   string `json:"payload"` | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	_ Payloader = &CreatePayload{} | ||||
| 	_ Payloader = &PushPayload{} | ||||
| 	_ Payloader = &IssuePayload{} | ||||
| 	_ Payloader = &PullRequestPayload{} | ||||
| ) | ||||
| 
 | ||||
| // _________                        __
 | ||||
| // \_   ___ \_______   ____ _____ _/  |_  ____
 | ||||
| // /    \  \/\_  __ \_/ __ \\__  \\   __\/ __ \
 | ||||
| // \     \____|  | \/\  ___/ / __ \|  | \  ___/
 | ||||
| //  \______  /|__|    \___  >____  /__|  \___  >
 | ||||
| //         \/             \/     \/          \/
 | ||||
| 
 | ||||
| // CreatePayload FIXME
 | ||||
| type CreatePayload struct { | ||||
| 	Secret  string      `json:"secret"` | ||||
| 	Sha     string      `json:"sha"` | ||||
| 	Ref     string      `json:"ref"` | ||||
| 	RefType string      `json:"ref_type"` | ||||
| 	Repo    *Repository `json:"repository"` | ||||
| 	Sender  *User       `json:"sender"` | ||||
| } | ||||
| 
 | ||||
| // SetSecret FIXME
 | ||||
| func (p *CreatePayload) SetSecret(secret string) { | ||||
| 	p.Secret = secret | ||||
| } | ||||
| 
 | ||||
| // JSONPayload return payload information
 | ||||
| func (p *CreatePayload) JSONPayload() ([]byte, error) { | ||||
| 	return json.MarshalIndent(p, "", "  ") | ||||
| } | ||||
| 
 | ||||
| // ParseCreateHook parses create event hook content.
 | ||||
| func ParseCreateHook(raw []byte) (*CreatePayload, error) { | ||||
| 	hook := new(CreatePayload) | ||||
| 	if err := json.Unmarshal(raw, hook); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// it is possible the JSON was parsed, however,
 | ||||
| 	// was not from Gogs (maybe was from Bitbucket)
 | ||||
| 	// So we'll check to be sure certain key fields
 | ||||
| 	// were populated
 | ||||
| 	switch { | ||||
| 	case hook.Repo == nil: | ||||
| 		return nil, ErrInvalidReceiveHook | ||||
| 	case len(hook.Ref) == 0: | ||||
| 		return nil, ErrInvalidReceiveHook | ||||
| 	} | ||||
| 	return hook, nil | ||||
| } | ||||
| 
 | ||||
| // __________             .__
 | ||||
| // \______   \__ __  _____|  |__
 | ||||
| //  |     ___/  |  \/  ___/  |  \
 | ||||
| //  |    |   |  |  /\___ \|   Y  \
 | ||||
| //  |____|   |____//____  >___|  /
 | ||||
| //                      \/     \/
 | ||||
| 
 | ||||
| // PushPayload represents a payload information of push event.
 | ||||
| type PushPayload struct { | ||||
| 	Secret     string           `json:"secret"` | ||||
| 	Ref        string           `json:"ref"` | ||||
| 	Before     string           `json:"before"` | ||||
| 	After      string           `json:"after"` | ||||
| 	CompareURL string           `json:"compare_url"` | ||||
| 	Commits    []*PayloadCommit `json:"commits"` | ||||
| 	Repo       *Repository      `json:"repository"` | ||||
| 	Pusher     *User            `json:"pusher"` | ||||
| 	Sender     *User            `json:"sender"` | ||||
| } | ||||
| 
 | ||||
| // SetSecret FIXME
 | ||||
| func (p *PushPayload) SetSecret(secret string) { | ||||
| 	p.Secret = secret | ||||
| } | ||||
| 
 | ||||
| // JSONPayload FIXME
 | ||||
| func (p *PushPayload) JSONPayload() ([]byte, error) { | ||||
| 	return json.MarshalIndent(p, "", "  ") | ||||
| } | ||||
| 
 | ||||
| // ParsePushHook parses push event hook content.
 | ||||
| func ParsePushHook(raw []byte) (*PushPayload, error) { | ||||
| 	hook := new(PushPayload) | ||||
| 	if err := json.Unmarshal(raw, hook); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	switch { | ||||
| 	case hook.Repo == nil: | ||||
| 		return nil, ErrInvalidReceiveHook | ||||
| 	case len(hook.Ref) == 0: | ||||
| 		return nil, ErrInvalidReceiveHook | ||||
| 	} | ||||
| 	return hook, nil | ||||
| } | ||||
| 
 | ||||
| // Branch returns branch name from a payload
 | ||||
| func (p *PushPayload) Branch() string { | ||||
| 	return strings.Replace(p.Ref, "refs/heads/", "", -1) | ||||
| } | ||||
| 
 | ||||
| // .___
 | ||||
| // |   | ______ ________ __   ____
 | ||||
| // |   |/  ___//  ___/  |  \_/ __ \
 | ||||
| // |   |\___ \ \___ \|  |  /\  ___/
 | ||||
| // |___/____  >____  >____/  \___  >
 | ||||
| //          \/     \/            \/
 | ||||
| 
 | ||||
| // HookIssueAction FIXME
 | ||||
| type HookIssueAction string | ||||
| 
 | ||||
| const ( | ||||
| 	// HookIssueOpened opened
 | ||||
| 	HookIssueOpened HookIssueAction = "opened" | ||||
| 	// HookIssueClosed closed
 | ||||
| 	HookIssueClosed HookIssueAction = "closed" | ||||
| 	// HookIssueReOpened reopened
 | ||||
| 	HookIssueReOpened HookIssueAction = "reopened" | ||||
| 	// HookIssueEdited edited
 | ||||
| 	HookIssueEdited HookIssueAction = "edited" | ||||
| 	// HookIssueAssigned assigned
 | ||||
| 	HookIssueAssigned HookIssueAction = "assigned" | ||||
| 	// HookIssueUnassigned unassigned
 | ||||
| 	HookIssueUnassigned HookIssueAction = "unassigned" | ||||
| 	// HookIssueLabelUpdated label_updated
 | ||||
| 	HookIssueLabelUpdated HookIssueAction = "label_updated" | ||||
| 	// HookIssueLabelCleared label_cleared
 | ||||
| 	HookIssueLabelCleared HookIssueAction = "label_cleared" | ||||
| 	// HookIssueSynchronized synchronized
 | ||||
| 	HookIssueSynchronized HookIssueAction = "synchronized" | ||||
| 	// HookIssueMilestoned is an issue action for when a milestone is set on an issue.
 | ||||
| 	HookIssueMilestoned HookIssueAction = "milestoned" | ||||
| 	// HookIssueDemilestoned is an issue action for when a milestone is cleared on an issue.
 | ||||
| 	HookIssueDemilestoned HookIssueAction = "demilestoned" | ||||
| ) | ||||
| 
 | ||||
| // IssuePayload represents the payload information that is sent along with an issue event.
 | ||||
| type IssuePayload struct { | ||||
| 	Secret     string          `json:"secret"` | ||||
| 	Action     HookIssueAction `json:"action"` | ||||
| 	Index      int64           `json:"number"` | ||||
| 	Changes    *ChangesPayload `json:"changes,omitempty"` | ||||
| 	Issue      *Issue          `json:"issue"` | ||||
| 	Repository *Repository     `json:"repository"` | ||||
| 	Sender     *User           `json:"sender"` | ||||
| } | ||||
| 
 | ||||
| // SetSecret modifies the secret of the IssuePayload.
 | ||||
| func (p *IssuePayload) SetSecret(secret string) { | ||||
| 	p.Secret = secret | ||||
| } | ||||
| 
 | ||||
| // JSONPayload encodes the IssuePayload to JSON, with an indentation of two spaces.
 | ||||
| func (p *IssuePayload) JSONPayload() ([]byte, error) { | ||||
| 	return json.MarshalIndent(p, "", "  ") | ||||
| } | ||||
| 
 | ||||
| // ChangesFromPayload FIXME
 | ||||
| type ChangesFromPayload struct { | ||||
| 	From string `json:"from"` | ||||
| } | ||||
| 
 | ||||
| // ChangesPayload FIXME
 | ||||
| type ChangesPayload struct { | ||||
| 	Title *ChangesFromPayload `json:"title,omitempty"` | ||||
| 	Body  *ChangesFromPayload `json:"body,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // __________      .__  .__    __________                                     __
 | ||||
| // \______   \__ __|  | |  |   \______   \ ____  ________ __   ____   _______/  |_
 | ||||
| //  |     ___/  |  \  | |  |    |       _// __ \/ ____/  |  \_/ __ \ /  ___/\   __\
 | ||||
| //  |    |   |  |  /  |_|  |__  |    |   \  ___< <_|  |  |  /\  ___/ \___ \  |  |
 | ||||
| //  |____|   |____/|____/____/  |____|_  /\___  >__   |____/  \___  >____  > |__|
 | ||||
| //                                     \/     \/   |__|           \/     \/
 | ||||
| 
 | ||||
| // PullRequestPayload represents a payload information of pull request event.
 | ||||
| type PullRequestPayload struct { | ||||
| 	Secret      string          `json:"secret"` | ||||
| 	Action      HookIssueAction `json:"action"` | ||||
| 	Index       int64           `json:"number"` | ||||
| 	Changes     *ChangesPayload `json:"changes,omitempty"` | ||||
| 	PullRequest *PullRequest    `json:"pull_request"` | ||||
| 	Repository  *Repository     `json:"repository"` | ||||
| 	Sender      *User           `json:"sender"` | ||||
| } | ||||
| 
 | ||||
| // SetSecret modifies the secret of the PullRequestPayload.
 | ||||
| func (p *PullRequestPayload) SetSecret(secret string) { | ||||
| 	p.Secret = secret | ||||
| } | ||||
| 
 | ||||
| // JSONPayload FIXME
 | ||||
| func (p *PullRequestPayload) JSONPayload() ([]byte, error) { | ||||
| 	return json.MarshalIndent(p, "", "  ") | ||||
| } | ||||
| 
 | ||||
| //__________                           .__  __
 | ||||
| //\______   \ ____ ______   ____  _____|__|/  |_  ___________ ___.__.
 | ||||
| // |       _// __ \\____ \ /  _ \/  ___/  \   __\/  _ \_  __ <   |  |
 | ||||
| // |    |   \  ___/|  |_> >  <_> )___ \|  ||  | (  <_> )  | \/\___  |
 | ||||
| // |____|_  /\___  >   __/ \____/____  >__||__|  \____/|__|   / ____|
 | ||||
| //        \/     \/|__|              \/                       \/
 | ||||
| 
 | ||||
| // HookRepoAction an action that happens to a repo
 | ||||
| type HookRepoAction string | ||||
| 
 | ||||
| const ( | ||||
| 	// HookRepoCreated created
 | ||||
| 	HookRepoCreated HookRepoAction = "created" | ||||
| 	// HookRepoDeleted deleted
 | ||||
| 	HookRepoDeleted HookRepoAction = "deleted" | ||||
| ) | ||||
| 
 | ||||
| // RepositoryPayload payload for repository webhooks
 | ||||
| type RepositoryPayload struct { | ||||
| 	Secret       string         `json:"secret"` | ||||
| 	Action       HookRepoAction `json:"action"` | ||||
| 	Repository   *Repository    `json:"repository"` | ||||
| 	Organization *User          `json:"organization"` | ||||
| 	Sender       *User          `json:"sender"` | ||||
| } | ||||
| 
 | ||||
| // SetSecret set the payload's secret
 | ||||
| func (p *RepositoryPayload) SetSecret(secret string) { | ||||
| 	p.Secret = secret | ||||
| } | ||||
| 
 | ||||
| // JSONPayload JSON representation of the payload
 | ||||
| func (p *RepositoryPayload) JSONPayload() ([]byte, error) { | ||||
| 	return json.MarshalIndent(p, "", " ") | ||||
| } | ||||
							
								
								
									
										129
									
								
								vendor/code.gitea.io/sdk/gitea/issue.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										129
									
								
								vendor/code.gitea.io/sdk/gitea/issue.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,129 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // StateType issue state type
 | ||||
| type StateType string | ||||
| 
 | ||||
| const ( | ||||
| 	// StateOpen pr is opend
 | ||||
| 	StateOpen StateType = "open" | ||||
| 	// StateClosed pr is closed
 | ||||
| 	StateClosed StateType = "closed" | ||||
| ) | ||||
| 
 | ||||
| // PullRequestMeta PR info if an issue is a PR
 | ||||
| type PullRequestMeta struct { | ||||
| 	HasMerged bool       `json:"merged"` | ||||
| 	Merged    *time.Time `json:"merged_at"` | ||||
| } | ||||
| 
 | ||||
| // Issue represents an issue in a repository
 | ||||
| // swagger:model
 | ||||
| type Issue struct { | ||||
| 	ID        int64      `json:"id"` | ||||
| 	URL       string     `json:"url"` | ||||
| 	Index     int64      `json:"number"` | ||||
| 	Poster    *User      `json:"user"` | ||||
| 	Title     string     `json:"title"` | ||||
| 	Body      string     `json:"body"` | ||||
| 	Labels    []*Label   `json:"labels"` | ||||
| 	Milestone *Milestone `json:"milestone"` | ||||
| 	Assignee  *User      `json:"assignee"` | ||||
| 	// Whether the issue is open or closed
 | ||||
| 	//
 | ||||
| 	// type: string
 | ||||
| 	// enum: open,closed
 | ||||
| 	State    StateType `json:"state"` | ||||
| 	Comments int       `json:"comments"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated time.Time `json:"updated_at"` | ||||
| 
 | ||||
| 	PullRequest *PullRequestMeta `json:"pull_request"` | ||||
| } | ||||
| 
 | ||||
| // ListIssueOption list issue options
 | ||||
| type ListIssueOption struct { | ||||
| 	Page  int | ||||
| 	State string | ||||
| } | ||||
| 
 | ||||
| // ListIssues returns all issues assigned the authenticated user
 | ||||
| func (c *Client) ListIssues(opt ListIssueOption) ([]*Issue, error) { | ||||
| 	issues := make([]*Issue, 0, 10) | ||||
| 	return issues, c.getParsedResponse("GET", fmt.Sprintf("/issues?page=%d", opt.Page), nil, nil, &issues) | ||||
| } | ||||
| 
 | ||||
| // ListUserIssues returns all issues assigned to the authenticated user
 | ||||
| func (c *Client) ListUserIssues(opt ListIssueOption) ([]*Issue, error) { | ||||
| 	issues := make([]*Issue, 0, 10) | ||||
| 	return issues, c.getParsedResponse("GET", fmt.Sprintf("/user/issues?page=%d", opt.Page), nil, nil, &issues) | ||||
| } | ||||
| 
 | ||||
| // ListRepoIssues returns all issues for a given repository
 | ||||
| func (c *Client) ListRepoIssues(owner, repo string, opt ListIssueOption) ([]*Issue, error) { | ||||
| 	issues := make([]*Issue, 0, 10) | ||||
| 	return issues, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues?page=%d", owner, repo, opt.Page), nil, nil, &issues) | ||||
| } | ||||
| 
 | ||||
| // GetIssue returns a single issue for a given repository
 | ||||
| func (c *Client) GetIssue(owner, repo string, index int64) (*Issue, error) { | ||||
| 	issue := new(Issue) | ||||
| 	return issue, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), nil, nil, issue) | ||||
| } | ||||
| 
 | ||||
| // CreateIssueOption options to create one issue
 | ||||
| type CreateIssueOption struct { | ||||
| 	// required:true
 | ||||
| 	Title string `json:"title" binding:"Required"` | ||||
| 	Body  string `json:"body"` | ||||
| 	// username of assignee
 | ||||
| 	Assignee string `json:"assignee"` | ||||
| 	// milestone id
 | ||||
| 	Milestone int64 `json:"milestone"` | ||||
| 	// list of label ids
 | ||||
| 	Labels []int64 `json:"labels"` | ||||
| 	Closed bool    `json:"closed"` | ||||
| } | ||||
| 
 | ||||
| // CreateIssue create a new issue for a given repository
 | ||||
| func (c *Client) CreateIssue(owner, repo string, opt CreateIssueOption) (*Issue, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	issue := new(Issue) | ||||
| 	return issue, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues", owner, repo), | ||||
| 		jsonHeader, bytes.NewReader(body), issue) | ||||
| } | ||||
| 
 | ||||
| // EditIssueOption options for editing an issue
 | ||||
| type EditIssueOption struct { | ||||
| 	Title     string  `json:"title"` | ||||
| 	Body      *string `json:"body"` | ||||
| 	Assignee  *string `json:"assignee"` | ||||
| 	Milestone *int64  `json:"milestone"` | ||||
| 	State     *string `json:"state"` | ||||
| } | ||||
| 
 | ||||
| // EditIssue modify an existing issue for a given repository
 | ||||
| func (c *Client) EditIssue(owner, repo string, index int64, opt EditIssueOption) (*Issue, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	issue := new(Issue) | ||||
| 	return issue, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), | ||||
| 		jsonHeader, bytes.NewReader(body), issue) | ||||
| } | ||||
							
								
								
									
										76
									
								
								vendor/code.gitea.io/sdk/gitea/issue_comment.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								vendor/code.gitea.io/sdk/gitea/issue_comment.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,76 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Comment represents a comment on a commit or issue
 | ||||
| type Comment struct { | ||||
| 	ID       int64  `json:"id"` | ||||
| 	HTMLURL  string `json:"html_url"` | ||||
| 	PRURL    string `json:"pull_request_url"` | ||||
| 	IssueURL string `json:"issue_url"` | ||||
| 	Poster   *User  `json:"user"` | ||||
| 	Body     string `json:"body"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated time.Time `json:"updated_at"` | ||||
| } | ||||
| 
 | ||||
| // ListIssueComments list comments on an issue.
 | ||||
| func (c *Client) ListIssueComments(owner, repo string, index int64) ([]*Comment, error) { | ||||
| 	comments := make([]*Comment, 0, 10) | ||||
| 	return comments, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d/comments", owner, repo, index), nil, nil, &comments) | ||||
| } | ||||
| 
 | ||||
| // ListRepoIssueComments list comments for a given repo.
 | ||||
| func (c *Client) ListRepoIssueComments(owner, repo string) ([]*Comment, error) { | ||||
| 	comments := make([]*Comment, 0, 10) | ||||
| 	return comments, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/comments", owner, repo), nil, nil, &comments) | ||||
| } | ||||
| 
 | ||||
| // CreateIssueCommentOption options for creating a comment on an issue
 | ||||
| type CreateIssueCommentOption struct { | ||||
| 	// required:true
 | ||||
| 	Body string `json:"body" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // CreateIssueComment create comment on an issue.
 | ||||
| func (c *Client) CreateIssueComment(owner, repo string, index int64, opt CreateIssueCommentOption) (*Comment, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	comment := new(Comment) | ||||
| 	return comment, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/comments", owner, repo, index), jsonHeader, bytes.NewReader(body), comment) | ||||
| } | ||||
| 
 | ||||
| // EditIssueCommentOption options for editing a comment
 | ||||
| type EditIssueCommentOption struct { | ||||
| 	// required: true
 | ||||
| 	Body string `json:"body" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // EditIssueComment edits an issue comment.
 | ||||
| func (c *Client) EditIssueComment(owner, repo string, index, commentID int64, opt EditIssueCommentOption) (*Comment, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	comment := new(Comment) | ||||
| 	return comment, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/:%s/:%s/issues/%d/comments/%d", owner, repo, index, commentID), jsonHeader, bytes.NewReader(body), comment) | ||||
| } | ||||
| 
 | ||||
| // DeleteIssueComment deletes an issue comment.
 | ||||
| func (c *Client) DeleteIssueComment(owner, repo string, index, commentID int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/comments/%d", owner, repo, index, commentID), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										122
									
								
								vendor/code.gitea.io/sdk/gitea/issue_label.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/code.gitea.io/sdk/gitea/issue_label.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,122 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // Label a label to an issue or a pr
 | ||||
| // swagger:model
 | ||||
| type Label struct { | ||||
| 	ID   int64  `json:"id"` | ||||
| 	Name string `json:"name"` | ||||
| 	// example: 00aabb
 | ||||
| 	Color string `json:"color"` | ||||
| 	URL   string `json:"url"` | ||||
| } | ||||
| 
 | ||||
| // ListRepoLabels list labels of one repository
 | ||||
| func (c *Client) ListRepoLabels(owner, repo string) ([]*Label, error) { | ||||
| 	labels := make([]*Label, 0, 10) | ||||
| 	return labels, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels", owner, repo), nil, nil, &labels) | ||||
| } | ||||
| 
 | ||||
| // GetRepoLabel get one label of repository by repo it
 | ||||
| // TODO: maybe we need get a label by name
 | ||||
| func (c *Client) GetRepoLabel(owner, repo string, id int64) (*Label, error) { | ||||
| 	label := new(Label) | ||||
| 	return label, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil, label) | ||||
| } | ||||
| 
 | ||||
| // CreateLabelOption options for creating a label
 | ||||
| type CreateLabelOption struct { | ||||
| 	// required:true
 | ||||
| 	Name string `json:"name" binding:"Required"` | ||||
| 	// required:true
 | ||||
| 	// example: #00aabb
 | ||||
| 	Color string `json:"color" binding:"Required;Size(7)"` | ||||
| } | ||||
| 
 | ||||
| // CreateLabel create one label of repository
 | ||||
| func (c *Client) CreateLabel(owner, repo string, opt CreateLabelOption) (*Label, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	label := new(Label) | ||||
| 	return label, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/labels", owner, repo), | ||||
| 		jsonHeader, bytes.NewReader(body), label) | ||||
| } | ||||
| 
 | ||||
| // EditLabelOption options for editing a label
 | ||||
| type EditLabelOption struct { | ||||
| 	Name  *string `json:"name"` | ||||
| 	Color *string `json:"color"` | ||||
| } | ||||
| 
 | ||||
| // EditLabel modify one label with options
 | ||||
| func (c *Client) EditLabel(owner, repo string, id int64, opt EditLabelOption) (*Label, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	label := new(Label) | ||||
| 	return label, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), label) | ||||
| } | ||||
| 
 | ||||
| // DeleteLabel delete one label of repository by id
 | ||||
| // TODO: maybe we need delete by name
 | ||||
| func (c *Client) DeleteLabel(owner, repo string, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // IssueLabelsOption a collection of labels
 | ||||
| type IssueLabelsOption struct { | ||||
| 	// list of label IDs
 | ||||
| 	Labels []int64 `json:"labels"` | ||||
| } | ||||
| 
 | ||||
| // GetIssueLabels get labels of one issue via issue id
 | ||||
| func (c *Client) GetIssueLabels(owner, repo string, index int64) ([]*Label, error) { | ||||
| 	labels := make([]*Label, 0, 5) | ||||
| 	return labels, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil, &labels) | ||||
| } | ||||
| 
 | ||||
| // AddIssueLabels add one or more labels to one issue
 | ||||
| func (c *Client) AddIssueLabels(owner, repo string, index int64, opt IssueLabelsOption) ([]*Label, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	var labels []*Label | ||||
| 	return labels, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), jsonHeader, bytes.NewReader(body), &labels) | ||||
| } | ||||
| 
 | ||||
| // ReplaceIssueLabels replace old labels of issue with new labels
 | ||||
| func (c *Client) ReplaceIssueLabels(owner, repo string, index int64, opt IssueLabelsOption) ([]*Label, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	var labels []*Label | ||||
| 	return labels, c.getParsedResponse("PUT", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), jsonHeader, bytes.NewReader(body), &labels) | ||||
| } | ||||
| 
 | ||||
| // DeleteIssueLabel delete one label of one issue by issue id and label id
 | ||||
| // TODO: maybe we need delete by label name and issue id
 | ||||
| func (c *Client) DeleteIssueLabel(owner, repo string, index, label int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels/%d", owner, repo, index, label), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // ClearIssueLabels delete all the labels of one issue.
 | ||||
| func (c *Client) ClearIssueLabels(owner, repo string, index int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/issue_milestone.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/issue_milestone.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,80 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Milestone milestone is a collection of issues on one repository
 | ||||
| type Milestone struct { | ||||
| 	ID           int64     `json:"id"` | ||||
| 	Title        string    `json:"title"` | ||||
| 	Description  string    `json:"description"` | ||||
| 	State        StateType `json:"state"` | ||||
| 	OpenIssues   int       `json:"open_issues"` | ||||
| 	ClosedIssues int       `json:"closed_issues"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Closed *time.Time `json:"closed_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Deadline *time.Time `json:"due_on"` | ||||
| } | ||||
| 
 | ||||
| // ListRepoMilestones list all the milestones of one repository
 | ||||
| func (c *Client) ListRepoMilestones(owner, repo string) ([]*Milestone, error) { | ||||
| 	milestones := make([]*Milestone, 0, 10) | ||||
| 	return milestones, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), nil, nil, &milestones) | ||||
| } | ||||
| 
 | ||||
| // GetMilestone get one milestone by repo name and milestone id
 | ||||
| func (c *Client) GetMilestone(owner, repo string, id int64) (*Milestone, error) { | ||||
| 	milestone := new(Milestone) | ||||
| 	return milestone, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil, milestone) | ||||
| } | ||||
| 
 | ||||
| // CreateMilestoneOption options for creating a milestone
 | ||||
| type CreateMilestoneOption struct { | ||||
| 	Title       string `json:"title"` | ||||
| 	Description string `json:"description"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Deadline *time.Time `json:"due_on"` | ||||
| } | ||||
| 
 | ||||
| // CreateMilestone create one milestone with options
 | ||||
| func (c *Client) CreateMilestone(owner, repo string, opt CreateMilestoneOption) (*Milestone, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	milestone := new(Milestone) | ||||
| 	return milestone, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), jsonHeader, bytes.NewReader(body), milestone) | ||||
| } | ||||
| 
 | ||||
| // EditMilestoneOption options for editing a milestone
 | ||||
| type EditMilestoneOption struct { | ||||
| 	Title       string     `json:"title"` | ||||
| 	Description *string    `json:"description"` | ||||
| 	State       *string    `json:"state"` | ||||
| 	Deadline    *time.Time `json:"due_on"` | ||||
| } | ||||
| 
 | ||||
| // EditMilestone modify milestone with options
 | ||||
| func (c *Client) EditMilestone(owner, repo string, id int64, opt EditMilestoneOption) (*Milestone, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	milestone := new(Milestone) | ||||
| 	return milestone, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), milestone) | ||||
| } | ||||
| 
 | ||||
| // DeleteMilestone delete one milestone by milestone id
 | ||||
| func (c *Client) DeleteMilestone(owner, repo string, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										68
									
								
								vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,68 +0,0 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // TrackedTime worked time for an issue / pr
 | ||||
| type TrackedTime struct { | ||||
| 	ID int64 `json:"id"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created"` | ||||
| 	// Time in seconds
 | ||||
| 	Time    int64 `json:"time"` | ||||
| 	UserID  int64 `json:"user_id"` | ||||
| 	IssueID int64 `json:"issue_id"` | ||||
| } | ||||
| 
 | ||||
| // TrackedTimes represent a list of tracked times
 | ||||
| type TrackedTimes []*TrackedTime | ||||
| 
 | ||||
| // GetUserTrackedTimes list tracked times of a user
 | ||||
| func (c *Client) GetUserTrackedTimes(owner, repo, user string) (TrackedTimes, error) { | ||||
| 	times := make(TrackedTimes, 0, 10) | ||||
| 	return times, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/times/%s", owner, repo, user), nil, nil, ×) | ||||
| } | ||||
| 
 | ||||
| // GetRepoTrackedTimes list tracked times of a repository
 | ||||
| func (c *Client) GetRepoTrackedTimes(owner, repo string) (TrackedTimes, error) { | ||||
| 	times := make(TrackedTimes, 0, 10) | ||||
| 	return times, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/times", owner, repo), nil, nil, ×) | ||||
| } | ||||
| 
 | ||||
| // GetMyTrackedTimes list tracked times of the current user
 | ||||
| func (c *Client) GetMyTrackedTimes() (TrackedTimes, error) { | ||||
| 	times := make(TrackedTimes, 0, 10) | ||||
| 	return times, c.getParsedResponse("GET", "/user/times", nil, nil, ×) | ||||
| } | ||||
| 
 | ||||
| // AddTimeOption options for adding time to an issue
 | ||||
| type AddTimeOption struct { | ||||
| 	// time in seconds
 | ||||
| 	// required: true
 | ||||
| 	Time int64 `json:"time" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // AddTime adds time to issue with the given index
 | ||||
| func (c *Client) AddTime(owner, repo string, index int64, opt AddTimeOption) (*TrackedTime, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	t := new(TrackedTime) | ||||
| 	return t, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/times", owner, repo, index), | ||||
| 		jsonHeader, bytes.NewReader(body), t) | ||||
| } | ||||
| 
 | ||||
| // ListTrackedTimes get tracked times of one issue via issue id
 | ||||
| func (c *Client) ListTrackedTimes(owner, repo string, index int64) (TrackedTimes, error) { | ||||
| 	times := make(TrackedTimes, 0, 5) | ||||
| 	return times, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d/times", owner, repo, index), nil, nil, ×) | ||||
| } | ||||
							
								
								
									
										65
									
								
								vendor/code.gitea.io/sdk/gitea/lfs_lock.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								vendor/code.gitea.io/sdk/gitea/lfs_lock.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,65 +0,0 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // LFSLock represent a lock
 | ||||
| // for use with the locks API.
 | ||||
| type LFSLock struct { | ||||
| 	ID       string        `json:"id"` | ||||
| 	Path     string        `json:"path"` | ||||
| 	LockedAt time.Time     `json:"locked_at"` | ||||
| 	Owner    *LFSLockOwner `json:"owner"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockOwner represent a lock owner
 | ||||
| // for use with the locks API.
 | ||||
| type LFSLockOwner struct { | ||||
| 	Name string `json:"name"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockRequest contains the path of the lock to create
 | ||||
| // https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#create-lock
 | ||||
| type LFSLockRequest struct { | ||||
| 	Path string `json:"path"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockResponse represent a lock created
 | ||||
| // https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#create-lock
 | ||||
| type LFSLockResponse struct { | ||||
| 	Lock *LFSLock `json:"lock"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockList represent a list of lock requested
 | ||||
| // https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#list-locks
 | ||||
| type LFSLockList struct { | ||||
| 	Locks []*LFSLock `json:"locks"` | ||||
| 	Next  string     `json:"next_cursor,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockListVerify represent a list of lock verification requested
 | ||||
| // https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#list-locks-for-verification
 | ||||
| type LFSLockListVerify struct { | ||||
| 	Ours   []*LFSLock `json:"ours"` | ||||
| 	Theirs []*LFSLock `json:"theirs"` | ||||
| 	Next   string     `json:"next_cursor,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockError contains information on the error that occurs
 | ||||
| type LFSLockError struct { | ||||
| 	Message       string   `json:"message"` | ||||
| 	Lock          *LFSLock `json:"lock,omitempty"` | ||||
| 	Documentation string   `json:"documentation_url,omitempty"` | ||||
| 	RequestID     string   `json:"request_id,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // LFSLockDeleteRequest contains params of a delete request
 | ||||
| // https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#delete-lock
 | ||||
| type LFSLockDeleteRequest struct { | ||||
| 	Force bool `json:"force"` | ||||
| } | ||||
							
								
								
									
										52
									
								
								vendor/code.gitea.io/sdk/gitea/miscellaneous.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								vendor/code.gitea.io/sdk/gitea/miscellaneous.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,52 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| // SearchResults results of a successful search
 | ||||
| type SearchResults struct { | ||||
| 	OK   bool          `json:"ok"` | ||||
| 	Data []*Repository `json:"data"` | ||||
| } | ||||
| 
 | ||||
| // SearchError error of a failed search
 | ||||
| type SearchError struct { | ||||
| 	OK    bool   `json:"ok"` | ||||
| 	Error string `json:"error"` | ||||
| } | ||||
| 
 | ||||
| // MarkdownOption markdown options
 | ||||
| type MarkdownOption struct { | ||||
| 	// Text markdown to render
 | ||||
| 	//
 | ||||
| 	// in: body
 | ||||
| 	Text string | ||||
| 	// Mode to render
 | ||||
| 	//
 | ||||
| 	// in: body
 | ||||
| 	Mode string | ||||
| 	// Context to render
 | ||||
| 	//
 | ||||
| 	// in: body
 | ||||
| 	Context string | ||||
| 	// Is it a wiki page ?
 | ||||
| 	//
 | ||||
| 	// in: body
 | ||||
| 	Wiki bool | ||||
| } | ||||
| 
 | ||||
| // MarkdownRender is a rendered markdown document
 | ||||
| // swagger:response MarkdownRender
 | ||||
| type MarkdownRender string | ||||
| 
 | ||||
| // ServerVersion wraps the version of the server
 | ||||
| type ServerVersion struct { | ||||
| 	Version string `json:"version"` | ||||
| } | ||||
| 
 | ||||
| // ServerVersion returns the version of the server
 | ||||
| func (c *Client) ServerVersion() (string, error) { | ||||
| 	v := ServerVersion{} | ||||
| 	return v.Version, c.getParsedResponse("GET", "/api/v1/version", nil, nil, &v) | ||||
| } | ||||
							
								
								
									
										68
									
								
								vendor/code.gitea.io/sdk/gitea/org.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								vendor/code.gitea.io/sdk/gitea/org.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,68 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // Organization represents an organization
 | ||||
| type Organization struct { | ||||
| 	ID          int64  `json:"id"` | ||||
| 	UserName    string `json:"username"` | ||||
| 	FullName    string `json:"full_name"` | ||||
| 	AvatarURL   string `json:"avatar_url"` | ||||
| 	Description string `json:"description"` | ||||
| 	Website     string `json:"website"` | ||||
| 	Location    string `json:"location"` | ||||
| } | ||||
| 
 | ||||
| // ListMyOrgs list all of current user's organizations
 | ||||
| func (c *Client) ListMyOrgs() ([]*Organization, error) { | ||||
| 	orgs := make([]*Organization, 0, 5) | ||||
| 	return orgs, c.getParsedResponse("GET", "/user/orgs", nil, nil, &orgs) | ||||
| } | ||||
| 
 | ||||
| // ListUserOrgs list all of some user's organizations
 | ||||
| func (c *Client) ListUserOrgs(user string) ([]*Organization, error) { | ||||
| 	orgs := make([]*Organization, 0, 5) | ||||
| 	return orgs, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/orgs", user), nil, nil, &orgs) | ||||
| } | ||||
| 
 | ||||
| // GetOrg get one organization by name
 | ||||
| func (c *Client) GetOrg(orgname string) (*Organization, error) { | ||||
| 	org := new(Organization) | ||||
| 	return org, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s", orgname), nil, nil, org) | ||||
| } | ||||
| 
 | ||||
| // CreateOrgOption options for creating an organization
 | ||||
| type CreateOrgOption struct { | ||||
| 	// required: true
 | ||||
| 	UserName    string `json:"username" binding:"Required"` | ||||
| 	FullName    string `json:"full_name"` | ||||
| 	Description string `json:"description"` | ||||
| 	Website     string `json:"website"` | ||||
| 	Location    string `json:"location"` | ||||
| } | ||||
| 
 | ||||
| // EditOrgOption options for editing an organization
 | ||||
| type EditOrgOption struct { | ||||
| 	FullName    string `json:"full_name"` | ||||
| 	Description string `json:"description"` | ||||
| 	Website     string `json:"website"` | ||||
| 	Location    string `json:"location"` | ||||
| } | ||||
| 
 | ||||
| // EditOrg modify one organization via options
 | ||||
| func (c *Client) EditOrg(orgname string, opt EditOrgOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PATCH", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/org_member.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/org_member.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,26 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // AddOrgMembershipOption add user to organization options
 | ||||
| type AddOrgMembershipOption struct { | ||||
| 	Role string `json:"role" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // AddOrgMembership add some one to an organization's member
 | ||||
| func (c *Client) AddOrgMembership(org, user string, opt AddOrgMembershipOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PUT", fmt.Sprintf("/orgs/%s/membership/%s", org, user), jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										32
									
								
								vendor/code.gitea.io/sdk/gitea/org_team.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/code.gitea.io/sdk/gitea/org_team.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,32 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| // Team represents a team in an organization
 | ||||
| type Team struct { | ||||
| 	ID          int64  `json:"id"` | ||||
| 	Name        string `json:"name"` | ||||
| 	Description string `json:"description"` | ||||
| 	// enum: none,read,write,admin,owner
 | ||||
| 	Permission string `json:"permission"` | ||||
| } | ||||
| 
 | ||||
| // CreateTeamOption options for creating a team
 | ||||
| type CreateTeamOption struct { | ||||
| 	// required: true
 | ||||
| 	Name        string `json:"name" binding:"Required;AlphaDashDot;MaxSize(30)"` | ||||
| 	Description string `json:"description" binding:"MaxSize(255)"` | ||||
| 	// enum: read,write,admin
 | ||||
| 	Permission string `json:"permission"` | ||||
| } | ||||
| 
 | ||||
| // EditTeamOption options for editing a team
 | ||||
| type EditTeamOption struct { | ||||
| 	// required: true
 | ||||
| 	Name        string `json:"name" binding:"Required;AlphaDashDot;MaxSize(30)"` | ||||
| 	Description string `json:"description" binding:"MaxSize(255)"` | ||||
| 	// enum: read,write,admin
 | ||||
| 	Permission string `json:"permission"` | ||||
| } | ||||
							
								
								
									
										139
									
								
								vendor/code.gitea.io/sdk/gitea/pull.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										139
									
								
								vendor/code.gitea.io/sdk/gitea/pull.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,139 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // PullRequest represents a pull request
 | ||||
| type PullRequest struct { | ||||
| 	ID        int64      `json:"id"` | ||||
| 	URL       string     `json:"url"` | ||||
| 	Index     int64      `json:"number"` | ||||
| 	Poster    *User      `json:"user"` | ||||
| 	Title     string     `json:"title"` | ||||
| 	Body      string     `json:"body"` | ||||
| 	Labels    []*Label   `json:"labels"` | ||||
| 	Milestone *Milestone `json:"milestone"` | ||||
| 	Assignee  *User      `json:"assignee"` | ||||
| 	State     StateType  `json:"state"` | ||||
| 	Comments  int        `json:"comments"` | ||||
| 
 | ||||
| 	HTMLURL  string `json:"html_url"` | ||||
| 	DiffURL  string `json:"diff_url"` | ||||
| 	PatchURL string `json:"patch_url"` | ||||
| 
 | ||||
| 	Mergeable bool `json:"mergeable"` | ||||
| 	HasMerged bool `json:"merged"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Merged         *time.Time `json:"merged_at"` | ||||
| 	MergedCommitID *string    `json:"merge_commit_sha"` | ||||
| 	MergedBy       *User      `json:"merged_by"` | ||||
| 
 | ||||
| 	Base      *PRBranchInfo `json:"base"` | ||||
| 	Head      *PRBranchInfo `json:"head"` | ||||
| 	MergeBase string        `json:"merge_base"` | ||||
| 
 | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created *time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated *time.Time `json:"updated_at"` | ||||
| } | ||||
| 
 | ||||
| // PRBranchInfo information about a branch
 | ||||
| type PRBranchInfo struct { | ||||
| 	Name       string      `json:"label"` | ||||
| 	Ref        string      `json:"ref"` | ||||
| 	Sha        string      `json:"sha"` | ||||
| 	RepoID     int64       `json:"repo_id"` | ||||
| 	Repository *Repository `json:"repo"` | ||||
| } | ||||
| 
 | ||||
| // ListPullRequestsOptions options for listing pull requests
 | ||||
| type ListPullRequestsOptions struct { | ||||
| 	Page  int    `json:"page"` | ||||
| 	State string `json:"state"` | ||||
| } | ||||
| 
 | ||||
| // ListRepoPullRequests list PRs of one repository
 | ||||
| func (c *Client) ListRepoPullRequests(owner, repo string, opt ListPullRequestsOptions) ([]*PullRequest, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	prs := make([]*PullRequest, 0, 10) | ||||
| 	return prs, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/pulls", owner, repo), jsonHeader, bytes.NewReader(body), &prs) | ||||
| } | ||||
| 
 | ||||
| // GetPullRequest get information of one PR
 | ||||
| func (c *Client) GetPullRequest(owner, repo string, index int64) (*PullRequest, error) { | ||||
| 	pr := new(PullRequest) | ||||
| 	return pr, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/pulls/%d", owner, repo, index), nil, nil, pr) | ||||
| } | ||||
| 
 | ||||
| // CreatePullRequestOption options when creating a pull request
 | ||||
| type CreatePullRequestOption struct { | ||||
| 	Head      string  `json:"head" binding:"Required"` | ||||
| 	Base      string  `json:"base" binding:"Required"` | ||||
| 	Title     string  `json:"title" binding:"Required"` | ||||
| 	Body      string  `json:"body"` | ||||
| 	Assignee  string  `json:"assignee"` | ||||
| 	Milestone int64   `json:"milestone"` | ||||
| 	Labels    []int64 `json:"labels"` | ||||
| } | ||||
| 
 | ||||
| // CreatePullRequest create pull request with options
 | ||||
| func (c *Client) CreatePullRequest(owner, repo string, opt CreatePullRequestOption) (*PullRequest, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	pr := new(PullRequest) | ||||
| 	return pr, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/pulls", owner, repo), | ||||
| 		jsonHeader, bytes.NewReader(body), pr) | ||||
| } | ||||
| 
 | ||||
| // EditPullRequestOption options when modify pull request
 | ||||
| type EditPullRequestOption struct { | ||||
| 	Title     string  `json:"title"` | ||||
| 	Body      string  `json:"body"` | ||||
| 	Assignee  string  `json:"assignee"` | ||||
| 	Milestone int64   `json:"milestone"` | ||||
| 	Labels    []int64 `json:"labels"` | ||||
| 	State     *string `json:"state"` | ||||
| } | ||||
| 
 | ||||
| // EditPullRequest modify pull request with PR id and options
 | ||||
| func (c *Client) EditPullRequest(owner, repo string, index int64, opt EditPullRequestOption) (*PullRequest, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	pr := new(PullRequest) | ||||
| 	return pr, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), | ||||
| 		jsonHeader, bytes.NewReader(body), pr) | ||||
| } | ||||
| 
 | ||||
| // MergePullRequest merge a PR to repository by PR id
 | ||||
| func (c *Client) MergePullRequest(owner, repo string, index int64) error { | ||||
| 	_, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/pulls/%d/merge", owner, repo, index), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // IsPullRequestMerged test if one PR is merged to one repository
 | ||||
| func (c *Client) IsPullRequestMerged(owner, repo string, index int64) (bool, error) { | ||||
| 	statusCode, err := c.getStatusCode("GET", fmt.Sprintf("/repos/%s/%s/pulls/%d/merge", owner, repo, index), nil, nil) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return statusCode == 204, nil | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										105
									
								
								vendor/code.gitea.io/sdk/gitea/release.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										105
									
								
								vendor/code.gitea.io/sdk/gitea/release.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,105 +0,0 @@ | ||||
| // Copyright 2016 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Release represents a repository release
 | ||||
| type Release struct { | ||||
| 	ID           int64  `json:"id"` | ||||
| 	TagName      string `json:"tag_name"` | ||||
| 	Target       string `json:"target_commitish"` | ||||
| 	Title        string `json:"name"` | ||||
| 	Note         string `json:"body"` | ||||
| 	URL          string `json:"url"` | ||||
| 	TarURL       string `json:"tarball_url"` | ||||
| 	ZipURL       string `json:"zipball_url"` | ||||
| 	IsDraft      bool   `json:"draft"` | ||||
| 	IsPrerelease bool   `json:"prerelease"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	CreatedAt time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	PublishedAt time.Time     `json:"published_at"` | ||||
| 	Publisher   *User         `json:"author"` | ||||
| 	Attachments []*Attachment `json:"assets"` | ||||
| } | ||||
| 
 | ||||
| // ListReleases list releases of a repository
 | ||||
| func (c *Client) ListReleases(user, repo string) ([]*Release, error) { | ||||
| 	releases := make([]*Release, 0, 10) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases", user, repo), | ||||
| 		nil, nil, &releases) | ||||
| 	return releases, err | ||||
| } | ||||
| 
 | ||||
| // GetRelease get a release of a repository
 | ||||
| func (c *Client) GetRelease(user, repo string, id int64) (*Release, error) { | ||||
| 	r := new(Release) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), | ||||
| 		nil, nil, &r) | ||||
| 	return r, err | ||||
| } | ||||
| 
 | ||||
| // CreateReleaseOption options when creating a release
 | ||||
| type CreateReleaseOption struct { | ||||
| 	// required: true
 | ||||
| 	TagName      string `json:"tag_name" binding:"Required"` | ||||
| 	Target       string `json:"target_commitish"` | ||||
| 	Title        string `json:"name"` | ||||
| 	Note         string `json:"body"` | ||||
| 	IsDraft      bool   `json:"draft"` | ||||
| 	IsPrerelease bool   `json:"prerelease"` | ||||
| } | ||||
| 
 | ||||
| // CreateRelease create a release
 | ||||
| func (c *Client) CreateRelease(user, repo string, form CreateReleaseOption) (*Release, error) { | ||||
| 	body, err := json.Marshal(form) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	r := new(Release) | ||||
| 	err = c.getParsedResponse("POST", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases", user, repo), | ||||
| 		jsonHeader, bytes.NewReader(body), r) | ||||
| 	return r, err | ||||
| } | ||||
| 
 | ||||
| // EditReleaseOption options when editing a release
 | ||||
| type EditReleaseOption struct { | ||||
| 	TagName      string `json:"tag_name"` | ||||
| 	Target       string `json:"target_commitish"` | ||||
| 	Title        string `json:"name"` | ||||
| 	Note         string `json:"body"` | ||||
| 	IsDraft      *bool  `json:"draft"` | ||||
| 	IsPrerelease *bool  `json:"prerelease"` | ||||
| } | ||||
| 
 | ||||
| // EditRelease edit a release
 | ||||
| func (c *Client) EditRelease(user, repo string, id int64, form EditReleaseOption) (*Release, error) { | ||||
| 	body, err := json.Marshal(form) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	r := new(Release) | ||||
| 	err = c.getParsedResponse("PATCH", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), | ||||
| 		jsonHeader, bytes.NewReader(body), r) | ||||
| 	return r, err | ||||
| } | ||||
| 
 | ||||
| // DeleteRelease delete a release from a repository
 | ||||
| func (c *Client) DeleteRelease(user, repo string, id int64) error { | ||||
| 	_, err := c.getResponse("DELETE", | ||||
| 		fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), | ||||
| 		nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										155
									
								
								vendor/code.gitea.io/sdk/gitea/repo.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										155
									
								
								vendor/code.gitea.io/sdk/gitea/repo.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,155 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Permission represents a set of permissions
 | ||||
| type Permission struct { | ||||
| 	Admin bool `json:"admin"` | ||||
| 	Push  bool `json:"push"` | ||||
| 	Pull  bool `json:"pull"` | ||||
| } | ||||
| 
 | ||||
| // Repository represents a repository
 | ||||
| type Repository struct { | ||||
| 	ID            int64       `json:"id"` | ||||
| 	Owner         *User       `json:"owner"` | ||||
| 	Name          string      `json:"name"` | ||||
| 	FullName      string      `json:"full_name"` | ||||
| 	Description   string      `json:"description"` | ||||
| 	Empty         bool        `json:"empty"` | ||||
| 	Private       bool        `json:"private"` | ||||
| 	Fork          bool        `json:"fork"` | ||||
| 	Parent        *Repository `json:"parent"` | ||||
| 	Mirror        bool        `json:"mirror"` | ||||
| 	Size          int         `json:"size"` | ||||
| 	HTMLURL       string      `json:"html_url"` | ||||
| 	SSHURL        string      `json:"ssh_url"` | ||||
| 	CloneURL      string      `json:"clone_url"` | ||||
| 	Website       string      `json:"website"` | ||||
| 	Stars         int         `json:"stars_count"` | ||||
| 	Forks         int         `json:"forks_count"` | ||||
| 	Watchers      int         `json:"watchers_count"` | ||||
| 	OpenIssues    int         `json:"open_issues_count"` | ||||
| 	DefaultBranch string      `json:"default_branch"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated     time.Time   `json:"updated_at"` | ||||
| 	Permissions *Permission `json:"permissions,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // ListMyRepos lists all repositories for the authenticated user that has access to.
 | ||||
| func (c *Client) ListMyRepos() ([]*Repository, error) { | ||||
| 	repos := make([]*Repository, 0, 10) | ||||
| 	return repos, c.getParsedResponse("GET", "/user/repos", nil, nil, &repos) | ||||
| } | ||||
| 
 | ||||
| // ListUserRepos list all repositories of one user by user's name
 | ||||
| func (c *Client) ListUserRepos(user string) ([]*Repository, error) { | ||||
| 	repos := make([]*Repository, 0, 10) | ||||
| 	return repos, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/repos", user), nil, nil, &repos) | ||||
| } | ||||
| 
 | ||||
| // ListOrgRepos list all repositories of one organization by organization's name
 | ||||
| func (c *Client) ListOrgRepos(org string) ([]*Repository, error) { | ||||
| 	repos := make([]*Repository, 0, 10) | ||||
| 	return repos, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/repos", org), nil, nil, &repos) | ||||
| } | ||||
| 
 | ||||
| // CreateRepoOption options when creating repository
 | ||||
| // swagger:model
 | ||||
| type CreateRepoOption struct { | ||||
| 	// Name of the repository to create
 | ||||
| 	//
 | ||||
| 	// required: true
 | ||||
| 	// unique: true
 | ||||
| 	Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"` | ||||
| 	// Description of the repository to create
 | ||||
| 	Description string `json:"description" binding:"MaxSize(255)"` | ||||
| 	// Whether the repository is private
 | ||||
| 	Private bool `json:"private"` | ||||
| 	// Whether the repository should be auto-intialized?
 | ||||
| 	AutoInit bool `json:"auto_init"` | ||||
| 	// Gitignores to use
 | ||||
| 	Gitignores string `json:"gitignores"` | ||||
| 	// License to use
 | ||||
| 	License string `json:"license"` | ||||
| 	// Readme of the repository to create
 | ||||
| 	Readme string `json:"readme"` | ||||
| } | ||||
| 
 | ||||
| // CreateRepo creates a repository for authenticated user.
 | ||||
| func (c *Client) CreateRepo(opt CreateRepoOption) (*Repository, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	repo := new(Repository) | ||||
| 	return repo, c.getParsedResponse("POST", "/user/repos", jsonHeader, bytes.NewReader(body), repo) | ||||
| } | ||||
| 
 | ||||
| // CreateOrgRepo creates an organization repository for authenticated user.
 | ||||
| func (c *Client) CreateOrgRepo(org string, opt CreateRepoOption) (*Repository, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	repo := new(Repository) | ||||
| 	return repo, c.getParsedResponse("POST", fmt.Sprintf("/org/%s/repos", org), jsonHeader, bytes.NewReader(body), repo) | ||||
| } | ||||
| 
 | ||||
| // GetRepo returns information of a repository of given owner.
 | ||||
| func (c *Client) GetRepo(owner, reponame string) (*Repository, error) { | ||||
| 	repo := new(Repository) | ||||
| 	return repo, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s", owner, reponame), nil, nil, repo) | ||||
| } | ||||
| 
 | ||||
| // DeleteRepo deletes a repository of user or organization.
 | ||||
| func (c *Client) DeleteRepo(owner, repo string) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s", owner, repo), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // MigrateRepoOption options for migrating a repository from an external service
 | ||||
| type MigrateRepoOption struct { | ||||
| 	// required: true
 | ||||
| 	CloneAddr    string `json:"clone_addr" binding:"Required"` | ||||
| 	AuthUsername string `json:"auth_username"` | ||||
| 	AuthPassword string `json:"auth_password"` | ||||
| 	// required: true
 | ||||
| 	UID int `json:"uid" binding:"Required"` | ||||
| 	// required: true
 | ||||
| 	RepoName    string `json:"repo_name" binding:"Required"` | ||||
| 	Mirror      bool   `json:"mirror"` | ||||
| 	Private     bool   `json:"private"` | ||||
| 	Description string `json:"description"` | ||||
| } | ||||
| 
 | ||||
| // MigrateRepo migrates a repository from other Git hosting sources for the
 | ||||
| // authenticated user.
 | ||||
| //
 | ||||
| // To migrate a repository for a organization, the authenticated user must be a
 | ||||
| // owner of the specified organization.
 | ||||
| func (c *Client) MigrateRepo(opt MigrateRepoOption) (*Repository, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	repo := new(Repository) | ||||
| 	return repo, c.getParsedResponse("POST", "/repos/migrate", jsonHeader, bytes.NewReader(body), repo) | ||||
| } | ||||
| 
 | ||||
| // MirrorSync adds a mirrored repository to the mirror sync queue.
 | ||||
| func (c *Client) MirrorSync(owner, repo string) error { | ||||
| 	_, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/mirror-sync", owner, repo), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/code.gitea.io/sdk/gitea/repo_branch.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,27 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // Branch represents a repository branch
 | ||||
| type Branch struct { | ||||
| 	Name   string         `json:"name"` | ||||
| 	Commit *PayloadCommit `json:"commit"` | ||||
| } | ||||
| 
 | ||||
| // ListRepoBranches list all the branches of one repository
 | ||||
| func (c *Client) ListRepoBranches(user, repo string) ([]*Branch, error) { | ||||
| 	branches := make([]*Branch, 0, 10) | ||||
| 	return branches, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/branches", user, repo), nil, nil, &branches) | ||||
| } | ||||
| 
 | ||||
| // GetRepoBranch get one branch's information of one repository
 | ||||
| func (c *Client) GetRepoBranch(user, repo, branch string) (*Branch, error) { | ||||
| 	b := new(Branch) | ||||
| 	return b, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/branches/%s", user, repo, branch), nil, nil, &b) | ||||
| } | ||||
							
								
								
									
										57
									
								
								vendor/code.gitea.io/sdk/gitea/repo_collaborator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/code.gitea.io/sdk/gitea/repo_collaborator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,57 +0,0 @@ | ||||
| // Copyright 2016 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // ListCollaborators list a repository's collaborators
 | ||||
| func (c *Client) ListCollaborators(user, repo string) ([]*User, error) { | ||||
| 	collaborators := make([]*User, 0, 10) | ||||
| 	err := c.getParsedResponse("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/collaborators", user, repo), | ||||
| 		nil, nil, &collaborators) | ||||
| 	return collaborators, err | ||||
| } | ||||
| 
 | ||||
| // IsCollaborator check if a user is a collaborator of a repository
 | ||||
| func (c *Client) IsCollaborator(user, repo, collaborator string) (bool, error) { | ||||
| 	status, err := c.getStatusCode("GET", | ||||
| 		fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), | ||||
| 		nil, nil) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 	if status == 204 { | ||||
| 		return true, nil | ||||
| 	} | ||||
| 	return false, nil | ||||
| } | ||||
| 
 | ||||
| // AddCollaboratorOption options when adding a user as a collaborator of a repository
 | ||||
| type AddCollaboratorOption struct { | ||||
| 	Permission *string `json:"permission"` | ||||
| } | ||||
| 
 | ||||
| // AddCollaborator add some user as a collaborator of a repository
 | ||||
| func (c *Client) AddCollaborator(user, repo, collaborator string, opt AddCollaboratorOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), nil, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // DeleteCollaborator remove a collaborator from a repository
 | ||||
| func (c *Client) DeleteCollaborator(user, repo, collaborator string) error { | ||||
| 	_, err := c.getResponse("DELETE", | ||||
| 		fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), | ||||
| 		nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										15
									
								
								vendor/code.gitea.io/sdk/gitea/repo_file.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/code.gitea.io/sdk/gitea/repo_file.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,15 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // GetFile downloads a file of repository, ref can be branch/tag/commit.
 | ||||
| // e.g.: ref -> master, tree -> macaron.go(no leading slash)
 | ||||
| func (c *Client) GetFile(user, repo, ref, tree string) ([]byte, error) { | ||||
| 	return c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/raw/%s/%s", user, repo, ref, tree), nil, nil) | ||||
| } | ||||
							
								
								
									
										69
									
								
								vendor/code.gitea.io/sdk/gitea/repo_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								vendor/code.gitea.io/sdk/gitea/repo_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,69 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // DeployKey a deploy key
 | ||||
| type DeployKey struct { | ||||
| 	ID    int64  `json:"id"` | ||||
| 	Key   string `json:"key"` | ||||
| 	URL   string `json:"url"` | ||||
| 	Title string `json:"title"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created  time.Time `json:"created_at"` | ||||
| 	ReadOnly bool      `json:"read_only"` | ||||
| } | ||||
| 
 | ||||
| // ListDeployKeys list all the deploy keys of one repository
 | ||||
| func (c *Client) ListDeployKeys(user, repo string) ([]*DeployKey, error) { | ||||
| 	keys := make([]*DeployKey, 0, 10) | ||||
| 	return keys, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/keys", user, repo), nil, nil, &keys) | ||||
| } | ||||
| 
 | ||||
| // GetDeployKey get one deploy key with key id
 | ||||
| func (c *Client) GetDeployKey(user, repo string, keyID int64) (*DeployKey, error) { | ||||
| 	key := new(DeployKey) | ||||
| 	return key, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/keys/%d", user, repo, keyID), nil, nil, &key) | ||||
| } | ||||
| 
 | ||||
| // CreateKeyOption options when creating a key
 | ||||
| type CreateKeyOption struct { | ||||
| 	// Title of the key to add
 | ||||
| 	//
 | ||||
| 	// required: true
 | ||||
| 	// unique: true
 | ||||
| 	Title string `json:"title" binding:"Required"` | ||||
| 	// An armored SSH key to add
 | ||||
| 	//
 | ||||
| 	// required: true
 | ||||
| 	// unique: true
 | ||||
| 	Key string `json:"key" binding:"Required"` | ||||
| 	// Describe if the key has only read access or read/write
 | ||||
| 	//
 | ||||
| 	// required: false
 | ||||
| 	ReadOnly bool `json:"read_only"` | ||||
| } | ||||
| 
 | ||||
| // CreateDeployKey options when create one deploy key
 | ||||
| func (c *Client) CreateDeployKey(user, repo string, opt CreateKeyOption) (*DeployKey, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	key := new(DeployKey) | ||||
| 	return key, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/keys", user, repo), jsonHeader, bytes.NewReader(body), key) | ||||
| } | ||||
| 
 | ||||
| // DeleteDeployKey delete deploy key with key id
 | ||||
| func (c *Client) DeleteDeployKey(owner, repo string, keyID int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/keys/%d", owner, repo, keyID), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										41
									
								
								vendor/code.gitea.io/sdk/gitea/repo_watch.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/code.gitea.io/sdk/gitea/repo_watch.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,41 +0,0 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // WatchInfo represents an API watch status of one repository
 | ||||
| type WatchInfo struct { | ||||
| 	Subscribed    bool        `json:"subscribed"` | ||||
| 	Ignored       bool        `json:"ignored"` | ||||
| 	Reason        interface{} `json:"reason"` | ||||
| 	CreatedAt     time.Time   `json:"created_at"` | ||||
| 	URL           string      `json:"url"` | ||||
| 	RepositoryURL string      `json:"repository_url"` | ||||
| } | ||||
| 
 | ||||
| // GetWatchedRepos list all the watched repos of user
 | ||||
| func (c *Client) GetWatchedRepos(user, pass string) ([]*Repository, error) { | ||||
| 	repos := make([]*Repository, 0, 10) | ||||
| 	return repos, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/subscriptions", user), | ||||
| 		http.Header{"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, nil, &repos) | ||||
| } | ||||
| 
 | ||||
| // WatchRepo start to watch a repository
 | ||||
| func (c *Client) WatchRepo(user, pass, repoUser, repoName string) (*WatchInfo, error) { | ||||
| 	i := new(WatchInfo) | ||||
| 	return i, c.getParsedResponse("PUT", fmt.Sprintf("/repos/%s/%s/subscription", repoUser, repoName), | ||||
| 		http.Header{"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, nil, i) | ||||
| } | ||||
| 
 | ||||
| // UnWatchRepo start to watch a repository
 | ||||
| func (c *Client) UnWatchRepo(user, pass, repoUser, repoName string) (int, error) { | ||||
| 	return c.getStatusCode("DELETE", fmt.Sprintf("/repos/%s/%s/subscription", repoUser, repoName), | ||||
| 		http.Header{"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, nil) | ||||
| } | ||||
							
								
								
									
										97
									
								
								vendor/code.gitea.io/sdk/gitea/status.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										97
									
								
								vendor/code.gitea.io/sdk/gitea/status.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,97 +0,0 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // StatusState holds the state of a Status
 | ||||
| // It can be "pending", "success", "error", "failure", and "warning"
 | ||||
| type StatusState string | ||||
| 
 | ||||
| const ( | ||||
| 	// StatusPending is for when the Status is Pending
 | ||||
| 	StatusPending StatusState = "pending" | ||||
| 	// StatusSuccess is for when the Status is Success
 | ||||
| 	StatusSuccess StatusState = "success" | ||||
| 	// StatusError is for when the Status is Error
 | ||||
| 	StatusError StatusState = "error" | ||||
| 	// StatusFailure is for when the Status is Failure
 | ||||
| 	StatusFailure StatusState = "failure" | ||||
| 	// StatusWarning is for when the Status is Warning
 | ||||
| 	StatusWarning StatusState = "warning" | ||||
| ) | ||||
| 
 | ||||
| // Status holds a single Status of a single Commit
 | ||||
| type Status struct { | ||||
| 	ID          int64       `json:"id"` | ||||
| 	State       StatusState `json:"status"` | ||||
| 	TargetURL   string      `json:"target_url"` | ||||
| 	Description string      `json:"description"` | ||||
| 	URL         string      `json:"url"` | ||||
| 	Context     string      `json:"context"` | ||||
| 	Creator     *User       `json:"creator"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Updated time.Time `json:"updated_at"` | ||||
| } | ||||
| 
 | ||||
| // CombinedStatus holds the combined state of several statuses for a single commit
 | ||||
| type CombinedStatus struct { | ||||
| 	State      StatusState `json:"state"` | ||||
| 	SHA        string      `json:"sha"` | ||||
| 	TotalCount int         `json:"total_count"` | ||||
| 	Statuses   []*Status   `json:"statuses"` | ||||
| 	Repository *Repository `json:"repository"` | ||||
| 	CommitURL  string      `json:"commit_url"` | ||||
| 	URL        string      `json:"url"` | ||||
| } | ||||
| 
 | ||||
| // CreateStatusOption holds the information needed to create a new Status for a Commit
 | ||||
| type CreateStatusOption struct { | ||||
| 	State       StatusState `json:"state"` | ||||
| 	TargetURL   string      `json:"target_url"` | ||||
| 	Description string      `json:"description"` | ||||
| 	Context     string      `json:"context"` | ||||
| } | ||||
| 
 | ||||
| // ListStatusesOption holds pagination information
 | ||||
| type ListStatusesOption struct { | ||||
| 	Page int | ||||
| } | ||||
| 
 | ||||
| // CreateStatus creates a new Status for a given Commit
 | ||||
| //
 | ||||
| // POST /repos/:owner/:repo/statuses/:sha
 | ||||
| func (c *Client) CreateStatus(owner, repo, sha string, opts CreateStatusOption) (*Status, error) { | ||||
| 	body, err := json.Marshal(&opts) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	status := &Status{} | ||||
| 	return status, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/statuses/%s", owner, repo, sha), | ||||
| 		jsonHeader, bytes.NewReader(body), status) | ||||
| } | ||||
| 
 | ||||
| // ListStatuses returns all statuses for a given Commit
 | ||||
| //
 | ||||
| // GET /repos/:owner/:repo/commits/:ref/statuses
 | ||||
| func (c *Client) ListStatuses(owner, repo, sha string, opts ListStatusesOption) ([]*Status, error) { | ||||
| 	statuses := make([]*Status, 0, 10) | ||||
| 	return statuses, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/commits/%s/statuses?page=%d", owner, repo, sha, opts.Page), nil, nil, &statuses) | ||||
| } | ||||
| 
 | ||||
| // GetCombinedStatus returns the CombinedStatus for a given Commit
 | ||||
| //
 | ||||
| // GET /repos/:owner/:repo/commits/:ref/status
 | ||||
| func (c *Client) GetCombinedStatus(owner, repo, sha string) (*CombinedStatus, error) { | ||||
| 	status := &CombinedStatus{} | ||||
| 	return status, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/commits/%s/status", owner, repo, sha), nil, nil, status) | ||||
| } | ||||
							
								
								
									
										42
									
								
								vendor/code.gitea.io/sdk/gitea/user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/code.gitea.io/sdk/gitea/user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,42 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| // User represents a user
 | ||||
| // swagger:model
 | ||||
| type User struct { | ||||
| 	// the user's id
 | ||||
| 	ID int64 `json:"id"` | ||||
| 	// the user's username
 | ||||
| 	UserName string `json:"login"` | ||||
| 	// the user's full name
 | ||||
| 	FullName string `json:"full_name"` | ||||
| 	// swagger:strfmt email
 | ||||
| 	Email string `json:"email"` | ||||
| 	// URL to the user's avatar
 | ||||
| 	AvatarURL string `json:"avatar_url"` | ||||
| } | ||||
| 
 | ||||
| // MarshalJSON implements the json.Marshaler interface for User, adding field(s) for backward compatibility
 | ||||
| func (u User) MarshalJSON() ([]byte, error) { | ||||
| 	// Re-declaring User to avoid recursion
 | ||||
| 	type shadow User | ||||
| 	return json.Marshal(struct { | ||||
| 		shadow | ||||
| 		CompatUserName string `json:"username"` | ||||
| 	}{shadow(u), u.UserName}) | ||||
| } | ||||
| 
 | ||||
| // GetUserInfo get user info by user's name
 | ||||
| func (c *Client) GetUserInfo(user string) (*User, error) { | ||||
| 	u := new(User) | ||||
| 	err := c.getParsedResponse("GET", fmt.Sprintf("/users/%s", user), nil, nil, u) | ||||
| 	return u, err | ||||
| } | ||||
							
								
								
									
										56
									
								
								vendor/code.gitea.io/sdk/gitea/user_app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								vendor/code.gitea.io/sdk/gitea/user_app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,56 +0,0 @@ | ||||
| // Copyright 2014 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/base64" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| ) | ||||
| 
 | ||||
| // BasicAuthEncode generate base64 of basic auth head
 | ||||
| func BasicAuthEncode(user, pass string) string { | ||||
| 	return base64.StdEncoding.EncodeToString([]byte(user + ":" + pass)) | ||||
| } | ||||
| 
 | ||||
| // AccessToken represents a API access token.
 | ||||
| // swagger:response AccessToken
 | ||||
| type AccessToken struct { | ||||
| 	Name string `json:"name"` | ||||
| 	Sha1 string `json:"sha1"` | ||||
| } | ||||
| 
 | ||||
| // AccessTokenList represents a list of API access token.
 | ||||
| // swagger:response AccessTokenList
 | ||||
| type AccessTokenList []*AccessToken | ||||
| 
 | ||||
| // ListAccessTokens lista all the access tokens of user
 | ||||
| func (c *Client) ListAccessTokens(user, pass string) ([]*AccessToken, error) { | ||||
| 	tokens := make([]*AccessToken, 0, 10) | ||||
| 	return tokens, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/tokens", user), | ||||
| 		http.Header{"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, nil, &tokens) | ||||
| } | ||||
| 
 | ||||
| // CreateAccessTokenOption options when create access token
 | ||||
| // swagger:parameters userCreateToken
 | ||||
| type CreateAccessTokenOption struct { | ||||
| 	Name string `json:"name" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // CreateAccessToken create one access token with options
 | ||||
| func (c *Client) CreateAccessToken(user, pass string, opt CreateAccessTokenOption) (*AccessToken, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	t := new(AccessToken) | ||||
| 	return t, c.getParsedResponse("POST", fmt.Sprintf("/users/%s/tokens", user), | ||||
| 		http.Header{ | ||||
| 			"content-type":  []string{"application/json"}, | ||||
| 			"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, | ||||
| 		bytes.NewReader(body), t) | ||||
| } | ||||
							
								
								
									
										56
									
								
								vendor/code.gitea.io/sdk/gitea/user_email.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								vendor/code.gitea.io/sdk/gitea/user_email.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,56 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| ) | ||||
| 
 | ||||
| // Email an email address belonging to a user
 | ||||
| type Email struct { | ||||
| 	// swagger:strfmt email
 | ||||
| 	Email    string `json:"email"` | ||||
| 	Verified bool   `json:"verified"` | ||||
| 	Primary  bool   `json:"primary"` | ||||
| } | ||||
| 
 | ||||
| // ListEmails all the email addresses of user
 | ||||
| func (c *Client) ListEmails() ([]*Email, error) { | ||||
| 	emails := make([]*Email, 0, 3) | ||||
| 	return emails, c.getParsedResponse("GET", "/user/emails", nil, nil, &emails) | ||||
| } | ||||
| 
 | ||||
| // CreateEmailOption options when creating email addresses
 | ||||
| type CreateEmailOption struct { | ||||
| 	// email addresses to add
 | ||||
| 	Emails []string `json:"emails"` | ||||
| } | ||||
| 
 | ||||
| // AddEmail add one email to current user with options
 | ||||
| func (c *Client) AddEmail(opt CreateEmailOption) ([]*Email, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	emails := make([]*Email, 0, 3) | ||||
| 	return emails, c.getParsedResponse("POST", "/user/emails", jsonHeader, bytes.NewReader(body), emails) | ||||
| } | ||||
| 
 | ||||
| // DeleteEmailOption options when deleting email addresses
 | ||||
| type DeleteEmailOption struct { | ||||
| 	// email addresses to delete
 | ||||
| 	Emails []string `json:"emails"` | ||||
| } | ||||
| 
 | ||||
| // DeleteEmail delete one email of current users'
 | ||||
| func (c *Client) DeleteEmail(opt DeleteEmailOption) error { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.getResponse("DELETE", "/user/emails", jsonHeader, bytes.NewReader(body)) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										55
									
								
								vendor/code.gitea.io/sdk/gitea/user_follow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										55
									
								
								vendor/code.gitea.io/sdk/gitea/user_follow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,55 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import "fmt" | ||||
| 
 | ||||
| // ListMyFollowers list all the followers of current user
 | ||||
| func (c *Client) ListMyFollowers(page int) ([]*User, error) { | ||||
| 	users := make([]*User, 0, 10) | ||||
| 	return users, c.getParsedResponse("GET", fmt.Sprintf("/user/followers?page=%d", page), nil, nil, &users) | ||||
| } | ||||
| 
 | ||||
| // ListFollowers list all the followers of one user
 | ||||
| func (c *Client) ListFollowers(user string, page int) ([]*User, error) { | ||||
| 	users := make([]*User, 0, 10) | ||||
| 	return users, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/followers?page=%d", user, page), nil, nil, &users) | ||||
| } | ||||
| 
 | ||||
| // ListMyFollowing list all the users current user followed
 | ||||
| func (c *Client) ListMyFollowing(page int) ([]*User, error) { | ||||
| 	users := make([]*User, 0, 10) | ||||
| 	return users, c.getParsedResponse("GET", fmt.Sprintf("/user/following?page=%d", page), nil, nil, &users) | ||||
| } | ||||
| 
 | ||||
| // ListFollowing list all the users the user followed
 | ||||
| func (c *Client) ListFollowing(user string, page int) ([]*User, error) { | ||||
| 	users := make([]*User, 0, 10) | ||||
| 	return users, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/following?page=%d", user, page), nil, nil, &users) | ||||
| } | ||||
| 
 | ||||
| // IsFollowing if current user followed the target
 | ||||
| func (c *Client) IsFollowing(target string) bool { | ||||
| 	_, err := c.getResponse("GET", fmt.Sprintf("/user/following/%s", target), nil, nil) | ||||
| 	return err == nil | ||||
| } | ||||
| 
 | ||||
| // IsUserFollowing if the user followed the target
 | ||||
| func (c *Client) IsUserFollowing(user, target string) bool { | ||||
| 	_, err := c.getResponse("GET", fmt.Sprintf("/users/%s/following/%s", user, target), nil, nil) | ||||
| 	return err == nil | ||||
| } | ||||
| 
 | ||||
| // Follow set current user follow the target
 | ||||
| func (c *Client) Follow(target string) error { | ||||
| 	_, err := c.getResponse("PUT", fmt.Sprintf("/user/following/%s", target), nil, nil) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // Unfollow set current user unfollow the target
 | ||||
| func (c *Client) Unfollow(target string) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/user/following/%s", target), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/user_gpgkey.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/code.gitea.io/sdk/gitea/user_gpgkey.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,80 +0,0 @@ | ||||
| // Copyright 2017 Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // GPGKey a user GPG key to sign commit and tag in repository
 | ||||
| type GPGKey struct { | ||||
| 	ID                int64          `json:"id"` | ||||
| 	PrimaryKeyID      string         `json:"primary_key_id"` | ||||
| 	KeyID             string         `json:"key_id"` | ||||
| 	PublicKey         string         `json:"public_key"` | ||||
| 	Emails            []*GPGKeyEmail `json:"emails"` | ||||
| 	SubsKey           []*GPGKey      `json:"subkeys"` | ||||
| 	CanSign           bool           `json:"can_sign"` | ||||
| 	CanEncryptComms   bool           `json:"can_encrypt_comms"` | ||||
| 	CanEncryptStorage bool           `json:"can_encrypt_storage"` | ||||
| 	CanCertify        bool           `json:"can_certify"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at,omitempty"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Expires time.Time `json:"expires_at,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // GPGKeyEmail an email attached to a GPGKey
 | ||||
| // swagger:model GPGKeyEmail
 | ||||
| type GPGKeyEmail struct { | ||||
| 	Email    string `json:"email"` | ||||
| 	Verified bool   `json:"verified"` | ||||
| } | ||||
| 
 | ||||
| // CreateGPGKeyOption options create user GPG key
 | ||||
| type CreateGPGKeyOption struct { | ||||
| 	// An armored GPG key to add
 | ||||
| 	//
 | ||||
| 	// required: true
 | ||||
| 	// unique: true
 | ||||
| 	ArmoredKey string `json:"armored_public_key" binding:"Required"` | ||||
| } | ||||
| 
 | ||||
| // ListGPGKeys list all the GPG keys of the user
 | ||||
| func (c *Client) ListGPGKeys(user string) ([]*GPGKey, error) { | ||||
| 	keys := make([]*GPGKey, 0, 10) | ||||
| 	return keys, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/gpg_keys", user), nil, nil, &keys) | ||||
| } | ||||
| 
 | ||||
| // ListMyGPGKeys list all the GPG keys of current user
 | ||||
| func (c *Client) ListMyGPGKeys() ([]*GPGKey, error) { | ||||
| 	keys := make([]*GPGKey, 0, 10) | ||||
| 	return keys, c.getParsedResponse("GET", "/user/gpg_keys", nil, nil, &keys) | ||||
| } | ||||
| 
 | ||||
| // GetGPGKey get current user's GPG key by key id
 | ||||
| func (c *Client) GetGPGKey(keyID int64) (*GPGKey, error) { | ||||
| 	key := new(GPGKey) | ||||
| 	return key, c.getParsedResponse("GET", fmt.Sprintf("/user/gpg_keys/%d", keyID), nil, nil, &key) | ||||
| } | ||||
| 
 | ||||
| // CreateGPGKey create GPG key with options
 | ||||
| func (c *Client) CreateGPGKey(opt CreateGPGKeyOption) (*GPGKey, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	key := new(GPGKey) | ||||
| 	return key, c.getParsedResponse("POST", "/user/gpg_keys", jsonHeader, bytes.NewReader(body), key) | ||||
| } | ||||
| 
 | ||||
| // DeleteGPGKey delete GPG key with key id
 | ||||
| func (c *Client) DeleteGPGKey(keyID int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/user/gpg_keys/%d", keyID), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										57
									
								
								vendor/code.gitea.io/sdk/gitea/user_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/code.gitea.io/sdk/gitea/user_key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,57 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // PublicKey publickey is a user key to push code to repository
 | ||||
| type PublicKey struct { | ||||
| 	ID          int64  `json:"id"` | ||||
| 	Key         string `json:"key"` | ||||
| 	URL         string `json:"url,omitempty"` | ||||
| 	Title       string `json:"title,omitempty"` | ||||
| 	Fingerprint string `json:"fingerprint,omitempty"` | ||||
| 	// swagger:strfmt date-time
 | ||||
| 	Created time.Time `json:"created_at,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // ListPublicKeys list all the public keys of the user
 | ||||
| func (c *Client) ListPublicKeys(user string) ([]*PublicKey, error) { | ||||
| 	keys := make([]*PublicKey, 0, 10) | ||||
| 	return keys, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/keys", user), nil, nil, &keys) | ||||
| } | ||||
| 
 | ||||
| // ListMyPublicKeys list all the public keys of current user
 | ||||
| func (c *Client) ListMyPublicKeys() ([]*PublicKey, error) { | ||||
| 	keys := make([]*PublicKey, 0, 10) | ||||
| 	return keys, c.getParsedResponse("GET", "/user/keys", nil, nil, &keys) | ||||
| } | ||||
| 
 | ||||
| // GetPublicKey get current user's public key by key id
 | ||||
| func (c *Client) GetPublicKey(keyID int64) (*PublicKey, error) { | ||||
| 	key := new(PublicKey) | ||||
| 	return key, c.getParsedResponse("GET", fmt.Sprintf("/user/keys/%d", keyID), nil, nil, &key) | ||||
| } | ||||
| 
 | ||||
| // CreatePublicKey create public key with options
 | ||||
| func (c *Client) CreatePublicKey(opt CreateKeyOption) (*PublicKey, error) { | ||||
| 	body, err := json.Marshal(&opt) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	key := new(PublicKey) | ||||
| 	return key, c.getParsedResponse("POST", "/user/keys", jsonHeader, bytes.NewReader(body), key) | ||||
| } | ||||
| 
 | ||||
| // DeletePublicKey delete public key with key id
 | ||||
| func (c *Client) DeletePublicKey(keyID int64) error { | ||||
| 	_, err := c.getResponse("DELETE", fmt.Sprintf("/user/keys/%d", keyID), nil, nil) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/code.gitea.io/sdk/gitea/user_search.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/code.gitea.io/sdk/gitea/user_search.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| package gitea | ||||
| 
 | ||||
| import "fmt" | ||||
| 
 | ||||
| type searchUsersResponse struct { | ||||
| 	Users []*User `json:"data"` | ||||
| } | ||||
| 
 | ||||
| // SearchUsers finds users by query
 | ||||
| func (c *Client) SearchUsers(query string, limit int) ([]*User, error) { | ||||
| 	resp := new(searchUsersResponse) | ||||
| 	err := c.getParsedResponse("GET", fmt.Sprintf("/users/search?q=%s&limit=%d", query, limit), nil, nil, &resp) | ||||
| 	return resp.Users, err | ||||
| } | ||||
							
								
								
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/utils.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/code.gitea.io/sdk/gitea/utils.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,26 +0,0 @@ | ||||
| // Copyright 2015 The Gogs Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package gitea | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| ) | ||||
| 
 | ||||
| var jsonHeader = http.Header{"content-type": []string{"application/json"}} | ||||
| 
 | ||||
| // Bool return address of bool value
 | ||||
| func Bool(v bool) *bool { | ||||
| 	return &v | ||||
| } | ||||
| 
 | ||||
| // String return address of string value
 | ||||
| func String(v string) *string { | ||||
| 	return &v | ||||
| } | ||||
| 
 | ||||
| // Int64 return address of int64 value
 | ||||
| func Int64(v int64) *int64 { | ||||
| 	return &v | ||||
| } | ||||
							
								
								
									
										47
									
								
								vendor/github.com/Sirupsen/logrus/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/Sirupsen/logrus/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,47 +0,0 @@ | ||||
| # 0.8.7 | ||||
| 
 | ||||
| * logrus/core: fix possible race (#216) | ||||
| * logrus/doc: small typo fixes and doc improvements | ||||
| 
 | ||||
| 
 | ||||
| # 0.8.6 | ||||
| 
 | ||||
| * hooks/raven: allow passing an initialized client | ||||
| 
 | ||||
| # 0.8.5 | ||||
| 
 | ||||
| * logrus/core: revert #208 | ||||
| 
 | ||||
| # 0.8.4 | ||||
| 
 | ||||
| * formatter/text: fix data race (#218) | ||||
| 
 | ||||
| # 0.8.3 | ||||
| 
 | ||||
| * logrus/core: fix entry log level (#208) | ||||
| * logrus/core: improve performance of text formatter by 40% | ||||
| * logrus/core: expose `LevelHooks` type | ||||
| * logrus/core: add support for DragonflyBSD and NetBSD | ||||
| * formatter/text: print structs more verbosely | ||||
| 
 | ||||
| # 0.8.2 | ||||
| 
 | ||||
| * logrus: fix more Fatal family functions | ||||
| 
 | ||||
| # 0.8.1 | ||||
| 
 | ||||
| * logrus: fix not exiting on `Fatalf` and `Fatalln` | ||||
| 
 | ||||
| # 0.8.0 | ||||
| 
 | ||||
| * logrus: defaults to stderr instead of stdout | ||||
| * hooks/sentry: add special field for `*http.Request` | ||||
| * formatter/text: ignore Windows for colors | ||||
| 
 | ||||
| # 0.7.3 | ||||
| 
 | ||||
| * formatter/\*: allow configuration of timestamp layout | ||||
| 
 | ||||
| # 0.7.2 | ||||
| 
 | ||||
| * formatter/text: Add configuration option for time format (#158) | ||||
							
								
								
									
										21
									
								
								vendor/github.com/Sirupsen/logrus/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/Sirupsen/logrus/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,21 +0,0 @@ | ||||
| The MIT License (MIT) | ||||
| 
 | ||||
| Copyright (c) 2014 Simon Eskildsen | ||||
| 
 | ||||
| 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. | ||||
							
								
								
									
										357
									
								
								vendor/github.com/Sirupsen/logrus/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										357
									
								
								vendor/github.com/Sirupsen/logrus/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,357 +0,0 @@ | ||||
| # Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/> [](https://travis-ci.org/Sirupsen/logrus) [][godoc] | ||||
| 
 | ||||
| Logrus is a structured logger for Go (golang), completely API compatible with | ||||
| the standard library logger. [Godoc][godoc]. **Please note the Logrus API is not | ||||
| yet stable (pre 1.0). Logrus itself is completely stable and has been used in | ||||
| many large deployments. The core API is unlikely to change much but please | ||||
| version control your Logrus to make sure you aren't fetching latest `master` on | ||||
| every build.** | ||||
| 
 | ||||
| Nicely color-coded in development (when a TTY is attached, otherwise just | ||||
| plain text): | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| With `log.Formatter = new(logrus.JSONFormatter)`, for easy parsing by logstash | ||||
| or Splunk: | ||||
| 
 | ||||
| ```json | ||||
| {"animal":"walrus","level":"info","msg":"A group of walrus emerges from the | ||||
| ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"} | ||||
| 
 | ||||
| {"level":"warning","msg":"The group's number increased tremendously!", | ||||
| "number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"} | ||||
| 
 | ||||
| {"animal":"walrus","level":"info","msg":"A giant walrus appears!", | ||||
| "size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"} | ||||
| 
 | ||||
| {"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.", | ||||
| "size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"} | ||||
| 
 | ||||
| {"level":"fatal","msg":"The ice breaks!","number":100,"omg":true, | ||||
| "time":"2014-03-10 19:57:38.562543128 -0400 EDT"} | ||||
| ``` | ||||
| 
 | ||||
| With the default `log.Formatter = new(&log.TextFormatter{})` when a TTY is not | ||||
| attached, the output is compatible with the | ||||
| [logfmt](http://godoc.org/github.com/kr/logfmt) format: | ||||
| 
 | ||||
| ```text | ||||
| time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8 | ||||
| time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 | ||||
| time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true | ||||
| time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4 | ||||
| time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009 | ||||
| time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true | ||||
| exit status 1 | ||||
| ``` | ||||
| 
 | ||||
| #### Example | ||||
| 
 | ||||
| The simplest way to use Logrus is simply the package-level exported logger: | ||||
| 
 | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
|   log "github.com/Sirupsen/logrus" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
|   log.WithFields(log.Fields{ | ||||
|     "animal": "walrus", | ||||
|   }).Info("A walrus appears") | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Note that it's completely api-compatible with the stdlib logger, so you can | ||||
| replace your `log` imports everywhere with `log "github.com/Sirupsen/logrus"` | ||||
| and you'll now have the flexibility of Logrus. You can customize it all you | ||||
| want: | ||||
| 
 | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
|   "os" | ||||
|   log "github.com/Sirupsen/logrus" | ||||
|   "github.com/Sirupsen/logrus/hooks/airbrake" | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
|   // Log as JSON instead of the default ASCII formatter. | ||||
|   log.SetFormatter(&log.JSONFormatter{}) | ||||
| 
 | ||||
|   // Use the Airbrake hook to report errors that have Error severity or above to | ||||
|   // an exception tracker. You can create custom hooks, see the Hooks section. | ||||
|   log.AddHook(airbrake.NewHook("https://example.com", "xyz", "development")) | ||||
| 
 | ||||
|   // Output to stderr instead of stdout, could also be a file. | ||||
|   log.SetOutput(os.Stderr) | ||||
| 
 | ||||
|   // Only log the warning severity or above. | ||||
|   log.SetLevel(log.WarnLevel) | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
|   log.WithFields(log.Fields{ | ||||
|     "animal": "walrus", | ||||
|     "size":   10, | ||||
|   }).Info("A group of walrus emerges from the ocean") | ||||
| 
 | ||||
|   log.WithFields(log.Fields{ | ||||
|     "omg":    true, | ||||
|     "number": 122, | ||||
|   }).Warn("The group's number increased tremendously!") | ||||
| 
 | ||||
|   log.WithFields(log.Fields{ | ||||
|     "omg":    true, | ||||
|     "number": 100, | ||||
|   }).Fatal("The ice breaks!") | ||||
| 
 | ||||
|   // A common pattern is to re-use fields between logging statements by re-using | ||||
|   // the logrus.Entry returned from WithFields() | ||||
|   contextLogger := log.WithFields(log.Fields{ | ||||
|     "common": "this is a common field", | ||||
|     "other": "I also should be logged always", | ||||
|   }) | ||||
| 
 | ||||
|   contextLogger.Info("I'll be logged with common and other field") | ||||
|   contextLogger.Info("Me too") | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| For more advanced usage such as logging to multiple locations from the same | ||||
| application, you can also create an instance of the `logrus` Logger: | ||||
| 
 | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
|   "github.com/Sirupsen/logrus" | ||||
| ) | ||||
| 
 | ||||
| // Create a new instance of the logger. You can have any number of instances. | ||||
| var log = logrus.New() | ||||
| 
 | ||||
| func main() { | ||||
|   // The API for setting attributes is a little different than the package level | ||||
|   // exported logger. See Godoc. | ||||
|   log.Out = os.Stderr | ||||
| 
 | ||||
|   log.WithFields(logrus.Fields{ | ||||
|     "animal": "walrus", | ||||
|     "size":   10, | ||||
|   }).Info("A group of walrus emerges from the ocean") | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| #### Fields | ||||
| 
 | ||||
| Logrus encourages careful, structured logging though logging fields instead of | ||||
| long, unparseable error messages. For example, instead of: `log.Fatalf("Failed | ||||
| to send event %s to topic %s with key %d")`, you should log the much more | ||||
| discoverable: | ||||
| 
 | ||||
| ```go | ||||
| log.WithFields(log.Fields{ | ||||
|   "event": event, | ||||
|   "topic": topic, | ||||
|   "key": key, | ||||
| }).Fatal("Failed to send event") | ||||
| ``` | ||||
| 
 | ||||
| We've found this API forces you to think about logging in a way that produces | ||||
| much more useful logging messages. We've been in countless situations where just | ||||
| a single added field to a log statement that was already there would've saved us | ||||
| hours. The `WithFields` call is optional. | ||||
| 
 | ||||
| In general, with Logrus using any of the `printf`-family functions should be | ||||
| seen as a hint you should add a field, however, you can still use the | ||||
| `printf`-family functions with Logrus. | ||||
| 
 | ||||
| #### Hooks | ||||
| 
 | ||||
| You can add hooks for logging levels. For example to send errors to an exception | ||||
| tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to | ||||
| multiple places simultaneously, e.g. syslog. | ||||
| 
 | ||||
| Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in | ||||
| `init`: | ||||
| 
 | ||||
| ```go | ||||
| import ( | ||||
|   log "github.com/Sirupsen/logrus" | ||||
|   "github.com/Sirupsen/logrus/hooks/airbrake" | ||||
|   logrus_syslog "github.com/Sirupsen/logrus/hooks/syslog" | ||||
|   "log/syslog" | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
|   log.AddHook(airbrake.NewHook("https://example.com", "xyz", "development")) | ||||
| 
 | ||||
|   hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") | ||||
|   if err != nil { | ||||
|     log.Error("Unable to connect to local syslog daemon") | ||||
|   } else { | ||||
|     log.AddHook(hook) | ||||
|   } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| | Hook  | Description | | ||||
| | ----- | ----------- | | ||||
| | [Airbrake](https://github.com/Sirupsen/logrus/blob/master/hooks/airbrake/airbrake.go) | Send errors to an exception tracking service compatible with the Airbrake API. Uses [`airbrake-go`](https://github.com/tobi/airbrake-go) behind the scenes. | | ||||
| | [Papertrail](https://github.com/Sirupsen/logrus/blob/master/hooks/papertrail/papertrail.go) | Send errors to the Papertrail hosted logging service via UDP. | | ||||
| | [Syslog](https://github.com/Sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. | | ||||
| | [BugSnag](https://github.com/Sirupsen/logrus/blob/master/hooks/bugsnag/bugsnag.go) | Send errors to the Bugsnag exception tracking service. | | ||||
| | [Sentry](https://github.com/Sirupsen/logrus/blob/master/hooks/sentry/sentry.go) | Send errors to the Sentry error logging and aggregation service. | | ||||
| | [Hiprus](https://github.com/nubo/hiprus) | Send errors to a channel in hipchat. | | ||||
| | [Logrusly](https://github.com/sebest/logrusly) | Send logs to [Loggly](https://www.loggly.com/) | | ||||
| | [Slackrus](https://github.com/johntdyer/slackrus) | Hook for Slack chat. | | ||||
| | [Journalhook](https://github.com/wercker/journalhook) | Hook for logging to `systemd-journald` | | ||||
| | [Graylog](https://github.com/gemnasium/logrus-hooks/tree/master/graylog) | Hook for logging to [Graylog](http://graylog2.org/) | | ||||
| | [Raygun](https://github.com/squirkle/logrus-raygun-hook) | Hook for logging to [Raygun.io](http://raygun.io/) | | ||||
| | [LFShook](https://github.com/rifflock/lfshook) | Hook for logging to the local filesystem | | ||||
| | [Honeybadger](https://github.com/agonzalezro/logrus_honeybadger) | Hook for sending exceptions to Honeybadger | | ||||
| | [Mail](https://github.com/zbindenren/logrus_mail) | Hook for sending exceptions via mail | | ||||
| | [Rollrus](https://github.com/heroku/rollrus) | Hook for sending errors to rollbar | | ||||
| | [Fluentd](https://github.com/evalphobia/logrus_fluent) | Hook for logging to fluentd | | ||||
| | [Mongodb](https://github.com/weekface/mgorus) | Hook for logging to mongodb | | ||||
| 
 | ||||
| #### Level logging | ||||
| 
 | ||||
| Logrus has six logging levels: Debug, Info, Warning, Error, Fatal and Panic. | ||||
| 
 | ||||
| ```go | ||||
| log.Debug("Useful debugging information.") | ||||
| log.Info("Something noteworthy happened!") | ||||
| log.Warn("You should probably take a look at this.") | ||||
| log.Error("Something failed but I'm not quitting.") | ||||
| // Calls os.Exit(1) after logging | ||||
| log.Fatal("Bye.") | ||||
| // Calls panic() after logging | ||||
| log.Panic("I'm bailing.") | ||||
| ``` | ||||
| 
 | ||||
| You can set the logging level on a `Logger`, then it will only log entries with | ||||
| that severity or anything above it: | ||||
| 
 | ||||
| ```go | ||||
| // Will log anything that is info or above (warn, error, fatal, panic). Default. | ||||
| log.SetLevel(log.InfoLevel) | ||||
| ``` | ||||
| 
 | ||||
| It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose | ||||
| environment if your application has that. | ||||
| 
 | ||||
| #### Entries | ||||
| 
 | ||||
| Besides the fields added with `WithField` or `WithFields` some fields are | ||||
| automatically added to all logging events: | ||||
| 
 | ||||
| 1. `time`. The timestamp when the entry was created. | ||||
| 2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after | ||||
|    the `AddFields` call. E.g. `Failed to send event.` | ||||
| 3. `level`. The logging level. E.g. `info`. | ||||
| 
 | ||||
| #### Environments | ||||
| 
 | ||||
| Logrus has no notion of environment. | ||||
| 
 | ||||
| If you wish for hooks and formatters to only be used in specific environments, | ||||
| you should handle that yourself. For example, if your application has a global | ||||
| variable `Environment`, which is a string representation of the environment you | ||||
| could do: | ||||
| 
 | ||||
| ```go | ||||
| import ( | ||||
|   log "github.com/Sirupsen/logrus" | ||||
| ) | ||||
| 
 | ||||
| init() { | ||||
|   // do something here to set environment depending on an environment variable | ||||
|   // or command-line flag | ||||
|   if Environment == "production" { | ||||
|     log.SetFormatter(&log.JSONFormatter{}) | ||||
|   } else { | ||||
|     // The TextFormatter is default, you don't actually have to do this. | ||||
|     log.SetFormatter(&log.TextFormatter{}) | ||||
|   } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| This configuration is how `logrus` was intended to be used, but JSON in | ||||
| production is mostly only useful if you do log aggregation with tools like | ||||
| Splunk or Logstash. | ||||
| 
 | ||||
| #### Formatters | ||||
| 
 | ||||
| The built-in logging formatters are: | ||||
| 
 | ||||
| * `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise | ||||
|   without colors. | ||||
|   * *Note:* to force colored output when there is no TTY, set the `ForceColors` | ||||
|     field to `true`.  To force no colored output even if there is a TTY  set the | ||||
|     `DisableColors` field to `true` | ||||
| * `logrus.JSONFormatter`. Logs fields as JSON. | ||||
| * `logrus_logstash.LogstashFormatter`. Logs fields as Logstash Events (http://logstash.net). | ||||
| 
 | ||||
|     ```go | ||||
|       logrus.SetFormatter(&logrus_logstash.LogstashFormatter{Type: “application_name"}) | ||||
|     ``` | ||||
| 
 | ||||
| Third party logging formatters: | ||||
| 
 | ||||
| * [`zalgo`](https://github.com/aybabtme/logzalgo): invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦. | ||||
| 
 | ||||
| You can define your formatter by implementing the `Formatter` interface, | ||||
| requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a | ||||
| `Fields` type (`map[string]interface{}`) with all your fields as well as the | ||||
| default ones (see Entries section above): | ||||
| 
 | ||||
| ```go | ||||
| type MyJSONFormatter struct { | ||||
| } | ||||
| 
 | ||||
| log.SetFormatter(new(MyJSONFormatter)) | ||||
| 
 | ||||
| func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) { | ||||
|   // Note this doesn't include Time, Level and Message which are available on | ||||
|   // the Entry. Consult `godoc` on information about those fields or read the | ||||
|   // source of the official loggers. | ||||
|   serialized, err := json.Marshal(entry.Data) | ||||
|     if err != nil { | ||||
|       return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) | ||||
|     } | ||||
|   return append(serialized, '\n'), nil | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| #### Logger as an `io.Writer` | ||||
| 
 | ||||
| Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it. | ||||
| 
 | ||||
| ```go | ||||
| w := logger.Writer() | ||||
| defer w.Close() | ||||
| 
 | ||||
| srv := http.Server{ | ||||
|     // create a stdlib log.Logger that writes to | ||||
|     // logrus.Logger. | ||||
|     ErrorLog: log.New(w, "", 0), | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Each line written to that writer will be printed the usual way, using formatters | ||||
| and hooks. The level for those entries is `info`. | ||||
| 
 | ||||
| #### Rotation | ||||
| 
 | ||||
| Log rotation is not provided with Logrus. Log rotation should be done by an | ||||
| external program (like `logrotate(8)`) that can compress and delete old log | ||||
| entries. It should not be a feature of the application-level logger. | ||||
| 
 | ||||
| 
 | ||||
| [godoc]: https://godoc.org/github.com/Sirupsen/logrus | ||||
							
								
								
									
										26
									
								
								vendor/github.com/Sirupsen/logrus/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/Sirupsen/logrus/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,26 +0,0 @@ | ||||
| /* | ||||
| Package logrus is a structured logger for Go, completely API compatible with the standard library logger. | ||||
| 
 | ||||
| 
 | ||||
| The simplest way to use Logrus is simply the package-level exported logger: | ||||
| 
 | ||||
|   package main | ||||
| 
 | ||||
|   import ( | ||||
|     log "github.com/Sirupsen/logrus" | ||||
|   ) | ||||
| 
 | ||||
|   func main() { | ||||
|     log.WithFields(log.Fields{ | ||||
|       "animal": "walrus", | ||||
|       "number": 1, | ||||
|       "size":   10, | ||||
|     }).Info("A walrus appears") | ||||
|   } | ||||
| 
 | ||||
| Output: | ||||
|   time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10 | ||||
| 
 | ||||
| For a full guide visit https://github.com/Sirupsen/logrus
 | ||||
| */ | ||||
| package logrus | ||||
							
								
								
									
										264
									
								
								vendor/github.com/Sirupsen/logrus/entry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										264
									
								
								vendor/github.com/Sirupsen/logrus/entry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,264 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // Defines the key when adding errors using WithError.
 | ||||
| var ErrorKey = "error" | ||||
| 
 | ||||
| // An entry is the final or intermediate Logrus logging entry. It contains all
 | ||||
| // the fields passed with WithField{,s}. It's finally logged when Debug, Info,
 | ||||
| // Warn, Error, Fatal or Panic is called on it. These objects can be reused and
 | ||||
| // passed around as much as you wish to avoid field duplication.
 | ||||
| type Entry struct { | ||||
| 	Logger *Logger | ||||
| 
 | ||||
| 	// Contains all the fields set by the user.
 | ||||
| 	Data Fields | ||||
| 
 | ||||
| 	// Time at which the log entry was created
 | ||||
| 	Time time.Time | ||||
| 
 | ||||
| 	// Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic
 | ||||
| 	Level Level | ||||
| 
 | ||||
| 	// Message passed to Debug, Info, Warn, Error, Fatal or Panic
 | ||||
| 	Message string | ||||
| } | ||||
| 
 | ||||
| func NewEntry(logger *Logger) *Entry { | ||||
| 	return &Entry{ | ||||
| 		Logger: logger, | ||||
| 		// Default is three fields, give a little extra room
 | ||||
| 		Data: make(Fields, 5), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Returns a reader for the entry, which is a proxy to the formatter.
 | ||||
| func (entry *Entry) Reader() (*bytes.Buffer, error) { | ||||
| 	serialized, err := entry.Logger.Formatter.Format(entry) | ||||
| 	return bytes.NewBuffer(serialized), err | ||||
| } | ||||
| 
 | ||||
| // Returns the string representation from the reader and ultimately the
 | ||||
| // formatter.
 | ||||
| func (entry *Entry) String() (string, error) { | ||||
| 	reader, err := entry.Reader() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return reader.String(), err | ||||
| } | ||||
| 
 | ||||
| // Add an error as single field (using the key defined in ErrorKey) to the Entry.
 | ||||
| func (entry *Entry) WithError(err error) *Entry { | ||||
| 	return entry.WithField(ErrorKey, err) | ||||
| } | ||||
| 
 | ||||
| // Add a single field to the Entry.
 | ||||
| func (entry *Entry) WithField(key string, value interface{}) *Entry { | ||||
| 	return entry.WithFields(Fields{key: value}) | ||||
| } | ||||
| 
 | ||||
| // Add a map of fields to the Entry.
 | ||||
| func (entry *Entry) WithFields(fields Fields) *Entry { | ||||
| 	data := Fields{} | ||||
| 	for k, v := range entry.Data { | ||||
| 		data[k] = v | ||||
| 	} | ||||
| 	for k, v := range fields { | ||||
| 		data[k] = v | ||||
| 	} | ||||
| 	return &Entry{Logger: entry.Logger, Data: data} | ||||
| } | ||||
| 
 | ||||
| // This function is not declared with a pointer value because otherwise
 | ||||
| // race conditions will occur when using multiple goroutines
 | ||||
| func (entry Entry) log(level Level, msg string) { | ||||
| 	entry.Time = time.Now() | ||||
| 	entry.Level = level | ||||
| 	entry.Message = msg | ||||
| 
 | ||||
| 	if err := entry.Logger.Hooks.Fire(level, &entry); err != nil { | ||||
| 		entry.Logger.mu.Lock() | ||||
| 		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err) | ||||
| 		entry.Logger.mu.Unlock() | ||||
| 	} | ||||
| 
 | ||||
| 	reader, err := entry.Reader() | ||||
| 	if err != nil { | ||||
| 		entry.Logger.mu.Lock() | ||||
| 		fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err) | ||||
| 		entry.Logger.mu.Unlock() | ||||
| 	} | ||||
| 
 | ||||
| 	entry.Logger.mu.Lock() | ||||
| 	defer entry.Logger.mu.Unlock() | ||||
| 
 | ||||
| 	_, err = io.Copy(entry.Logger.Out, reader) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// To avoid Entry#log() returning a value that only would make sense for
 | ||||
| 	// panic() to use in Entry#Panic(), we avoid the allocation by checking
 | ||||
| 	// directly here.
 | ||||
| 	if level <= PanicLevel { | ||||
| 		panic(&entry) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Debug(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= DebugLevel { | ||||
| 		entry.log(DebugLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Print(args ...interface{}) { | ||||
| 	entry.Info(args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Info(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= InfoLevel { | ||||
| 		entry.log(InfoLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warn(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= WarnLevel { | ||||
| 		entry.log(WarnLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warning(args ...interface{}) { | ||||
| 	entry.Warn(args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Error(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= ErrorLevel { | ||||
| 		entry.log(ErrorLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Fatal(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= FatalLevel { | ||||
| 		entry.log(FatalLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Panic(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= PanicLevel { | ||||
| 		entry.log(PanicLevel, fmt.Sprint(args...)) | ||||
| 	} | ||||
| 	panic(fmt.Sprint(args...)) | ||||
| } | ||||
| 
 | ||||
| // Entry Printf family functions
 | ||||
| 
 | ||||
| func (entry *Entry) Debugf(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= DebugLevel { | ||||
| 		entry.Debug(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Infof(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= InfoLevel { | ||||
| 		entry.Info(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Printf(format string, args ...interface{}) { | ||||
| 	entry.Infof(format, args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warnf(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= WarnLevel { | ||||
| 		entry.Warn(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warningf(format string, args ...interface{}) { | ||||
| 	entry.Warnf(format, args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Errorf(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= ErrorLevel { | ||||
| 		entry.Error(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Fatalf(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= FatalLevel { | ||||
| 		entry.Fatal(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Panicf(format string, args ...interface{}) { | ||||
| 	if entry.Logger.Level >= PanicLevel { | ||||
| 		entry.Panic(fmt.Sprintf(format, args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Entry Println family functions
 | ||||
| 
 | ||||
| func (entry *Entry) Debugln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= DebugLevel { | ||||
| 		entry.Debug(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Infoln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= InfoLevel { | ||||
| 		entry.Info(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Println(args ...interface{}) { | ||||
| 	entry.Infoln(args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warnln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= WarnLevel { | ||||
| 		entry.Warn(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Warningln(args ...interface{}) { | ||||
| 	entry.Warnln(args...) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Errorln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= ErrorLevel { | ||||
| 		entry.Error(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Fatalln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= FatalLevel { | ||||
| 		entry.Fatal(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (entry *Entry) Panicln(args ...interface{}) { | ||||
| 	if entry.Logger.Level >= PanicLevel { | ||||
| 		entry.Panic(entry.sprintlnn(args...)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Sprintlnn => Sprint no newline. This is to get the behavior of how
 | ||||
| // fmt.Sprintln where spaces are always added between operands, regardless of
 | ||||
| // their type. Instead of vendoring the Sprintln implementation to spare a
 | ||||
| // string allocation, we do the simplest thing.
 | ||||
| func (entry *Entry) sprintlnn(args ...interface{}) string { | ||||
| 	msg := fmt.Sprintln(args...) | ||||
| 	return msg[:len(msg)-1] | ||||
| } | ||||
							
								
								
									
										193
									
								
								vendor/github.com/Sirupsen/logrus/exported.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										193
									
								
								vendor/github.com/Sirupsen/logrus/exported.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,193 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"io" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	// std is the name of the standard logger in stdlib `log`
 | ||||
| 	std = New() | ||||
| ) | ||||
| 
 | ||||
| func StandardLogger() *Logger { | ||||
| 	return std | ||||
| } | ||||
| 
 | ||||
| // SetOutput sets the standard logger output.
 | ||||
| func SetOutput(out io.Writer) { | ||||
| 	std.mu.Lock() | ||||
| 	defer std.mu.Unlock() | ||||
| 	std.Out = out | ||||
| } | ||||
| 
 | ||||
| // SetFormatter sets the standard logger formatter.
 | ||||
| func SetFormatter(formatter Formatter) { | ||||
| 	std.mu.Lock() | ||||
| 	defer std.mu.Unlock() | ||||
| 	std.Formatter = formatter | ||||
| } | ||||
| 
 | ||||
| // SetLevel sets the standard logger level.
 | ||||
| func SetLevel(level Level) { | ||||
| 	std.mu.Lock() | ||||
| 	defer std.mu.Unlock() | ||||
| 	std.Level = level | ||||
| } | ||||
| 
 | ||||
| // GetLevel returns the standard logger level.
 | ||||
| func GetLevel() Level { | ||||
| 	std.mu.Lock() | ||||
| 	defer std.mu.Unlock() | ||||
| 	return std.Level | ||||
| } | ||||
| 
 | ||||
| // AddHook adds a hook to the standard logger hooks.
 | ||||
| func AddHook(hook Hook) { | ||||
| 	std.mu.Lock() | ||||
| 	defer std.mu.Unlock() | ||||
| 	std.Hooks.Add(hook) | ||||
| } | ||||
| 
 | ||||
| // WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key.
 | ||||
| func WithError(err error) *Entry { | ||||
| 	return std.WithField(ErrorKey, err) | ||||
| } | ||||
| 
 | ||||
| // WithField creates an entry from the standard logger and adds a field to
 | ||||
| // it. If you want multiple fields, use `WithFields`.
 | ||||
| //
 | ||||
| // Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
 | ||||
| // or Panic on the Entry it returns.
 | ||||
| func WithField(key string, value interface{}) *Entry { | ||||
| 	return std.WithField(key, value) | ||||
| } | ||||
| 
 | ||||
| // WithFields creates an entry from the standard logger and adds multiple
 | ||||
| // fields to it. This is simply a helper for `WithField`, invoking it
 | ||||
| // once for each field.
 | ||||
| //
 | ||||
| // Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
 | ||||
| // or Panic on the Entry it returns.
 | ||||
| func WithFields(fields Fields) *Entry { | ||||
| 	return std.WithFields(fields) | ||||
| } | ||||
| 
 | ||||
| // Debug logs a message at level Debug on the standard logger.
 | ||||
| func Debug(args ...interface{}) { | ||||
| 	std.Debug(args...) | ||||
| } | ||||
| 
 | ||||
| // Print logs a message at level Info on the standard logger.
 | ||||
| func Print(args ...interface{}) { | ||||
| 	std.Print(args...) | ||||
| } | ||||
| 
 | ||||
| // Info logs a message at level Info on the standard logger.
 | ||||
| func Info(args ...interface{}) { | ||||
| 	std.Info(args...) | ||||
| } | ||||
| 
 | ||||
| // Warn logs a message at level Warn on the standard logger.
 | ||||
| func Warn(args ...interface{}) { | ||||
| 	std.Warn(args...) | ||||
| } | ||||
| 
 | ||||
| // Warning logs a message at level Warn on the standard logger.
 | ||||
| func Warning(args ...interface{}) { | ||||
| 	std.Warning(args...) | ||||
| } | ||||
| 
 | ||||
| // Error logs a message at level Error on the standard logger.
 | ||||
| func Error(args ...interface{}) { | ||||
| 	std.Error(args...) | ||||
| } | ||||
| 
 | ||||
| // Panic logs a message at level Panic on the standard logger.
 | ||||
| func Panic(args ...interface{}) { | ||||
| 	std.Panic(args...) | ||||
| } | ||||
| 
 | ||||
| // Fatal logs a message at level Fatal on the standard logger.
 | ||||
| func Fatal(args ...interface{}) { | ||||
| 	std.Fatal(args...) | ||||
| } | ||||
| 
 | ||||
| // Debugf logs a message at level Debug on the standard logger.
 | ||||
| func Debugf(format string, args ...interface{}) { | ||||
| 	std.Debugf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Printf logs a message at level Info on the standard logger.
 | ||||
| func Printf(format string, args ...interface{}) { | ||||
| 	std.Printf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Infof logs a message at level Info on the standard logger.
 | ||||
| func Infof(format string, args ...interface{}) { | ||||
| 	std.Infof(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Warnf logs a message at level Warn on the standard logger.
 | ||||
| func Warnf(format string, args ...interface{}) { | ||||
| 	std.Warnf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Warningf logs a message at level Warn on the standard logger.
 | ||||
| func Warningf(format string, args ...interface{}) { | ||||
| 	std.Warningf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Errorf logs a message at level Error on the standard logger.
 | ||||
| func Errorf(format string, args ...interface{}) { | ||||
| 	std.Errorf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Panicf logs a message at level Panic on the standard logger.
 | ||||
| func Panicf(format string, args ...interface{}) { | ||||
| 	std.Panicf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Fatalf logs a message at level Fatal on the standard logger.
 | ||||
| func Fatalf(format string, args ...interface{}) { | ||||
| 	std.Fatalf(format, args...) | ||||
| } | ||||
| 
 | ||||
| // Debugln logs a message at level Debug on the standard logger.
 | ||||
| func Debugln(args ...interface{}) { | ||||
| 	std.Debugln(args...) | ||||
| } | ||||
| 
 | ||||
| // Println logs a message at level Info on the standard logger.
 | ||||
| func Println(args ...interface{}) { | ||||
| 	std.Println(args...) | ||||
| } | ||||
| 
 | ||||
| // Infoln logs a message at level Info on the standard logger.
 | ||||
| func Infoln(args ...interface{}) { | ||||
| 	std.Infoln(args...) | ||||
| } | ||||
| 
 | ||||
| // Warnln logs a message at level Warn on the standard logger.
 | ||||
| func Warnln(args ...interface{}) { | ||||
| 	std.Warnln(args...) | ||||
| } | ||||
| 
 | ||||
| // Warningln logs a message at level Warn on the standard logger.
 | ||||
| func Warningln(args ...interface{}) { | ||||
| 	std.Warningln(args...) | ||||
| } | ||||
| 
 | ||||
| // Errorln logs a message at level Error on the standard logger.
 | ||||
| func Errorln(args ...interface{}) { | ||||
| 	std.Errorln(args...) | ||||
| } | ||||
| 
 | ||||
| // Panicln logs a message at level Panic on the standard logger.
 | ||||
| func Panicln(args ...interface{}) { | ||||
| 	std.Panicln(args...) | ||||
| } | ||||
| 
 | ||||
| // Fatalln logs a message at level Fatal on the standard logger.
 | ||||
| func Fatalln(args ...interface{}) { | ||||
| 	std.Fatalln(args...) | ||||
| } | ||||
							
								
								
									
										48
									
								
								vendor/github.com/Sirupsen/logrus/formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								vendor/github.com/Sirupsen/logrus/formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,48 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import "time" | ||||
| 
 | ||||
| const DefaultTimestampFormat = time.RFC3339 | ||||
| 
 | ||||
| // The Formatter interface is used to implement a custom Formatter. It takes an
 | ||||
| // `Entry`. It exposes all the fields, including the default ones:
 | ||||
| //
 | ||||
| // * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
 | ||||
| // * `entry.Data["time"]`. The timestamp.
 | ||||
| // * `entry.Data["level"]. The level the entry was logged at.
 | ||||
| //
 | ||||
| // Any additional fields added with `WithField` or `WithFields` are also in
 | ||||
| // `entry.Data`. Format is expected to return an array of bytes which are then
 | ||||
| // logged to `logger.Out`.
 | ||||
| type Formatter interface { | ||||
| 	Format(*Entry) ([]byte, error) | ||||
| } | ||||
| 
 | ||||
| // This is to not silently overwrite `time`, `msg` and `level` fields when
 | ||||
| // dumping it. If this code wasn't there doing:
 | ||||
| //
 | ||||
| //  logrus.WithField("level", 1).Info("hello")
 | ||||
| //
 | ||||
| // Would just silently drop the user provided level. Instead with this code
 | ||||
| // it'll logged as:
 | ||||
| //
 | ||||
| //  {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
 | ||||
| //
 | ||||
| // It's not exported because it's still using Data in an opinionated way. It's to
 | ||||
| // avoid code duplication between the two default formatters.
 | ||||
| func prefixFieldClashes(data Fields) { | ||||
| 	_, ok := data["time"] | ||||
| 	if ok { | ||||
| 		data["fields.time"] = data["time"] | ||||
| 	} | ||||
| 
 | ||||
| 	_, ok = data["msg"] | ||||
| 	if ok { | ||||
| 		data["fields.msg"] = data["msg"] | ||||
| 	} | ||||
| 
 | ||||
| 	_, ok = data["level"] | ||||
| 	if ok { | ||||
| 		data["fields.level"] = data["level"] | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										34
									
								
								vendor/github.com/Sirupsen/logrus/hooks.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/Sirupsen/logrus/hooks.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,34 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| // A hook to be fired when logging on the logging levels returned from
 | ||||
| // `Levels()` on your implementation of the interface. Note that this is not
 | ||||
| // fired in a goroutine or a channel with workers, you should handle such
 | ||||
| // functionality yourself if your call is non-blocking and you don't wish for
 | ||||
| // the logging calls for levels returned from `Levels()` to block.
 | ||||
| type Hook interface { | ||||
| 	Levels() []Level | ||||
| 	Fire(*Entry) error | ||||
| } | ||||
| 
 | ||||
| // Internal type for storing the hooks on a logger instance.
 | ||||
| type LevelHooks map[Level][]Hook | ||||
| 
 | ||||
| // Add a hook to an instance of logger. This is called with
 | ||||
| // `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
 | ||||
| func (hooks LevelHooks) Add(hook Hook) { | ||||
| 	for _, level := range hook.Levels() { | ||||
| 		hooks[level] = append(hooks[level], hook) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Fire all the hooks for the passed level. Used by `entry.log` to fire
 | ||||
| // appropriate hooks for a log entry.
 | ||||
| func (hooks LevelHooks) Fire(level Level, entry *Entry) error { | ||||
| 	for _, hook := range hooks[level] { | ||||
| 		if err := hook.Fire(entry); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										41
									
								
								vendor/github.com/Sirupsen/logrus/json_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/Sirupsen/logrus/json_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,41 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| type JSONFormatter struct { | ||||
| 	// TimestampFormat sets the format used for marshaling timestamps.
 | ||||
| 	TimestampFormat string | ||||
| } | ||||
| 
 | ||||
| func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { | ||||
| 	data := make(Fields, len(entry.Data)+3) | ||||
| 	for k, v := range entry.Data { | ||||
| 		switch v := v.(type) { | ||||
| 		case error: | ||||
| 			// Otherwise errors are ignored by `encoding/json`
 | ||||
| 			// https://github.com/Sirupsen/logrus/issues/137
 | ||||
| 			data[k] = v.Error() | ||||
| 		default: | ||||
| 			data[k] = v | ||||
| 		} | ||||
| 	} | ||||
| 	prefixFieldClashes(data) | ||||
| 
 | ||||
| 	timestampFormat := f.TimestampFormat | ||||
| 	if timestampFormat == "" { | ||||
| 		timestampFormat = DefaultTimestampFormat | ||||
| 	} | ||||
| 
 | ||||
| 	data["time"] = entry.Time.Format(timestampFormat) | ||||
| 	data["msg"] = entry.Message | ||||
| 	data["level"] = entry.Level.String() | ||||
| 
 | ||||
| 	serialized, err := json.Marshal(data) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) | ||||
| 	} | ||||
| 	return append(serialized, '\n'), nil | ||||
| } | ||||
							
								
								
									
										206
									
								
								vendor/github.com/Sirupsen/logrus/logger.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										206
									
								
								vendor/github.com/Sirupsen/logrus/logger.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,206 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| type Logger struct { | ||||
| 	// The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
 | ||||
| 	// file, or leave it default which is `os.Stderr`. You can also set this to
 | ||||
| 	// something more adventorous, such as logging to Kafka.
 | ||||
| 	Out io.Writer | ||||
| 	// Hooks for the logger instance. These allow firing events based on logging
 | ||||
| 	// levels and log entries. For example, to send errors to an error tracking
 | ||||
| 	// service, log to StatsD or dump the core on fatal errors.
 | ||||
| 	Hooks LevelHooks | ||||
| 	// All log entries pass through the formatter before logged to Out. The
 | ||||
| 	// included formatters are `TextFormatter` and `JSONFormatter` for which
 | ||||
| 	// TextFormatter is the default. In development (when a TTY is attached) it
 | ||||
| 	// logs with colors, but to a file it wouldn't. You can easily implement your
 | ||||
| 	// own that implements the `Formatter` interface, see the `README` or included
 | ||||
| 	// formatters for examples.
 | ||||
| 	Formatter Formatter | ||||
| 	// The logging level the logger should log at. This is typically (and defaults
 | ||||
| 	// to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
 | ||||
| 	// logged. `logrus.Debug` is useful in
 | ||||
| 	Level Level | ||||
| 	// Used to sync writing to the log.
 | ||||
| 	mu sync.Mutex | ||||
| } | ||||
| 
 | ||||
| // Creates a new logger. Configuration should be set by changing `Formatter`,
 | ||||
| // `Out` and `Hooks` directly on the default logger instance. You can also just
 | ||||
| // instantiate your own:
 | ||||
| //
 | ||||
| //    var log = &Logger{
 | ||||
| //      Out: os.Stderr,
 | ||||
| //      Formatter: new(JSONFormatter),
 | ||||
| //      Hooks: make(LevelHooks),
 | ||||
| //      Level: logrus.DebugLevel,
 | ||||
| //    }
 | ||||
| //
 | ||||
| // It's recommended to make this a global instance called `log`.
 | ||||
| func New() *Logger { | ||||
| 	return &Logger{ | ||||
| 		Out:       os.Stderr, | ||||
| 		Formatter: new(TextFormatter), | ||||
| 		Hooks:     make(LevelHooks), | ||||
| 		Level:     InfoLevel, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Adds a field to the log entry, note that you it doesn't log until you call
 | ||||
| // Debug, Print, Info, Warn, Fatal or Panic. It only creates a log entry.
 | ||||
| // If you want multiple fields, use `WithFields`.
 | ||||
| func (logger *Logger) WithField(key string, value interface{}) *Entry { | ||||
| 	return NewEntry(logger).WithField(key, value) | ||||
| } | ||||
| 
 | ||||
| // Adds a struct of fields to the log entry. All it does is call `WithField` for
 | ||||
| // each `Field`.
 | ||||
| func (logger *Logger) WithFields(fields Fields) *Entry { | ||||
| 	return NewEntry(logger).WithFields(fields) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Debugf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= DebugLevel { | ||||
| 		NewEntry(logger).Debugf(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Infof(format string, args ...interface{}) { | ||||
| 	if logger.Level >= InfoLevel { | ||||
| 		NewEntry(logger).Infof(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Printf(format string, args ...interface{}) { | ||||
| 	NewEntry(logger).Printf(format, args...) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warnf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warnf(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warningf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warnf(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Errorf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= ErrorLevel { | ||||
| 		NewEntry(logger).Errorf(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Fatalf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= FatalLevel { | ||||
| 		NewEntry(logger).Fatalf(format, args...) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Panicf(format string, args ...interface{}) { | ||||
| 	if logger.Level >= PanicLevel { | ||||
| 		NewEntry(logger).Panicf(format, args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Debug(args ...interface{}) { | ||||
| 	if logger.Level >= DebugLevel { | ||||
| 		NewEntry(logger).Debug(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Info(args ...interface{}) { | ||||
| 	if logger.Level >= InfoLevel { | ||||
| 		NewEntry(logger).Info(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Print(args ...interface{}) { | ||||
| 	NewEntry(logger).Info(args...) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warn(args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warn(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warning(args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warn(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Error(args ...interface{}) { | ||||
| 	if logger.Level >= ErrorLevel { | ||||
| 		NewEntry(logger).Error(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Fatal(args ...interface{}) { | ||||
| 	if logger.Level >= FatalLevel { | ||||
| 		NewEntry(logger).Fatal(args...) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Panic(args ...interface{}) { | ||||
| 	if logger.Level >= PanicLevel { | ||||
| 		NewEntry(logger).Panic(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Debugln(args ...interface{}) { | ||||
| 	if logger.Level >= DebugLevel { | ||||
| 		NewEntry(logger).Debugln(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Infoln(args ...interface{}) { | ||||
| 	if logger.Level >= InfoLevel { | ||||
| 		NewEntry(logger).Infoln(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Println(args ...interface{}) { | ||||
| 	NewEntry(logger).Println(args...) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warnln(args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warnln(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Warningln(args ...interface{}) { | ||||
| 	if logger.Level >= WarnLevel { | ||||
| 		NewEntry(logger).Warnln(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Errorln(args ...interface{}) { | ||||
| 	if logger.Level >= ErrorLevel { | ||||
| 		NewEntry(logger).Errorln(args...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Fatalln(args ...interface{}) { | ||||
| 	if logger.Level >= FatalLevel { | ||||
| 		NewEntry(logger).Fatalln(args...) | ||||
| 	} | ||||
| 	os.Exit(1) | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) Panicln(args ...interface{}) { | ||||
| 	if logger.Level >= PanicLevel { | ||||
| 		NewEntry(logger).Panicln(args...) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										98
									
								
								vendor/github.com/Sirupsen/logrus/logrus.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										98
									
								
								vendor/github.com/Sirupsen/logrus/logrus.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,98 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| ) | ||||
| 
 | ||||
| // Fields type, used to pass to `WithFields`.
 | ||||
| type Fields map[string]interface{} | ||||
| 
 | ||||
| // Level type
 | ||||
| type Level uint8 | ||||
| 
 | ||||
| // Convert the Level to a string. E.g. PanicLevel becomes "panic".
 | ||||
| func (level Level) String() string { | ||||
| 	switch level { | ||||
| 	case DebugLevel: | ||||
| 		return "debug" | ||||
| 	case InfoLevel: | ||||
| 		return "info" | ||||
| 	case WarnLevel: | ||||
| 		return "warning" | ||||
| 	case ErrorLevel: | ||||
| 		return "error" | ||||
| 	case FatalLevel: | ||||
| 		return "fatal" | ||||
| 	case PanicLevel: | ||||
| 		return "panic" | ||||
| 	} | ||||
| 
 | ||||
| 	return "unknown" | ||||
| } | ||||
| 
 | ||||
| // ParseLevel takes a string level and returns the Logrus log level constant.
 | ||||
| func ParseLevel(lvl string) (Level, error) { | ||||
| 	switch lvl { | ||||
| 	case "panic": | ||||
| 		return PanicLevel, nil | ||||
| 	case "fatal": | ||||
| 		return FatalLevel, nil | ||||
| 	case "error": | ||||
| 		return ErrorLevel, nil | ||||
| 	case "warn", "warning": | ||||
| 		return WarnLevel, nil | ||||
| 	case "info": | ||||
| 		return InfoLevel, nil | ||||
| 	case "debug": | ||||
| 		return DebugLevel, nil | ||||
| 	} | ||||
| 
 | ||||
| 	var l Level | ||||
| 	return l, fmt.Errorf("not a valid logrus Level: %q", lvl) | ||||
| } | ||||
| 
 | ||||
| // These are the different logging levels. You can set the logging level to log
 | ||||
| // on your instance of logger, obtained with `logrus.New()`.
 | ||||
| const ( | ||||
| 	// PanicLevel level, highest level of severity. Logs and then calls panic with the
 | ||||
| 	// message passed to Debug, Info, ...
 | ||||
| 	PanicLevel Level = iota | ||||
| 	// FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the
 | ||||
| 	// logging level is set to Panic.
 | ||||
| 	FatalLevel | ||||
| 	// ErrorLevel level. Logs. Used for errors that should definitely be noted.
 | ||||
| 	// Commonly used for hooks to send errors to an error tracking service.
 | ||||
| 	ErrorLevel | ||||
| 	// WarnLevel level. Non-critical entries that deserve eyes.
 | ||||
| 	WarnLevel | ||||
| 	// InfoLevel level. General operational entries about what's going on inside the
 | ||||
| 	// application.
 | ||||
| 	InfoLevel | ||||
| 	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
 | ||||
| 	DebugLevel | ||||
| ) | ||||
| 
 | ||||
| // Won't compile if StdLogger can't be realized by a log.Logger
 | ||||
| var ( | ||||
| 	_ StdLogger = &log.Logger{} | ||||
| 	_ StdLogger = &Entry{} | ||||
| 	_ StdLogger = &Logger{} | ||||
| ) | ||||
| 
 | ||||
| // StdLogger is what your logrus-enabled library should take, that way
 | ||||
| // it'll accept a stdlib logger and a logrus logger. There's no standard
 | ||||
| // interface, this is the closest we get, unfortunately.
 | ||||
| type StdLogger interface { | ||||
| 	Print(...interface{}) | ||||
| 	Printf(string, ...interface{}) | ||||
| 	Println(...interface{}) | ||||
| 
 | ||||
| 	Fatal(...interface{}) | ||||
| 	Fatalf(string, ...interface{}) | ||||
| 	Fatalln(...interface{}) | ||||
| 
 | ||||
| 	Panic(...interface{}) | ||||
| 	Panicf(string, ...interface{}) | ||||
| 	Panicln(...interface{}) | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/github.com/Sirupsen/logrus/terminal_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/Sirupsen/logrus/terminal_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,9 +0,0 @@ | ||||
| // +build darwin freebsd openbsd netbsd dragonfly
 | ||||
| 
 | ||||
| package logrus | ||||
| 
 | ||||
| import "syscall" | ||||
| 
 | ||||
| const ioctlReadTermios = syscall.TIOCGETA | ||||
| 
 | ||||
| type Termios syscall.Termios | ||||
							
								
								
									
										12
									
								
								vendor/github.com/Sirupsen/logrus/terminal_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/Sirupsen/logrus/terminal_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,12 +0,0 @@ | ||||
| // Based on ssh/terminal:
 | ||||
| // Copyright 2013 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package logrus | ||||
| 
 | ||||
| import "syscall" | ||||
| 
 | ||||
| const ioctlReadTermios = syscall.TCGETS | ||||
| 
 | ||||
| type Termios syscall.Termios | ||||
							
								
								
									
										21
									
								
								vendor/github.com/Sirupsen/logrus/terminal_notwindows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/Sirupsen/logrus/terminal_notwindows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,21 +0,0 @@ | ||||
| // Based on ssh/terminal:
 | ||||
| // Copyright 2011 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build linux darwin freebsd openbsd netbsd dragonfly
 | ||||
| 
 | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| // IsTerminal returns true if the given file descriptor is a terminal.
 | ||||
| func IsTerminal() bool { | ||||
| 	fd := syscall.Stdout | ||||
| 	var termios Termios | ||||
| 	_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) | ||||
| 	return err == 0 | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/github.com/Sirupsen/logrus/terminal_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/Sirupsen/logrus/terminal_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,27 +0,0 @@ | ||||
| // Based on ssh/terminal:
 | ||||
| // Copyright 2011 The Go Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a BSD-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| // +build windows
 | ||||
| 
 | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| var kernel32 = syscall.NewLazyDLL("kernel32.dll") | ||||
| 
 | ||||
| var ( | ||||
| 	procGetConsoleMode = kernel32.NewProc("GetConsoleMode") | ||||
| ) | ||||
| 
 | ||||
| // IsTerminal returns true if the given file descriptor is a terminal.
 | ||||
| func IsTerminal() bool { | ||||
| 	fd := syscall.Stdout | ||||
| 	var st uint32 | ||||
| 	r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) | ||||
| 	return r != 0 && e == 0 | ||||
| } | ||||
							
								
								
									
										159
									
								
								vendor/github.com/Sirupsen/logrus/text_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										159
									
								
								vendor/github.com/Sirupsen/logrus/text_formatter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,159 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"runtime" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	nocolor = 0 | ||||
| 	red     = 31 | ||||
| 	green   = 32 | ||||
| 	yellow  = 33 | ||||
| 	blue    = 34 | ||||
| 	gray    = 37 | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	baseTimestamp time.Time | ||||
| 	isTerminal    bool | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	baseTimestamp = time.Now() | ||||
| 	isTerminal = IsTerminal() | ||||
| } | ||||
| 
 | ||||
| func miniTS() int { | ||||
| 	return int(time.Since(baseTimestamp) / time.Second) | ||||
| } | ||||
| 
 | ||||
| type TextFormatter struct { | ||||
| 	// Set to true to bypass checking for a TTY before outputting colors.
 | ||||
| 	ForceColors bool | ||||
| 
 | ||||
| 	// Force disabling colors.
 | ||||
| 	DisableColors bool | ||||
| 
 | ||||
| 	// Disable timestamp logging. useful when output is redirected to logging
 | ||||
| 	// system that already adds timestamps.
 | ||||
| 	DisableTimestamp bool | ||||
| 
 | ||||
| 	// Enable logging the full timestamp when a TTY is attached instead of just
 | ||||
| 	// the time passed since beginning of execution.
 | ||||
| 	FullTimestamp bool | ||||
| 
 | ||||
| 	// TimestampFormat to use for display when a full timestamp is printed
 | ||||
| 	TimestampFormat string | ||||
| 
 | ||||
| 	// The fields are sorted by default for a consistent output. For applications
 | ||||
| 	// that log extremely frequently and don't use the JSON formatter this may not
 | ||||
| 	// be desired.
 | ||||
| 	DisableSorting bool | ||||
| } | ||||
| 
 | ||||
| func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { | ||||
| 	var keys []string = make([]string, 0, len(entry.Data)) | ||||
| 	for k := range entry.Data { | ||||
| 		keys = append(keys, k) | ||||
| 	} | ||||
| 
 | ||||
| 	if !f.DisableSorting { | ||||
| 		sort.Strings(keys) | ||||
| 	} | ||||
| 
 | ||||
| 	b := &bytes.Buffer{} | ||||
| 
 | ||||
| 	prefixFieldClashes(entry.Data) | ||||
| 
 | ||||
| 	isColorTerminal := isTerminal && (runtime.GOOS != "windows") | ||||
| 	isColored := (f.ForceColors || isColorTerminal) && !f.DisableColors | ||||
| 
 | ||||
| 	timestampFormat := f.TimestampFormat | ||||
| 	if timestampFormat == "" { | ||||
| 		timestampFormat = DefaultTimestampFormat | ||||
| 	} | ||||
| 	if isColored { | ||||
| 		f.printColored(b, entry, keys, timestampFormat) | ||||
| 	} else { | ||||
| 		if !f.DisableTimestamp { | ||||
| 			f.appendKeyValue(b, "time", entry.Time.Format(timestampFormat)) | ||||
| 		} | ||||
| 		f.appendKeyValue(b, "level", entry.Level.String()) | ||||
| 		f.appendKeyValue(b, "msg", entry.Message) | ||||
| 		for _, key := range keys { | ||||
| 			f.appendKeyValue(b, key, entry.Data[key]) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	b.WriteByte('\n') | ||||
| 	return b.Bytes(), nil | ||||
| } | ||||
| 
 | ||||
| func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) { | ||||
| 	var levelColor int | ||||
| 	switch entry.Level { | ||||
| 	case DebugLevel: | ||||
| 		levelColor = gray | ||||
| 	case WarnLevel: | ||||
| 		levelColor = yellow | ||||
| 	case ErrorLevel, FatalLevel, PanicLevel: | ||||
| 		levelColor = red | ||||
| 	default: | ||||
| 		levelColor = blue | ||||
| 	} | ||||
| 
 | ||||
| 	levelText := strings.ToUpper(entry.Level.String())[0:4] | ||||
| 
 | ||||
| 	if !f.FullTimestamp { | ||||
| 		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, miniTS(), entry.Message) | ||||
| 	} else { | ||||
| 		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message) | ||||
| 	} | ||||
| 	for _, k := range keys { | ||||
| 		v := entry.Data[k] | ||||
| 		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=%+v", levelColor, k, v) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func needsQuoting(text string) bool { | ||||
| 	for _, ch := range text { | ||||
| 		if !((ch >= 'a' && ch <= 'z') || | ||||
| 			(ch >= 'A' && ch <= 'Z') || | ||||
| 			(ch >= '0' && ch <= '9') || | ||||
| 			ch == '-' || ch == '.') { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) { | ||||
| 
 | ||||
| 	b.WriteString(key) | ||||
| 	b.WriteByte('=') | ||||
| 
 | ||||
| 	switch value := value.(type) { | ||||
| 	case string: | ||||
| 		if needsQuoting(value) { | ||||
| 			b.WriteString(value) | ||||
| 		} else { | ||||
| 			fmt.Fprintf(b, "%q", value) | ||||
| 		} | ||||
| 	case error: | ||||
| 		errmsg := value.Error() | ||||
| 		if needsQuoting(errmsg) { | ||||
| 			b.WriteString(errmsg) | ||||
| 		} else { | ||||
| 			fmt.Fprintf(b, "%q", value) | ||||
| 		} | ||||
| 	default: | ||||
| 		fmt.Fprint(b, value) | ||||
| 	} | ||||
| 
 | ||||
| 	b.WriteByte(' ') | ||||
| } | ||||
							
								
								
									
										31
									
								
								vendor/github.com/Sirupsen/logrus/writer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/Sirupsen/logrus/writer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,31 +0,0 @@ | ||||
| package logrus | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"io" | ||||
| 	"runtime" | ||||
| ) | ||||
| 
 | ||||
| func (logger *Logger) Writer() *io.PipeWriter { | ||||
| 	reader, writer := io.Pipe() | ||||
| 
 | ||||
| 	go logger.writerScanner(reader) | ||||
| 	runtime.SetFinalizer(writer, writerFinalizer) | ||||
| 
 | ||||
| 	return writer | ||||
| } | ||||
| 
 | ||||
| func (logger *Logger) writerScanner(reader *io.PipeReader) { | ||||
| 	scanner := bufio.NewScanner(reader) | ||||
| 	for scanner.Scan() { | ||||
| 		logger.Print(scanner.Text()) | ||||
| 	} | ||||
| 	if err := scanner.Err(); err != nil { | ||||
| 		logger.Errorf("Error while reading from Writer: %s", err) | ||||
| 	} | ||||
| 	reader.Close() | ||||
| } | ||||
| 
 | ||||
| func writerFinalizer(writer *io.PipeWriter) { | ||||
| 	writer.Close() | ||||
| } | ||||
							
								
								
									
										23
									
								
								vendor/github.com/joho/godotenv/LICENCE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/joho/godotenv/LICENCE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,23 +0,0 @@ | ||||
| Copyright (c) 2013 John Barton | ||||
| 
 | ||||
| MIT License | ||||
| 
 | ||||
| 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. | ||||
| 
 | ||||
							
								
								
									
										127
									
								
								vendor/github.com/joho/godotenv/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										127
									
								
								vendor/github.com/joho/godotenv/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,127 +0,0 @@ | ||||
| # GoDotEnv [](https://app.wercker.com/project/bykey/507594c2ec7e60f19403a568dfea0f78) | ||||
| 
 | ||||
| A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file) | ||||
| 
 | ||||
| From the original Library: | ||||
| 
 | ||||
| > Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables. | ||||
| > | ||||
| > But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. Dotenv load variables from a .env file into ENV when the environment is bootstrapped. | ||||
| 
 | ||||
| It can be used as a library (for loading in env for your own daemons etc) or as a bin command. | ||||
| 
 | ||||
| There is test coverage and CI for both linuxish and windows environments, but I make no guarantees about the bin version working on windows. | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| As a library | ||||
| 
 | ||||
| ```shell | ||||
| go get github.com/joho/godotenv | ||||
| ``` | ||||
| 
 | ||||
| or if you want to use it as a bin command | ||||
| ```shell | ||||
| go get github.com/joho/godotenv/cmd/godotenv | ||||
| ``` | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| Add your application configuration to your `.env` file in the root of your project: | ||||
| 
 | ||||
| ```shell | ||||
| S3_BUCKET=YOURS3BUCKET | ||||
| SECRET_KEY=YOURSECRETKEYGOESHERE | ||||
| ``` | ||||
| 
 | ||||
| Then in your Go app you can do something like | ||||
| 
 | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
|     "github.com/joho/godotenv" | ||||
|     "log" | ||||
|     "os" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
|   err := godotenv.Load() | ||||
|   if err != nil { | ||||
|     log.Fatal("Error loading .env file") | ||||
|   } | ||||
| 
 | ||||
|   s3Bucket := os.Getenv("S3_BUCKET") | ||||
|   secretKey := os.Getenv("SECRET_KEY") | ||||
| 
 | ||||
|   // now do something with s3 or whatever | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| If you're even lazier than that, you can just take advantage of the autoload package which will read in `.env` on import | ||||
| 
 | ||||
| ```go | ||||
| import _ "github.com/joho/godotenv/autoload" | ||||
| ``` | ||||
| 
 | ||||
| While `.env` in the project root is the default, you don't have to be constrained, both examples below are 100% legit | ||||
| 
 | ||||
| ```go | ||||
| _ = godotenv.Load("somerandomfile") | ||||
| _ = godotenv.Load("filenumberone.env", "filenumbertwo.env") | ||||
| ``` | ||||
| 
 | ||||
| If you want to be really fancy with your env file you can do comments and exports (below is a valid env file) | ||||
| 
 | ||||
| ```shell | ||||
| # I am a comment and that is OK | ||||
| SOME_VAR=someval | ||||
| FOO=BAR # comments at line end are OK too | ||||
| export BAR=BAZ | ||||
| ``` | ||||
| 
 | ||||
| Or finally you can do YAML(ish) style | ||||
| 
 | ||||
| ```yaml | ||||
| FOO: bar | ||||
| BAR: baz | ||||
| ``` | ||||
| 
 | ||||
| as a final aside, if you don't want godotenv munging your env you can just get a map back instead | ||||
| 
 | ||||
| ```go | ||||
| var myEnv map[string]string | ||||
| myEnv, err := godotenv.Read() | ||||
| 
 | ||||
| s3Bucket := myEnv["S3_BUCKET"] | ||||
| ``` | ||||
| 
 | ||||
| ### Command Mode | ||||
| 
 | ||||
| Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH` | ||||
| 
 | ||||
| ``` | ||||
| godotenv -f /some/path/to/.env some_command with some args | ||||
| ``` | ||||
| 
 | ||||
| If you don't specify `-f` it will fall back on the default of loading `.env` in `PWD` | ||||
| 
 | ||||
| ## Contributing | ||||
| 
 | ||||
| Contributions are most welcome! The parser itself is pretty stupidly naive and I wouldn't be surprised if it breaks with edge cases. | ||||
| 
 | ||||
| *code changes without tests will not be accepted* | ||||
| 
 | ||||
| 1. Fork it | ||||
| 2. Create your feature branch (`git checkout -b my-new-feature`) | ||||
| 3. Commit your changes (`git commit -am 'Added some feature'`) | ||||
| 4. Push to the branch (`git push origin my-new-feature`) | ||||
| 5. Create new Pull Request | ||||
| 
 | ||||
| ## CI | ||||
| 
 | ||||
| Linux: [](https://app.wercker.com/project/bykey/507594c2ec7e60f19403a568dfea0f78) Windows: [](https://ci.appveyor.com/project/joho/godotenv) | ||||
| 
 | ||||
| ## Who? | ||||
| 
 | ||||
| The original library [dotenv](https://github.com/bkeepers/dotenv) was written by [Brandon Keepers](http://opensoul.org/), and this port was done by [John Barton](http://whoisjohnbarton.com) based off the tests/fixtures in the original library. | ||||
							
								
								
									
										229
									
								
								vendor/github.com/joho/godotenv/godotenv.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										229
									
								
								vendor/github.com/joho/godotenv/godotenv.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,229 +0,0 @@ | ||||
| // Package godotenv is a go port of the ruby dotenv library (https://github.com/bkeepers/dotenv)
 | ||||
| //
 | ||||
| // Examples/readme can be found on the github page at https://github.com/joho/godotenv
 | ||||
| //
 | ||||
| // The TL;DR is that you make a .env file that looks something like
 | ||||
| //
 | ||||
| // 		SOME_ENV_VAR=somevalue
 | ||||
| //
 | ||||
| // and then in your go code you can call
 | ||||
| //
 | ||||
| // 		godotenv.Load()
 | ||||
| //
 | ||||
| // and all the env vars declared in .env will be avaiable through os.Getenv("SOME_ENV_VAR")
 | ||||
| package godotenv | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"errors" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // Load will read your env file(s) and load them into ENV for this process.
 | ||||
| //
 | ||||
| // Call this function as close as possible to the start of your program (ideally in main)
 | ||||
| //
 | ||||
| // If you call Load without any args it will default to loading .env in the current path
 | ||||
| //
 | ||||
| // You can otherwise tell it which files to load (there can be more than one) like
 | ||||
| //
 | ||||
| //		godotenv.Load("fileone", "filetwo")
 | ||||
| //
 | ||||
| // It's important to note that it WILL NOT OVERRIDE an env variable that already exists - consider the .env file to set dev vars or sensible defaults
 | ||||
| func Load(filenames ...string) (err error) { | ||||
| 	filenames = filenamesOrDefault(filenames) | ||||
| 
 | ||||
| 	for _, filename := range filenames { | ||||
| 		err = loadFile(filename, false) | ||||
| 		if err != nil { | ||||
| 			return // return early on a spazout
 | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Overload will read your env file(s) and load them into ENV for this process.
 | ||||
| //
 | ||||
| // Call this function as close as possible to the start of your program (ideally in main)
 | ||||
| //
 | ||||
| // If you call Overload without any args it will default to loading .env in the current path
 | ||||
| //
 | ||||
| // You can otherwise tell it which files to load (there can be more than one) like
 | ||||
| //
 | ||||
| //		godotenv.Overload("fileone", "filetwo")
 | ||||
| //
 | ||||
| // It's important to note this WILL OVERRIDE an env variable that already exists - consider the .env file to forcefilly set all vars.
 | ||||
| func Overload(filenames ...string) (err error) { | ||||
| 	filenames = filenamesOrDefault(filenames) | ||||
| 
 | ||||
| 	for _, filename := range filenames { | ||||
| 		err = loadFile(filename, true) | ||||
| 		if err != nil { | ||||
| 			return // return early on a spazout
 | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Read all env (with same file loading semantics as Load) but return values as
 | ||||
| // a map rather than automatically writing values into env
 | ||||
| func Read(filenames ...string) (envMap map[string]string, err error) { | ||||
| 	filenames = filenamesOrDefault(filenames) | ||||
| 	envMap = make(map[string]string) | ||||
| 
 | ||||
| 	for _, filename := range filenames { | ||||
| 		individualEnvMap, individualErr := readFile(filename) | ||||
| 
 | ||||
| 		if individualErr != nil { | ||||
| 			err = individualErr | ||||
| 			return // return early on a spazout
 | ||||
| 		} | ||||
| 
 | ||||
| 		for key, value := range individualEnvMap { | ||||
| 			envMap[key] = value | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Exec loads env vars from the specified filenames (empty map falls back to default)
 | ||||
| // then executes the cmd specified.
 | ||||
| //
 | ||||
| // Simply hooks up os.Stdin/err/out to the command and calls Run()
 | ||||
| //
 | ||||
| // If you want more fine grained control over your command it's recommended
 | ||||
| // that you use `Load()` or `Read()` and the `os/exec` package yourself.
 | ||||
| func Exec(filenames []string, cmd string, cmdArgs []string) error { | ||||
| 	Load(filenames...) | ||||
| 
 | ||||
| 	command := exec.Command(cmd, cmdArgs...) | ||||
| 	command.Stdin = os.Stdin | ||||
| 	command.Stdout = os.Stdout | ||||
| 	command.Stderr = os.Stderr | ||||
| 	return command.Run() | ||||
| } | ||||
| 
 | ||||
| func filenamesOrDefault(filenames []string) []string { | ||||
| 	if len(filenames) == 0 { | ||||
| 		return []string{".env"} | ||||
| 	} | ||||
| 	return filenames | ||||
| } | ||||
| 
 | ||||
| func loadFile(filename string, overload bool) error { | ||||
| 	envMap, err := readFile(filename) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	for key, value := range envMap { | ||||
| 		if os.Getenv(key) == "" || overload { | ||||
| 			os.Setenv(key, value) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func readFile(filename string) (envMap map[string]string, err error) { | ||||
| 	file, err := os.Open(filename) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer file.Close() | ||||
| 
 | ||||
| 	envMap = make(map[string]string) | ||||
| 
 | ||||
| 	var lines []string | ||||
| 	scanner := bufio.NewScanner(file) | ||||
| 	for scanner.Scan() { | ||||
| 		lines = append(lines, scanner.Text()) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, fullLine := range lines { | ||||
| 		if !isIgnoredLine(fullLine) { | ||||
| 			key, value, err := parseLine(fullLine) | ||||
| 
 | ||||
| 			if err == nil { | ||||
| 				envMap[key] = value | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func parseLine(line string) (key string, value string, err error) { | ||||
| 	if len(line) == 0 { | ||||
| 		err = errors.New("zero length string") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// ditch the comments (but keep quoted hashes)
 | ||||
| 	if strings.Contains(line, "#") { | ||||
| 		segmentsBetweenHashes := strings.Split(line, "#") | ||||
| 		quotesAreOpen := false | ||||
| 		var segmentsToKeep []string | ||||
| 		for _, segment := range segmentsBetweenHashes { | ||||
| 			if strings.Count(segment, "\"") == 1 || strings.Count(segment, "'") == 1 { | ||||
| 				if quotesAreOpen { | ||||
| 					quotesAreOpen = false | ||||
| 					segmentsToKeep = append(segmentsToKeep, segment) | ||||
| 				} else { | ||||
| 					quotesAreOpen = true | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			if len(segmentsToKeep) == 0 || quotesAreOpen { | ||||
| 				segmentsToKeep = append(segmentsToKeep, segment) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		line = strings.Join(segmentsToKeep, "#") | ||||
| 	} | ||||
| 
 | ||||
| 	// now split key from value
 | ||||
| 	splitString := strings.SplitN(line, "=", 2) | ||||
| 
 | ||||
| 	if len(splitString) != 2 { | ||||
| 		// try yaml mode!
 | ||||
| 		splitString = strings.SplitN(line, ":", 2) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(splitString) != 2 { | ||||
| 		err = errors.New("Can't separate key from value") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// Parse the key
 | ||||
| 	key = splitString[0] | ||||
| 	if strings.HasPrefix(key, "export") { | ||||
| 		key = strings.TrimPrefix(key, "export") | ||||
| 	} | ||||
| 	key = strings.Trim(key, " ") | ||||
| 
 | ||||
| 	// Parse the value
 | ||||
| 	value = splitString[1] | ||||
| 	// trim
 | ||||
| 	value = strings.Trim(value, " ") | ||||
| 
 | ||||
| 	// check if we've got quoted values
 | ||||
| 	if strings.Count(value, "\"") == 2 || strings.Count(value, "'") == 2 { | ||||
| 		// pull the quotes off the edges
 | ||||
| 		value = strings.Trim(value, "\"'") | ||||
| 
 | ||||
| 		// expand quotes
 | ||||
| 		value = strings.Replace(value, "\\\"", "\"", -1) | ||||
| 		// expand newlines
 | ||||
| 		value = strings.Replace(value, "\\n", "\n", -1) | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func isIgnoredLine(line string) bool { | ||||
| 	trimmedLine := strings.Trim(line, " \n\t") | ||||
| 	return len(trimmedLine) == 0 || strings.HasPrefix(trimmedLine, "#") | ||||
| } | ||||
							
								
								
									
										1
									
								
								vendor/github.com/joho/godotenv/wercker.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/joho/godotenv/wercker.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1 +0,0 @@ | ||||
| box: pjvds/golang | ||||
							
								
								
									
										336
									
								
								vendor/github.com/urfave/cli/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										336
									
								
								vendor/github.com/urfave/cli/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,336 +0,0 @@ | ||||
| # Change Log | ||||
| 
 | ||||
| **ATTN**: This project uses [semantic versioning](http://semver.org/). | ||||
| 
 | ||||
| ## [Unreleased] | ||||
| ### Added | ||||
| - Flag type code generation via `go generate` | ||||
| - Write to stderr and exit 1 if action returns non-nil error | ||||
| - Added support for TOML to the `altsrc` loader | ||||
| 
 | ||||
| ### Changed | ||||
| - Raise minimum tested/supported Go version to 1.2+ | ||||
| 
 | ||||
| ## [1.18.0] - 2016-06-27 | ||||
| ### Added | ||||
| - `./runtests` test runner with coverage tracking by default | ||||
| - testing on OS X | ||||
| - testing on Windows | ||||
| - `UintFlag`, `Uint64Flag`, and `Int64Flag` types and supporting code | ||||
| 
 | ||||
| ### Changed | ||||
| - Use spaces for alignment in help/usage output instead of tabs, making the | ||||
|   output alignment consistent regardless of tab width | ||||
| 
 | ||||
| ### Fixed | ||||
| - Printing of command aliases in help text | ||||
| - Printing of visible flags for both struct and struct pointer flags | ||||
| - Display the `help` subcommand when using `CommandCategories` | ||||
| - No longer swallows `panic`s that occur within the `Action`s themselves when | ||||
|   detecting the signature of the `Action` field | ||||
| 
 | ||||
| ## [1.17.0] - 2016-05-09 | ||||
| ### Added | ||||
| - Pluggable flag-level help text rendering via `cli.DefaultFlagStringFunc` | ||||
| - `context.GlobalBoolT` was added as an analogue to `context.GlobalBool` | ||||
| - Support for hiding commands by setting `Hidden: true` -- this will hide the | ||||
|   commands in help output | ||||
| 
 | ||||
| ### Changed | ||||
| - `Float64Flag`, `IntFlag`, and `DurationFlag` default values are no longer | ||||
|   quoted in help text output. | ||||
| - All flag types now include `(default: {value})` strings following usage when a | ||||
|   default value can be (reasonably) detected. | ||||
| - `IntSliceFlag` and `StringSliceFlag` usage strings are now more consistent | ||||
|   with non-slice flag types | ||||
| - Apps now exit with a code of 3 if an unknown subcommand is specified | ||||
|   (previously they printed "No help topic for...", but still exited 0. This | ||||
|   makes it easier to script around apps built using `cli` since they can trust | ||||
|   that a 0 exit code indicated a successful execution. | ||||
| - cleanups based on [Go Report Card | ||||
|   feedback](https://goreportcard.com/report/github.com/urfave/cli) | ||||
| 
 | ||||
| ## [1.16.0] - 2016-05-02 | ||||
| ### Added | ||||
| - `Hidden` field on all flag struct types to omit from generated help text | ||||
| 
 | ||||
| ### Changed | ||||
| - `BashCompletionFlag` (`--enable-bash-completion`) is now omitted from | ||||
| generated help text via the `Hidden` field | ||||
| 
 | ||||
| ### Fixed | ||||
| - handling of error values in `HandleAction` and `HandleExitCoder` | ||||
| 
 | ||||
| ## [1.15.0] - 2016-04-30 | ||||
| ### Added | ||||
| - This file! | ||||
| - Support for placeholders in flag usage strings | ||||
| - `App.Metadata` map for arbitrary data/state management | ||||
| - `Set` and `GlobalSet` methods on `*cli.Context` for altering values after | ||||
| parsing. | ||||
| - Support for nested lookup of dot-delimited keys in structures loaded from | ||||
| YAML. | ||||
| 
 | ||||
| ### Changed | ||||
| - The `App.Action` and `Command.Action` now prefer a return signature of | ||||
| `func(*cli.Context) error`, as defined by `cli.ActionFunc`.  If a non-nil | ||||
| `error` is returned, there may be two outcomes: | ||||
|     - If the error fulfills `cli.ExitCoder`, then `os.Exit` will be called | ||||
|     automatically | ||||
|     - Else the error is bubbled up and returned from `App.Run` | ||||
| - Specifying an `Action` with the legacy return signature of | ||||
| `func(*cli.Context)` will produce a deprecation message to stderr | ||||
| - Specifying an `Action` that is not a `func` type will produce a non-zero exit | ||||
| from `App.Run` | ||||
| - Specifying an `Action` func that has an invalid (input) signature will | ||||
| produce a non-zero exit from `App.Run` | ||||
| 
 | ||||
| ### Deprecated | ||||
| - <a name="deprecated-cli-app-runandexitonerror"></a> | ||||
| `cli.App.RunAndExitOnError`, which should now be done by returning an error | ||||
| that fulfills `cli.ExitCoder` to `cli.App.Run`. | ||||
| - <a name="deprecated-cli-app-action-signature"></a> the legacy signature for | ||||
| `cli.App.Action` of `func(*cli.Context)`, which should now have a return | ||||
| signature of `func(*cli.Context) error`, as defined by `cli.ActionFunc`. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Added missing `*cli.Context.GlobalFloat64` method | ||||
| 
 | ||||
| ## [1.14.0] - 2016-04-03 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Codebeat badge | ||||
| - Support for categorization via `CategorizedHelp` and `Categories` on app. | ||||
| 
 | ||||
| ### Changed | ||||
| - Use `filepath.Base` instead of `path.Base` in `Name` and `HelpName`. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Ensure version is not shown in help text when `HideVersion` set. | ||||
| 
 | ||||
| ## [1.13.0] - 2016-03-06 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - YAML file input support. | ||||
| - `NArg` method on context. | ||||
| 
 | ||||
| ## [1.12.0] - 2016-02-17 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Custom usage error handling. | ||||
| - Custom text support in `USAGE` section of help output. | ||||
| - Improved help messages for empty strings. | ||||
| - AppVeyor CI configuration. | ||||
| 
 | ||||
| ### Changed | ||||
| - Removed `panic` from default help printer func. | ||||
| - De-duping and optimizations. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Correctly handle `Before`/`After` at command level when no subcommands. | ||||
| - Case of literal `-` argument causing flag reordering. | ||||
| - Environment variable hints on Windows. | ||||
| - Docs updates. | ||||
| 
 | ||||
| ## [1.11.1] - 2015-12-21 (backfilled 2016-04-25) | ||||
| ### Changed | ||||
| - Use `path.Base` in `Name` and `HelpName` | ||||
| - Export `GetName` on flag types. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Flag parsing when skipping is enabled. | ||||
| - Test output cleanup. | ||||
| - Move completion check to account for empty input case. | ||||
| 
 | ||||
| ## [1.11.0] - 2015-11-15 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Destination scan support for flags. | ||||
| - Testing against `tip` in Travis CI config. | ||||
| 
 | ||||
| ### Changed | ||||
| - Go version in Travis CI config. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Removed redundant tests. | ||||
| - Use correct example naming in tests. | ||||
| 
 | ||||
| ## [1.10.2] - 2015-10-29 (backfilled 2016-04-25) | ||||
| ### Fixed | ||||
| - Remove unused var in bash completion. | ||||
| 
 | ||||
| ## [1.10.1] - 2015-10-21 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Coverage and reference logos in README. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Use specified values in help and version parsing. | ||||
| - Only display app version and help message once. | ||||
| 
 | ||||
| ## [1.10.0] - 2015-10-06 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - More tests for existing functionality. | ||||
| - `ArgsUsage` at app and command level for help text flexibility. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Honor `HideHelp` and `HideVersion` in `App.Run`. | ||||
| - Remove juvenile word from README. | ||||
| 
 | ||||
| ## [1.9.0] - 2015-09-08 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `FullName` on command with accompanying help output update. | ||||
| - Set default `$PROG` in bash completion. | ||||
| 
 | ||||
| ### Changed | ||||
| - Docs formatting. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Removed self-referential imports in tests. | ||||
| 
 | ||||
| ## [1.8.0] - 2015-06-30 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for `Copyright` at app level. | ||||
| - `Parent` func at context level to walk up context lineage. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Global flag processing at top level. | ||||
| 
 | ||||
| ## [1.7.1] - 2015-06-11 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Aggregate errors from `Before`/`After` funcs. | ||||
| - Doc comments on flag structs. | ||||
| - Include non-global flags when checking version and help. | ||||
| - Travis CI config updates. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Ensure slice type flags have non-nil values. | ||||
| - Collect global flags from the full command hierarchy. | ||||
| - Docs prose. | ||||
| 
 | ||||
| ## [1.7.0] - 2015-05-03 (backfilled 2016-04-25) | ||||
| ### Changed | ||||
| - `HelpPrinter` signature includes output writer. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Specify go 1.1+ in docs. | ||||
| - Set `Writer` when running command as app. | ||||
| 
 | ||||
| ## [1.6.0] - 2015-03-23 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Multiple author support. | ||||
| - `NumFlags` at context level. | ||||
| - `Aliases` at command level. | ||||
| 
 | ||||
| ### Deprecated | ||||
| - `ShortName` at command level. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Subcommand help output. | ||||
| - Backward compatible support for deprecated `Author` and `Email` fields. | ||||
| - Docs regarding `Names`/`Aliases`. | ||||
| 
 | ||||
| ## [1.5.0] - 2015-02-20 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `After` hook func support at app and command level. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Use parsed context when running command as subcommand. | ||||
| - Docs prose. | ||||
| 
 | ||||
| ## [1.4.1] - 2015-01-09 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for hiding `-h / --help` flags, but not `help` subcommand. | ||||
| - Stop flag parsing after `--`. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Help text for generic flags to specify single value. | ||||
| - Use double quotes in output for defaults. | ||||
| - Use `ParseInt` instead of `ParseUint` for int environment var values. | ||||
| - Use `0` as base when parsing int environment var values. | ||||
| 
 | ||||
| ## [1.4.0] - 2014-12-12 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for environment variable lookup "cascade". | ||||
| - Support for `Stdout` on app for output redirection. | ||||
| 
 | ||||
| ### Fixed | ||||
| - Print command help instead of app help in `ShowCommandHelp`. | ||||
| 
 | ||||
| ## [1.3.1] - 2014-11-13 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Docs and example code updates. | ||||
| 
 | ||||
| ### Changed | ||||
| - Default `-v / --version` flag made optional. | ||||
| 
 | ||||
| ## [1.3.0] - 2014-08-10 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `FlagNames` at context level. | ||||
| - Exposed `VersionPrinter` var for more control over version output. | ||||
| - Zsh completion hook. | ||||
| - `AUTHOR` section in default app help template. | ||||
| - Contribution guidelines. | ||||
| - `DurationFlag` type. | ||||
| 
 | ||||
| ## [1.2.0] - 2014-08-02 | ||||
| ### Added | ||||
| - Support for environment variable defaults on flags plus tests. | ||||
| 
 | ||||
| ## [1.1.0] - 2014-07-15 | ||||
| ### Added | ||||
| - Bash completion. | ||||
| - Optional hiding of built-in help command. | ||||
| - Optional skipping of flag parsing at command level. | ||||
| - `Author`, `Email`, and `Compiled` metadata on app. | ||||
| - `Before` hook func support at app and command level. | ||||
| - `CommandNotFound` func support at app level. | ||||
| - Command reference available on context. | ||||
| - `GenericFlag` type. | ||||
| - `Float64Flag` type. | ||||
| - `BoolTFlag` type. | ||||
| - `IsSet` flag helper on context. | ||||
| - More flag lookup funcs at context level. | ||||
| - More tests & docs. | ||||
| 
 | ||||
| ### Changed | ||||
| - Help template updates to account for presence/absence of flags. | ||||
| - Separated subcommand help template. | ||||
| - Exposed `HelpPrinter` var for more control over help output. | ||||
| 
 | ||||
| ## [1.0.0] - 2013-11-01 | ||||
| ### Added | ||||
| - `help` flag in default app flag set and each command flag set. | ||||
| - Custom handling of argument parsing errors. | ||||
| - Command lookup by name at app level. | ||||
| - `StringSliceFlag` type and supporting `StringSlice` type. | ||||
| - `IntSliceFlag` type and supporting `IntSlice` type. | ||||
| - Slice type flag lookups by name at context level. | ||||
| - Export of app and command help functions. | ||||
| - More tests & docs. | ||||
| 
 | ||||
| ## 0.1.0 - 2013-07-22 | ||||
| ### Added | ||||
| - Initial implementation. | ||||
| 
 | ||||
| [Unreleased]: https://github.com/urfave/cli/compare/v1.18.0...HEAD | ||||
| [1.18.0]: https://github.com/urfave/cli/compare/v1.17.0...v1.18.0 | ||||
| [1.17.0]: https://github.com/urfave/cli/compare/v1.16.0...v1.17.0 | ||||
| [1.16.0]: https://github.com/urfave/cli/compare/v1.15.0...v1.16.0 | ||||
| [1.15.0]: https://github.com/urfave/cli/compare/v1.14.0...v1.15.0 | ||||
| [1.14.0]: https://github.com/urfave/cli/compare/v1.13.0...v1.14.0 | ||||
| [1.13.0]: https://github.com/urfave/cli/compare/v1.12.0...v1.13.0 | ||||
| [1.12.0]: https://github.com/urfave/cli/compare/v1.11.1...v1.12.0 | ||||
| [1.11.1]: https://github.com/urfave/cli/compare/v1.11.0...v1.11.1 | ||||
| [1.11.0]: https://github.com/urfave/cli/compare/v1.10.2...v1.11.0 | ||||
| [1.10.2]: https://github.com/urfave/cli/compare/v1.10.1...v1.10.2 | ||||
| [1.10.1]: https://github.com/urfave/cli/compare/v1.10.0...v1.10.1 | ||||
| [1.10.0]: https://github.com/urfave/cli/compare/v1.9.0...v1.10.0 | ||||
| [1.9.0]: https://github.com/urfave/cli/compare/v1.8.0...v1.9.0 | ||||
| [1.8.0]: https://github.com/urfave/cli/compare/v1.7.1...v1.8.0 | ||||
| [1.7.1]: https://github.com/urfave/cli/compare/v1.7.0...v1.7.1 | ||||
| [1.7.0]: https://github.com/urfave/cli/compare/v1.6.0...v1.7.0 | ||||
| [1.6.0]: https://github.com/urfave/cli/compare/v1.5.0...v1.6.0 | ||||
| [1.5.0]: https://github.com/urfave/cli/compare/v1.4.1...v1.5.0 | ||||
| [1.4.1]: https://github.com/urfave/cli/compare/v1.4.0...v1.4.1 | ||||
| [1.4.0]: https://github.com/urfave/cli/compare/v1.3.1...v1.4.0 | ||||
| [1.3.1]: https://github.com/urfave/cli/compare/v1.3.0...v1.3.1 | ||||
| [1.3.0]: https://github.com/urfave/cli/compare/v1.2.0...v1.3.0 | ||||
| [1.2.0]: https://github.com/urfave/cli/compare/v1.1.0...v1.2.0 | ||||
| [1.1.0]: https://github.com/urfave/cli/compare/v1.0.0...v1.1.0 | ||||
| [1.0.0]: https://github.com/urfave/cli/compare/v0.1.0...v1.0.0 | ||||
							
								
								
									
										21
									
								
								vendor/github.com/urfave/cli/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/urfave/cli/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,21 +0,0 @@ | ||||
| MIT License | ||||
| 
 | ||||
| Copyright (c) 2016 Jeremy Saenz & Contributors | ||||
| 
 | ||||
| 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. | ||||
							
								
								
									
										1311
									
								
								vendor/github.com/urfave/cli/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1311
									
								
								vendor/github.com/urfave/cli/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										502
									
								
								vendor/github.com/urfave/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										502
									
								
								vendor/github.com/urfave/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,502 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"reflect" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	changeLogURL                    = "https://github.com/urfave/cli/blob/master/CHANGELOG.md" | ||||
| 	appActionDeprecationURL         = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL) | ||||
| 	runAndExitOnErrorDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-runandexitonerror", changeLogURL) | ||||
| 
 | ||||
| 	contactSysadmin = "This is an error in the application.  Please contact the distributor of this application if this is not you." | ||||
| 
 | ||||
| 	errNonFuncAction = NewExitError("ERROR invalid Action type.  "+ | ||||
| 		fmt.Sprintf("Must be a func of type `cli.ActionFunc`.  %s", contactSysadmin)+ | ||||
| 		fmt.Sprintf("See %s", appActionDeprecationURL), 2) | ||||
| 	errInvalidActionSignature = NewExitError("ERROR invalid Action signature.  "+ | ||||
| 		fmt.Sprintf("Must be `cli.ActionFunc`.  %s", contactSysadmin)+ | ||||
| 		fmt.Sprintf("See %s", appActionDeprecationURL), 2) | ||||
| ) | ||||
| 
 | ||||
| // App is the main structure of a cli application. It is recommended that
 | ||||
| // an app be created with the cli.NewApp() function
 | ||||
| type App struct { | ||||
| 	// The name of the program. Defaults to path.Base(os.Args[0])
 | ||||
| 	Name string | ||||
| 	// Full name of command for help, defaults to Name
 | ||||
| 	HelpName string | ||||
| 	// Description of the program.
 | ||||
| 	Usage string | ||||
| 	// Text to override the USAGE section of help
 | ||||
| 	UsageText string | ||||
| 	// Description of the program argument format.
 | ||||
| 	ArgsUsage string | ||||
| 	// Version of the program
 | ||||
| 	Version string | ||||
| 	// List of commands to execute
 | ||||
| 	Commands []Command | ||||
| 	// List of flags to parse
 | ||||
| 	Flags []Flag | ||||
| 	// Boolean to enable bash completion commands
 | ||||
| 	EnableBashCompletion bool | ||||
| 	// Boolean to hide built-in help command
 | ||||
| 	HideHelp bool | ||||
| 	// Boolean to hide built-in version flag and the VERSION section of help
 | ||||
| 	HideVersion bool | ||||
| 	// Populate on app startup, only gettable through method Categories()
 | ||||
| 	categories CommandCategories | ||||
| 	// An action to execute when the bash-completion flag is set
 | ||||
| 	BashComplete BashCompleteFunc | ||||
| 	// An action to execute before any subcommands are run, but after the context is ready
 | ||||
| 	// If a non-nil error is returned, no subcommands are run
 | ||||
| 	Before BeforeFunc | ||||
| 	// An action to execute after any subcommands are run, but after the subcommand has finished
 | ||||
| 	// It is run even if Action() panics
 | ||||
| 	After AfterFunc | ||||
| 
 | ||||
| 	// The action to execute when no subcommands are specified
 | ||||
| 	// Expects a `cli.ActionFunc` but will accept the *deprecated* signature of `func(*cli.Context) {}`
 | ||||
| 	// *Note*: support for the deprecated `Action` signature will be removed in a future version
 | ||||
| 	Action interface{} | ||||
| 
 | ||||
| 	// Execute this function if the proper command cannot be found
 | ||||
| 	CommandNotFound CommandNotFoundFunc | ||||
| 	// Execute this function if an usage error occurs
 | ||||
| 	OnUsageError OnUsageErrorFunc | ||||
| 	// Compilation date
 | ||||
| 	Compiled time.Time | ||||
| 	// List of all authors who contributed
 | ||||
| 	Authors []Author | ||||
| 	// Copyright of the binary if any
 | ||||
| 	Copyright string | ||||
| 	// Name of Author (Note: Use App.Authors, this is deprecated)
 | ||||
| 	Author string | ||||
| 	// Email of Author (Note: Use App.Authors, this is deprecated)
 | ||||
| 	Email string | ||||
| 	// Writer writer to write output to
 | ||||
| 	Writer io.Writer | ||||
| 	// ErrWriter writes error output
 | ||||
| 	ErrWriter io.Writer | ||||
| 	// Other custom info
 | ||||
| 	Metadata map[string]interface{} | ||||
| 
 | ||||
| 	didSetup bool | ||||
| } | ||||
| 
 | ||||
| // Tries to find out when this binary was compiled.
 | ||||
| // Returns the current time if it fails to find it.
 | ||||
| func compileTime() time.Time { | ||||
| 	info, err := os.Stat(os.Args[0]) | ||||
| 	if err != nil { | ||||
| 		return time.Now() | ||||
| 	} | ||||
| 	return info.ModTime() | ||||
| } | ||||
| 
 | ||||
| // NewApp creates a new cli Application with some reasonable defaults for Name,
 | ||||
| // Usage, Version and Action.
 | ||||
| func NewApp() *App { | ||||
| 	return &App{ | ||||
| 		Name:         filepath.Base(os.Args[0]), | ||||
| 		HelpName:     filepath.Base(os.Args[0]), | ||||
| 		Usage:        "A new cli application", | ||||
| 		UsageText:    "", | ||||
| 		Version:      "0.0.0", | ||||
| 		BashComplete: DefaultAppComplete, | ||||
| 		Action:       helpCommand.Action, | ||||
| 		Compiled:     compileTime(), | ||||
| 		Writer:       os.Stdout, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Setup runs initialization code to ensure all data structures are ready for
 | ||||
| // `Run` or inspection prior to `Run`.  It is internally called by `Run`, but
 | ||||
| // will return early if setup has already happened.
 | ||||
| func (a *App) Setup() { | ||||
| 	if a.didSetup { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	a.didSetup = true | ||||
| 
 | ||||
| 	if a.Author != "" || a.Email != "" { | ||||
| 		a.Authors = append(a.Authors, Author{Name: a.Author, Email: a.Email}) | ||||
| 	} | ||||
| 
 | ||||
| 	newCmds := []Command{} | ||||
| 	for _, c := range a.Commands { | ||||
| 		if c.HelpName == "" { | ||||
| 			c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name) | ||||
| 		} | ||||
| 		newCmds = append(newCmds, c) | ||||
| 	} | ||||
| 	a.Commands = newCmds | ||||
| 
 | ||||
| 	if a.Command(helpCommand.Name) == nil && !a.HideHelp { | ||||
| 		a.Commands = append(a.Commands, helpCommand) | ||||
| 		if (HelpFlag != BoolFlag{}) { | ||||
| 			a.appendFlag(HelpFlag) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if a.EnableBashCompletion { | ||||
| 		a.appendFlag(BashCompletionFlag) | ||||
| 	} | ||||
| 
 | ||||
| 	if !a.HideVersion { | ||||
| 		a.appendFlag(VersionFlag) | ||||
| 	} | ||||
| 
 | ||||
| 	a.categories = CommandCategories{} | ||||
| 	for _, command := range a.Commands { | ||||
| 		a.categories = a.categories.AddCommand(command.Category, command) | ||||
| 	} | ||||
| 	sort.Sort(a.categories) | ||||
| 
 | ||||
| 	if a.Metadata == nil { | ||||
| 		a.Metadata = make(map[string]interface{}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Run is the entry point to the cli app. Parses the arguments slice and routes
 | ||||
| // to the proper flag/args combination
 | ||||
| func (a *App) Run(arguments []string) (err error) { | ||||
| 	a.Setup() | ||||
| 
 | ||||
| 	// parse flags
 | ||||
| 	set := flagSet(a.Name, a.Flags) | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 	err = set.Parse(arguments[1:]) | ||||
| 	nerr := normalizeFlags(a.Flags, set) | ||||
| 	context := NewContext(a, set, nil) | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(a.Writer, nerr) | ||||
| 		ShowAppHelp(context) | ||||
| 		return nerr | ||||
| 	} | ||||
| 
 | ||||
| 	if checkCompletions(context) { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		if a.OnUsageError != nil { | ||||
| 			err := a.OnUsageError(context, err, false) | ||||
| 			HandleExitCoder(err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintf(a.Writer, "%s\n\n", "Incorrect Usage.") | ||||
| 		ShowAppHelp(context) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if !a.HideHelp && checkHelp(context) { | ||||
| 		ShowAppHelp(context) | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if !a.HideVersion && checkVersion(context) { | ||||
| 		ShowVersion(context) | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if a.After != nil { | ||||
| 		defer func() { | ||||
| 			if afterErr := a.After(context); afterErr != nil { | ||||
| 				if err != nil { | ||||
| 					err = NewMultiError(err, afterErr) | ||||
| 				} else { | ||||
| 					err = afterErr | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 	} | ||||
| 
 | ||||
| 	if a.Before != nil { | ||||
| 		beforeErr := a.Before(context) | ||||
| 		if beforeErr != nil { | ||||
| 			fmt.Fprintf(a.Writer, "%v\n\n", beforeErr) | ||||
| 			ShowAppHelp(context) | ||||
| 			HandleExitCoder(beforeErr) | ||||
| 			err = beforeErr | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	args := context.Args() | ||||
| 	if args.Present() { | ||||
| 		name := args.First() | ||||
| 		c := a.Command(name) | ||||
| 		if c != nil { | ||||
| 			return c.Run(context) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Run default Action
 | ||||
| 	err = HandleAction(a.Action, context) | ||||
| 
 | ||||
| 	HandleExitCoder(err) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // RunAndExitOnError calls .Run() and exits non-zero if an error was returned
 | ||||
| //
 | ||||
| // Deprecated: instead you should return an error that fulfills cli.ExitCoder
 | ||||
| // to cli.App.Run. This will cause the application to exit with the given eror
 | ||||
| // code in the cli.ExitCoder
 | ||||
| func (a *App) RunAndExitOnError() { | ||||
| 	if err := a.Run(os.Args); err != nil { | ||||
| 		fmt.Fprintln(a.errWriter(), err) | ||||
| 		OsExiter(1) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // RunAsSubcommand invokes the subcommand given the context, parses ctx.Args() to
 | ||||
| // generate command-specific flags
 | ||||
| func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 	// append help to commands
 | ||||
| 	if len(a.Commands) > 0 { | ||||
| 		if a.Command(helpCommand.Name) == nil && !a.HideHelp { | ||||
| 			a.Commands = append(a.Commands, helpCommand) | ||||
| 			if (HelpFlag != BoolFlag{}) { | ||||
| 				a.appendFlag(HelpFlag) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	newCmds := []Command{} | ||||
| 	for _, c := range a.Commands { | ||||
| 		if c.HelpName == "" { | ||||
| 			c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name) | ||||
| 		} | ||||
| 		newCmds = append(newCmds, c) | ||||
| 	} | ||||
| 	a.Commands = newCmds | ||||
| 
 | ||||
| 	// append flags
 | ||||
| 	if a.EnableBashCompletion { | ||||
| 		a.appendFlag(BashCompletionFlag) | ||||
| 	} | ||||
| 
 | ||||
| 	// parse flags
 | ||||
| 	set := flagSet(a.Name, a.Flags) | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 	err = set.Parse(ctx.Args().Tail()) | ||||
| 	nerr := normalizeFlags(a.Flags, set) | ||||
| 	context := NewContext(a, set, ctx) | ||||
| 
 | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(a.Writer, nerr) | ||||
| 		fmt.Fprintln(a.Writer) | ||||
| 		if len(a.Commands) > 0 { | ||||
| 			ShowSubcommandHelp(context) | ||||
| 		} else { | ||||
| 			ShowCommandHelp(ctx, context.Args().First()) | ||||
| 		} | ||||
| 		return nerr | ||||
| 	} | ||||
| 
 | ||||
| 	if checkCompletions(context) { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		if a.OnUsageError != nil { | ||||
| 			err = a.OnUsageError(context, err, true) | ||||
| 			HandleExitCoder(err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintf(a.Writer, "%s\n\n", "Incorrect Usage.") | ||||
| 		ShowSubcommandHelp(context) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if len(a.Commands) > 0 { | ||||
| 		if checkSubcommandHelp(context) { | ||||
| 			return nil | ||||
| 		} | ||||
| 	} else { | ||||
| 		if checkCommandHelp(ctx, context.Args().First()) { | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if a.After != nil { | ||||
| 		defer func() { | ||||
| 			afterErr := a.After(context) | ||||
| 			if afterErr != nil { | ||||
| 				HandleExitCoder(err) | ||||
| 				if err != nil { | ||||
| 					err = NewMultiError(err, afterErr) | ||||
| 				} else { | ||||
| 					err = afterErr | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 	} | ||||
| 
 | ||||
| 	if a.Before != nil { | ||||
| 		beforeErr := a.Before(context) | ||||
| 		if beforeErr != nil { | ||||
| 			HandleExitCoder(beforeErr) | ||||
| 			err = beforeErr | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	args := context.Args() | ||||
| 	if args.Present() { | ||||
| 		name := args.First() | ||||
| 		c := a.Command(name) | ||||
| 		if c != nil { | ||||
| 			return c.Run(context) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Run default Action
 | ||||
| 	err = HandleAction(a.Action, context) | ||||
| 
 | ||||
| 	HandleExitCoder(err) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // Command returns the named command on App. Returns nil if the command does not exist
 | ||||
| func (a *App) Command(name string) *Command { | ||||
| 	for _, c := range a.Commands { | ||||
| 		if c.HasName(name) { | ||||
| 			return &c | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Categories returns a slice containing all the categories with the commands they contain
 | ||||
| func (a *App) Categories() CommandCategories { | ||||
| 	return a.categories | ||||
| } | ||||
| 
 | ||||
| // VisibleCategories returns a slice of categories and commands that are
 | ||||
| // Hidden=false
 | ||||
| func (a *App) VisibleCategories() []*CommandCategory { | ||||
| 	ret := []*CommandCategory{} | ||||
| 	for _, category := range a.categories { | ||||
| 		if visible := func() *CommandCategory { | ||||
| 			for _, command := range category.Commands { | ||||
| 				if !command.Hidden { | ||||
| 					return category | ||||
| 				} | ||||
| 			} | ||||
| 			return nil | ||||
| 		}(); visible != nil { | ||||
| 			ret = append(ret, visible) | ||||
| 		} | ||||
| 	} | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| // VisibleCommands returns a slice of the Commands with Hidden=false
 | ||||
| func (a *App) VisibleCommands() []Command { | ||||
| 	ret := []Command{} | ||||
| 	for _, command := range a.Commands { | ||||
| 		if !command.Hidden { | ||||
| 			ret = append(ret, command) | ||||
| 		} | ||||
| 	} | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| // VisibleFlags returns a slice of the Flags with Hidden=false
 | ||||
| func (a *App) VisibleFlags() []Flag { | ||||
| 	return visibleFlags(a.Flags) | ||||
| } | ||||
| 
 | ||||
| func (a *App) hasFlag(flag Flag) bool { | ||||
| 	for _, f := range a.Flags { | ||||
| 		if flag == f { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (a *App) errWriter() io.Writer { | ||||
| 
 | ||||
| 	// When the app ErrWriter is nil use the package level one.
 | ||||
| 	if a.ErrWriter == nil { | ||||
| 		return ErrWriter | ||||
| 	} | ||||
| 
 | ||||
| 	return a.ErrWriter | ||||
| } | ||||
| 
 | ||||
| func (a *App) appendFlag(flag Flag) { | ||||
| 	if !a.hasFlag(flag) { | ||||
| 		a.Flags = append(a.Flags, flag) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Author represents someone who has contributed to a cli project.
 | ||||
| type Author struct { | ||||
| 	Name  string // The Authors name
 | ||||
| 	Email string // The Authors email
 | ||||
| } | ||||
| 
 | ||||
| // String makes Author comply to the Stringer interface, to allow an easy print in the templating process
 | ||||
| func (a Author) String() string { | ||||
| 	e := "" | ||||
| 	if a.Email != "" { | ||||
| 		e = "<" + a.Email + "> " | ||||
| 	} | ||||
| 
 | ||||
| 	return fmt.Sprintf("%v %v", a.Name, e) | ||||
| } | ||||
| 
 | ||||
| // HandleAction uses ✧✧✧reflection✧✧✧ to figure out if the given Action is an
 | ||||
| // ActionFunc, a func with the legacy signature for Action, or some other
 | ||||
| // invalid thing.  If it's an ActionFunc or a func with the legacy signature for
 | ||||
| // Action, the func is run!
 | ||||
| func HandleAction(action interface{}, context *Context) (err error) { | ||||
| 	defer func() { | ||||
| 		if r := recover(); r != nil { | ||||
| 			// Try to detect a known reflection error from *this scope*, rather than
 | ||||
| 			// swallowing all panics that may happen when calling an Action func.
 | ||||
| 			s := fmt.Sprintf("%v", r) | ||||
| 			if strings.HasPrefix(s, "reflect: ") && strings.Contains(s, "too many input arguments") { | ||||
| 				err = NewExitError(fmt.Sprintf("ERROR unknown Action error: %v.", r), 2) | ||||
| 			} else { | ||||
| 				panic(r) | ||||
| 			} | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	if reflect.TypeOf(action).Kind() != reflect.Func { | ||||
| 		return errNonFuncAction | ||||
| 	} | ||||
| 
 | ||||
| 	vals := reflect.ValueOf(action).Call([]reflect.Value{reflect.ValueOf(context)}) | ||||
| 
 | ||||
| 	if len(vals) == 0 { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if len(vals) > 1 { | ||||
| 		return errInvalidActionSignature | ||||
| 	} | ||||
| 
 | ||||
| 	if retErr, ok := vals[0].Interface().(error); vals[0].IsValid() && ok { | ||||
| 		return retErr | ||||
| 	} | ||||
| 
 | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										24
									
								
								vendor/github.com/urfave/cli/appveyor.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/urfave/cli/appveyor.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,24 +0,0 @@ | ||||
| version: "{build}" | ||||
| 
 | ||||
| os: Windows Server 2012 R2 | ||||
| 
 | ||||
| clone_folder: c:\gopath\src\github.com\urfave\cli | ||||
| 
 | ||||
| environment: | ||||
|   GOPATH: C:\gopath | ||||
|   GOVERSION: 1.6 | ||||
|   PYTHON: C:\Python27-x64 | ||||
|   PYTHON_VERSION: 2.7.x | ||||
|   PYTHON_ARCH: 64 | ||||
| 
 | ||||
| install: | ||||
| - set PATH=%GOPATH%\bin;C:\go\bin;%PATH% | ||||
| - go version | ||||
| - go env | ||||
| - go get github.com/urfave/gfmrun/... | ||||
| - go get -v -t ./... | ||||
| 
 | ||||
| build_script: | ||||
| - python runtests vet | ||||
| - python runtests test | ||||
| - python runtests gfmrun | ||||
							
								
								
									
										44
									
								
								vendor/github.com/urfave/cli/category.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/urfave/cli/category.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,44 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| // CommandCategories is a slice of *CommandCategory.
 | ||||
| type CommandCategories []*CommandCategory | ||||
| 
 | ||||
| // CommandCategory is a category containing commands.
 | ||||
| type CommandCategory struct { | ||||
| 	Name     string | ||||
| 	Commands Commands | ||||
| } | ||||
| 
 | ||||
| func (c CommandCategories) Less(i, j int) bool { | ||||
| 	return c[i].Name < c[j].Name | ||||
| } | ||||
| 
 | ||||
| func (c CommandCategories) Len() int { | ||||
| 	return len(c) | ||||
| } | ||||
| 
 | ||||
| func (c CommandCategories) Swap(i, j int) { | ||||
| 	c[i], c[j] = c[j], c[i] | ||||
| } | ||||
| 
 | ||||
| // AddCommand adds a command to a category.
 | ||||
| func (c CommandCategories) AddCommand(category string, command Command) CommandCategories { | ||||
| 	for _, commandCategory := range c { | ||||
| 		if commandCategory.Name == category { | ||||
| 			commandCategory.Commands = append(commandCategory.Commands, command) | ||||
| 			return c | ||||
| 		} | ||||
| 	} | ||||
| 	return append(c, &CommandCategory{Name: category, Commands: []Command{command}}) | ||||
| } | ||||
| 
 | ||||
| // VisibleCommands returns a slice of the Commands with Hidden=false
 | ||||
| func (c *CommandCategory) VisibleCommands() []Command { | ||||
| 	ret := []Command{} | ||||
| 	for _, command := range c.Commands { | ||||
| 		if !command.Hidden { | ||||
| 			ret = append(ret, command) | ||||
| 		} | ||||
| 	} | ||||
| 	return ret | ||||
| } | ||||
							
								
								
									
										21
									
								
								vendor/github.com/urfave/cli/cli.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/urfave/cli/cli.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,21 +0,0 @@ | ||||
| // Package cli provides a minimal framework for creating and organizing command line
 | ||||
| // Go applications. cli is designed to be easy to understand and write, the most simple
 | ||||
| // cli application can be written as follows:
 | ||||
| //   func main() {
 | ||||
| //     cli.NewApp().Run(os.Args)
 | ||||
| //   }
 | ||||
| //
 | ||||
| // Of course this application does not do much, so let's make this an actual application:
 | ||||
| //   func main() {
 | ||||
| //     app := cli.NewApp()
 | ||||
| //     app.Name = "greet"
 | ||||
| //     app.Usage = "say a greeting"
 | ||||
| //     app.Action = func(c *cli.Context) error {
 | ||||
| //       println("Greetings")
 | ||||
| //     }
 | ||||
| //
 | ||||
| //     app.Run(os.Args)
 | ||||
| //   }
 | ||||
| package cli | ||||
| 
 | ||||
| //go:generate python ./generate-flag-types cli -i flag-types.json -o flag_generated.go
 | ||||
							
								
								
									
										279
									
								
								vendor/github.com/urfave/cli/command.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										279
									
								
								vendor/github.com/urfave/cli/command.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,279 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // Command is a subcommand for a cli.App.
 | ||||
| type Command struct { | ||||
| 	// The name of the command
 | ||||
| 	Name string | ||||
| 	// short name of the command. Typically one character (deprecated, use `Aliases`)
 | ||||
| 	ShortName string | ||||
| 	// A list of aliases for the command
 | ||||
| 	Aliases []string | ||||
| 	// A short description of the usage of this command
 | ||||
| 	Usage string | ||||
| 	// Custom text to show on USAGE section of help
 | ||||
| 	UsageText string | ||||
| 	// A longer explanation of how the command works
 | ||||
| 	Description string | ||||
| 	// A short description of the arguments of this command
 | ||||
| 	ArgsUsage string | ||||
| 	// The category the command is part of
 | ||||
| 	Category string | ||||
| 	// The function to call when checking for bash command completions
 | ||||
| 	BashComplete BashCompleteFunc | ||||
| 	// An action to execute before any sub-subcommands are run, but after the context is ready
 | ||||
| 	// If a non-nil error is returned, no sub-subcommands are run
 | ||||
| 	Before BeforeFunc | ||||
| 	// An action to execute after any subcommands are run, but after the subcommand has finished
 | ||||
| 	// It is run even if Action() panics
 | ||||
| 	After AfterFunc | ||||
| 	// The function to call when this command is invoked
 | ||||
| 	Action interface{} | ||||
| 	// TODO: replace `Action: interface{}` with `Action: ActionFunc` once some kind
 | ||||
| 	// of deprecation period has passed, maybe?
 | ||||
| 
 | ||||
| 	// Execute this function if a usage error occurs.
 | ||||
| 	OnUsageError OnUsageErrorFunc | ||||
| 	// List of child commands
 | ||||
| 	Subcommands Commands | ||||
| 	// List of flags to parse
 | ||||
| 	Flags []Flag | ||||
| 	// Treat all flags as normal arguments if true
 | ||||
| 	SkipFlagParsing bool | ||||
| 	// Boolean to hide built-in help command
 | ||||
| 	HideHelp bool | ||||
| 	// Boolean to hide this command from help or completion
 | ||||
| 	Hidden bool | ||||
| 
 | ||||
| 	// Full name of command for help, defaults to full command name, including parent commands.
 | ||||
| 	HelpName        string | ||||
| 	commandNamePath []string | ||||
| } | ||||
| 
 | ||||
| // FullName returns the full name of the command.
 | ||||
| // For subcommands this ensures that parent commands are part of the command path
 | ||||
| func (c Command) FullName() string { | ||||
| 	if c.commandNamePath == nil { | ||||
| 		return c.Name | ||||
| 	} | ||||
| 	return strings.Join(c.commandNamePath, " ") | ||||
| } | ||||
| 
 | ||||
| // Commands is a slice of Command
 | ||||
| type Commands []Command | ||||
| 
 | ||||
| // Run invokes the command given the context, parses ctx.Args() to generate command-specific flags
 | ||||
| func (c Command) Run(ctx *Context) (err error) { | ||||
| 	if len(c.Subcommands) > 0 { | ||||
| 		return c.startApp(ctx) | ||||
| 	} | ||||
| 
 | ||||
| 	if !c.HideHelp && (HelpFlag != BoolFlag{}) { | ||||
| 		// append help to flags
 | ||||
| 		c.Flags = append( | ||||
| 			c.Flags, | ||||
| 			HelpFlag, | ||||
| 		) | ||||
| 	} | ||||
| 
 | ||||
| 	if ctx.App.EnableBashCompletion { | ||||
| 		c.Flags = append(c.Flags, BashCompletionFlag) | ||||
| 	} | ||||
| 
 | ||||
| 	set := flagSet(c.Name, c.Flags) | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 
 | ||||
| 	if !c.SkipFlagParsing { | ||||
| 		firstFlagIndex := -1 | ||||
| 		terminatorIndex := -1 | ||||
| 		for index, arg := range ctx.Args() { | ||||
| 			if arg == "--" { | ||||
| 				terminatorIndex = index | ||||
| 				break | ||||
| 			} else if arg == "-" { | ||||
| 				// Do nothing. A dash alone is not really a flag.
 | ||||
| 				continue | ||||
| 			} else if strings.HasPrefix(arg, "-") && firstFlagIndex == -1 { | ||||
| 				firstFlagIndex = index | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if firstFlagIndex > -1 { | ||||
| 			args := ctx.Args() | ||||
| 			regularArgs := make([]string, len(args[1:firstFlagIndex])) | ||||
| 			copy(regularArgs, args[1:firstFlagIndex]) | ||||
| 
 | ||||
| 			var flagArgs []string | ||||
| 			if terminatorIndex > -1 { | ||||
| 				flagArgs = args[firstFlagIndex:terminatorIndex] | ||||
| 				regularArgs = append(regularArgs, args[terminatorIndex:]...) | ||||
| 			} else { | ||||
| 				flagArgs = args[firstFlagIndex:] | ||||
| 			} | ||||
| 
 | ||||
| 			err = set.Parse(append(flagArgs, regularArgs...)) | ||||
| 		} else { | ||||
| 			err = set.Parse(ctx.Args().Tail()) | ||||
| 		} | ||||
| 	} else { | ||||
| 		if c.SkipFlagParsing { | ||||
| 			err = set.Parse(append([]string{"--"}, ctx.Args().Tail()...)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		if c.OnUsageError != nil { | ||||
| 			err := c.OnUsageError(ctx, err, false) | ||||
| 			HandleExitCoder(err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintln(ctx.App.Writer, "Incorrect Usage.") | ||||
| 		fmt.Fprintln(ctx.App.Writer) | ||||
| 		ShowCommandHelp(ctx, c.Name) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	nerr := normalizeFlags(c.Flags, set) | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(ctx.App.Writer, nerr) | ||||
| 		fmt.Fprintln(ctx.App.Writer) | ||||
| 		ShowCommandHelp(ctx, c.Name) | ||||
| 		return nerr | ||||
| 	} | ||||
| 
 | ||||
| 	context := NewContext(ctx.App, set, ctx) | ||||
| 
 | ||||
| 	if checkCommandCompletions(context, c.Name) { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if checkCommandHelp(context, c.Name) { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if c.After != nil { | ||||
| 		defer func() { | ||||
| 			afterErr := c.After(context) | ||||
| 			if afterErr != nil { | ||||
| 				HandleExitCoder(err) | ||||
| 				if err != nil { | ||||
| 					err = NewMultiError(err, afterErr) | ||||
| 				} else { | ||||
| 					err = afterErr | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 	} | ||||
| 
 | ||||
| 	if c.Before != nil { | ||||
| 		err = c.Before(context) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintln(ctx.App.Writer, err) | ||||
| 			fmt.Fprintln(ctx.App.Writer) | ||||
| 			ShowCommandHelp(ctx, c.Name) | ||||
| 			HandleExitCoder(err) | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	context.Command = c | ||||
| 	err = HandleAction(c.Action, context) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		HandleExitCoder(err) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // Names returns the names including short names and aliases.
 | ||||
| func (c Command) Names() []string { | ||||
| 	names := []string{c.Name} | ||||
| 
 | ||||
| 	if c.ShortName != "" { | ||||
| 		names = append(names, c.ShortName) | ||||
| 	} | ||||
| 
 | ||||
| 	return append(names, c.Aliases...) | ||||
| } | ||||
| 
 | ||||
| // HasName returns true if Command.Name or Command.ShortName matches given name
 | ||||
| func (c Command) HasName(name string) bool { | ||||
| 	for _, n := range c.Names() { | ||||
| 		if n == name { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (c Command) startApp(ctx *Context) error { | ||||
| 	app := NewApp() | ||||
| 	app.Metadata = ctx.App.Metadata | ||||
| 	// set the name and usage
 | ||||
| 	app.Name = fmt.Sprintf("%s %s", ctx.App.Name, c.Name) | ||||
| 	if c.HelpName == "" { | ||||
| 		app.HelpName = c.HelpName | ||||
| 	} else { | ||||
| 		app.HelpName = app.Name | ||||
| 	} | ||||
| 
 | ||||
| 	if c.Description != "" { | ||||
| 		app.Usage = c.Description | ||||
| 	} else { | ||||
| 		app.Usage = c.Usage | ||||
| 	} | ||||
| 
 | ||||
| 	// set CommandNotFound
 | ||||
| 	app.CommandNotFound = ctx.App.CommandNotFound | ||||
| 
 | ||||
| 	// set the flags and commands
 | ||||
| 	app.Commands = c.Subcommands | ||||
| 	app.Flags = c.Flags | ||||
| 	app.HideHelp = c.HideHelp | ||||
| 
 | ||||
| 	app.Version = ctx.App.Version | ||||
| 	app.HideVersion = ctx.App.HideVersion | ||||
| 	app.Compiled = ctx.App.Compiled | ||||
| 	app.Author = ctx.App.Author | ||||
| 	app.Email = ctx.App.Email | ||||
| 	app.Writer = ctx.App.Writer | ||||
| 
 | ||||
| 	app.categories = CommandCategories{} | ||||
| 	for _, command := range c.Subcommands { | ||||
| 		app.categories = app.categories.AddCommand(command.Category, command) | ||||
| 	} | ||||
| 
 | ||||
| 	sort.Sort(app.categories) | ||||
| 
 | ||||
| 	// bash completion
 | ||||
| 	app.EnableBashCompletion = ctx.App.EnableBashCompletion | ||||
| 	if c.BashComplete != nil { | ||||
| 		app.BashComplete = c.BashComplete | ||||
| 	} | ||||
| 
 | ||||
| 	// set the actions
 | ||||
| 	app.Before = c.Before | ||||
| 	app.After = c.After | ||||
| 	if c.Action != nil { | ||||
| 		app.Action = c.Action | ||||
| 	} else { | ||||
| 		app.Action = helpSubcommand.Action | ||||
| 	} | ||||
| 
 | ||||
| 	for index, cc := range app.Commands { | ||||
| 		app.Commands[index].commandNamePath = []string{c.Name, cc.Name} | ||||
| 	} | ||||
| 
 | ||||
| 	return app.RunAsSubcommand(ctx) | ||||
| } | ||||
| 
 | ||||
| // VisibleFlags returns a slice of the Flags with Hidden=false
 | ||||
| func (c Command) VisibleFlags() []Flag { | ||||
| 	return visibleFlags(c.Flags) | ||||
| } | ||||
							
								
								
									
										259
									
								
								vendor/github.com/urfave/cli/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										259
									
								
								vendor/github.com/urfave/cli/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,259 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"flag" | ||||
| 	"os" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // Context is a type that is passed through to
 | ||||
| // each Handler action in a cli application. Context
 | ||||
| // can be used to retrieve context-specific Args and
 | ||||
| // parsed command-line options.
 | ||||
| type Context struct { | ||||
| 	App           *App | ||||
| 	Command       Command | ||||
| 	flagSet       *flag.FlagSet | ||||
| 	setFlags      map[string]bool | ||||
| 	parentContext *Context | ||||
| } | ||||
| 
 | ||||
| // NewContext creates a new context. For use in when invoking an App or Command action.
 | ||||
| func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context { | ||||
| 	return &Context{App: app, flagSet: set, parentContext: parentCtx} | ||||
| } | ||||
| 
 | ||||
| // NumFlags returns the number of flags set
 | ||||
| func (c *Context) NumFlags() int { | ||||
| 	return c.flagSet.NFlag() | ||||
| } | ||||
| 
 | ||||
| // Set sets a context flag to a value.
 | ||||
| func (c *Context) Set(name, value string) error { | ||||
| 	return c.flagSet.Set(name, value) | ||||
| } | ||||
| 
 | ||||
| // GlobalSet sets a context flag to a value on the global flagset
 | ||||
| func (c *Context) GlobalSet(name, value string) error { | ||||
| 	return globalContext(c).flagSet.Set(name, value) | ||||
| } | ||||
| 
 | ||||
| // IsSet determines if the flag was actually set
 | ||||
| func (c *Context) IsSet(name string) bool { | ||||
| 	if c.setFlags == nil { | ||||
| 		c.setFlags = make(map[string]bool) | ||||
| 
 | ||||
| 		c.flagSet.Visit(func(f *flag.Flag) { | ||||
| 			c.setFlags[f.Name] = true | ||||
| 		}) | ||||
| 
 | ||||
| 		c.flagSet.VisitAll(func(f *flag.Flag) { | ||||
| 			if _, ok := c.setFlags[f.Name]; ok { | ||||
| 				return | ||||
| 			} | ||||
| 			c.setFlags[f.Name] = false | ||||
| 		}) | ||||
| 
 | ||||
| 		// XXX hack to support IsSet for flags with EnvVar
 | ||||
| 		//
 | ||||
| 		// There isn't an easy way to do this with the current implementation since
 | ||||
| 		// whether a flag was set via an environment variable is very difficult to
 | ||||
| 		// determine here. Instead, we intend to introduce a backwards incompatible
 | ||||
| 		// change in version 2 to add `IsSet` to the Flag interface to push the
 | ||||
| 		// responsibility closer to where the information required to determine
 | ||||
| 		// whether a flag is set by non-standard means such as environment
 | ||||
| 		// variables is avaliable.
 | ||||
| 		//
 | ||||
| 		// See https://github.com/urfave/cli/issues/294 for additional discussion
 | ||||
| 		flags := c.Command.Flags | ||||
| 		if c.Command.Name == "" { // cannot == Command{} since it contains slice types
 | ||||
| 			if c.App != nil { | ||||
| 				flags = c.App.Flags | ||||
| 			} | ||||
| 		} | ||||
| 		for _, f := range flags { | ||||
| 			eachName(f.GetName(), func(name string) { | ||||
| 				if isSet, ok := c.setFlags[name]; isSet || !ok { | ||||
| 					return | ||||
| 				} | ||||
| 
 | ||||
| 				envVarValue := reflect.ValueOf(f).FieldByName("EnvVar") | ||||
| 				if !envVarValue.IsValid() { | ||||
| 					return | ||||
| 				} | ||||
| 
 | ||||
| 				eachName(envVarValue.String(), func(envVar string) { | ||||
| 					envVar = strings.TrimSpace(envVar) | ||||
| 					if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 						c.setFlags[name] = true | ||||
| 						return | ||||
| 					} | ||||
| 				}) | ||||
| 			}) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return c.setFlags[name] | ||||
| } | ||||
| 
 | ||||
| // GlobalIsSet determines if the global flag was actually set
 | ||||
| func (c *Context) GlobalIsSet(name string) bool { | ||||
| 	ctx := c | ||||
| 	if ctx.parentContext != nil { | ||||
| 		ctx = ctx.parentContext | ||||
| 	} | ||||
| 
 | ||||
| 	for ; ctx != nil; ctx = ctx.parentContext { | ||||
| 		if ctx.IsSet(name) { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| // FlagNames returns a slice of flag names used in this context.
 | ||||
| func (c *Context) FlagNames() (names []string) { | ||||
| 	for _, flag := range c.Command.Flags { | ||||
| 		name := strings.Split(flag.GetName(), ",")[0] | ||||
| 		if name == "help" { | ||||
| 			continue | ||||
| 		} | ||||
| 		names = append(names, name) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // GlobalFlagNames returns a slice of global flag names used by the app.
 | ||||
| func (c *Context) GlobalFlagNames() (names []string) { | ||||
| 	for _, flag := range c.App.Flags { | ||||
| 		name := strings.Split(flag.GetName(), ",")[0] | ||||
| 		if name == "help" || name == "version" { | ||||
| 			continue | ||||
| 		} | ||||
| 		names = append(names, name) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Parent returns the parent context, if any
 | ||||
| func (c *Context) Parent() *Context { | ||||
| 	return c.parentContext | ||||
| } | ||||
| 
 | ||||
| // Args contains apps console arguments
 | ||||
| type Args []string | ||||
| 
 | ||||
| // Args returns the command line arguments associated with the context.
 | ||||
| func (c *Context) Args() Args { | ||||
| 	args := Args(c.flagSet.Args()) | ||||
| 	return args | ||||
| } | ||||
| 
 | ||||
| // NArg returns the number of the command line arguments.
 | ||||
| func (c *Context) NArg() int { | ||||
| 	return len(c.Args()) | ||||
| } | ||||
| 
 | ||||
| // Get returns the nth argument, or else a blank string
 | ||||
| func (a Args) Get(n int) string { | ||||
| 	if len(a) > n { | ||||
| 		return a[n] | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| // First returns the first argument, or else a blank string
 | ||||
| func (a Args) First() string { | ||||
| 	return a.Get(0) | ||||
| } | ||||
| 
 | ||||
| // Tail returns the rest of the arguments (not the first one)
 | ||||
| // or else an empty string slice
 | ||||
| func (a Args) Tail() []string { | ||||
| 	if len(a) >= 2 { | ||||
| 		return []string(a)[1:] | ||||
| 	} | ||||
| 	return []string{} | ||||
| } | ||||
| 
 | ||||
| // Present checks if there are any arguments present
 | ||||
| func (a Args) Present() bool { | ||||
| 	return len(a) != 0 | ||||
| } | ||||
| 
 | ||||
| // Swap swaps arguments at the given indexes
 | ||||
| func (a Args) Swap(from, to int) error { | ||||
| 	if from >= len(a) || to >= len(a) { | ||||
| 		return errors.New("index out of range") | ||||
| 	} | ||||
| 	a[from], a[to] = a[to], a[from] | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func globalContext(ctx *Context) *Context { | ||||
| 	if ctx == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	for { | ||||
| 		if ctx.parentContext == nil { | ||||
| 			return ctx | ||||
| 		} | ||||
| 		ctx = ctx.parentContext | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func lookupGlobalFlagSet(name string, ctx *Context) *flag.FlagSet { | ||||
| 	if ctx.parentContext != nil { | ||||
| 		ctx = ctx.parentContext | ||||
| 	} | ||||
| 	for ; ctx != nil; ctx = ctx.parentContext { | ||||
| 		if f := ctx.flagSet.Lookup(name); f != nil { | ||||
| 			return ctx.flagSet | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) { | ||||
| 	switch ff.Value.(type) { | ||||
| 	case *StringSlice: | ||||
| 	default: | ||||
| 		set.Set(name, ff.Value.String()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func normalizeFlags(flags []Flag, set *flag.FlagSet) error { | ||||
| 	visited := make(map[string]bool) | ||||
| 	set.Visit(func(f *flag.Flag) { | ||||
| 		visited[f.Name] = true | ||||
| 	}) | ||||
| 	for _, f := range flags { | ||||
| 		parts := strings.Split(f.GetName(), ",") | ||||
| 		if len(parts) == 1 { | ||||
| 			continue | ||||
| 		} | ||||
| 		var ff *flag.Flag | ||||
| 		for _, name := range parts { | ||||
| 			name = strings.Trim(name, " ") | ||||
| 			if visited[name] { | ||||
| 				if ff != nil { | ||||
| 					return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name) | ||||
| 				} | ||||
| 				ff = set.Lookup(name) | ||||
| 			} | ||||
| 		} | ||||
| 		if ff == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		for _, name := range parts { | ||||
| 			name = strings.Trim(name, " ") | ||||
| 			if !visited[name] { | ||||
| 				copyFlag(name, ff, set) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										98
									
								
								vendor/github.com/urfave/cli/errors.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										98
									
								
								vendor/github.com/urfave/cli/errors.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,98 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // OsExiter is the function used when the app exits. If not set defaults to os.Exit.
 | ||||
| var OsExiter = os.Exit | ||||
| 
 | ||||
| // ErrWriter is used to write errors to the user. This can be anything
 | ||||
| // implementing the io.Writer interface and defaults to os.Stderr.
 | ||||
| var ErrWriter io.Writer = os.Stderr | ||||
| 
 | ||||
| // MultiError is an error that wraps multiple errors.
 | ||||
| type MultiError struct { | ||||
| 	Errors []error | ||||
| } | ||||
| 
 | ||||
| // NewMultiError creates a new MultiError. Pass in one or more errors.
 | ||||
| func NewMultiError(err ...error) MultiError { | ||||
| 	return MultiError{Errors: err} | ||||
| } | ||||
| 
 | ||||
| // Error implents the error interface.
 | ||||
| func (m MultiError) Error() string { | ||||
| 	errs := make([]string, len(m.Errors)) | ||||
| 	for i, err := range m.Errors { | ||||
| 		errs[i] = err.Error() | ||||
| 	} | ||||
| 
 | ||||
| 	return strings.Join(errs, "\n") | ||||
| } | ||||
| 
 | ||||
| // ExitCoder is the interface checked by `App` and `Command` for a custom exit
 | ||||
| // code
 | ||||
| type ExitCoder interface { | ||||
| 	error | ||||
| 	ExitCode() int | ||||
| } | ||||
| 
 | ||||
| // ExitError fulfills both the builtin `error` interface and `ExitCoder`
 | ||||
| type ExitError struct { | ||||
| 	exitCode int | ||||
| 	message  string | ||||
| } | ||||
| 
 | ||||
| // NewExitError makes a new *ExitError
 | ||||
| func NewExitError(message string, exitCode int) *ExitError { | ||||
| 	return &ExitError{ | ||||
| 		exitCode: exitCode, | ||||
| 		message:  message, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Error returns the string message, fulfilling the interface required by
 | ||||
| // `error`
 | ||||
| func (ee *ExitError) Error() string { | ||||
| 	return ee.message | ||||
| } | ||||
| 
 | ||||
| // ExitCode returns the exit code, fulfilling the interface required by
 | ||||
| // `ExitCoder`
 | ||||
| func (ee *ExitError) ExitCode() int { | ||||
| 	return ee.exitCode | ||||
| } | ||||
| 
 | ||||
| // HandleExitCoder checks if the error fulfills the ExitCoder interface, and if
 | ||||
| // so prints the error to stderr (if it is non-empty) and calls OsExiter with the
 | ||||
| // given exit code.  If the given error is a MultiError, then this func is
 | ||||
| // called on all members of the Errors slice.
 | ||||
| func HandleExitCoder(err error) { | ||||
| 	if err == nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if exitErr, ok := err.(ExitCoder); ok { | ||||
| 		if err.Error() != "" { | ||||
| 			fmt.Fprintln(ErrWriter, err) | ||||
| 		} | ||||
| 		OsExiter(exitErr.ExitCode()) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if multiErr, ok := err.(MultiError); ok { | ||||
| 		for _, merr := range multiErr.Errors { | ||||
| 			HandleExitCoder(merr) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if err.Error() != "" { | ||||
| 		fmt.Fprintln(ErrWriter, err) | ||||
| 	} | ||||
| 	OsExiter(1) | ||||
| } | ||||
							
								
								
									
										93
									
								
								vendor/github.com/urfave/cli/flag-types.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/urfave/cli/flag-types.json
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,93 +0,0 @@ | ||||
| [ | ||||
|   { | ||||
|     "name": "Bool", | ||||
|     "type": "bool", | ||||
|     "value": false, | ||||
|     "context_default": "false", | ||||
|     "parser": "strconv.ParseBool(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "BoolT", | ||||
|     "type": "bool", | ||||
|     "value": false, | ||||
|     "doctail": " that is true by default", | ||||
|     "context_default": "false", | ||||
|     "parser": "strconv.ParseBool(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Duration", | ||||
|     "type": "time.Duration", | ||||
|     "doctail": " (see https://golang.org/pkg/time/#ParseDuration)", | ||||
|     "context_default": "0", | ||||
|     "parser": "time.ParseDuration(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Float64", | ||||
|     "type": "float64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseFloat(f.Value.String(), 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Generic", | ||||
|     "type": "Generic", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "interface{}" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int64", | ||||
|     "type": "int64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseInt(f.Value.String(), 0, 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int", | ||||
|     "type": "int", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseInt(f.Value.String(), 0, 64)", | ||||
|     "parser_cast": "int(parsed)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "IntSlice", | ||||
|     "type": "*IntSlice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]int", | ||||
|     "parser": "(f.Value.(*IntSlice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int64Slice", | ||||
|     "type": "*Int64Slice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]int64", | ||||
|     "parser": "(f.Value.(*Int64Slice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "String", | ||||
|     "type": "string", | ||||
|     "context_default": "\"\"", | ||||
|     "parser": "f.Value.String(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "StringSlice", | ||||
|     "type": "*StringSlice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]string", | ||||
|     "parser": "(f.Value.(*StringSlice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Uint64", | ||||
|     "type": "uint64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseUint(f.Value.String(), 0, 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Uint", | ||||
|     "type": "uint", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseUint(f.Value.String(), 0, 64)", | ||||
|     "parser_cast": "uint(parsed)" | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										621
									
								
								vendor/github.com/urfave/cli/flag.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										621
									
								
								vendor/github.com/urfave/cli/flag.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,621 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"reflect" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| const defaultPlaceholder = "value" | ||||
| 
 | ||||
| // BashCompletionFlag enables bash-completion for all commands and subcommands
 | ||||
| var BashCompletionFlag = BoolFlag{ | ||||
| 	Name:   "generate-bash-completion", | ||||
| 	Hidden: true, | ||||
| } | ||||
| 
 | ||||
| // VersionFlag prints the version for the application
 | ||||
| var VersionFlag = BoolFlag{ | ||||
| 	Name:  "version, v", | ||||
| 	Usage: "print the version", | ||||
| } | ||||
| 
 | ||||
| // HelpFlag prints the help for all commands and subcommands
 | ||||
| // Set to the zero value (BoolFlag{}) to disable flag -- keeps subcommand
 | ||||
| // unless HideHelp is set to true)
 | ||||
| var HelpFlag = BoolFlag{ | ||||
| 	Name:  "help, h", | ||||
| 	Usage: "show help", | ||||
| } | ||||
| 
 | ||||
| // FlagStringer converts a flag definition to a string. This is used by help
 | ||||
| // to display a flag.
 | ||||
| var FlagStringer FlagStringFunc = stringifyFlag | ||||
| 
 | ||||
| // Flag is a common interface related to parsing flags in cli.
 | ||||
| // For more advanced flag parsing techniques, it is recommended that
 | ||||
| // this interface be implemented.
 | ||||
| type Flag interface { | ||||
| 	fmt.Stringer | ||||
| 	// Apply Flag settings to the given flag set
 | ||||
| 	Apply(*flag.FlagSet) | ||||
| 	GetName() string | ||||
| } | ||||
| 
 | ||||
| func flagSet(name string, flags []Flag) *flag.FlagSet { | ||||
| 	set := flag.NewFlagSet(name, flag.ContinueOnError) | ||||
| 
 | ||||
| 	for _, f := range flags { | ||||
| 		f.Apply(set) | ||||
| 	} | ||||
| 	return set | ||||
| } | ||||
| 
 | ||||
| func eachName(longName string, fn func(string)) { | ||||
| 	parts := strings.Split(longName, ",") | ||||
| 	for _, name := range parts { | ||||
| 		name = strings.Trim(name, " ") | ||||
| 		fn(name) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Generic is a generic parseable type identified by a specific flag
 | ||||
| type Generic interface { | ||||
| 	Set(value string) error | ||||
| 	String() string | ||||
| } | ||||
| 
 | ||||
| // Apply takes the flagset and calls Set on the generic flag with the value
 | ||||
| // provided by the user for parsing by the flag
 | ||||
| func (f GenericFlag) Apply(set *flag.FlagSet) { | ||||
| 	val := f.Value | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				val.Set(envVal) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // StringSlice is an opaque type for []string to satisfy flag.Value
 | ||||
| type StringSlice []string | ||||
| 
 | ||||
| // Set appends the string value to the list of values
 | ||||
| func (f *StringSlice) Set(value string) error { | ||||
| 	*f = append(*f, value) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value (for usage defaults)
 | ||||
| func (f *StringSlice) String() string { | ||||
| 	return fmt.Sprintf("%s", *f) | ||||
| } | ||||
| 
 | ||||
| // Value returns the slice of strings set by this flag
 | ||||
| func (f *StringSlice) Value() []string { | ||||
| 	return *f | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f StringSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				newVal := &StringSlice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					newVal.Set(s) | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &StringSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // IntSlice is an opaque type for []int to satisfy flag.Value
 | ||||
| type IntSlice []int | ||||
| 
 | ||||
| // Set parses the value into an integer and appends it to the list of values
 | ||||
| func (f *IntSlice) Set(value string) error { | ||||
| 	tmp, err := strconv.Atoi(value) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value (for usage defaults)
 | ||||
| func (f *IntSlice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
| 
 | ||||
| // Value returns the slice of ints set by this flag
 | ||||
| func (f *IntSlice) Value() []int { | ||||
| 	return *f | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f IntSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				newVal := &IntSlice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					err := newVal.Set(s) | ||||
| 					if err != nil { | ||||
| 						fmt.Fprintf(ErrWriter, err.Error()) | ||||
| 					} | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &IntSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Int64Slice is an opaque type for []int to satisfy flag.Value
 | ||||
| type Int64Slice []int64 | ||||
| 
 | ||||
| // Set parses the value into an integer and appends it to the list of values
 | ||||
| func (f *Int64Slice) Set(value string) error { | ||||
| 	tmp, err := strconv.ParseInt(value, 10, 64) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value (for usage defaults)
 | ||||
| func (f *Int64Slice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
| 
 | ||||
| // Value returns the slice of ints set by this flag
 | ||||
| func (f *Int64Slice) Value() []int64 { | ||||
| 	return *f | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f Int64SliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				newVal := &Int64Slice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					err := newVal.Set(s) | ||||
| 					if err != nil { | ||||
| 						fmt.Fprintf(ErrWriter, err.Error()) | ||||
| 					} | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &Int64Slice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f BoolFlag) Apply(set *flag.FlagSet) { | ||||
| 	val := false | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValBool, err := strconv.ParseBool(envVal) | ||||
| 				if err == nil { | ||||
| 					val = envValBool | ||||
| 				} | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f BoolTFlag) Apply(set *flag.FlagSet) { | ||||
| 	val := true | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValBool, err := strconv.ParseBool(envVal) | ||||
| 				if err == nil { | ||||
| 					val = envValBool | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f StringFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				f.Value = envVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.StringVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.String(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f IntFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 				if err == nil { | ||||
| 					f.Value = int(envValInt) | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.IntVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f Int64Flag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 				if err == nil { | ||||
| 					f.Value = envValInt | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Int64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f UintFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 				if err == nil { | ||||
| 					f.Value = uint(envValInt) | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.UintVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f Uint64Flag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 				if err == nil { | ||||
| 					f.Value = uint64(envValInt) | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Uint64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f DurationFlag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValDuration, err := time.ParseDuration(envVal) | ||||
| 				if err == nil { | ||||
| 					f.Value = envValDuration | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.DurationVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Duration(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // Apply populates the flag given the flag set and environment
 | ||||
| func (f Float64Flag) Apply(set *flag.FlagSet) { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal := os.Getenv(envVar); envVal != "" { | ||||
| 				envValFloat, err := strconv.ParseFloat(envVal, 10) | ||||
| 				if err == nil { | ||||
| 					f.Value = float64(envValFloat) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Float64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Float64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func visibleFlags(fl []Flag) []Flag { | ||||
| 	visible := []Flag{} | ||||
| 	for _, flag := range fl { | ||||
| 		if !flagValue(flag).FieldByName("Hidden").Bool() { | ||||
| 			visible = append(visible, flag) | ||||
| 		} | ||||
| 	} | ||||
| 	return visible | ||||
| } | ||||
| 
 | ||||
| func prefixFor(name string) (prefix string) { | ||||
| 	if len(name) == 1 { | ||||
| 		prefix = "-" | ||||
| 	} else { | ||||
| 		prefix = "--" | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Returns the placeholder, if any, and the unquoted usage string.
 | ||||
| func unquoteUsage(usage string) (string, string) { | ||||
| 	for i := 0; i < len(usage); i++ { | ||||
| 		if usage[i] == '`' { | ||||
| 			for j := i + 1; j < len(usage); j++ { | ||||
| 				if usage[j] == '`' { | ||||
| 					name := usage[i+1 : j] | ||||
| 					usage = usage[:i] + name + usage[j+1:] | ||||
| 					return name, usage | ||||
| 				} | ||||
| 			} | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 	return "", usage | ||||
| } | ||||
| 
 | ||||
| func prefixedNames(fullName, placeholder string) string { | ||||
| 	var prefixed string | ||||
| 	parts := strings.Split(fullName, ",") | ||||
| 	for i, name := range parts { | ||||
| 		name = strings.Trim(name, " ") | ||||
| 		prefixed += prefixFor(name) + name | ||||
| 		if placeholder != "" { | ||||
| 			prefixed += " " + placeholder | ||||
| 		} | ||||
| 		if i < len(parts)-1 { | ||||
| 			prefixed += ", " | ||||
| 		} | ||||
| 	} | ||||
| 	return prefixed | ||||
| } | ||||
| 
 | ||||
| func withEnvHint(envVar, str string) string { | ||||
| 	envText := "" | ||||
| 	if envVar != "" { | ||||
| 		prefix := "$" | ||||
| 		suffix := "" | ||||
| 		sep := ", $" | ||||
| 		if runtime.GOOS == "windows" { | ||||
| 			prefix = "%" | ||||
| 			suffix = "%" | ||||
| 			sep = "%, %" | ||||
| 		} | ||||
| 		envText = fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(strings.Split(envVar, ","), sep), suffix) | ||||
| 	} | ||||
| 	return str + envText | ||||
| } | ||||
| 
 | ||||
| func flagValue(f Flag) reflect.Value { | ||||
| 	fv := reflect.ValueOf(f) | ||||
| 	for fv.Kind() == reflect.Ptr { | ||||
| 		fv = reflect.Indirect(fv) | ||||
| 	} | ||||
| 	return fv | ||||
| } | ||||
| 
 | ||||
| func stringifyFlag(f Flag) string { | ||||
| 	fv := flagValue(f) | ||||
| 
 | ||||
| 	switch f.(type) { | ||||
| 	case IntSliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyIntSliceFlag(f.(IntSliceFlag))) | ||||
| 	case Int64SliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyInt64SliceFlag(f.(Int64SliceFlag))) | ||||
| 	case StringSliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyStringSliceFlag(f.(StringSliceFlag))) | ||||
| 	} | ||||
| 
 | ||||
| 	placeholder, usage := unquoteUsage(fv.FieldByName("Usage").String()) | ||||
| 
 | ||||
| 	needsPlaceholder := false | ||||
| 	defaultValueString := "" | ||||
| 	val := fv.FieldByName("Value") | ||||
| 
 | ||||
| 	if val.IsValid() { | ||||
| 		needsPlaceholder = true | ||||
| 		defaultValueString = fmt.Sprintf(" (default: %v)", val.Interface()) | ||||
| 
 | ||||
| 		if val.Kind() == reflect.String && val.String() != "" { | ||||
| 			defaultValueString = fmt.Sprintf(" (default: %q)", val.String()) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if defaultValueString == " (default: )" { | ||||
| 		defaultValueString = "" | ||||
| 	} | ||||
| 
 | ||||
| 	if needsPlaceholder && placeholder == "" { | ||||
| 		placeholder = defaultPlaceholder | ||||
| 	} | ||||
| 
 | ||||
| 	usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultValueString)) | ||||
| 
 | ||||
| 	return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 		fmt.Sprintf("%s\t%s", prefixedNames(fv.FieldByName("Name").String(), placeholder), usageWithDefault)) | ||||
| } | ||||
| 
 | ||||
| func stringifyIntSliceFlag(f IntSliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, i := range f.Value.Value() { | ||||
| 			defaultVals = append(defaultVals, fmt.Sprintf("%d", i)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return stringifySliceFlag(f.Usage, f.Name, defaultVals) | ||||
| } | ||||
| 
 | ||||
| func stringifyInt64SliceFlag(f Int64SliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, i := range f.Value.Value() { | ||||
| 			defaultVals = append(defaultVals, fmt.Sprintf("%d", i)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return stringifySliceFlag(f.Usage, f.Name, defaultVals) | ||||
| } | ||||
| 
 | ||||
| func stringifyStringSliceFlag(f StringSliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, s := range f.Value.Value() { | ||||
| 			if len(s) > 0 { | ||||
| 				defaultVals = append(defaultVals, fmt.Sprintf("%q", s)) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return stringifySliceFlag(f.Usage, f.Name, defaultVals) | ||||
| } | ||||
| 
 | ||||
| func stringifySliceFlag(usage, name string, defaultVals []string) string { | ||||
| 	placeholder, usage := unquoteUsage(usage) | ||||
| 	if placeholder == "" { | ||||
| 		placeholder = defaultPlaceholder | ||||
| 	} | ||||
| 
 | ||||
| 	defaultVal := "" | ||||
| 	if len(defaultVals) > 0 { | ||||
| 		defaultVal = fmt.Sprintf(" (default: %s)", strings.Join(defaultVals, ", ")) | ||||
| 	} | ||||
| 
 | ||||
| 	usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultVal)) | ||||
| 	return fmt.Sprintf("%s\t%s", prefixedNames(name, placeholder), usageWithDefault) | ||||
| } | ||||
							
								
								
									
										627
									
								
								vendor/github.com/urfave/cli/flag_generated.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										627
									
								
								vendor/github.com/urfave/cli/flag_generated.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,627 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // WARNING: This file is generated!
 | ||||
| 
 | ||||
| // BoolFlag is a flag with type bool
 | ||||
| type BoolFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f BoolFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f BoolFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Bool looks up the value of a local BoolFlag, returns
 | ||||
| // false if not found
 | ||||
| func (c *Context) Bool(name string) bool { | ||||
| 	return lookupBool(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalBool looks up the value of a global BoolFlag, returns
 | ||||
| // false if not found
 | ||||
| func (c *Context) GlobalBool(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBool(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func lookupBool(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| // BoolTFlag is a flag with type bool that is true by default
 | ||||
| type BoolTFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f BoolTFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f BoolTFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // BoolT looks up the value of a local BoolTFlag, returns
 | ||||
| // false if not found
 | ||||
| func (c *Context) BoolT(name string) bool { | ||||
| 	return lookupBoolT(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalBoolT looks up the value of a global BoolTFlag, returns
 | ||||
| // false if not found
 | ||||
| func (c *Context) GlobalBoolT(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBoolT(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func lookupBoolT(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| // DurationFlag is a flag with type time.Duration (see https://golang.org/pkg/time/#ParseDuration)
 | ||||
| type DurationFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       time.Duration | ||||
| 	Destination *time.Duration | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f DurationFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f DurationFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Duration looks up the value of a local DurationFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Duration(name string) time.Duration { | ||||
| 	return lookupDuration(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalDuration looks up the value of a global DurationFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalDuration(name string) time.Duration { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupDuration(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupDuration(name string, set *flag.FlagSet) time.Duration { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := time.ParseDuration(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // Float64Flag is a flag with type float64
 | ||||
| type Float64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       float64 | ||||
| 	Destination *float64 | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f Float64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f Float64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Float64 looks up the value of a local Float64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Float64(name string) float64 { | ||||
| 	return lookupFloat64(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalFloat64 looks up the value of a global Float64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalFloat64(name string) float64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupFloat64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupFloat64(name string, set *flag.FlagSet) float64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseFloat(f.Value.String(), 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // GenericFlag is a flag with type Generic
 | ||||
| type GenericFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  Generic | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f GenericFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f GenericFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Generic looks up the value of a local GenericFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) Generic(name string) interface{} { | ||||
| 	return lookupGeneric(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalGeneric looks up the value of a global GenericFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) GlobalGeneric(name string) interface{} { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupGeneric(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func lookupGeneric(name string, set *flag.FlagSet) interface{} { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value, error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Int64Flag is a flag with type int64
 | ||||
| type Int64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       int64 | ||||
| 	Destination *int64 | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f Int64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f Int64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Int64 looks up the value of a local Int64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Int64(name string) int64 { | ||||
| 	return lookupInt64(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalInt64 looks up the value of a global Int64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalInt64(name string) int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupInt64(name string, set *flag.FlagSet) int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // IntFlag is a flag with type int
 | ||||
| type IntFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       int | ||||
| 	Destination *int | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f IntFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f IntFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Int looks up the value of a local IntFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Int(name string) int { | ||||
| 	return lookupInt(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalInt looks up the value of a global IntFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalInt(name string) int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupInt(name string, set *flag.FlagSet) int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return int(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // IntSliceFlag is a flag with type *IntSlice
 | ||||
| type IntSliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *IntSlice | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f IntSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f IntSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // IntSlice looks up the value of a local IntSliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) IntSlice(name string) []int { | ||||
| 	return lookupIntSlice(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalIntSlice looks up the value of a global IntSliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) GlobalIntSlice(name string) []int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupIntSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func lookupIntSlice(name string, set *flag.FlagSet) []int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*IntSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Int64SliceFlag is a flag with type *Int64Slice
 | ||||
| type Int64SliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *Int64Slice | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f Int64SliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f Int64SliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Int64Slice looks up the value of a local Int64SliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) Int64Slice(name string) []int64 { | ||||
| 	return lookupInt64Slice(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalInt64Slice looks up the value of a global Int64SliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) GlobalInt64Slice(name string) []int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64Slice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func lookupInt64Slice(name string, set *flag.FlagSet) []int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*Int64Slice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // StringFlag is a flag with type string
 | ||||
| type StringFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       string | ||||
| 	Destination *string | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f StringFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f StringFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // String looks up the value of a local StringFlag, returns
 | ||||
| // "" if not found
 | ||||
| func (c *Context) String(name string) string { | ||||
| 	return lookupString(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalString looks up the value of a global StringFlag, returns
 | ||||
| // "" if not found
 | ||||
| func (c *Context) GlobalString(name string) string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupString(name, fs) | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func lookupString(name string, set *flag.FlagSet) string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value.String(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return "" | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| // StringSliceFlag is a flag with type *StringSlice
 | ||||
| type StringSliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *StringSlice | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f StringSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f StringSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // StringSlice looks up the value of a local StringSliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) StringSlice(name string) []string { | ||||
| 	return lookupStringSlice(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalStringSlice looks up the value of a global StringSliceFlag, returns
 | ||||
| // nil if not found
 | ||||
| func (c *Context) GlobalStringSlice(name string) []string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupStringSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func lookupStringSlice(name string, set *flag.FlagSet) []string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*StringSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Uint64Flag is a flag with type uint64
 | ||||
| type Uint64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       uint64 | ||||
| 	Destination *uint64 | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f Uint64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f Uint64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Uint64 looks up the value of a local Uint64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Uint64(name string) uint64 { | ||||
| 	return lookupUint64(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalUint64 looks up the value of a global Uint64Flag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalUint64(name string) uint64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupUint64(name string, set *flag.FlagSet) uint64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // UintFlag is a flag with type uint
 | ||||
| type UintFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       uint | ||||
| 	Destination *uint | ||||
| } | ||||
| 
 | ||||
| // String returns a readable representation of this value
 | ||||
| // (for usage defaults)
 | ||||
| func (f UintFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
| 
 | ||||
| // GetName returns the name of the flag
 | ||||
| func (f UintFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
| 
 | ||||
| // Uint looks up the value of a local UintFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) Uint(name string) uint { | ||||
| 	return lookupUint(name, c.flagSet) | ||||
| } | ||||
| 
 | ||||
| // GlobalUint looks up the value of a global UintFlag, returns
 | ||||
| // 0 if not found
 | ||||
| func (c *Context) GlobalUint(name string) uint { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func lookupUint(name string, set *flag.FlagSet) uint { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return uint(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										28
									
								
								vendor/github.com/urfave/cli/funcs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/urfave/cli/funcs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,28 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| // BashCompleteFunc is an action to execute when the bash-completion flag is set
 | ||||
| type BashCompleteFunc func(*Context) | ||||
| 
 | ||||
| // BeforeFunc is an action to execute before any subcommands are run, but after
 | ||||
| // the context is ready if a non-nil error is returned, no subcommands are run
 | ||||
| type BeforeFunc func(*Context) error | ||||
| 
 | ||||
| // AfterFunc is an action to execute after any subcommands are run, but after the
 | ||||
| // subcommand has finished it is run even if Action() panics
 | ||||
| type AfterFunc func(*Context) error | ||||
| 
 | ||||
| // ActionFunc is the action to execute when no subcommands are specified
 | ||||
| type ActionFunc func(*Context) error | ||||
| 
 | ||||
| // CommandNotFoundFunc is executed if the proper command cannot be found
 | ||||
| type CommandNotFoundFunc func(*Context, string) | ||||
| 
 | ||||
| // OnUsageErrorFunc is executed if an usage error occurs. This is useful for displaying
 | ||||
| // customized usage error messages.  This function is able to replace the
 | ||||
| // original error messages.  If this function is not set, the "Incorrect usage"
 | ||||
| // is displayed and the execution is interrupted.
 | ||||
| type OnUsageErrorFunc func(context *Context, err error, isSubcommand bool) error | ||||
| 
 | ||||
| // FlagStringFunc is used by the help generation to display a flag, which is
 | ||||
| // expected to be a single line.
 | ||||
| type FlagStringFunc func(Flag) string | ||||
							
								
								
									
										244
									
								
								vendor/github.com/urfave/cli/generate-flag-types
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										244
									
								
								vendor/github.com/urfave/cli/generate-flag-types
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,244 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| """ | ||||
| The flag types that ship with the cli library have many things in common, and | ||||
| so we can take advantage of the `go generate` command to create much of the | ||||
| source code from a list of definitions.  These definitions attempt to cover | ||||
| the parts that vary between flag types, and should evolve as needed. | ||||
| 
 | ||||
| An example of the minimum definition needed is: | ||||
| 
 | ||||
|     { | ||||
|       "name": "SomeType", | ||||
|       "type": "sometype", | ||||
|       "context_default": "nil" | ||||
|     } | ||||
| 
 | ||||
| In this example, the code generated for the `cli` package will include a type | ||||
| named `SomeTypeFlag` that is expected to wrap a value of type `sometype`. | ||||
| Fetching values by name via `*cli.Context` will default to a value of `nil`. | ||||
| 
 | ||||
| A more complete, albeit somewhat redundant, example showing all available | ||||
| definition keys is: | ||||
| 
 | ||||
|     { | ||||
|       "name": "VeryMuchType", | ||||
|       "type": "*VeryMuchType", | ||||
|       "value": true, | ||||
|       "dest": false, | ||||
|       "doctail": " which really only wraps a []float64, oh well!", | ||||
|       "context_type": "[]float64", | ||||
|       "context_default": "nil", | ||||
|       "parser": "parseVeryMuchType(f.Value.String())", | ||||
|       "parser_cast": "[]float64(parsed)" | ||||
|     } | ||||
| 
 | ||||
| The meaning of each field is as follows: | ||||
| 
 | ||||
|                name (string) - The type "name", which will be suffixed with | ||||
|                                `Flag` when generating the type definition | ||||
|                                for `cli` and the wrapper type for `altsrc` | ||||
|                type (string) - The type that the generated `Flag` type for `cli` | ||||
|                                is expected to "contain" as its `.Value` member | ||||
|                 value (bool) - Should the generated `cli` type have a `Value` | ||||
|                                member? | ||||
|                  dest (bool) - Should the generated `cli` type support a | ||||
|                                destination pointer? | ||||
|             doctail (string) - Additional docs for the `cli` flag type comment | ||||
|        context_type (string) - The literal type used in the `*cli.Context` | ||||
|                                reader func signature | ||||
|     context_default (string) - The literal value used as the default by the | ||||
|                                `*cli.Context` reader funcs when no value is | ||||
|                                present | ||||
|              parser (string) - Literal code used to parse the flag `f`, | ||||
|                                expected to have a return signature of | ||||
|                                (value, error) | ||||
|         parser_cast (string) - Literal code used to cast the `parsed` value | ||||
|                                returned from the `parser` code | ||||
| """ | ||||
| 
 | ||||
| from __future__ import print_function, unicode_literals | ||||
| 
 | ||||
| import argparse | ||||
| import json | ||||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| import tempfile | ||||
| import textwrap | ||||
| 
 | ||||
| 
 | ||||
| class _FancyFormatter(argparse.ArgumentDefaultsHelpFormatter, | ||||
|                       argparse.RawDescriptionHelpFormatter): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| def main(sysargs=sys.argv[:]): | ||||
|     parser = argparse.ArgumentParser( | ||||
|         description='Generate flag type code!', | ||||
|         formatter_class=_FancyFormatter) | ||||
|     parser.add_argument( | ||||
|         'package', | ||||
|         type=str, default='cli', choices=_WRITEFUNCS.keys(), | ||||
|         help='Package for which flag types will be generated' | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         '-i', '--in-json', | ||||
|         type=argparse.FileType('r'), | ||||
|         default=sys.stdin, | ||||
|         help='Input JSON file which defines each type to be generated' | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         '-o', '--out-go', | ||||
|         type=argparse.FileType('w'), | ||||
|         default=sys.stdout, | ||||
|         help='Output file/stream to which generated source will be written' | ||||
|     ) | ||||
|     parser.epilog = __doc__ | ||||
| 
 | ||||
|     args = parser.parse_args(sysargs[1:]) | ||||
|     _generate_flag_types(_WRITEFUNCS[args.package], args.out_go, args.in_json) | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| def _generate_flag_types(writefunc, output_go, input_json): | ||||
|     types = json.load(input_json) | ||||
| 
 | ||||
|     tmp = tempfile.NamedTemporaryFile(suffix='.go', delete=False) | ||||
|     writefunc(tmp, types) | ||||
|     tmp.close() | ||||
| 
 | ||||
|     new_content = subprocess.check_output( | ||||
|         ['goimports', tmp.name] | ||||
|     ).decode('utf-8') | ||||
| 
 | ||||
|     print(new_content, file=output_go, end='') | ||||
|     output_go.flush() | ||||
|     os.remove(tmp.name) | ||||
| 
 | ||||
| 
 | ||||
| def _set_typedef_defaults(typedef): | ||||
|     typedef.setdefault('doctail', '') | ||||
|     typedef.setdefault('context_type', typedef['type']) | ||||
|     typedef.setdefault('dest', True) | ||||
|     typedef.setdefault('value', True) | ||||
|     typedef.setdefault('parser', 'f.Value, error(nil)') | ||||
|     typedef.setdefault('parser_cast', 'parsed') | ||||
| 
 | ||||
| 
 | ||||
| def _write_cli_flag_types(outfile, types): | ||||
|     _fwrite(outfile, """\ | ||||
|         package cli | ||||
| 
 | ||||
|         // WARNING: This file is generated! | ||||
| 
 | ||||
|         """) | ||||
| 
 | ||||
|     for typedef in types: | ||||
|         _set_typedef_defaults(typedef) | ||||
| 
 | ||||
|         _fwrite(outfile, """\ | ||||
|         // {name}Flag is a flag with type {type}{doctail} | ||||
|         type {name}Flag struct {{ | ||||
|             Name string | ||||
|             Usage string | ||||
|             EnvVar string | ||||
|             Hidden bool | ||||
|         """.format(**typedef)) | ||||
| 
 | ||||
|         if typedef['value']: | ||||
|             _fwrite(outfile, """\ | ||||
|             Value {type} | ||||
|             """.format(**typedef)) | ||||
| 
 | ||||
|         if typedef['dest']: | ||||
|             _fwrite(outfile, """\ | ||||
|             Destination *{type} | ||||
|             """.format(**typedef)) | ||||
| 
 | ||||
|         _fwrite(outfile, "\n}\n\n") | ||||
| 
 | ||||
|         _fwrite(outfile, """\ | ||||
|             // String returns a readable representation of this value | ||||
|             // (for usage defaults) | ||||
|             func (f {name}Flag) String() string {{ | ||||
|                 return FlagStringer(f) | ||||
|             }} | ||||
| 
 | ||||
|             // GetName returns the name of the flag | ||||
|             func (f {name}Flag) GetName() string {{ | ||||
|                 return f.Name | ||||
|             }} | ||||
| 
 | ||||
|             // {name} looks up the value of a local {name}Flag, returns | ||||
|             // {context_default} if not found | ||||
|             func (c *Context) {name}(name string) {context_type} {{ | ||||
|                 return lookup{name}(name, c.flagSet) | ||||
|             }} | ||||
| 
 | ||||
|             // Global{name} looks up the value of a global {name}Flag, returns | ||||
|             // {context_default} if not found | ||||
|             func (c *Context) Global{name}(name string) {context_type} {{ | ||||
|                 if fs := lookupGlobalFlagSet(name, c); fs != nil {{ | ||||
|                     return lookup{name}(name, fs) | ||||
|                 }} | ||||
|                 return {context_default} | ||||
|             }} | ||||
| 
 | ||||
|             func lookup{name}(name string, set *flag.FlagSet) {context_type} {{ | ||||
|                 f := set.Lookup(name) | ||||
|                 if f != nil {{ | ||||
|                     parsed, err := {parser} | ||||
|                     if err != nil {{ | ||||
|                         return {context_default} | ||||
|                     }} | ||||
|                     return {parser_cast} | ||||
|                 }} | ||||
|                 return {context_default} | ||||
|             }} | ||||
|             """.format(**typedef)) | ||||
| 
 | ||||
| 
 | ||||
| def _write_altsrc_flag_types(outfile, types): | ||||
|     _fwrite(outfile, """\ | ||||
|         package altsrc | ||||
| 
 | ||||
|         // WARNING: This file is generated! | ||||
| 
 | ||||
|         """) | ||||
| 
 | ||||
|     for typedef in types: | ||||
|         _set_typedef_defaults(typedef) | ||||
| 
 | ||||
|         _fwrite(outfile, """\ | ||||
|         // {name}Flag is the flag type that wraps cli.{name}Flag to allow | ||||
|         // for other values to be specified | ||||
|         type {name}Flag struct {{ | ||||
|             cli.{name}Flag | ||||
|             set *flag.FlagSet | ||||
|         }} | ||||
| 
 | ||||
|         // New{name}Flag creates a new {name}Flag | ||||
|         func New{name}Flag(fl cli.{name}Flag) *{name}Flag {{ | ||||
|             return &{name}Flag{{{name}Flag: fl, set: nil}} | ||||
|         }} | ||||
| 
 | ||||
|         // Apply saves the flagSet for later usage calls, then calls the | ||||
|         // wrapped {name}Flag.Apply | ||||
|         func (f *{name}Flag) Apply(set *flag.FlagSet) {{ | ||||
|             f.set = set | ||||
|             f.{name}Flag.Apply(set) | ||||
|         }} | ||||
|         """.format(**typedef)) | ||||
| 
 | ||||
| 
 | ||||
| def _fwrite(outfile, text): | ||||
|     print(textwrap.dedent(text), end='', file=outfile) | ||||
| 
 | ||||
| 
 | ||||
| _WRITEFUNCS = { | ||||
|     'cli': _write_cli_flag_types, | ||||
|     'altsrc': _write_altsrc_flag_types | ||||
| } | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										267
									
								
								vendor/github.com/urfave/cli/help.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										267
									
								
								vendor/github.com/urfave/cli/help.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,267 +0,0 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"text/tabwriter" | ||||
| 	"text/template" | ||||
| ) | ||||
| 
 | ||||
| // AppHelpTemplate is the text template for the Default help topic.
 | ||||
| // cli.go uses text/template to render templates. You can
 | ||||
| // render custom help text by setting this variable.
 | ||||
| var AppHelpTemplate = `NAME: | ||||
|    {{.Name}} - {{.Usage}} | ||||
| 
 | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}} | ||||
|    {{if .Version}}{{if not .HideVersion}} | ||||
| VERSION: | ||||
|    {{.Version}} | ||||
|    {{end}}{{end}}{{if len .Authors}} | ||||
| AUTHOR(S): | ||||
|    {{range .Authors}}{{.}}{{end}} | ||||
|    {{end}}{{if .VisibleCommands}} | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|    {{.Name}}:{{end}}{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}} | ||||
| {{end}}{{end}}{{if .VisibleFlags}} | ||||
| GLOBAL OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}}{{if .Copyright}} | ||||
| COPYRIGHT: | ||||
|    {{.Copyright}} | ||||
|    {{end}} | ||||
| ` | ||||
| 
 | ||||
| // CommandHelpTemplate is the text template for the command help topic.
 | ||||
| // cli.go uses text/template to render templates. You can
 | ||||
| // render custom help text by setting this variable.
 | ||||
| var CommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{.Usage}} | ||||
| 
 | ||||
| USAGE: | ||||
|    {{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{if .Category}} | ||||
| 
 | ||||
| CATEGORY: | ||||
|    {{.Category}}{{end}}{{if .Description}} | ||||
| 
 | ||||
| DESCRIPTION: | ||||
|    {{.Description}}{{end}}{{if .VisibleFlags}} | ||||
| 
 | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
| 
 | ||||
| // SubcommandHelpTemplate is the text template for the subcommand help topic.
 | ||||
| // cli.go uses text/template to render templates. You can
 | ||||
| // render custom help text by setting this variable.
 | ||||
| var SubcommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{.Usage}} | ||||
| 
 | ||||
| USAGE: | ||||
|    {{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}} | ||||
| 
 | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|    {{.Name}}:{{end}}{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}} | ||||
| {{end}}{{if .VisibleFlags}} | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
| 
 | ||||
| var helpCommand = Command{ | ||||
| 	Name:      "help", | ||||
| 	Aliases:   []string{"h"}, | ||||
| 	Usage:     "Shows a list of commands or help for one command", | ||||
| 	ArgsUsage: "[command]", | ||||
| 	Action: func(c *Context) error { | ||||
| 		args := c.Args() | ||||
| 		if args.Present() { | ||||
| 			return ShowCommandHelp(c, args.First()) | ||||
| 		} | ||||
| 
 | ||||
| 		ShowAppHelp(c) | ||||
| 		return nil | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| var helpSubcommand = Command{ | ||||
| 	Name:      "help", | ||||
| 	Aliases:   []string{"h"}, | ||||
| 	Usage:     "Shows a list of commands or help for one command", | ||||
| 	ArgsUsage: "[command]", | ||||
| 	Action: func(c *Context) error { | ||||
| 		args := c.Args() | ||||
| 		if args.Present() { | ||||
| 			return ShowCommandHelp(c, args.First()) | ||||
| 		} | ||||
| 
 | ||||
| 		return ShowSubcommandHelp(c) | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| // Prints help for the App or Command
 | ||||
| type helpPrinter func(w io.Writer, templ string, data interface{}) | ||||
| 
 | ||||
| // HelpPrinter is a function that writes the help output. If not set a default
 | ||||
| // is used. The function signature is:
 | ||||
| // func(w io.Writer, templ string, data interface{})
 | ||||
| var HelpPrinter helpPrinter = printHelp | ||||
| 
 | ||||
| // VersionPrinter prints the version for the App
 | ||||
| var VersionPrinter = printVersion | ||||
| 
 | ||||
| // ShowAppHelp is an action that displays the help.
 | ||||
| func ShowAppHelp(c *Context) error { | ||||
| 	HelpPrinter(c.App.Writer, AppHelpTemplate, c.App) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // DefaultAppComplete prints the list of subcommands as the default app completion method
 | ||||
| func DefaultAppComplete(c *Context) { | ||||
| 	for _, command := range c.App.Commands { | ||||
| 		if command.Hidden { | ||||
| 			continue | ||||
| 		} | ||||
| 		for _, name := range command.Names() { | ||||
| 			fmt.Fprintln(c.App.Writer, name) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // ShowCommandHelp prints help for the given command
 | ||||
| func ShowCommandHelp(ctx *Context, command string) error { | ||||
| 	// show the subcommand help for a command with subcommands
 | ||||
| 	if command == "" { | ||||
| 		HelpPrinter(ctx.App.Writer, SubcommandHelpTemplate, ctx.App) | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	for _, c := range ctx.App.Commands { | ||||
| 		if c.HasName(command) { | ||||
| 			HelpPrinter(ctx.App.Writer, CommandHelpTemplate, c) | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ctx.App.CommandNotFound == nil { | ||||
| 		return NewExitError(fmt.Sprintf("No help topic for '%v'", command), 3) | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.App.CommandNotFound(ctx, command) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // ShowSubcommandHelp prints help for the given subcommand
 | ||||
| func ShowSubcommandHelp(c *Context) error { | ||||
| 	return ShowCommandHelp(c, c.Command.Name) | ||||
| } | ||||
| 
 | ||||
| // ShowVersion prints the version number of the App
 | ||||
| func ShowVersion(c *Context) { | ||||
| 	VersionPrinter(c) | ||||
| } | ||||
| 
 | ||||
| func printVersion(c *Context) { | ||||
| 	fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version) | ||||
| } | ||||
| 
 | ||||
| // ShowCompletions prints the lists of commands within a given context
 | ||||
| func ShowCompletions(c *Context) { | ||||
| 	a := c.App | ||||
| 	if a != nil && a.BashComplete != nil { | ||||
| 		a.BashComplete(c) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // ShowCommandCompletions prints the custom completions for a given command
 | ||||
| func ShowCommandCompletions(ctx *Context, command string) { | ||||
| 	c := ctx.App.Command(command) | ||||
| 	if c != nil && c.BashComplete != nil { | ||||
| 		c.BashComplete(ctx) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func printHelp(out io.Writer, templ string, data interface{}) { | ||||
| 	funcMap := template.FuncMap{ | ||||
| 		"join": strings.Join, | ||||
| 	} | ||||
| 
 | ||||
| 	w := tabwriter.NewWriter(out, 1, 8, 2, ' ', 0) | ||||
| 	t := template.Must(template.New("help").Funcs(funcMap).Parse(templ)) | ||||
| 	err := t.Execute(w, data) | ||||
| 	if err != nil { | ||||
| 		// If the writer is closed, t.Execute will fail, and there's nothing
 | ||||
| 		// we can do to recover.
 | ||||
| 		if os.Getenv("CLI_TEMPLATE_ERROR_DEBUG") != "" { | ||||
| 			fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR: %#v\n", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	w.Flush() | ||||
| } | ||||
| 
 | ||||
| func checkVersion(c *Context) bool { | ||||
| 	found := false | ||||
| 	if VersionFlag.Name != "" { | ||||
| 		eachName(VersionFlag.Name, func(name string) { | ||||
| 			if c.GlobalBool(name) || c.Bool(name) { | ||||
| 				found = true | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| 	return found | ||||
| } | ||||
| 
 | ||||
| func checkHelp(c *Context) bool { | ||||
| 	found := false | ||||
| 	if HelpFlag.Name != "" { | ||||
| 		eachName(HelpFlag.Name, func(name string) { | ||||
| 			if c.GlobalBool(name) || c.Bool(name) { | ||||
| 				found = true | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| 	return found | ||||
| } | ||||
| 
 | ||||
| func checkCommandHelp(c *Context, name string) bool { | ||||
| 	if c.Bool("h") || c.Bool("help") { | ||||
| 		ShowCommandHelp(c, name) | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func checkSubcommandHelp(c *Context) bool { | ||||
| 	if c.Bool("h") || c.Bool("help") { | ||||
| 		ShowSubcommandHelp(c) | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func checkCompletions(c *Context) bool { | ||||
| 	if (c.GlobalBool(BashCompletionFlag.Name) || c.Bool(BashCompletionFlag.Name)) && c.App.EnableBashCompletion { | ||||
| 		ShowCompletions(c) | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func checkCommandCompletions(c *Context, name string) bool { | ||||
| 	if c.Bool(BashCompletionFlag.Name) && c.App.EnableBashCompletion { | ||||
| 		ShowCommandCompletions(c, name) | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
							
								
								
									
										122
									
								
								vendor/github.com/urfave/cli/runtests
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/urfave/cli/runtests
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,122 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| from __future__ import print_function | ||||
| 
 | ||||
| import argparse | ||||
| import os | ||||
| import sys | ||||
| import tempfile | ||||
| 
 | ||||
| from subprocess import check_call, check_output | ||||
| 
 | ||||
| 
 | ||||
| PACKAGE_NAME = os.environ.get( | ||||
|     'CLI_PACKAGE_NAME', 'github.com/urfave/cli' | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| def main(sysargs=sys.argv[:]): | ||||
|     targets = { | ||||
|         'vet': _vet, | ||||
|         'test': _test, | ||||
|         'gfmrun': _gfmrun, | ||||
|         'toc': _toc, | ||||
|         'gen': _gen, | ||||
|     } | ||||
| 
 | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument( | ||||
|         'target', nargs='?', choices=tuple(targets.keys()), default='test' | ||||
|     ) | ||||
|     args = parser.parse_args(sysargs[1:]) | ||||
| 
 | ||||
|     targets[args.target]() | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| def _test(): | ||||
|     if check_output('go version'.split()).split()[2] < 'go1.2': | ||||
|         _run('go test -v .') | ||||
|         return | ||||
| 
 | ||||
|     coverprofiles = [] | ||||
|     for subpackage in ['', 'altsrc']: | ||||
|         coverprofile = 'cli.coverprofile' | ||||
|         if subpackage != '': | ||||
|             coverprofile = '{}.coverprofile'.format(subpackage) | ||||
| 
 | ||||
|         coverprofiles.append(coverprofile) | ||||
| 
 | ||||
|         _run('go test -v'.split() + [ | ||||
|             '-coverprofile={}'.format(coverprofile), | ||||
|             ('{}/{}'.format(PACKAGE_NAME, subpackage)).rstrip('/') | ||||
|         ]) | ||||
| 
 | ||||
|     combined_name = _combine_coverprofiles(coverprofiles) | ||||
|     _run('go tool cover -func={}'.format(combined_name)) | ||||
|     os.remove(combined_name) | ||||
| 
 | ||||
| 
 | ||||
| def _gfmrun(): | ||||
|     go_version = check_output('go version'.split()).split()[2] | ||||
|     if go_version < 'go1.3': | ||||
|         print('runtests: skip on {}'.format(go_version), file=sys.stderr) | ||||
|         return | ||||
|     _run(['gfmrun', '-c', str(_gfmrun_count()), '-s', 'README.md']) | ||||
| 
 | ||||
| 
 | ||||
| def _vet(): | ||||
|     _run('go vet ./...') | ||||
| 
 | ||||
| 
 | ||||
| def _toc(): | ||||
|     _run('node_modules/.bin/markdown-toc -i README.md') | ||||
|     _run('git diff --exit-code') | ||||
| 
 | ||||
| 
 | ||||
| def _gen(): | ||||
|     go_version = check_output('go version'.split()).split()[2] | ||||
|     if go_version < 'go1.5': | ||||
|         print('runtests: skip on {}'.format(go_version), file=sys.stderr) | ||||
|         return | ||||
| 
 | ||||
|     _run('go generate ./...') | ||||
|     _run('git diff --exit-code') | ||||
| 
 | ||||
| 
 | ||||
| def _run(command): | ||||
|     if hasattr(command, 'split'): | ||||
|         command = command.split() | ||||
|     print('runtests: {}'.format(' '.join(command)), file=sys.stderr) | ||||
|     check_call(command) | ||||
| 
 | ||||
| 
 | ||||
| def _gfmrun_count(): | ||||
|     with open('README.md') as infile: | ||||
|         lines = infile.read().splitlines() | ||||
|         return len(filter(_is_go_runnable, lines)) | ||||
| 
 | ||||
| 
 | ||||
| def _is_go_runnable(line): | ||||
|     return line.startswith('package main') | ||||
| 
 | ||||
| 
 | ||||
| def _combine_coverprofiles(coverprofiles): | ||||
|     combined = tempfile.NamedTemporaryFile( | ||||
|         suffix='.coverprofile', delete=False | ||||
|     ) | ||||
|     combined.write('mode: set\n') | ||||
| 
 | ||||
|     for coverprofile in coverprofiles: | ||||
|         with open(coverprofile, 'r') as infile: | ||||
|             for line in infile.readlines(): | ||||
|                 if not line.startswith('mode: '): | ||||
|                     combined.write(line) | ||||
| 
 | ||||
|     combined.flush() | ||||
|     name = combined.name | ||||
|     combined.close() | ||||
|     return name | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										31
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							| @ -1,31 +0,0 @@ | ||||
| { | ||||
| 	"comment": "", | ||||
| 	"ignore": "test", | ||||
| 	"package": [ | ||||
| 		{ | ||||
| 			"checksumSHA1": "PWaIU7g1YSkETxka2DIS1EYsPK0=", | ||||
| 			"path": "code.gitea.io/sdk/gitea", | ||||
| 			"revision": "154cff2ee653febf91c926b54a8ec2ffa14f7ba0", | ||||
| 			"revisionTime": "2018-03-02T10:57:23Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "vwpCebe1/Uw4IVvhoCEzrsBoA+E=", | ||||
| 			"path": "github.com/Sirupsen/logrus", | ||||
| 			"revision": "418b41d23a1bf978c06faea5313ba194650ac088", | ||||
| 			"revisionTime": "2015-09-08T20:46:18Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "ljZrmD7pmMXAkGNfp6IEzj31fY8=", | ||||
| 			"path": "github.com/joho/godotenv", | ||||
| 			"revision": "4ed13390c0acd2ff4e371e64d8b97c8954138243", | ||||
| 			"revisionTime": "2015-09-07T01:02:28Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "hMgsA75EXstfPmSOleRFJjm7VfQ=", | ||||
| 			"path": "github.com/urfave/cli", | ||||
| 			"revision": "05fe449c81eb7305a34e9253c321c960a1c5e057", | ||||
| 			"revisionTime": "2016-08-23T15:25:51Z" | ||||
| 		} | ||||
| 	], | ||||
| 	"rootPath": "github.com/drone-plugins/drone-gitea-release" | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user