Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
a71cce31
Unverified
Commit
a71cce31
authored
Jun 30, 2020
by
Erik Wilson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace juju/errors with pkg/errors
parent
97b7a0e9
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
236 additions
and
1909 deletions
+236
-1909
go.mod
go.mod
+1
-3
go.sum
go.sum
+2
-8
.gitignore
vendor/github.com/juju/errors/.gitignore
+11
-19
LICENSE
vendor/github.com/juju/errors/LICENSE
+201
-191
Makefile
vendor/github.com/juju/errors/Makefile
+0
-24
README.md
vendor/github.com/juju/errors/README.md
+0
-708
dependencies.tsv
vendor/github.com/juju/errors/dependencies.tsv
+0
-5
doc.go
vendor/github.com/juju/errors/doc.go
+0
-79
error.go
vendor/github.com/juju/errors/error.go
+0
-176
errors.go
vendor/github.com/juju/errors/errors.go
+20
-0
errortypes.go
vendor/github.com/juju/errors/errortypes.go
+0
-333
functions.go
vendor/github.com/juju/errors/functions.go
+0
-330
path.go
vendor/github.com/juju/errors/path.go
+0
-32
modules.txt
vendor/modules.txt
+1
-1
No files found.
go.mod
View file @
a71cce31
...
@@ -25,6 +25,7 @@ replace (
...
@@ -25,6 +25,7 @@ replace (
github.com/golangci/gosec => github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547
github.com/golangci/gosec => github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547
github.com/golangci/ineffassign => github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc
github.com/golangci/ineffassign => github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc
github.com/golangci/lint-1 => github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217
github.com/golangci/lint-1 => github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217
github.com/juju/errors => github.com/rancher/juju-to-pkg-errors v0.0.0-20200701001603-16f3c28b59bd
github.com/kubernetes-sigs/cri-tools => github.com/rancher/cri-tools v1.18.0-k3s1
github.com/kubernetes-sigs/cri-tools => github.com/rancher/cri-tools v1.18.0-k3s1
github.com/matryer/moq => github.com/rancher/moq v0.0.0-20190404221404-ee5226d43009
github.com/matryer/moq => github.com/rancher/moq v0.0.0-20190404221404-ee5226d43009
github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v0.0.0-20180911193056-5684b8af48c1
github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v0.0.0-20180911193056-5684b8af48c1
...
@@ -88,8 +89,6 @@ require (
...
@@ -88,8 +89,6 @@ require (
github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2
github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2
github.com/gorilla/mux v1.7.3
github.com/gorilla/mux v1.7.3
github.com/gorilla/websocket v1.4.1
github.com/gorilla/websocket v1.4.1
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d // indirect
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 // indirect
github.com/kubernetes-sigs/cri-tools v0.0.0-00010101000000-000000000000
github.com/kubernetes-sigs/cri-tools v0.0.0-00010101000000-000000000000
github.com/lib/pq v1.1.1
github.com/lib/pq v1.1.1
github.com/lxc/lxd v0.0.0-20191108214106-60ea15630455
github.com/lxc/lxd v0.0.0-20191108214106-60ea15630455
...
@@ -114,7 +113,6 @@ require (
...
@@ -114,7 +113,6 @@ require (
golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a
golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e
google.golang.org/grpc v1.26.0
google.golang.org/grpc v1.26.0
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
gopkg.in/robfig/cron.v2 v2.0.0-20150107220207-be2e0b0deed5 // indirect
gopkg.in/robfig/cron.v2 v2.0.0-20150107220207-be2e0b0deed5 // indirect
gopkg.in/yaml.v2 v2.2.8
gopkg.in/yaml.v2 v2.2.8
k8s.io/api v0.18.0
k8s.io/api v0.18.0
...
...
go.sum
View file @
a71cce31
...
@@ -445,17 +445,11 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
...
@@ -445,17 +445,11 @@ github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46O
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/juju/errors v0.0.0-20180806074554-22422dad46e1/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d h1:hJXjZMxj0SWlMoQkzeZDLi2cmeiWKa7y1B8Rg+qaoEc=
github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 h1:UUHMLvzt/31azWTN/ifGWef4WUqvXk0iRqdhdy/2uzI=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 h1:UUHMLvzt/31azWTN/ifGWef4WUqvXk0iRqdhdy/2uzI=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/juju/testing v0.0.0-20190613124551-e81189438503/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/juju/testing v0.0.0-20190613124551-e81189438503/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 h1:Pp8RxiF4rSoXP9SED26WCfNB28/dwTDpPXS8XMJR8rc=
github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M=
github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
...
@@ -637,6 +631,8 @@ github.com/rancher/flannel v0.11.0-k3s.2 h1:0GVr5ORAIvcri1LYTE8eMQ+NrRbuPeIniPaW
...
@@ -637,6 +631,8 @@ github.com/rancher/flannel v0.11.0-k3s.2 h1:0GVr5ORAIvcri1LYTE8eMQ+NrRbuPeIniPaW
github.com/rancher/flannel v0.11.0-k3s.2/go.mod h1:Hn4ZV+eq0LhLZP63xZnxdGwXEoRSxs5sxELxu27M3UA=
github.com/rancher/flannel v0.11.0-k3s.2/go.mod h1:Hn4ZV+eq0LhLZP63xZnxdGwXEoRSxs5sxELxu27M3UA=
github.com/rancher/helm-controller v0.6.0 h1:nFptBZFWpHga65M6bP04BZGLlzeMgezAXdsOwaB8t+4=
github.com/rancher/helm-controller v0.6.0 h1:nFptBZFWpHga65M6bP04BZGLlzeMgezAXdsOwaB8t+4=
github.com/rancher/helm-controller v0.6.0/go.mod h1:ZylsxIMGNADRPRNW+NiBWhrwwks9vnKLQiCHYWb6Bi0=
github.com/rancher/helm-controller v0.6.0/go.mod h1:ZylsxIMGNADRPRNW+NiBWhrwwks9vnKLQiCHYWb6Bi0=
github.com/rancher/juju-to-pkg-errors v0.0.0-20200701001603-16f3c28b59bd h1:KPnQuOFWU6Jm7dTadhZ9TCVf6Y5NxoSyUjwkbD7En5Q=
github.com/rancher/juju-to-pkg-errors v0.0.0-20200701001603-16f3c28b59bd/go.mod h1:QYmg8cqWPPfIbpEuhtJbEdWwA6PEKSY016Z6EdfL9+8=
github.com/rancher/kine v0.4.0 h1:1IhWy3TzjExG8xnj46eyUEWdzqNAD1WrgL4eEBKm6Uc=
github.com/rancher/kine v0.4.0 h1:1IhWy3TzjExG8xnj46eyUEWdzqNAD1WrgL4eEBKm6Uc=
github.com/rancher/kine v0.4.0/go.mod h1:IImtCJ68AIkE+VY/kUI0NkyJL5q5WzO8QvMsSXqbrpA=
github.com/rancher/kine v0.4.0/go.mod h1:IImtCJ68AIkE+VY/kUI0NkyJL5q5WzO8QvMsSXqbrpA=
github.com/rancher/kubernetes v1.18.4-k3s1 h1:eTwiRm2Gu8AUDgrda5FK8atZvkh6/3ZDoRFsxmnLvLc=
github.com/rancher/kubernetes v1.18.4-k3s1 h1:eTwiRm2Gu8AUDgrda5FK8atZvkh6/3ZDoRFsxmnLvLc=
...
@@ -1022,8 +1018,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
...
@@ -1022,8 +1018,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U=
gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U=
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
...
...
vendor/github.com/juju/errors/.gitignore
View file @
a71cce31
# Compiled Object files, Static and Dynamic libs (Shared Objects)
# Binaries for programs and plugins
*.o
*.exe
*.a
*.exe~
*.dll
*.so
*.so
*.dylib
# Folders
# Test binary, built with `go test -c`
_obj
*.test
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
*.exe
# Dependency directories (remove the comment below to include it)
*.test
# vendor/
vendor/github.com/juju/errors/LICENSE
View file @
a71cce31
All files in this repository are licensed as follows. If you contribute
Apache License
to this repository, it is assumed that you license your contribution
Version 2.0, January 2004
under the same license unless you state otherwise.
http://www.apache.org/licenses/
All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file.
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
This software is licensed under the LGPLv3, included below.
1. Definitions.
As a special exception to the GNU Lesser General Public License version 3
"License" shall mean the terms and conditions for use, reproduction,
("LGPL3"), the copyright holders of this Library give you permission to
and distribution as defined by Sections 1 through 9 of this document.
convey to a third party a Combined Work that links statically or dynamically
to this Library without providing any Minimal Corresponding Source or
"Licensor" shall mean the copyright owner or entity authorized by
Minimal Application Code as set out in 4d or providing the installation
the copyright owner that is granting the License.
information set out in section 4e, provided that you comply with the other
provisions of LGPL3 and provided that you meet, for the Application the
"Legal Entity" shall mean the union of the acting entity and all
terms and conditions of the license(s) which apply to the Application.
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
Except as stated in this special exception, the provisions of LGPL3 will
"control" means (i) the power, direct or indirect, to cause the
continue to comply in full to this Library. If you modify this Library, you
direction or management of such entity, whether by contract or
may apply this exception to your version of this Library, but you are not
otherwise, or (ii) ownership of fifty percent (50%) or more of the
obliged to do so. If you do not wish to do so, delete this exception
outstanding shares, or (iii) beneficial ownership of such entity.
statement from your version. This exception does not (and cannot) modify any
license terms which apply to the Application, with which you must still
"You" (or "Your") shall mean an individual or Legal Entity
comply.
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
GNU LESSER GENERAL PUBLIC LICENSE
including but not limited to software source code, documentation
Version 3, 29 June 2007
source, and configuration files.
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
"Object" form shall mean any form resulting from mechanical
Everyone is permitted to copy and distribute verbatim copies
transformation or translation of a Source form, including but
of this license document, but changing it is not allowed.
not limited to compiled object code, generated documentation,
and conversions to other media types.
This version of the GNU Lesser General Public License incorporates
"Work" shall mean the work of authorship, whether in Source or
the terms and conditions of version 3 of the GNU General Public
Object form, made available under the License, as indicated by a
License, supplemented by the additional permissions listed below.
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
0. Additional Definitions.
"Derivative Works" shall mean any work, whether in Source or Object
As used herein, "this License" refers to version 3 of the GNU Lesser
form, that is based on (or derived from) the Work and for which the
General Public License, and the "GNU GPL" refers to version 3 of the GNU
editorial revisions, annotations, elaborations, or other modifications
General Public License.
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
"The Library" refers to a covered work governed by this License,
separable from, or merely link (or bind by name) to the interfaces of,
other than an Application or a Combined Work as defined below.
the Work and Derivative Works thereof.
An "Application" is any work that makes use of an interface provided
"Contribution" shall mean any work of authorship, including
by the Library, but which is not otherwise based on the Library.
the original version of the Work and any modifications or additions
Defining a subclass of a class defined by the Library is deemed a mode
to that Work or Derivative Works thereof, that is intentionally
of using an interface provided by the Library.
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
A "Combined Work" is a work produced by combining or linking an
the copyright owner. For the purposes of this definition, "submitted"
Application with the Library. The particular version of the Library
means any form of electronic, verbal, or written communication sent
with which the Combined Work was made is also called the "Linked
to the Licensor or its representatives, including but not limited to
Version".
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
The "Minimal Corresponding Source" for a Combined Work means the
Licensor for the purpose of discussing and improving the Work, but
Corresponding Source for the Combined Work, excluding any source code
excluding communication that is conspicuously marked or otherwise
for portions of the Combined Work that, considered in isolation, are
designated in writing by the copyright owner as "Not a Contribution."
based on the Application, and not on the Linked Version.
"Contributor" shall mean Licensor and any individual or Legal Entity
The "Corresponding Application Code" for a Combined Work means the
on behalf of whom a Contribution has been received by Licensor and
object code and/or source code for the Application, including any data
subsequently incorporated within the Work.
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
1. Exception to Section 3 of the GNU GPL.
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
You may convey a covered work under sections 3 and 4 of this License
publicly display, publicly perform, sublicense, and distribute the
without being bound by section 3 of the GNU GPL.
Work and such Derivative Works in Source or Object form.
2. Conveying Modified Versions.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
If you modify a copy of the Library, and, in your modifications, a
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
facility refers to a function or data to be supplied by an Application
(except as stated in this section) patent license to make, have made,
that uses the facility (other than as an argument passed when the
use, offer to sell, sell, import, and otherwise transfer the Work,
facility is invoked), then you may convey a copy of the modified
where such license applies only to those patent claims licensable
version:
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
a) under this License, provided that you make a good faith effort to
with the Work to which such Contribution(s) was submitted. If You
ensure that, in the event an Application does not supply the
institute patent litigation against any entity (including a
function or data, the facility still operates, and performs
cross-claim or counterclaim in a lawsuit) alleging that the Work
whatever part of its purpose remains meaningful, or
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
b) under the GNU GPL, with none of the additional permissions of
granted to You under this License for that Work shall terminate
this License applicable to that copy.
as of the date such litigation is filed.
3. Object Code Incorporating Material from Library Header Files.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
The object code form of an Application may incorporate material from
modifications, and in Source or Object form, provided that You
a header file that is part of the Library. You may convey such object
meet the following conditions:
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
(a) You must give any other recipients of the Work or
layouts and accessors, or small macros, inline functions and templates
Derivative Works a copy of this License; and
(ten or fewer lines in length), you do both of the following:
(b) You must cause any modified files to carry prominent notices
a) Give prominent notice with each copy of the object code that the
stating that You changed the files; and
Library is used in it and that the Library and its use are
covered by this License.
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
b) Accompany the object code with a copy of the GNU GPL and this license
attribution notices from the Source form of the Work,
document.
excluding those notices that do not pertain to any part of
the Derivative Works; and
4. Combined Works.
(d) If the Work includes a "NOTICE" text file as part of its
You may convey a Combined Work under terms of your choice that,
distribution, then any Derivative Works that You distribute must
taken together, effectively do not restrict modification of the
include a readable copy of the attribution notices contained
portions of the Library contained in the Combined Work and reverse
within such NOTICE file, excluding those notices that do not
engineering for debugging such modifications, if you also do each of
pertain to any part of the Derivative Works, in at least one
the following:
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
a) Give prominent notice with each copy of the Combined Work that
documentation, if provided along with the Derivative Works; or,
the Library is used in it and that the Library and its use are
within a display generated by the Derivative Works, if and
covered by this License.
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
b) Accompany the Combined Work with a copy of the GNU GPL and this license
do not modify the License. You may add Your own attribution
document.
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
c) For a Combined Work that displays copyright notices during
that such additional attribution notices cannot be construed
execution, include the copyright notice for the Library among
as modifying the License.
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
d) Do one of the following:
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
0) Convey the Minimal Corresponding Source under the terms of this
reproduction, and distribution of the Work otherwise complies with
License, and the Corresponding Application Code in a form
the conditions stated in this License.
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
5. Submission of Contributions. Unless You explicitly state otherwise,
the Linked Version to produce a modified Combined Work, in the
any Contribution intentionally submitted for inclusion in the Work
manner specified by section 6 of the GNU GPL for conveying
by You to the Licensor shall be under the terms and conditions of
Corresponding Source.
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
1) Use a suitable shared library mechanism for linking with the
the terms of any separate license agreement you may have executed
Library. A suitable mechanism is one that (a) uses at run time
with Licensor regarding such Contributions.
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
6. Trademarks. This License does not grant permission to use the trade
of the Library that is interface-compatible with the Linked
names, trademarks, service marks, or product names of the Licensor,
Version.
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
7. Disclaimer of Warranty. Unless required by applicable law or
GNU GPL, and only to the extent that such information is
agreed to in writing, Licensor provides the Work (and each
necessary to install and execute a modified version of the
Contributor provides its Contributions) on an "AS IS" BASIS,
Combined Work produced by recombining or relinking the
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
Application with a modified version of the Linked Version. (If
implied, including, without limitation, any warranties or conditions
you use option 4d0, the Installation Information must accompany
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
the Minimal Corresponding Source and Corresponding Application
PARTICULAR PURPOSE. You are solely responsible for determining the
Code. If you use option 4d1, you must provide the Installation
appropriateness of using or redistributing the Work and assume any
Information in the manner specified by section 6 of the GNU GPL
risks associated with Your exercise of permissions under this License.
for conveying Corresponding Source.)
8. Limitation of Liability. In no event and under no legal theory,
5. Combined Libraries.
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
You may place library facilities that are a work based on the
negligent acts) or agreed to in writing, shall any Contributor be
Library side by side in a single library together with other library
liable to You for damages, including any direct, indirect, special,
facilities that are not Applications and are not covered by this
incidental, or consequential damages of any character arising as a
License, and convey such a combined library under terms of your
result of this License or out of the use or inability to use the
choice, if you do both of the following:
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
a) Accompany the combined library with a copy of the same work based
other commercial damages or losses), even if such Contributor
on the Library, uncombined with any other library facilities,
has been advised of the possibility of such damages.
conveyed under the terms of this License.
9. Accepting Warranty or Additional Liability. While redistributing
b) Give prominent notice with the combined library that part of it
the Work or Derivative Works thereof, You may choose to offer,
is a work based on the Library, and explaining where to find the
and charge a fee for, acceptance of support, warranty, indemnity,
accompanying uncombined form of the same work.
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
6. Revised Versions of the GNU Lesser General Public License.
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
The Free Software Foundation may publish revised and/or new versions
defend, and hold each Contributor harmless for any liability
of the GNU Lesser General Public License from time to time. Such new
incurred by, or claims asserted against, such Contributor by reason
versions will be similar in spirit to the present version, but may
of your accepting any such warranty or additional liability.
differ in detail to address new problems or concerns.
END OF TERMS AND CONDITIONS
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
APPENDIX: How to apply the Apache License to your work.
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
To apply the Apache License to your work, attach the following
conditions either of that published version or of any later version
boilerplate notice, with the fields enclosed by brackets "[]"
published by the Free Software Foundation. If the Library as you
replaced with your own identifying information. (Don't include
received it does not specify a version number of the GNU Lesser
the brackets!) The text should be enclosed in the appropriate
General Public License, you may choose any version of the GNU Lesser
comment syntax for the file format. We also recommend that a
General Public License ever published by the Free Software Foundation.
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
If the Library as you received it specifies that a proxy can decide
identification within third-party archives.
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
Copyright [yyyy] [name of copyright owner]
permanent authorization for you to choose that version for the
Library.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
vendor/github.com/juju/errors/Makefile
deleted
100644 → 0
View file @
97b7a0e9
PROJECT
:=
github.com/juju/errors
.PHONY
:
check-licence check-go check docs
check
:
check-licence check-go
go
test
$(PROJECT)
/...
check-licence
:
@
(
fgrep
-rl
"Licensed under the LGPLv3"
--exclude
*
.s .
;
\
fgrep
-rl
"MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT"
--exclude
*
.s .
;
\
find
.
-name
"*.go"
)
|
sed
-e
's,\./,,'
|
sort
|
uniq
-u
|
\
xargs
-I
{}
echo
FAIL: licence missed:
{}
check-go
:
$
(
eval
GOFMT :
=
$
(
strip
$(
shell
gofmt
-l
.|
sed
-e
"s/^/ /g"
)
))
@
(
if
[
x
$(GOFMT)
!=
x
""
]
;
then
\
echo
go
fmt
is sad:
$(GOFMT)
;
\
exit
1
;
\
fi
)
@
(
go tool vet
-all
-composites
=
false
-copylocks
=
false
.
)
docs
:
godoc2md github.com/juju/errors
>
README.md
sed
-i
'5i[\[GoDoc](https://godoc.org/github.com/juju/errors?status.svg)](https://godoc.org/github.com/juju/errors)'
README.md
vendor/github.com/juju/errors/README.md
deleted
100644 → 0
View file @
97b7a0e9
# errors
import "github.com/juju/errors"
[

](https://godoc.org/github.com/juju/errors)
The juju/errors provides an easy way to annotate errors without losing the
orginal error context.
The exported
`New`
and
`Errorf`
functions are designed to replace the
`errors.New`
and
`fmt.Errorf`
functions respectively. The same underlying
error is there, but the package also records the location at which the error
was created.
A primary use case for this library is to add extra context any time an
error is returned from a function.
if err := SomeFunc(); err != nil {
return err
}
This instead becomes:
if err := SomeFunc(); err != nil {
return errors.Trace(err)
}
which just records the file and line number of the Trace call, or
if err := SomeFunc(); err != nil {
return errors.Annotate(err, "more context")
}
which also adds an annotation to the error.
When you want to check to see if an error is of a particular type, a helper
function is normally exported by the package that returned the error, like the
`os`
package does. The underlying cause of the error is available using the
`Cause`
function.
os.IsNotExist(errors.Cause(err))
The result of the
`Error()`
call on an annotated error is the annotations joined
with colons, then the result of the
`Error()`
method for the underlying error
that was the cause.
err := errors.Errorf("original")
err = errors.Annotatef(err, "context")
err = errors.Annotatef(err, "more context")
err.Error() -> "more context: context: original"
Obviously recording the file, line and functions is not very useful if you
cannot get them back out again.
errors.ErrorStack(err)
will return something like:
first error
github.com/juju/errors/annotation_test.go:193:
github.com/juju/errors/annotation_test.go:194: annotation
github.com/juju/errors/annotation_test.go:195:
github.com/juju/errors/annotation_test.go:196: more context
github.com/juju/errors/annotation_test.go:197:
The first error was generated by an external system, so there was no location
associated. The second, fourth, and last lines were generated with Trace calls,
and the other two through Annotate.
Sometimes when responding to an error you want to return a more specific error
for the situation.
if err := FindField(field); err != nil {
return errors.Wrap(err, errors.NotFoundf(field))
}
This returns an error where the complete error stack is still available, and
`errors.Cause()`
will return the
`NotFound`
error.
## func AlreadyExistsf
```
go
func
AlreadyExistsf
(
format
string
,
args
...
interface
{})
error
```
AlreadyExistsf returns an error which satisfies IsAlreadyExists().
## func Annotate
```
go
func
Annotate
(
other
error
,
message
string
)
error
```
Annotate is used to add extra context to an existing error. The location of
the Annotate call is recorded with the annotations. The file, line and
function are also recorded.
For example:
if err := SomeFunc(); err != nil {
return errors.Annotate(err, "failed to frombulate")
}
## func Annotatef
```
go
func
Annotatef
(
other
error
,
format
string
,
args
...
interface
{})
error
```
Annotatef is used to add extra context to an existing error. The location of
the Annotate call is recorded with the annotations. The file, line and
function are also recorded.
For example:
if err := SomeFunc(); err != nil {
return errors.Annotatef(err, "failed to frombulate the %s", arg)
}
## func BadRequestf
```
go
func
BadRequestf
(
format
string
,
args
...
interface
{})
error
```
BadRequestf returns an error which satisfies IsBadRequest().
## func Cause
```
go
func
Cause
(
err
error
)
error
```
Cause returns the cause of the given error. This will be either the
original error, or the result of a Wrap or Mask call.
Cause is the usual way to diagnose errors that may have been wrapped by
the other errors functions.
## func DeferredAnnotatef
```
go
func
DeferredAnnotatef
(
err
*
error
,
format
string
,
args
...
interface
{})
```
DeferredAnnotatef annotates the given error (when it is not nil) with the given
format string and arguments (like fmt.Sprintf). If
*
err is nil, DeferredAnnotatef
does nothing. This method is used in a defer statement in order to annotate any
resulting error with the same message.
For example:
defer DeferredAnnotatef(&err, "failed to frombulate the %s", arg)
## func Details
```
go
func
Details
(
err
error
)
string
```
Details returns information about the stack of errors wrapped by err, in
the format:
[{filename:99: error one} {otherfile:55: cause of error one}]
This is a terse alternative to ErrorStack as it returns a single line.
## func ErrorStack
```
go
func
ErrorStack
(
err
error
)
string
```
ErrorStack returns a string representation of the annotated error. If the
error passed as the parameter is not an annotated error, the result is
simply the result of the Error() method on that error.
If the error is an annotated error, a multi-line string is returned where
each line represents one entry in the annotation stack. The full filename
from the call stack is used in the output.
first error
github.com/juju/errors/annotation_test.go:193:
github.com/juju/errors/annotation_test.go:194: annotation
github.com/juju/errors/annotation_test.go:195:
github.com/juju/errors/annotation_test.go:196: more context
github.com/juju/errors/annotation_test.go:197:
## func Errorf
```
go
func
Errorf
(
format
string
,
args
...
interface
{})
error
```
Errorf creates a new annotated error and records the location that the
error is created. This should be a drop in replacement for fmt.Errorf.
For example:
return errors.Errorf("validation failed: %s", message)
## func Forbiddenf
```
go
func
Forbiddenf
(
format
string
,
args
...
interface
{})
error
```
Forbiddenf returns an error which satistifes IsForbidden()
## func IsAlreadyExists
```
go
func
IsAlreadyExists
(
err
error
)
bool
```
IsAlreadyExists reports whether the error was created with
AlreadyExistsf() or NewAlreadyExists().
## func IsBadRequest
```
go
func
IsBadRequest
(
err
error
)
bool
```
IsBadRequest reports whether err was created with BadRequestf() or
NewBadRequest().
## func IsForbidden
```
go
func
IsForbidden
(
err
error
)
bool
```
IsForbidden reports whether err was created with Forbiddenf() or
NewForbidden().
## func IsMethodNotAllowed
```
go
func
IsMethodNotAllowed
(
err
error
)
bool
```
IsMethodNotAllowed reports whether err was created with MethodNotAllowedf() or
NewMethodNotAllowed().
## func IsNotAssigned
```
go
func
IsNotAssigned
(
err
error
)
bool
```
IsNotAssigned reports whether err was created with NotAssignedf() or
NewNotAssigned().
## func IsNotFound
```
go
func
IsNotFound
(
err
error
)
bool
```
IsNotFound reports whether err was created with NotFoundf() or
NewNotFound().
## func IsNotImplemented
```
go
func
IsNotImplemented
(
err
error
)
bool
```
IsNotImplemented reports whether err was created with
NotImplementedf() or NewNotImplemented().
## func IsNotProvisioned
```
go
func
IsNotProvisioned
(
err
error
)
bool
```
IsNotProvisioned reports whether err was created with NotProvisionedf() or
NewNotProvisioned().
## func IsNotSupported
```
go
func
IsNotSupported
(
err
error
)
bool
```
IsNotSupported reports whether the error was created with
NotSupportedf() or NewNotSupported().
## func IsNotValid
```
go
func
IsNotValid
(
err
error
)
bool
```
IsNotValid reports whether the error was created with NotValidf() or
NewNotValid().
## func IsUnauthorized
```
go
func
IsUnauthorized
(
err
error
)
bool
```
IsUnauthorized reports whether err was created with Unauthorizedf() or
NewUnauthorized().
## func IsUserNotFound
```
go
func
IsUserNotFound
(
err
error
)
bool
```
IsUserNotFound reports whether err was created with UserNotFoundf() or
NewUserNotFound().
## func Mask
```
go
func
Mask
(
other
error
)
error
```
Mask hides the underlying error type, and records the location of the masking.
## func Maskf
```
go
func
Maskf
(
other
error
,
format
string
,
args
...
interface
{})
error
```
Mask masks the given error with the given format string and arguments (like
fmt.Sprintf), returning a new error that maintains the error stack, but
hides the underlying error type. The error string still contains the full
annotations. If you want to hide the annotations, call Wrap.
## func MethodNotAllowedf
```
go
func
MethodNotAllowedf
(
format
string
,
args
...
interface
{})
error
```
MethodNotAllowedf returns an error which satisfies IsMethodNotAllowed().
## func New
```
go
func
New
(
message
string
)
error
```
New is a drop in replacement for the standard library errors module that records
the location that the error is created.
For example:
return errors.New("validation failed")
## func NewAlreadyExists
```
go
func
NewAlreadyExists
(
err
error
,
msg
string
)
error
```
NewAlreadyExists returns an error which wraps err and satisfies
IsAlreadyExists().
## func NewBadRequest
```
go
func
NewBadRequest
(
err
error
,
msg
string
)
error
```
NewBadRequest returns an error which wraps err that satisfies
IsBadRequest().
## func NewForbidden
```
go
func
NewForbidden
(
err
error
,
msg
string
)
error
```
NewForbidden returns an error which wraps err that satisfies
IsForbidden().
## func NewMethodNotAllowed
```
go
func
NewMethodNotAllowed
(
err
error
,
msg
string
)
error
```
NewMethodNotAllowed returns an error which wraps err that satisfies
IsMethodNotAllowed().
## func NewNotAssigned
```
go
func
NewNotAssigned
(
err
error
,
msg
string
)
error
```
NewNotAssigned returns an error which wraps err that satisfies
IsNotAssigned().
## func NewNotFound
```
go
func
NewNotFound
(
err
error
,
msg
string
)
error
```
NewNotFound returns an error which wraps err that satisfies
IsNotFound().
## func NewNotImplemented
```
go
func
NewNotImplemented
(
err
error
,
msg
string
)
error
```
NewNotImplemented returns an error which wraps err and satisfies
IsNotImplemented().
## func NewNotProvisioned
```
go
func
NewNotProvisioned
(
err
error
,
msg
string
)
error
```
NewNotProvisioned returns an error which wraps err that satisfies
IsNotProvisioned().
## func NewNotSupported
```
go
func
NewNotSupported
(
err
error
,
msg
string
)
error
```
NewNotSupported returns an error which wraps err and satisfies
IsNotSupported().
## func NewNotValid
```
go
func
NewNotValid
(
err
error
,
msg
string
)
error
```
NewNotValid returns an error which wraps err and satisfies IsNotValid().
## func NewUnauthorized
```
go
func
NewUnauthorized
(
err
error
,
msg
string
)
error
```
NewUnauthorized returns an error which wraps err and satisfies
IsUnauthorized().
## func NewUserNotFound
```
go
func
NewUserNotFound
(
err
error
,
msg
string
)
error
```
NewUserNotFound returns an error which wraps err and satisfies
IsUserNotFound().
## func NotAssignedf
```
go
func
NotAssignedf
(
format
string
,
args
...
interface
{})
error
```
NotAssignedf returns an error which satisfies IsNotAssigned().
## func NotFoundf
```
go
func
NotFoundf
(
format
string
,
args
...
interface
{})
error
```
NotFoundf returns an error which satisfies IsNotFound().
## func NotImplementedf
```
go
func
NotImplementedf
(
format
string
,
args
...
interface
{})
error
```
NotImplementedf returns an error which satisfies IsNotImplemented().
## func NotProvisionedf
```
go
func
NotProvisionedf
(
format
string
,
args
...
interface
{})
error
```
NotProvisionedf returns an error which satisfies IsNotProvisioned().
## func NotSupportedf
```
go
func
NotSupportedf
(
format
string
,
args
...
interface
{})
error
```
NotSupportedf returns an error which satisfies IsNotSupported().
## func NotValidf
```
go
func
NotValidf
(
format
string
,
args
...
interface
{})
error
```
NotValidf returns an error which satisfies IsNotValid().
## func Trace
```
go
func
Trace
(
other
error
)
error
```
Trace adds the location of the Trace call to the stack. The Cause of the
resulting error is the same as the error parameter. If the other error is
nil, the result will be nil.
For example:
if err := SomeFunc(); err != nil {
return errors.Trace(err)
}
## func Unauthorizedf
```
go
func
Unauthorizedf
(
format
string
,
args
...
interface
{})
error
```
Unauthorizedf returns an error which satisfies IsUnauthorized().
## func UserNotFoundf
```
go
func
UserNotFoundf
(
format
string
,
args
...
interface
{})
error
```
UserNotFoundf returns an error which satisfies IsUserNotFound().
## func Wrap
```
go
func
Wrap
(
other
,
newDescriptive
error
)
error
```
Wrap changes the Cause of the error. The location of the Wrap call is also
stored in the error stack.
For example:
if err := SomeFunc(); err != nil {
newErr := &packageError{"more context", private_value}
return errors.Wrap(err, newErr)
}
## func Wrapf
```
go
func
Wrapf
(
other
,
newDescriptive
error
,
format
string
,
args
...
interface
{})
error
```
Wrapf changes the Cause of the error, and adds an annotation. The location
of the Wrap call is also stored in the error stack.
For example:
if err := SomeFunc(); err != nil {
return errors.Wrapf(err, simpleErrorType, "invalid value %q", value)
}
## type Err
```
go
type
Err
struct
{
// contains filtered or unexported fields
}
```
Err holds a description of an error along with information about
where the error was created.
It may be embedded in custom error types to add extra information that
this errors package can understand.
### func NewErr
```
go
func
NewErr
(
format
string
,
args
...
interface
{})
Err
```
NewErr is used to return an Err for the purpose of embedding in other
structures. The location is not specified, and needs to be set with a call
to SetLocation.
For example:
type FooError struct {
errors.Err
code int
}
func NewFooError(code int) error {
err := &FooError{errors.NewErr("foo"), code}
err.SetLocation(1)
return err
}
### func NewErrWithCause
```
go
func
NewErrWithCause
(
other
error
,
format
string
,
args
...
interface
{})
Err
```
NewErrWithCause is used to return an Err with cause by other error for the purpose of embedding in other
structures. The location is not specified, and needs to be set with a call
to SetLocation.
For example:
type FooError struct {
errors.Err
code int
}
func (e *FooError) Annotate(format string, args ...interface{}) error {
err := &FooError{errors.NewErrWithCause(e.Err, format, args...), e.code}
err.SetLocation(1)
return err
})
### func (\*Err) Cause
```
go
func
(
e
*
Err
)
Cause
()
error
```
The Cause of an error is the most recent error in the error stack that
meets one of these criteria: the original error that was raised; the new
error that was passed into the Wrap function; the most recently masked
error; or nil if the error itself is considered the Cause. Normally this
method is not invoked directly, but instead through the Cause stand alone
function.
### func (\*Err) Error
```
go
func
(
e
*
Err
)
Error
()
string
```
Error implements error.Error.
### func (\*Err) Format
```
go
func
(
e
*
Err
)
Format
(
s
fmt
.
State
,
verb
rune
)
```
Format implements fmt.Formatter
When printing errors with %+v it also prints the stack trace.
%#v unsurprisingly will print the real underlying type.
### func (\*Err) Location
```
go
func
(
e
*
Err
)
Location
()
(
filename
string
,
line
int
)
```
Location is the file and line of where the error was most recently
created or annotated.
### func (\*Err) Message
```
go
func
(
e
*
Err
)
Message
()
string
```
Message returns the message stored with the most recent location. This is
the empty string if the most recent call was Trace, or the message stored
with Annotate or Mask.
### func (\*Err) SetLocation
```
go
func
(
e
*
Err
)
SetLocation
(
callDepth
int
)
```
SetLocation records the source location of the error at callDepth stack
frames above the call.
### func (\*Err) StackTrace
```
go
func
(
e
*
Err
)
StackTrace
()
[]
string
```
StackTrace returns one string for each location recorded in the stack of
errors. The first value is the originating error, with a line for each
other annotation or tracing of the error.
### func (\*Err) Underlying
```
go
func
(
e
*
Err
)
Underlying
()
error
```
Underlying returns the previous error in the error stack, if any. A client
should not ever really call this method. It is used to build the error
stack and should not be introspected by client calls. Or more
specifically, clients should not depend on anything but the
`Cause`
of an
error.
- - -
Generated by
[
godoc2md
](
http://godoc.org/github.com/davecheney/godoc2md
)
\ No newline at end of file
vendor/github.com/juju/errors/dependencies.tsv
deleted
100644 → 0
View file @
97b7a0e9
github.com/juju/loggo git 8232ab8918d91c72af1a9fb94d3edbe31d88b790 2017-06-05T01:46:07Z
github.com/juju/testing git 72703b1e95eb8ce4737fd8a3d8496c6b0be280a6 2018-05-17T13:41:05Z
gopkg.in/check.v1 git 4f90aeace3a26ad7021961c297b22c42160c7b25 2016-01-05T16:49:36Z
gopkg.in/mgo.v2 git f2b6f6c918c452ad107eec89615f074e3bd80e33 2016-08-18T01:52:18Z
gopkg.in/yaml.v2 git 1be3d31502d6eabc0dd7ce5b0daab022e14a5538 2017-07-12T05:45:46Z
vendor/github.com/juju/errors/doc.go
deleted
100644 → 0
View file @
97b7a0e9
// Copyright 2013, 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
/*
Package errors provides an easy way to annotate errors without losing the
original error context.
The exported `New` and `Errorf` functions are designed to replace the
`errors.New` and `fmt.Errorf` functions respectively. The same underlying
error is there, but the package also records the location at which the error
was created.
A primary use case for this library is to add extra context any time an
error is returned from a function.
if err := SomeFunc(); err != nil {
return err
}
This instead becomes:
if err := SomeFunc(); err != nil {
return errors.Trace(err)
}
which just records the file and line number of the Trace call, or
if err := SomeFunc(); err != nil {
return errors.Annotate(err, "more context")
}
which also adds an annotation to the error.
When you want to check to see if an error is of a particular type, a helper
function is normally exported by the package that returned the error, like the
`os` package does. The underlying cause of the error is available using the
`Cause` function.
os.IsNotExist(errors.Cause(err))
The result of the `Error()` call on an annotated error is the annotations joined
with colons, then the result of the `Error()` method for the underlying error
that was the cause.
err := errors.Errorf("original")
err = errors.Annotatef(err, "context")
err = errors.Annotatef(err, "more context")
err.Error() -> "more context: context: original"
Obviously recording the file, line and functions is not very useful if you
cannot get them back out again.
errors.ErrorStack(err)
will return something like:
first error
github.com/juju/errors/annotation_test.go:193:
github.com/juju/errors/annotation_test.go:194: annotation
github.com/juju/errors/annotation_test.go:195:
github.com/juju/errors/annotation_test.go:196: more context
github.com/juju/errors/annotation_test.go:197:
The first error was generated by an external system, so there was no location
associated. The second, fourth, and last lines were generated with Trace calls,
and the other two through Annotate.
Sometimes when responding to an error you want to return a more specific error
for the situation.
if err := FindField(field); err != nil {
return errors.Wrap(err, errors.NotFoundf(field))
}
This returns an error where the complete error stack is still available, and
`errors.Cause()` will return the `NotFound` error.
*/
package
errors
vendor/github.com/juju/errors/error.go
deleted
100644 → 0
View file @
97b7a0e9
// Copyright 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package
errors
import
(
"fmt"
"reflect"
"runtime"
)
// Err holds a description of an error along with information about
// where the error was created.
//
// It may be embedded in custom error types to add extra information that
// this errors package can understand.
type
Err
struct
{
// message holds an annotation of the error.
message
string
// cause holds the cause of the error as returned
// by the Cause method.
cause
error
// previous holds the previous error in the error stack, if any.
previous
error
// file and line hold the source code location where the error was
// created.
file
string
line
int
}
// NewErr is used to return an Err for the purpose of embedding in other
// structures. The location is not specified, and needs to be set with a call
// to SetLocation.
//
// For example:
// type FooError struct {
// errors.Err
// code int
// }
//
// func NewFooError(code int) error {
// err := &FooError{errors.NewErr("foo"), code}
// err.SetLocation(1)
// return err
// }
func
NewErr
(
format
string
,
args
...
interface
{})
Err
{
return
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
),
}
}
// NewErrWithCause is used to return an Err with cause by other error for the purpose of embedding in other
// structures. The location is not specified, and needs to be set with a call
// to SetLocation.
//
// For example:
// type FooError struct {
// errors.Err
// code int
// }
//
// func (e *FooError) Annotate(format string, args ...interface{}) error {
// err := &FooError{errors.NewErrWithCause(e.Err, format, args...), e.code}
// err.SetLocation(1)
// return err
// })
func
NewErrWithCause
(
other
error
,
format
string
,
args
...
interface
{})
Err
{
return
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
),
cause
:
Cause
(
other
),
previous
:
other
,
}
}
// Location is the file and line of where the error was most recently
// created or annotated.
func
(
e
*
Err
)
Location
()
(
filename
string
,
line
int
)
{
return
e
.
file
,
e
.
line
}
// Underlying returns the previous error in the error stack, if any. A client
// should not ever really call this method. It is used to build the error
// stack and should not be introspected by client calls. Or more
// specifically, clients should not depend on anything but the `Cause` of an
// error.
func
(
e
*
Err
)
Underlying
()
error
{
return
e
.
previous
}
// Cause returns the most recent error in the error stack that
// meets one of these criteria: the original error that was raised; the new
// error that was passed into the Wrap function; the most recently masked
// error; or nil if the error itself is considered the Cause. Normally this
// method is not invoked directly, but instead through the Cause stand alone
// function.
func
(
e
*
Err
)
Cause
()
error
{
return
e
.
cause
}
// Message returns the message stored with the most recent location. This is
// the empty string if the most recent call was Trace, or the message stored
// with Annotate or Mask.
func
(
e
*
Err
)
Message
()
string
{
return
e
.
message
}
// Error implements error.Error.
func
(
e
*
Err
)
Error
()
string
{
// We want to walk up the stack of errors showing the annotations
// as long as the cause is the same.
err
:=
e
.
previous
if
!
sameError
(
Cause
(
err
),
e
.
cause
)
&&
e
.
cause
!=
nil
{
err
=
e
.
cause
}
switch
{
case
err
==
nil
:
return
e
.
message
case
e
.
message
==
""
:
return
err
.
Error
()
}
return
fmt
.
Sprintf
(
"%s: %v"
,
e
.
message
,
err
)
}
// Format implements fmt.Formatter
// When printing errors with %+v it also prints the stack trace.
// %#v unsurprisingly will print the real underlying type.
func
(
e
*
Err
)
Format
(
s
fmt
.
State
,
verb
rune
)
{
switch
verb
{
case
'v'
:
switch
{
case
s
.
Flag
(
'+'
)
:
fmt
.
Fprintf
(
s
,
"%s"
,
ErrorStack
(
e
))
return
case
s
.
Flag
(
'#'
)
:
// avoid infinite recursion by wrapping e into a type
// that doesn't implement Formatter.
fmt
.
Fprintf
(
s
,
"%#v"
,
(
*
unformatter
)(
e
))
return
}
fallthrough
case
's'
:
fmt
.
Fprintf
(
s
,
"%s"
,
e
.
Error
())
case
'q'
:
fmt
.
Fprintf
(
s
,
"%q"
,
e
.
Error
())
default
:
fmt
.
Fprintf
(
s
,
"%%!%c(%T=%s)"
,
verb
,
e
,
e
.
Error
())
}
}
// helper for Format
type
unformatter
Err
func
(
unformatter
)
Format
()
{
/* break the fmt.Formatter interface */
}
// SetLocation records the source location of the error at callDepth stack
// frames above the call.
func
(
e
*
Err
)
SetLocation
(
callDepth
int
)
{
_
,
file
,
line
,
_
:=
runtime
.
Caller
(
callDepth
+
1
)
e
.
file
=
trimSourcePath
(
file
)
e
.
line
=
line
}
// StackTrace returns one string for each location recorded in the stack of
// errors. The first value is the originating error, with a line for each
// other annotation or tracing of the error.
func
(
e
*
Err
)
StackTrace
()
[]
string
{
return
errorStack
(
e
)
}
// Ideally we'd have a way to check identity, but deep equals will do.
func
sameError
(
e1
,
e2
error
)
bool
{
return
reflect
.
DeepEqual
(
e1
,
e2
)
}
vendor/github.com/juju/errors/errors.go
0 → 100644
View file @
a71cce31
package
errors
import
pkgErrors
"github.com/pkg/errors"
var
(
// New is assigned to "github.com/pkg/errors".New by default
New
=
pkgErrors
.
New
// Cause is assigned to "github.com/pkg/errors".Cause by default
Cause
=
pkgErrors
.
Cause
// Errorf is assigned to "github.com/pkg/errors".Errorf by default
Errorf
=
pkgErrors
.
Errorf
// Annotate is assigned to "github.com/pkg/errors".Wrap by default
Annotate
=
pkgErrors
.
Wrap
// Annotatef is assigned to "github.com/pkg/errors".Wrapf by default
Annotatef
=
pkgErrors
.
Wrapf
// Wrap is assigned to "github.com/pkg/errors".Wrap by default
Wrap
=
pkgErrors
.
Wrap
// Wrapf is assigned to "github.com/pkg/errors".Wrapf by default
Wrapf
=
pkgErrors
.
Wrapf
)
vendor/github.com/juju/errors/errortypes.go
deleted
100644 → 0
View file @
97b7a0e9
// Copyright 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package
errors
import
(
"fmt"
)
// wrap is a helper to construct an *wrapper.
func
wrap
(
err
error
,
format
,
suffix
string
,
args
...
interface
{})
Err
{
newErr
:=
Err
{
message
:
fmt
.
Sprintf
(
format
+
suffix
,
args
...
),
previous
:
err
,
}
newErr
.
SetLocation
(
2
)
return
newErr
}
// timeout represents an error on timeout.
type
timeout
struct
{
Err
}
// Timeoutf returns an error which satisfies IsTimeout().
func
Timeoutf
(
format
string
,
args
...
interface
{})
error
{
return
&
timeout
{
wrap
(
nil
,
format
,
" timeout"
,
args
...
)}
}
// NewTimeout returns an error which wraps err that satisfies
// IsTimeout().
func
NewTimeout
(
err
error
,
msg
string
)
error
{
return
&
timeout
{
wrap
(
err
,
msg
,
""
)}
}
// IsTimeout reports whether err was created with Timeoutf() or
// NewTimeout().
func
IsTimeout
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
timeout
)
return
ok
}
// notFound represents an error when something has not been found.
type
notFound
struct
{
Err
}
// NotFoundf returns an error which satisfies IsNotFound().
func
NotFoundf
(
format
string
,
args
...
interface
{})
error
{
return
&
notFound
{
wrap
(
nil
,
format
,
" not found"
,
args
...
)}
}
// NewNotFound returns an error which wraps err that satisfies
// IsNotFound().
func
NewNotFound
(
err
error
,
msg
string
)
error
{
return
&
notFound
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotFound reports whether err was created with NotFoundf() or
// NewNotFound().
func
IsNotFound
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notFound
)
return
ok
}
// userNotFound represents an error when an inexistent user is looked up.
type
userNotFound
struct
{
Err
}
// UserNotFoundf returns an error which satisfies IsUserNotFound().
func
UserNotFoundf
(
format
string
,
args
...
interface
{})
error
{
return
&
userNotFound
{
wrap
(
nil
,
format
,
" user not found"
,
args
...
)}
}
// NewUserNotFound returns an error which wraps err and satisfies
// IsUserNotFound().
func
NewUserNotFound
(
err
error
,
msg
string
)
error
{
return
&
userNotFound
{
wrap
(
err
,
msg
,
""
)}
}
// IsUserNotFound reports whether err was created with UserNotFoundf() or
// NewUserNotFound().
func
IsUserNotFound
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
userNotFound
)
return
ok
}
// unauthorized represents an error when an operation is unauthorized.
type
unauthorized
struct
{
Err
}
// Unauthorizedf returns an error which satisfies IsUnauthorized().
func
Unauthorizedf
(
format
string
,
args
...
interface
{})
error
{
return
&
unauthorized
{
wrap
(
nil
,
format
,
""
,
args
...
)}
}
// NewUnauthorized returns an error which wraps err and satisfies
// IsUnauthorized().
func
NewUnauthorized
(
err
error
,
msg
string
)
error
{
return
&
unauthorized
{
wrap
(
err
,
msg
,
""
)}
}
// IsUnauthorized reports whether err was created with Unauthorizedf() or
// NewUnauthorized().
func
IsUnauthorized
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
unauthorized
)
return
ok
}
// notImplemented represents an error when something is not
// implemented.
type
notImplemented
struct
{
Err
}
// NotImplementedf returns an error which satisfies IsNotImplemented().
func
NotImplementedf
(
format
string
,
args
...
interface
{})
error
{
return
&
notImplemented
{
wrap
(
nil
,
format
,
" not implemented"
,
args
...
)}
}
// NewNotImplemented returns an error which wraps err and satisfies
// IsNotImplemented().
func
NewNotImplemented
(
err
error
,
msg
string
)
error
{
return
&
notImplemented
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotImplemented reports whether err was created with
// NotImplementedf() or NewNotImplemented().
func
IsNotImplemented
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notImplemented
)
return
ok
}
// alreadyExists represents and error when something already exists.
type
alreadyExists
struct
{
Err
}
// AlreadyExistsf returns an error which satisfies IsAlreadyExists().
func
AlreadyExistsf
(
format
string
,
args
...
interface
{})
error
{
return
&
alreadyExists
{
wrap
(
nil
,
format
,
" already exists"
,
args
...
)}
}
// NewAlreadyExists returns an error which wraps err and satisfies
// IsAlreadyExists().
func
NewAlreadyExists
(
err
error
,
msg
string
)
error
{
return
&
alreadyExists
{
wrap
(
err
,
msg
,
""
)}
}
// IsAlreadyExists reports whether the error was created with
// AlreadyExistsf() or NewAlreadyExists().
func
IsAlreadyExists
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
alreadyExists
)
return
ok
}
// notSupported represents an error when something is not supported.
type
notSupported
struct
{
Err
}
// NotSupportedf returns an error which satisfies IsNotSupported().
func
NotSupportedf
(
format
string
,
args
...
interface
{})
error
{
return
&
notSupported
{
wrap
(
nil
,
format
,
" not supported"
,
args
...
)}
}
// NewNotSupported returns an error which wraps err and satisfies
// IsNotSupported().
func
NewNotSupported
(
err
error
,
msg
string
)
error
{
return
&
notSupported
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotSupported reports whether the error was created with
// NotSupportedf() or NewNotSupported().
func
IsNotSupported
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notSupported
)
return
ok
}
// notValid represents an error when something is not valid.
type
notValid
struct
{
Err
}
// NotValidf returns an error which satisfies IsNotValid().
func
NotValidf
(
format
string
,
args
...
interface
{})
error
{
return
&
notValid
{
wrap
(
nil
,
format
,
" not valid"
,
args
...
)}
}
// NewNotValid returns an error which wraps err and satisfies IsNotValid().
func
NewNotValid
(
err
error
,
msg
string
)
error
{
return
&
notValid
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotValid reports whether the error was created with NotValidf() or
// NewNotValid().
func
IsNotValid
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notValid
)
return
ok
}
// notProvisioned represents an error when something is not yet provisioned.
type
notProvisioned
struct
{
Err
}
// NotProvisionedf returns an error which satisfies IsNotProvisioned().
func
NotProvisionedf
(
format
string
,
args
...
interface
{})
error
{
return
&
notProvisioned
{
wrap
(
nil
,
format
,
" not provisioned"
,
args
...
)}
}
// NewNotProvisioned returns an error which wraps err that satisfies
// IsNotProvisioned().
func
NewNotProvisioned
(
err
error
,
msg
string
)
error
{
return
&
notProvisioned
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotProvisioned reports whether err was created with NotProvisionedf() or
// NewNotProvisioned().
func
IsNotProvisioned
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notProvisioned
)
return
ok
}
// notAssigned represents an error when something is not yet assigned to
// something else.
type
notAssigned
struct
{
Err
}
// NotAssignedf returns an error which satisfies IsNotAssigned().
func
NotAssignedf
(
format
string
,
args
...
interface
{})
error
{
return
&
notAssigned
{
wrap
(
nil
,
format
,
" not assigned"
,
args
...
)}
}
// NewNotAssigned returns an error which wraps err that satisfies
// IsNotAssigned().
func
NewNotAssigned
(
err
error
,
msg
string
)
error
{
return
&
notAssigned
{
wrap
(
err
,
msg
,
""
)}
}
// IsNotAssigned reports whether err was created with NotAssignedf() or
// NewNotAssigned().
func
IsNotAssigned
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
notAssigned
)
return
ok
}
// badRequest represents an error when a request has bad parameters.
type
badRequest
struct
{
Err
}
// BadRequestf returns an error which satisfies IsBadRequest().
func
BadRequestf
(
format
string
,
args
...
interface
{})
error
{
return
&
badRequest
{
wrap
(
nil
,
format
,
""
,
args
...
)}
}
// NewBadRequest returns an error which wraps err that satisfies
// IsBadRequest().
func
NewBadRequest
(
err
error
,
msg
string
)
error
{
return
&
badRequest
{
wrap
(
err
,
msg
,
""
)}
}
// IsBadRequest reports whether err was created with BadRequestf() or
// NewBadRequest().
func
IsBadRequest
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
badRequest
)
return
ok
}
// methodNotAllowed represents an error when an HTTP request
// is made with an inappropriate method.
type
methodNotAllowed
struct
{
Err
}
// MethodNotAllowedf returns an error which satisfies IsMethodNotAllowed().
func
MethodNotAllowedf
(
format
string
,
args
...
interface
{})
error
{
return
&
methodNotAllowed
{
wrap
(
nil
,
format
,
""
,
args
...
)}
}
// NewMethodNotAllowed returns an error which wraps err that satisfies
// IsMethodNotAllowed().
func
NewMethodNotAllowed
(
err
error
,
msg
string
)
error
{
return
&
methodNotAllowed
{
wrap
(
err
,
msg
,
""
)}
}
// IsMethodNotAllowed reports whether err was created with MethodNotAllowedf() or
// NewMethodNotAllowed().
func
IsMethodNotAllowed
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
methodNotAllowed
)
return
ok
}
// forbidden represents an error when a request cannot be completed because of
// missing privileges
type
forbidden
struct
{
Err
}
// Forbiddenf returns an error which satistifes IsForbidden()
func
Forbiddenf
(
format
string
,
args
...
interface
{})
error
{
return
&
forbidden
{
wrap
(
nil
,
format
,
""
,
args
...
)}
}
// NewForbidden returns an error which wraps err that satisfies
// IsForbidden().
func
NewForbidden
(
err
error
,
msg
string
)
error
{
return
&
forbidden
{
wrap
(
err
,
msg
,
""
)}
}
// IsForbidden reports whether err was created with Forbiddenf() or
// NewForbidden().
func
IsForbidden
(
err
error
)
bool
{
err
=
Cause
(
err
)
_
,
ok
:=
err
.
(
*
forbidden
)
return
ok
}
vendor/github.com/juju/errors/functions.go
deleted
100644 → 0
View file @
97b7a0e9
// Copyright 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package
errors
import
(
"fmt"
"strings"
)
// New is a drop in replacement for the standard library errors module that records
// the location that the error is created.
//
// For example:
// return errors.New("validation failed")
//
func
New
(
message
string
)
error
{
err
:=
&
Err
{
message
:
message
}
err
.
SetLocation
(
1
)
return
err
}
// Errorf creates a new annotated error and records the location that the
// error is created. This should be a drop in replacement for fmt.Errorf.
//
// For example:
// return errors.Errorf("validation failed: %s", message)
//
func
Errorf
(
format
string
,
args
...
interface
{})
error
{
err
:=
&
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
)}
err
.
SetLocation
(
1
)
return
err
}
// Trace adds the location of the Trace call to the stack. The Cause of the
// resulting error is the same as the error parameter. If the other error is
// nil, the result will be nil.
//
// For example:
// if err := SomeFunc(); err != nil {
// return errors.Trace(err)
// }
//
func
Trace
(
other
error
)
error
{
if
other
==
nil
{
return
nil
}
err
:=
&
Err
{
previous
:
other
,
cause
:
Cause
(
other
)}
err
.
SetLocation
(
1
)
return
err
}
// Annotate is used to add extra context to an existing error. The location of
// the Annotate call is recorded with the annotations. The file, line and
// function are also recorded.
//
// For example:
// if err := SomeFunc(); err != nil {
// return errors.Annotate(err, "failed to frombulate")
// }
//
func
Annotate
(
other
error
,
message
string
)
error
{
if
other
==
nil
{
return
nil
}
err
:=
&
Err
{
previous
:
other
,
cause
:
Cause
(
other
),
message
:
message
,
}
err
.
SetLocation
(
1
)
return
err
}
// Annotatef is used to add extra context to an existing error. The location of
// the Annotate call is recorded with the annotations. The file, line and
// function are also recorded.
//
// For example:
// if err := SomeFunc(); err != nil {
// return errors.Annotatef(err, "failed to frombulate the %s", arg)
// }
//
func
Annotatef
(
other
error
,
format
string
,
args
...
interface
{})
error
{
if
other
==
nil
{
return
nil
}
err
:=
&
Err
{
previous
:
other
,
cause
:
Cause
(
other
),
message
:
fmt
.
Sprintf
(
format
,
args
...
),
}
err
.
SetLocation
(
1
)
return
err
}
// DeferredAnnotatef annotates the given error (when it is not nil) with the given
// format string and arguments (like fmt.Sprintf). If *err is nil, DeferredAnnotatef
// does nothing. This method is used in a defer statement in order to annotate any
// resulting error with the same message.
//
// For example:
//
// defer DeferredAnnotatef(&err, "failed to frombulate the %s", arg)
//
func
DeferredAnnotatef
(
err
*
error
,
format
string
,
args
...
interface
{})
{
if
*
err
==
nil
{
return
}
newErr
:=
&
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
),
cause
:
Cause
(
*
err
),
previous
:
*
err
,
}
newErr
.
SetLocation
(
1
)
*
err
=
newErr
}
// Wrap changes the Cause of the error. The location of the Wrap call is also
// stored in the error stack.
//
// For example:
// if err := SomeFunc(); err != nil {
// newErr := &packageError{"more context", private_value}
// return errors.Wrap(err, newErr)
// }
//
func
Wrap
(
other
,
newDescriptive
error
)
error
{
err
:=
&
Err
{
previous
:
other
,
cause
:
newDescriptive
,
}
err
.
SetLocation
(
1
)
return
err
}
// Wrapf changes the Cause of the error, and adds an annotation. The location
// of the Wrap call is also stored in the error stack.
//
// For example:
// if err := SomeFunc(); err != nil {
// return errors.Wrapf(err, simpleErrorType, "invalid value %q", value)
// }
//
func
Wrapf
(
other
,
newDescriptive
error
,
format
string
,
args
...
interface
{})
error
{
err
:=
&
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
),
previous
:
other
,
cause
:
newDescriptive
,
}
err
.
SetLocation
(
1
)
return
err
}
// Maskf masks the given error with the given format string and arguments (like
// fmt.Sprintf), returning a new error that maintains the error stack, but
// hides the underlying error type. The error string still contains the full
// annotations. If you want to hide the annotations, call Wrap.
func
Maskf
(
other
error
,
format
string
,
args
...
interface
{})
error
{
if
other
==
nil
{
return
nil
}
err
:=
&
Err
{
message
:
fmt
.
Sprintf
(
format
,
args
...
),
previous
:
other
,
}
err
.
SetLocation
(
1
)
return
err
}
// Mask hides the underlying error type, and records the location of the masking.
func
Mask
(
other
error
)
error
{
if
other
==
nil
{
return
nil
}
err
:=
&
Err
{
previous
:
other
,
}
err
.
SetLocation
(
1
)
return
err
}
// Cause returns the cause of the given error. This will be either the
// original error, or the result of a Wrap or Mask call.
//
// Cause is the usual way to diagnose errors that may have been wrapped by
// the other errors functions.
func
Cause
(
err
error
)
error
{
var
diag
error
if
err
,
ok
:=
err
.
(
causer
);
ok
{
diag
=
err
.
Cause
()
}
if
diag
!=
nil
{
return
diag
}
return
err
}
type
causer
interface
{
Cause
()
error
}
type
wrapper
interface
{
// Message returns the top level error message,
// not including the message from the Previous
// error.
Message
()
string
// Underlying returns the Previous error, or nil
// if there is none.
Underlying
()
error
}
type
locationer
interface
{
Location
()
(
string
,
int
)
}
var
(
_
wrapper
=
(
*
Err
)(
nil
)
_
locationer
=
(
*
Err
)(
nil
)
_
causer
=
(
*
Err
)(
nil
)
)
// Details returns information about the stack of errors wrapped by err, in
// the format:
//
// [{filename:99: error one} {otherfile:55: cause of error one}]
//
// This is a terse alternative to ErrorStack as it returns a single line.
func
Details
(
err
error
)
string
{
if
err
==
nil
{
return
"[]"
}
var
s
[]
byte
s
=
append
(
s
,
'['
)
for
{
s
=
append
(
s
,
'{'
)
if
err
,
ok
:=
err
.
(
locationer
);
ok
{
file
,
line
:=
err
.
Location
()
if
file
!=
""
{
s
=
append
(
s
,
fmt
.
Sprintf
(
"%s:%d"
,
file
,
line
)
...
)
s
=
append
(
s
,
": "
...
)
}
}
if
cerr
,
ok
:=
err
.
(
wrapper
);
ok
{
s
=
append
(
s
,
cerr
.
Message
()
...
)
err
=
cerr
.
Underlying
()
}
else
{
s
=
append
(
s
,
err
.
Error
()
...
)
err
=
nil
}
s
=
append
(
s
,
'}'
)
if
err
==
nil
{
break
}
s
=
append
(
s
,
' '
)
}
s
=
append
(
s
,
']'
)
return
string
(
s
)
}
// ErrorStack returns a string representation of the annotated error. If the
// error passed as the parameter is not an annotated error, the result is
// simply the result of the Error() method on that error.
//
// If the error is an annotated error, a multi-line string is returned where
// each line represents one entry in the annotation stack. The full filename
// from the call stack is used in the output.
//
// first error
// github.com/juju/errors/annotation_test.go:193:
// github.com/juju/errors/annotation_test.go:194: annotation
// github.com/juju/errors/annotation_test.go:195:
// github.com/juju/errors/annotation_test.go:196: more context
// github.com/juju/errors/annotation_test.go:197:
func
ErrorStack
(
err
error
)
string
{
return
strings
.
Join
(
errorStack
(
err
),
"
\n
"
)
}
func
errorStack
(
err
error
)
[]
string
{
if
err
==
nil
{
return
nil
}
// We want the first error first
var
lines
[]
string
for
{
var
buff
[]
byte
if
err
,
ok
:=
err
.
(
locationer
);
ok
{
file
,
line
:=
err
.
Location
()
// Strip off the leading GOPATH/src path elements.
file
=
trimSourcePath
(
file
)
if
file
!=
""
{
buff
=
append
(
buff
,
fmt
.
Sprintf
(
"%s:%d"
,
file
,
line
)
...
)
buff
=
append
(
buff
,
": "
...
)
}
}
if
cerr
,
ok
:=
err
.
(
wrapper
);
ok
{
message
:=
cerr
.
Message
()
buff
=
append
(
buff
,
message
...
)
// If there is a cause for this error, and it is different to the cause
// of the underlying error, then output the error string in the stack trace.
var
cause
error
if
err1
,
ok
:=
err
.
(
causer
);
ok
{
cause
=
err1
.
Cause
()
}
err
=
cerr
.
Underlying
()
if
cause
!=
nil
&&
!
sameError
(
Cause
(
err
),
cause
)
{
if
message
!=
""
{
buff
=
append
(
buff
,
": "
...
)
}
buff
=
append
(
buff
,
cause
.
Error
()
...
)
}
}
else
{
buff
=
append
(
buff
,
err
.
Error
()
...
)
err
=
nil
}
lines
=
append
(
lines
,
string
(
buff
))
if
err
==
nil
{
break
}
}
// reverse the lines to get the original error, which was at the end of
// the list, back to the start.
var
result
[]
string
for
i
:=
len
(
lines
);
i
>
0
;
i
--
{
result
=
append
(
result
,
lines
[
i
-
1
])
}
return
result
}
vendor/github.com/juju/errors/path.go
deleted
100644 → 0
View file @
97b7a0e9
// Copyright 2013, 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package
errors
import
(
"go/build"
"os"
"path/filepath"
"strings"
"sync/atomic"
)
var
trimValue
atomic
.
Value
var
trimDefault
=
filepath
.
Join
(
build
.
Default
.
GOPATH
,
"src"
)
+
string
(
os
.
PathSeparator
)
func
trimSourcePath
(
filename
string
)
string
{
prefix
:=
trimDefault
if
v
:=
trimValue
.
Load
();
v
!=
nil
{
prefix
=
v
.
(
string
)
}
return
strings
.
TrimPrefix
(
filename
,
prefix
)
}
func
SetSourceTrimPrefix
(
s
string
)
string
{
previous
:=
trimDefault
if
v
:=
trimValue
.
Load
();
v
!=
nil
{
previous
=
v
.
(
string
)
}
trimValue
.
Store
(
s
)
return
previous
}
vendor/modules.txt
View file @
a71cce31
...
@@ -596,7 +596,7 @@ github.com/jmespath/go-jmespath
...
@@ -596,7 +596,7 @@ github.com/jmespath/go-jmespath
github.com/jonboulle/clockwork
github.com/jonboulle/clockwork
# github.com/json-iterator/go v1.1.8
# github.com/json-iterator/go v1.1.8
github.com/json-iterator/go
github.com/json-iterator/go
# github.com/juju/errors v0.0.0-201
90806202954-0232dcc7464
d
# github.com/juju/errors v0.0.0-201
81118221551-089d3ea4e4d5 => github.com/rancher/juju-to-pkg-errors v0.0.0-20200701001603-16f3c28b59b
d
github.com/juju/errors
github.com/juju/errors
# github.com/karrick/godirwalk v1.7.5
# github.com/karrick/godirwalk v1.7.5
github.com/karrick/godirwalk
github.com/karrick/godirwalk
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment