mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Integrate public as bindata optionally (#293)
* Dropped unused codekit config * Integrated dynamic and static bindata for public * Ignore public bindata * Add a general generate make task * Integrated flexible public assets into web command * Updated vendoring, added all missiong govendor deps * Made the linter happy with the bindata and dynamic code * Moved public bindata definition to modules directory * Ignoring the new bindata path now * Updated to the new public modules import path * Updated public bindata command and drop the new prefix
This commit is contained in:
		
				
					committed by
					
						 Lunny Xiao
						Lunny Xiao
					
				
			
			
				
	
			
			
			
						parent
						
							4680c349dd
						
					
				
				
					commit
					b6a95a8cb3
				
			
							
								
								
									
										191
									
								
								vendor/github.com/juju/errors/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								vendor/github.com/juju/errors/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
| All files in this repository are licensed as follows. If you contribute | ||||
| to this repository, it is assumed that you license your contribution | ||||
| under the same license unless you state otherwise. | ||||
|  | ||||
| All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. | ||||
|  | ||||
| This software is licensed under the LGPLv3, included below. | ||||
|  | ||||
| As a special exception to the GNU Lesser General Public License version 3 | ||||
| ("LGPL3"), the copyright holders of this Library give you permission to | ||||
| convey to a third party a Combined Work that links statically or dynamically | ||||
| to this Library without providing any Minimal Corresponding Source or | ||||
| Minimal Application Code as set out in 4d or providing the installation | ||||
| 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 | ||||
| terms and conditions of the license(s) which apply to the Application. | ||||
|  | ||||
| Except as stated in this special exception, the provisions of LGPL3 will | ||||
| continue to comply in full to this Library. If you modify this Library, you | ||||
| may apply this exception to your version of this Library, but you are not | ||||
| obliged to do so. If you do not wish to do so, delete this exception | ||||
| statement from your version. This exception does not (and cannot) modify any | ||||
| license terms which apply to the Application, with which you must still | ||||
| comply. | ||||
|  | ||||
|  | ||||
|                    GNU LESSER GENERAL PUBLIC LICENSE | ||||
|                        Version 3, 29 June 2007 | ||||
|  | ||||
|  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
|  | ||||
|  | ||||
|   This version of the GNU Lesser General Public License incorporates | ||||
| the terms and conditions of version 3 of the GNU General Public | ||||
| License, supplemented by the additional permissions listed below. | ||||
|  | ||||
|   0. Additional Definitions. | ||||
|  | ||||
|   As used herein, "this License" refers to version 3 of the GNU Lesser | ||||
| General Public License, and the "GNU GPL" refers to version 3 of the GNU | ||||
| General Public License. | ||||
|  | ||||
|   "The Library" refers to a covered work governed by this License, | ||||
| other than an Application or a Combined Work as defined below. | ||||
|  | ||||
|   An "Application" is any work that makes use of an interface provided | ||||
| by the Library, but which is not otherwise based on the Library. | ||||
| Defining a subclass of a class defined by the Library is deemed a mode | ||||
| of using an interface provided by the Library. | ||||
|  | ||||
|   A "Combined Work" is a work produced by combining or linking an | ||||
| Application with the Library.  The particular version of the Library | ||||
| with which the Combined Work was made is also called the "Linked | ||||
| Version". | ||||
|  | ||||
|   The "Minimal Corresponding Source" for a Combined Work means the | ||||
| Corresponding Source for the Combined Work, excluding any source code | ||||
| for portions of the Combined Work that, considered in isolation, are | ||||
| based on the Application, and not on the Linked Version. | ||||
|  | ||||
|   The "Corresponding Application Code" for a Combined Work means the | ||||
| object code and/or source code for the Application, including any data | ||||
| and utility programs needed for reproducing the Combined Work from the | ||||
| Application, but excluding the System Libraries of the Combined Work. | ||||
|  | ||||
|   1. Exception to Section 3 of the GNU GPL. | ||||
|  | ||||
|   You may convey a covered work under sections 3 and 4 of this License | ||||
| without being bound by section 3 of the GNU GPL. | ||||
|  | ||||
|   2. Conveying Modified Versions. | ||||
|  | ||||
|   If you modify a copy of the Library, and, in your modifications, a | ||||
| facility refers to a function or data to be supplied by an Application | ||||
| that uses the facility (other than as an argument passed when the | ||||
| facility is invoked), then you may convey a copy of the modified | ||||
| version: | ||||
|  | ||||
|    a) under this License, provided that you make a good faith effort to | ||||
|    ensure that, in the event an Application does not supply the | ||||
|    function or data, the facility still operates, and performs | ||||
|    whatever part of its purpose remains meaningful, or | ||||
|  | ||||
|    b) under the GNU GPL, with none of the additional permissions of | ||||
|    this License applicable to that copy. | ||||
|  | ||||
|   3. Object Code Incorporating Material from Library Header Files. | ||||
|  | ||||
|   The object code form of an Application may incorporate material from | ||||
| a header file that is part of the Library.  You may convey such object | ||||
| code under terms of your choice, provided that, if the incorporated | ||||
| material is not limited to numerical parameters, data structure | ||||
| layouts and accessors, or small macros, inline functions and templates | ||||
| (ten or fewer lines in length), you do both of the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the object code that the | ||||
|    Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the object code with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|   4. Combined Works. | ||||
|  | ||||
|   You may convey a Combined Work under terms of your choice that, | ||||
| taken together, effectively do not restrict modification of the | ||||
| portions of the Library contained in the Combined Work and reverse | ||||
| engineering for debugging such modifications, if you also do each of | ||||
| the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the Combined Work that | ||||
|    the Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the Combined Work with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|    c) For a Combined Work that displays copyright notices during | ||||
|    execution, include the copyright notice for the Library among | ||||
|    these notices, as well as a reference directing the user to the | ||||
|    copies of the GNU GPL and this license document. | ||||
|  | ||||
|    d) Do one of the following: | ||||
|  | ||||
|        0) Convey the Minimal Corresponding Source under the terms of this | ||||
|        License, and the Corresponding Application Code in a form | ||||
|        suitable for, and under terms that permit, the user to | ||||
|        recombine or relink the Application with a modified version of | ||||
|        the Linked Version to produce a modified Combined Work, in the | ||||
|        manner specified by section 6 of the GNU GPL for conveying | ||||
|        Corresponding Source. | ||||
|  | ||||
|        1) Use a suitable shared library mechanism for linking with the | ||||
|        Library.  A suitable mechanism is one that (a) uses at run time | ||||
|        a copy of the Library already present on the user's computer | ||||
|        system, and (b) will operate properly with a modified version | ||||
|        of the Library that is interface-compatible with the Linked | ||||
|        Version. | ||||
|  | ||||
|    e) Provide Installation Information, but only if you would otherwise | ||||
|    be required to provide such information under section 6 of the | ||||
|    GNU GPL, and only to the extent that such information is | ||||
|    necessary to install and execute a modified version of the | ||||
|    Combined Work produced by recombining or relinking the | ||||
|    Application with a modified version of the Linked Version. (If | ||||
|    you use option 4d0, the Installation Information must accompany | ||||
|    the Minimal Corresponding Source and Corresponding Application | ||||
|    Code. If you use option 4d1, you must provide the Installation | ||||
|    Information in the manner specified by section 6 of the GNU GPL | ||||
|    for conveying Corresponding Source.) | ||||
|  | ||||
|   5. Combined Libraries. | ||||
|  | ||||
|   You may place library facilities that are a work based on the | ||||
| Library side by side in a single library together with other library | ||||
| facilities that are not Applications and are not covered by this | ||||
| License, and convey such a combined library under terms of your | ||||
| choice, if you do both of the following: | ||||
|  | ||||
|    a) Accompany the combined library with a copy of the same work based | ||||
|    on the Library, uncombined with any other library facilities, | ||||
|    conveyed under the terms of this License. | ||||
|  | ||||
|    b) Give prominent notice with the combined library that part of it | ||||
|    is a work based on the Library, and explaining where to find the | ||||
|    accompanying uncombined form of the same work. | ||||
|  | ||||
|   6. Revised Versions of the GNU Lesser General Public License. | ||||
|  | ||||
|   The Free Software Foundation may publish revised and/or new versions | ||||
| of the GNU Lesser General Public License from time to time. Such new | ||||
| versions will be similar in spirit to the present version, but may | ||||
| differ in detail to address new problems or concerns. | ||||
|  | ||||
|   Each version is given a distinguishing version number. If the | ||||
| Library as you received it specifies that a certain numbered version | ||||
| of the GNU Lesser General Public License "or any later version" | ||||
| applies to it, you have the option of following the terms and | ||||
| conditions either of that published version or of any later version | ||||
| published by the Free Software Foundation. If the Library as you | ||||
| received it does not specify a version number of the GNU Lesser | ||||
| General Public License, you may choose any version of the GNU Lesser | ||||
| General Public License ever published by the Free Software Foundation. | ||||
|  | ||||
|   If the Library as you received it specifies that a proxy can decide | ||||
| whether future versions of the GNU Lesser General Public License shall | ||||
| apply, that proxy's public statement of acceptance of any version is | ||||
| permanent authorization for you to choose that version for the | ||||
| Library. | ||||
							
								
								
									
										11
									
								
								vendor/github.com/juju/errors/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/juju/errors/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| default: check | ||||
|  | ||||
| check: | ||||
| 	go test && go test -compiler gccgo | ||||
|  | ||||
| docs: | ||||
| 	godoc2md github.com/juju/errors > README.md | ||||
| 	sed -i 's|\[godoc-link-here\]|[](https://godoc.org/github.com/juju/errors)|' README.md  | ||||
|  | ||||
|  | ||||
| .PHONY: default check docs | ||||
							
								
								
									
										536
									
								
								vendor/github.com/juju/errors/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										536
									
								
								vendor/github.com/juju/errors/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,536 @@ | ||||
|  | ||||
| # 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 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 IsAlreadyExists | ||||
| ``` go | ||||
| func IsAlreadyExists(err error) bool | ||||
| ``` | ||||
| IsAlreadyExists reports whether the error was created with | ||||
| AlreadyExistsf() or NewAlreadyExists(). | ||||
|  | ||||
|  | ||||
| ## 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 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 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 New | ||||
| ``` go | ||||
| func New(message string) error | ||||
| ``` | ||||
| New is a drop in replacement for the standard libary 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 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 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 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 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 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 (\*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) 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) | ||||
							
								
								
									
										81
									
								
								vendor/github.com/juju/errors/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								vendor/github.com/juju/errors/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| // Copyright 2013, 2014 Canonical Ltd. | ||||
| // Licensed under the LGPLv3, see LICENCE file for details. | ||||
|  | ||||
| /* | ||||
| [godoc-link-here] | ||||
|  | ||||
| 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. | ||||
|  | ||||
| */ | ||||
| package errors | ||||
							
								
								
									
										145
									
								
								vendor/github.com/juju/errors/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								vendor/github.com/juju/errors/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| // 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 case 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 | ||||
| } | ||||
|  | ||||
| // 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 (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) | ||||
| } | ||||
|  | ||||
| // 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 = trimGoPath(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) | ||||
| } | ||||
							
								
								
									
										284
									
								
								vendor/github.com/juju/errors/errortypes.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								vendor/github.com/juju/errors/errortypes.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,284 @@ | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| // 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 ¬Found{wrap(nil, format, " not found", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotFound returns an error which wraps err that satisfies | ||||
| // IsNotFound(). | ||||
| func NewNotFound(err error, msg string) error { | ||||
| 	return ¬Found{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 ¬Implemented{wrap(nil, format, " not implemented", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotImplemented returns an error which wraps err and satisfies | ||||
| // IsNotImplemented(). | ||||
| func NewNotImplemented(err error, msg string) error { | ||||
| 	return ¬Implemented{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 ¬Supported{wrap(nil, format, " not supported", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotSupported returns an error which wraps err and satisfies | ||||
| // IsNotSupported(). | ||||
| func NewNotSupported(err error, msg string) error { | ||||
| 	return ¬Supported{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 ¬Valid{wrap(nil, format, " not valid", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotValid returns an error which wraps err and satisfies IsNotValid(). | ||||
| func NewNotValid(err error, msg string) error { | ||||
| 	return ¬Valid{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 ¬Provisioned{wrap(nil, format, " not provisioned", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotProvisioned returns an error which wraps err that satisfies | ||||
| // IsNotProvisioned(). | ||||
| func NewNotProvisioned(err error, msg string) error { | ||||
| 	return ¬Provisioned{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 ¬Assigned{wrap(nil, format, " not assigned", args...)} | ||||
| } | ||||
|  | ||||
| // NewNotAssigned returns an error which wraps err that satisfies | ||||
| // IsNotAssigned(). | ||||
| func NewNotAssigned(err error, msg string) error { | ||||
| 	return ¬Assigned{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 | ||||
| } | ||||
							
								
								
									
										330
									
								
								vendor/github.com/juju/errors/functions.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								vendor/github.com/juju/errors/functions.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,330 @@ | ||||
| // 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 libary 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 | ||||
| } | ||||
|  | ||||
| // 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 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 = trimGoPath(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 | ||||
| } | ||||
							
								
								
									
										38
									
								
								vendor/github.com/juju/errors/path.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/juju/errors/path.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| // Copyright 2013, 2014 Canonical Ltd. | ||||
| // Licensed under the LGPLv3, see LICENCE file for details. | ||||
|  | ||||
| package errors | ||||
|  | ||||
| import ( | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // prefixSize is used internally to trim the user specific path from the | ||||
| // front of the returned filenames from the runtime call stack. | ||||
| var prefixSize int | ||||
|  | ||||
| // goPath is the deduced path based on the location of this file as compiled. | ||||
| var goPath string | ||||
|  | ||||
| func init() { | ||||
| 	_, file, _, ok := runtime.Caller(0) | ||||
| 	if file == "?" { | ||||
| 		return | ||||
| 	} | ||||
| 	if ok { | ||||
| 		// We know that the end of the file should be: | ||||
| 		// github.com/juju/errors/path.go | ||||
| 		size := len(file) | ||||
| 		suffix := len("github.com/juju/errors/path.go") | ||||
| 		goPath = file[:size-suffix] | ||||
| 		prefixSize = len(goPath) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func trimGoPath(filename string) string { | ||||
| 	if strings.HasPrefix(filename, goPath) { | ||||
| 		return filename[prefixSize:] | ||||
| 	} | ||||
| 	return filename | ||||
| } | ||||
		Reference in New Issue
	
	Block a user