Commit b6ddb6aa authored by Hilko Bengen's avatar Hilko Bengen

New upstream version 0.5.1

parent 85f1c405
...@@ -22,7 +22,9 @@ checks: ...@@ -22,7 +22,9 @@ checks:
enabled: false enabled: false
plugins: plugins:
gofmt: gofmt:
enabled: true # Codeclimate go fmt does not agree with tip go fmt; consider re-enabling
# CC when the advice matches up with tip again.
enabled: false
govet: govet:
enabled: true enabled: true
golint: golint:
......
language: go language: go
sudo: false sudo: false
dist: xenial
notifications: notifications:
email: false email: false
jobs: jobs:
...@@ -7,12 +8,15 @@ jobs: ...@@ -7,12 +8,15 @@ jobs:
- stage: test - stage: test
go_import_path: github.com/golang/dep go_import_path: github.com/golang/dep
install: install:
- ssh-keyscan -t $TRAVIS_SSH_KEY_TYPES -H bitbucket.org >> ~/.ssh/known_hosts
- make get-deps - make get-deps
- npm install -g codeclimate-test-reporter - npm install -g codeclimate-test-reporter
env: env:
- DEPTESTBYPASS501=1 - DEPTESTBYPASS501=1
- TZ=UTC
- GOCACHE=/home/travis/var/cache
os: linux os: linux
go: 1.10.x go: 1.12.x
script: script:
- make validate test - make validate test
- ./hack/coverage.bash - ./hack/coverage.bash
...@@ -20,25 +24,41 @@ jobs: ...@@ -20,25 +24,41 @@ jobs:
- codeclimate-test-reporter < coverage.txt - codeclimate-test-reporter < coverage.txt
# YAML alias, for settings shared across the simpler builds # YAML alias, for settings shared across the simpler builds
- &simple-test - &simple-test
go: 1.9.x go: 1.11.x
stage: test stage: test
go_import_path: github.com/golang/dep go_import_path: github.com/golang/dep
install: skip install:
- ssh-keyscan -t $TRAVIS_SSH_KEY_TYPES -H bitbucket.org >> ~/.ssh/known_hosts
env: env:
- DEPTESTBYPASS501=1 - DEPTESTBYPASS501=1
script: make test - TZ=UTC
script:
- make test
- <<: *simple-test
go: 1.9.x
- <<: *simple-test - <<: *simple-test
go: tip go: tip
install:
- ssh-keyscan -t $TRAVIS_SSH_KEY_TYPES -H bitbucket.org >> ~/.ssh/known_hosts
- mkdir -p /home/travis/var/cache
env:
- GOCACHE=/home/travis/var/cache
- DEPTESTBYPASS501=1
- TZ=UTC
- <<: *simple-test - <<: *simple-test
os: osx os: osx
go: 1.10.x go: 1.12.x
install: install:
# brew takes horribly long to update itself despite the above caching # brew takes horribly long to update itself despite the above caching
# attempt; only bzr install if it's not on the $PATH # attempt; only bzr install if it's not on the $PATH
- ssh-keyscan -t $TRAVIS_SSH_KEY_TYPES -H bitbucket.org >> ~/.ssh/known_hosts
- test $(which bzr) || brew install bzr - test $(which bzr) || brew install bzr
env: env:
- HOMEBREW_NO_AUTO_UPDATE=1 - HOMEBREW_NO_AUTO_UPDATE=1
- DEPTESTBYPASS501=1 - DEPTESTBYPASS501=1
- TZ=UTC
- GOCACHE=/Users/travis/var/cache
script: script:
# OSX as of El Capitan sets an exit trap that interacts poorly with how # OSX as of El Capitan sets an exit trap that interacts poorly with how
# travis seems to spawn these shells; if set -e is set, then it can cause # travis seems to spawn these shells; if set -e is set, then it can cause
...@@ -47,14 +67,16 @@ jobs: ...@@ -47,14 +67,16 @@ jobs:
# Related: https://superuser.com/questions/1044130/why-am-i-having-how-can-i-fix-this-error-shell-session-update-command-not-f # Related: https://superuser.com/questions/1044130/why-am-i-having-how-can-i-fix-this-error-shell-session-update-command-not-f
- trap EXIT - trap EXIT
- make test - make test
- go: 1.10.x - go: 1.12.x
# Run on OS X so that we get a CGO-enabled binary for this OS; see # Run on OS X so that we get a CGO-enabled binary for this OS; see
# https://github.com/golang/dep/issues/1838 for more details. # https://github.com/golang/dep/issues/1838 for more details.
os: osx os: osx
stage: deploy stage: deploy
go_import_path: github.com/golang/dep go_import_path: github.com/golang/dep
install: skip install:
script: skip - ssh-keyscan -t $TRAVIS_SSH_KEY_TYPES -H bitbucket.org >> ~/.ssh/known_hosts
script:
- skip
before_deploy: before_deploy:
- ./hack/build-all.bash - ./hack/build-all.bash
deploy: deploy:
...@@ -78,6 +100,16 @@ jobs: ...@@ -78,6 +100,16 @@ jobs:
- release/dep-freebsd-386.sha256 - release/dep-freebsd-386.sha256
- release/dep-windows-386.exe - release/dep-windows-386.exe
- release/dep-windows-386.exe.sha256 - release/dep-windows-386.exe.sha256
- release/dep-linux-ppc64
- release/dep-linux-ppc64.sha256
- release/dep-linux-ppc64le
- release/dep-linux-ppc64le.sha256
- release/dep-linux-s390x
- release/dep-linux-s390x.sha256
- release/dep-linux-armv6
- release/dep-linux-armv6.sha256
- release/dep-linux-arm64
- release/dep-linux-arm64.sha256
skip_cleanup: true skip_cleanup: true
on: on:
repo: golang/dep repo: golang/dep
......
# (next version) # v0.5.1
IMPROVEMENTS:
* Add CI tests against go1.11.
* Fix indefinite hang cloning Git repositories that failed fsck checks. ([#2070][2070])
* The `noverify` field in `Gopkg.toml` allows for the preservation of excess files under `vendor`. ([#2002](https://github.com/golang/dep/issue/2002))
* Add releases for `arm`, `armv6` ([#2102][2102]), `s390x` ([#2070][2070]), and `ppc` architectures.
* Fix handling of cyclic import graphs ([#2003][2003]).
* Fix error in preservation of vendor/.git ([#2000][2000]).
* Fix an edge case in lockdiff where all the projects may be removed from the lock file ([#1972][1972]).
* Fix panic related to projects. ([#1945][1945])
[2102]: https://github.com/golang/dep/pull/2102
[2070]: https://github.com/golang/dep/pull/2070
[2000]: https://github.com/golang/dep/pull/2000
[1981]: https://github.com/golang/dep/pull/1981
[2003]: https://github.com/golang/dep/pull/2003
[1972]: https://github.com/golang/dep/pull/1972
[1945]: https://github.com/golang/dep/pull/1945
BUG FIXES:
* Correctly handle certain cases where `dep ensure` removed projects from Gopkg.lock. ([#1945](https://github.com/golang/dep/issue/1945)).
# v0.5.0 # v0.5.0
......
...@@ -24,7 +24,7 @@ When [filing an issue](https://github.com/golang/dep/issues/new), make sure to a ...@@ -24,7 +24,7 @@ When [filing an issue](https://github.com/golang/dep/issues/new), make sure to a
## Contributing code ## Contributing code
Let us know if you are interested in working on an issue by leaving a comment Let us know if you are interested in working on an issue by leaving a comment
on the issue in GitHub. This helps avoid multiple people unknowingly on the issue in GitHub. This helps avoid multiple people unknowingly
working on the same issue. working on the same issue.
Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
......
...@@ -41,6 +41,19 @@ ...@@ -41,6 +41,19 @@
revision = "925541529c1fa6821df4e44ce2723319eb2be768" revision = "925541529c1fa6821df4e44ce2723319eb2be768"
version = "v1.0.0" version = "v1.0.0"
[[projects]]
digest = "1:2e3c336fc7fde5c984d2841455a658a6d626450b1754a854b3b32e7a8f49a07a"
name = "github.com/google/go-cmp"
packages = [
"cmp",
"cmp/internal/diff",
"cmp/internal/function",
"cmp/internal/value",
]
pruneopts = "NUT"
revision = "3af367b6b30c263d47e8895973edcca9a49cf029"
version = "v0.2.0"
[[projects]] [[projects]]
digest = "1:f5169729244becc423886eae4d72547e28ac3f13f861bed8a9d749bc7238a1c3" digest = "1:f5169729244becc423886eae4d72547e28ac3f13f861bed8a9d749bc7238a1c3"
name = "github.com/jmank88/nuts" name = "github.com/jmank88/nuts"
...@@ -122,12 +135,14 @@ ...@@ -122,12 +135,14 @@
"github.com/armon/go-radix", "github.com/armon/go-radix",
"github.com/boltdb/bolt", "github.com/boltdb/bolt",
"github.com/golang/protobuf/proto", "github.com/golang/protobuf/proto",
"github.com/google/go-cmp/cmp",
"github.com/jmank88/nuts", "github.com/jmank88/nuts",
"github.com/nightlyone/lockfile", "github.com/nightlyone/lockfile",
"github.com/pelletier/go-toml", "github.com/pelletier/go-toml",
"github.com/pkg/errors", "github.com/pkg/errors",
"github.com/sdboyer/constext", "github.com/sdboyer/constext",
"golang.org/x/sync/errgroup", "golang.org/x/sync/errgroup",
"golang.org/x/sys/unix",
"gopkg.in/yaml.v2", "gopkg.in/yaml.v2",
] ]
solver-name = "gps-cdcl" solver-name = "gps-cdcl"
......
...@@ -28,6 +28,12 @@ $ brew install dep ...@@ -28,6 +28,12 @@ $ brew install dep
$ brew upgrade dep $ brew upgrade dep
``` ```
On Debian platforms you can install or upgrade to the latest version with apt-get:
```sh
$ sudo apt-get install go-dep
```
On other platforms you can use the `install.sh` script: On other platforms you can use the `install.sh` script:
```sh ```sh
......
...@@ -141,7 +141,7 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error { ...@@ -141,7 +141,7 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error {
noverify[skip] = true noverify[skip] = true
} }
var vendorfail bool var vendorfail, hasnoverify bool
// One full pass through, to see if we need to print the header, and to // One full pass through, to see if we need to print the header, and to
// create an array of names to sort for deterministic output. // create an array of names to sort for deterministic output.
var ordered []string var ordered []string
...@@ -149,54 +149,75 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error { ...@@ -149,54 +149,75 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error {
ordered = append(ordered, path) ordered = append(ordered, path)
switch status { switch status {
case verify.DigestMismatchInLock, verify.HashVersionMismatch, verify.EmptyDigestInLock: case verify.DigestMismatchInLock, verify.HashVersionMismatch, verify.EmptyDigestInLock, verify.NotInLock:
// NoVerify applies only to these three cases.
if noverify[path] { if noverify[path] {
hasnoverify = true
continue continue
} }
fallthrough fallthrough
case verify.NotInTree, verify.NotInLock: case verify.NotInTree:
// NoVerify cannot be used to make dep check ignore the absence
// of a project entirely.
if noverify[path] {
delete(noverify, path)
}
fail = true fail = true
if !vendorfail { if !vendorfail {
vendorfail = true vendorfail = true
logger.Println("# vendor is out of sync:")
} }
} }
} }
sort.Strings(ordered) sort.Strings(ordered)
var vfbuf, novbuf bytes.Buffer
var bufptr *bytes.Buffer
fmt.Fprintf(&vfbuf, "# vendor is out of sync:\n")
fmt.Fprintf(&novbuf, "# out of sync, but ignored, due to noverify in Gopkg.toml:\n")
for _, pr := range ordered { for _, pr := range ordered {
var nvSuffix string
if noverify[pr] { if noverify[pr] {
nvSuffix = " (CHECK IGNORED: marked noverify in Gopkg.toml)" bufptr = &novbuf
} else {
bufptr = &vfbuf
} }
status := statuses[pr] status := statuses[pr]
switch status { switch status {
case verify.NotInTree: case verify.NotInTree:
logger.Printf("%s: missing from vendor\n", pr) fmt.Fprintf(bufptr, "%s: missing from vendor\n", pr)
case verify.NotInLock: case verify.NotInLock:
fi, err := os.Stat(filepath.Join(p.AbsRoot, "vendor", pr)) fi, err := os.Stat(filepath.Join(p.AbsRoot, "vendor", pr))
if err != nil { if err != nil {
return errors.Wrap(err, "could not stat file that VerifyVendor claimed existed") return errors.Wrap(err, "could not stat file that VerifyVendor claimed existed")
} }
if fi.IsDir() { if fi.IsDir() {
logger.Printf("%s: unused project\n", pr) fmt.Fprintf(bufptr, "%s: unused project\n", pr)
} else { } else {
logger.Printf("%s: orphaned file\n", pr) fmt.Fprintf(bufptr, "%s: orphaned file\n", pr)
} }
case verify.DigestMismatchInLock: case verify.DigestMismatchInLock:
logger.Printf("%s: hash of vendored tree not equal to digest in Gopkg.lock%s\n", pr, nvSuffix) fmt.Fprintf(bufptr, "%s: hash of vendored tree not equal to digest in Gopkg.lock\n", pr)
case verify.EmptyDigestInLock: case verify.EmptyDigestInLock:
logger.Printf("%s: no digest in Gopkg.lock to compare against hash of vendored tree%s\n", pr, nvSuffix) fmt.Fprintf(bufptr, "%s: no digest in Gopkg.lock to compare against hash of vendored tree\n", pr)
case verify.HashVersionMismatch: case verify.HashVersionMismatch:
// This will double-print if the hash version is zero, but // This will double-print if the hash version is zero, but
// that's a rare case that really only occurs before the first // that's a rare case that really only occurs before the first
// run with a version of dep >=0.5.0, so it's fine. // run with a version of dep >=0.5.0, so it's fine.
logger.Printf("%s: hash algorithm mismatch, want version %v%s\n", pr, verify.HashVersion, nvSuffix) fmt.Fprintf(bufptr, "%s: hash algorithm mismatch, want version %v\n", pr, verify.HashVersion)
} }
} }
if vendorfail {
logger.Print(vfbuf.String())
if hasnoverify {
logger.Println()
}
}
if hasnoverify {
logger.Print(novbuf.String())
}
} }
if fail { if fail {
......
...@@ -35,10 +35,6 @@ func TestMain(m *testing.M) { ...@@ -35,10 +35,6 @@ func TestMain(m *testing.M) {
os.Setenv("CCACHE_DIR", filepath.Join(home, ".ccache")) os.Setenv("CCACHE_DIR", filepath.Join(home, ".ccache"))
} }
os.Setenv("HOME", "/test-dep-home-does-not-exist") os.Setenv("HOME", "/test-dep-home-does-not-exist")
if os.Getenv("GOCACHE") == "" {
os.Setenv("GOCACHE", "off") // because $HOME is gone
}
r := m.Run() r := m.Run()
os.Remove("testdep" + test.ExeSuffix) os.Remove("testdep" + test.ExeSuffix)
......
...@@ -74,7 +74,7 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error { ...@@ -74,7 +74,7 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
} }
var root string var root string
if len(args) <= 0 { if len(args) == 0 {
root = ctx.WorkingDir root = ctx.WorkingDir
} else { } else {
root = args[0] root = args[0]
......
...@@ -340,7 +340,7 @@ func (out *dotOutput) BasicHeader() error { ...@@ -340,7 +340,7 @@ func (out *dotOutput) BasicHeader() error {
func (out *dotOutput) BasicFooter() error { func (out *dotOutput) BasicFooter() error {
gvo := out.g.output("") gvo := out.g.output("")
_, err := fmt.Fprintf(out.w, gvo.String()) _, err := fmt.Fprint(out.w, gvo.String())
return err return err
} }
......
...@@ -7,6 +7,7 @@ package main ...@@ -7,6 +7,7 @@ package main
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"log" "log"
"path/filepath" "path/filepath"
...@@ -16,8 +17,6 @@ import ( ...@@ -16,8 +17,6 @@ import (
"text/tabwriter" "text/tabwriter"
"text/template" "text/template"
"io"
"github.com/golang/dep" "github.com/golang/dep"
"github.com/golang/dep/gps" "github.com/golang/dep/gps"
"github.com/golang/dep/internal/test" "github.com/golang/dep/internal/test"
...@@ -28,7 +27,7 @@ func TestStatusFormatVersion(t *testing.T) { ...@@ -28,7 +27,7 @@ func TestStatusFormatVersion(t *testing.T) {
t.Parallel() t.Parallel()
tests := map[gps.Version]string{ tests := map[gps.Version]string{
nil: "", nil: "",
gps.NewBranch("master"): "branch master", gps.NewBranch("master"): "branch master",
gps.NewVersion("1.0.0"): "1.0.0", gps.NewVersion("1.0.0"): "1.0.0",
gps.Revision("flooboofoobooo"): "flooboo", gps.Revision("flooboofoobooo"): "flooboo",
......
github.com/sdboyer/deptest: hash of vendored tree not equal to digest in Gopkg.lock (CHECK IGNORED: marked noverify in Gopkg.toml) # out of sync, but ignored, due to noverify in Gopkg.toml:
github.com/sdboyer/deptest: hash of vendored tree not equal to digest in Gopkg.lock
github.com/sdboyer/deptest: hash algorithm mismatch, want version 1 (CHECK IGNORED: marked noverify in Gopkg.toml) # out of sync, but ignored, due to noverify in Gopkg.toml:
github.com/sdboyer/deptest: hash algorithm mismatch, want version 1
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
digest = "1:ddbbbe7f7a81c86d54e89fa388b532f4c144d666a14e8e483ba04fa58265b135"
name = "github.com/sdboyer/deptest"
packages = ["."]
pruneopts = ""
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
version = "v1.0.0"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
input-imports = ["github.com/sdboyer/deptest"]
solver-name = "gps-cdcl"
solver-version = 1
[[constraint]]
name = "github.com/sdboyer/deptest"
version = "1.0.0"
[prune]
go-tests = true
unused-packages = true
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
digest = "1:ddbbbe7f7a81c86d54e89fa388b532f4c144d666a14e8e483ba04fa58265b135"
name = "github.com/sdboyer/deptest"
packages = ["."]
pruneopts = ""
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
version = "v1.0.0"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
input-imports = ["github.com/sdboyer/deptest"]
solver-name = "gps-cdcl"
solver-version = 1
[[constraint]]
name = "github.com/sdboyer/deptest"
version = "1.0.0"
[prune]
go-tests = true
unused-packages = true
// Copyright 2016 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 main
import (
"github.com/sdboyer/deptest"
)
func main() {
err := nil
if err != nil {
deptest.Map["yo yo!"]
}
}
# Gopkg.lock is out of sync:
github.com/sdboyer/deptest: prune options changed ( -> UT)
{
"commands": [
["check"]
],
"should-fail": true,
"vendor-final": [
"github.com/sdboyer/deptest"
]
}
...@@ -2,4 +2,4 @@ This is a hack - it's effectively just verifying that the Gopkg.lock doesn't ...@@ -2,4 +2,4 @@ This is a hack - it's effectively just verifying that the Gopkg.lock doesn't
change for projects with noverify set, which (under the current logic) is an change for projects with noverify set, which (under the current logic) is an
indicator that vendor wasn't updated. indicator that vendor wasn't updated.
Of course, that vendor -> lock relatinoship isn't guaranteed to hold... Of course, that vendor -> lock relationship isn't guaranteed to hold...
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
digest = "1:ddbbbe7f7a81c86d54e89fa388b532f4c144d666a14e8e483ba04fa58265b135"
name = "github.com/sdboyer/deptest"
packages = ["."]
pruneopts = ""
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
version = "v1.0.0"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
input-imports = ["github.com/sdboyer/deptest"]
solver-name = "gps-cdcl"
solver-version = 1
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
digest = "1:ddbbbe7f7a81c86d54e89fa388b532f4c144d666a14e8e483ba04fa58265b135"
name = "github.com/sdboyer/deptest"
packages = ["."]
pruneopts = ""
revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf"
version = "v1.0.0"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
input-imports = ["github.com/sdboyer/deptest"]
solver-name = "gps-cdcl"
solver-version = 1
// Copyright 2017 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 main
import (
_ "github.com/sdboyer/deptest"
)
func main() {
}
# out of sync, but ignored, due to noverify in Gopkg.toml:
foo: orphaned file
orphdir: unused project
{
"commands": [
["ensure"],
["check"]
],
"vendor-final": [
"github.com/sdboyer/deptest"
]
}
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/sdboyer/deptest ^0.8.0 v0.8.0 ff2948a v0.8.1 1 github.com/sdboyer/deptest ^0.8.0 v0.8.0 ff2948a v0.8.1 1
github.com/sdboyer/deptestdos v2.0.0 v2.0.0 5c60720 v2.0.0 1 github.com/sdboyer/deptestdos v2.0.0 v2.0.0 5c60720 v2.0.0 1
PROJECT CONSTRAINT REVISION LATEST PROJECT CONSTRAINT REVISION LATEST
github.com/carolynvs/go-dep-test ^0.1.0 b9c5511 4069198 github.com/carolynvs/go-dep-test ^0.1.0 b9c5511 4069198
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/sdboyer/deptest v0.8.1 (override) v0.8.1 3f4c3be v0.8.1 1 github.com/sdboyer/deptest v0.8.1 (override) v0.8.1 3f4c3be v0.8.1 1
github.com/sdboyer/deptestdos v2.0.0 v2.0.0 5c60720 v2.0.0 1 github.com/sdboyer/deptestdos v2.0.0 v2.0.0 5c60720 v2.0.0 1
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/sdboyer/deptest v1.0.0 v1.0.0 ff2948a v1.0.0 1 github.com/sdboyer/deptest v1.0.0 v1.0.0 ff2948a v1.0.0 1
github.com/sdboyer/deptestdos a0196ba a0196ba 1 github.com/sdboyer/deptestdos a0196ba a0196ba 1
...@@ -231,17 +231,19 @@ It is usually safe to set `non-go = true`, as well. However, as dep only has a c ...@@ -231,17 +231,19 @@ It is usually safe to set `non-go = true`, as well. However, as dep only has a c
## `noverify` ## `noverify`
The `noverify` field is a list of [project roots](glossary.md#project-root) to exclude from [vendor verification](glossary.md#vendor-verification). The `noverify` field is a list of paths, typically [project roots](glossary.md#project-root), to exclude from [vendor verification](glossary.md#vendor-verification).