From 5fa7cfdbd4e96e32f7eb06812acbecd50eaf5c3b Mon Sep 17 00:00:00 2001 From: buddhamagnet Date: Tue, 28 Mar 2017 12:59:03 +0100 Subject: [PATCH] drop godeps in favour of git submodules and vendor folder --- .gitmodules | 6 + Godeps/Godeps.json | 14 - Godeps/Readme | 5 - Godeps/_workspace/.gitignore | 2 - .../github.com/buddhamagnet/raml/.gitignore | 24 - .../github.com/buddhamagnet/raml/CONTRIBUTORS | 6 - .../src/github.com/buddhamagnet/raml/LICENSE | 26 - .../github.com/buddhamagnet/raml/README.md | 95 - .../github.com/buddhamagnet/raml/errors.go | 180 - .../github.com/buddhamagnet/raml/parser.go | 259 - .../buddhamagnet/raml/samples/bad_raml.raml | 127 - .../buddhamagnet/raml/samples/congo/api.raml | 205 - .../buddhamagnet/raml/samples/example.raml | 172 - .../raml/samples/github/github-api-v3.raml | 21650 ---------------- .../buddhamagnet/raml/samples/notes/api.raml | 94 - .../raml/samples/other_example.raml | 199 - .../raml/samples/raml-tutorial-200/README.md | 4 - .../samples/raml-tutorial-200/heybulldog.mp3 | 1 - .../raml-tutorial-200/jukebox-api.raml | 194 - .../jukebox-include-album-new.sample | 8 - .../jukebox-include-album-retrieve.sample | 30 - .../jukebox-include-album-songs.sample | 14 - .../jukebox-include-album.schema | 36 - .../jukebox-include-albums.sample | 32 - .../jukebox-include-artist-albums.sample | 42 - .../jukebox-include-artist-new.sample | 5 - .../jukebox-include-artist-retrieve.sample | 51 - .../jukebox-include-artist.schema | 20 - .../jukebox-include-artists.sample | 31 - .../jukebox-include-song-new.sample | 5 - .../jukebox-include-song-retrieve.sample | 15 - .../jukebox-include-song.schema | 24 - .../jukebox-include-songs.sample | 14 - .../raml/samples/sample_documentation.yaml | 2 - .../raml/samples/simple_example.raml | 127 - .../src/github.com/buddhamagnet/raml/types.go | 836 - .../github.com/buddhamagnet/raml/validator.go | 38 - .../github.com/buddhamagnet/yaml/CONTRIBUTORS | 12 - .../src/github.com/buddhamagnet/yaml/LICENSE | 188 - .../buddhamagnet/yaml/LICENSE.libyaml | 31 - .../github.com/buddhamagnet/yaml/README.md | 130 - .../src/github.com/buddhamagnet/yaml/apic.go | 742 - .../github.com/buddhamagnet/yaml/decode.go | 884 - .../buddhamagnet/yaml/decode_test.go | 997 - .../github.com/buddhamagnet/yaml/emitterc.go | 1685 -- .../github.com/buddhamagnet/yaml/encode.go | 290 - .../buddhamagnet/yaml/encode_test.go | 434 - .../github.com/buddhamagnet/yaml/parserc.go | 1096 - .../github.com/buddhamagnet/yaml/readerc.go | 391 - .../github.com/buddhamagnet/yaml/resolve.go | 203 - .../github.com/buddhamagnet/yaml/scannerc.go | 2710 -- .../github.com/buddhamagnet/yaml/sorter.go | 104 - .../buddhamagnet/yaml/suite_test.go | 12 - .../github.com/buddhamagnet/yaml/writerc.go | 89 - .../src/github.com/buddhamagnet/yaml/yaml.go | 507 - .../src/github.com/buddhamagnet/yaml/yamlh.go | 716 - .../buddhamagnet/yaml/yamlprivateh.go | 173 - vendor/github.com/buddhamagnet/raml | 1 + vendor/github.com/buddhamagnet/yaml | 1 + 59 files changed, 8 insertions(+), 35981 deletions(-) create mode 100644 .gitmodules delete mode 100644 Godeps/Godeps.json delete mode 100644 Godeps/Readme delete mode 100644 Godeps/_workspace/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/CONTRIBUTORS delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/README.md delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/errors.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/parser.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/bad_raml.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/congo/api.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/example.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/github/github-api-v3.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/notes/api.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/other_example.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/README.md delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/heybulldog.mp3 delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-api.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-new.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-retrieve.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-songs.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album.schema delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-albums.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-albums.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-new.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-retrieve.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist.schema delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artists.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-new.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-retrieve.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song.schema delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-songs.sample delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/sample_documentation.yaml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/simple_example.raml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/types.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/raml/validator.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/CONTRIBUTORS delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE.libyaml delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/README.md delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/apic.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode_test.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/emitterc.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode_test.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/parserc.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/readerc.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/resolve.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/scannerc.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/sorter.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/suite_test.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/writerc.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/yaml.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlh.go delete mode 100644 Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlprivateh.go create mode 160000 vendor/github.com/buddhamagnet/raml create mode 160000 vendor/github.com/buddhamagnet/yaml diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f022177 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "vendor/github.com/buddhamagnet/raml"] + path = vendor/github.com/buddhamagnet/raml + url = http://github.com/buddhamagnet/raml +[submodule "vendor/github.com/buddhamagnet/yaml"] + path = vendor/github.com/buddhamagnet/yaml + url = http://github.com/buddhamagnet/yaml diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json deleted file mode 100644 index 58eac49..0000000 --- a/Godeps/Godeps.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "ImportPath": "github.com/EconomistDigitalSolutions/ramlapi", - "GoVersion": "go1.4", - "Deps": [ - { - "ImportPath": "github.com/buddhamagnet/raml", - "Rev": "396f76ddca3fd297d722114be47112bf2ce8d509" - }, - { - "ImportPath": "github.com/buddhamagnet/yaml", - "Rev": "e401b2b026855a4fa8e7014d553ae5bdfccb21cd" - } - ] -} diff --git a/Godeps/Readme b/Godeps/Readme deleted file mode 100644 index 4cdaa53..0000000 --- a/Godeps/Readme +++ /dev/null @@ -1,5 +0,0 @@ -This directory tree is generated automatically by godep. - -Please do not edit. - -See https://github.com/tools/godep for more information. diff --git a/Godeps/_workspace/.gitignore b/Godeps/_workspace/.gitignore deleted file mode 100644 index f037d68..0000000 --- a/Godeps/_workspace/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/pkg -/bin diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/.gitignore b/Godeps/_workspace/src/github.com/buddhamagnet/raml/.gitignore deleted file mode 100644 index daf913b..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/CONTRIBUTORS b/Godeps/_workspace/src/github.com/buddhamagnet/raml/CONTRIBUTORS deleted file mode 100644 index a226671..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/CONTRIBUTORS +++ /dev/null @@ -1,6 +0,0 @@ -go-raml Contributor List (ordered by date): - -Alon Diamant [https://github.com/advance512] -Dvir Volk [https://github.com/dvirsky] - -If anyone is missing, please message me. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/LICENSE b/Godeps/_workspace/src/github.com/buddhamagnet/raml/LICENSE deleted file mode 100644 index 1ea5898..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright 2014 DoAT. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER. -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of -the authors and should not be interpreted as representing official policies, -either expressed or implied, of DoAT. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/README.md b/Godeps/_workspace/src/github.com/buddhamagnet/raml/README.md deleted file mode 100644 index 15ef037..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/README.md +++ /dev/null @@ -1,95 +0,0 @@ -raml -==== - -An implementation of a RAML parser for Go. Compliant with RAML 0.8. - -Introduction -============ - -RAML is a YAML-based language that describes RESTful APIs. Together with the -YAML specification, this specification provides all the information necessary -to describe RESTful APIs; to create API client-code and API server-code -generators; and to create API user documentation from RAML API definitions. - -The **_raml_** package enables Go programs to parse RAML files and valid RAML API -definitions. It was originally developed within [EverythingMe](https://www.everything.me). - -Status ------- - -The **_raml_** package is currently unstable and does not offer any kind of API -stability guarantees. - -Installation -============ - -The yaml package may be installed by running: - - $ go get gopkg.in/raml.v0 - -Opening that same URL in a browser will present a nice introductory page -containing links to the documentation, source code, and all versions available -for the given package: - -https://gopkg.in/raml.v0 - -The actual implementation of the package is in GitHub: - -https://github.com/go-raml/raml - -Contributing to development ---------------------------- - -Typical installation process for developing purposes: - - $ git clone git@github.com:go-raml/raml.git - $ cd raml - $ go build - $ go install - $ go test - -Usage -===== - -Usage is very simple: - - package main - - import ( - "fmt" - raml "gopkg.in/raml.v0" - "github.com/kr/pretty" - ) - - func main() { - - fileName := "./samples/congo/api.raml" - - if apiDefinition, err := raml.ParseFile(fileName); err != nil { - fmt.Printf("Failed parsing RAML file %s:\n %s", fileName, err.Error()) - } else { - fmt.Printf("Successfully parsed RAML file %s!\n\n", fileName) - pretty.Printf(apiDefinition) - } - } - -Getting help -============ - -* Look up the [RAML 0.8](http://raml.org/spec.html) spec if in doubt -* Contact Alon, the maintainer, directly: diamant.alon@gmail.com - -Roadmap -======= - -TBD. - -Reporting Bugs and Contributing Code -==================================== - -* Want to report a bug or request a feature? Please open [an issue](https://github.com/go-raml/raml/issues/new). -* Want to contribute to **_raml_**? Fork the project and make a pull request. Cool cool cool. - -## License - -See [LICENSE](https://github.com/go-raml/raml/blob/v0/LICENSE) file. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/errors.go b/Godeps/_workspace/src/github.com/buddhamagnet/raml/errors.go deleted file mode 100644 index 379fbfc..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/errors.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2014 DoAT. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER. -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// The views and conclusions contained in the software and documentation are those of -// the authors and should not be interpreted as representing official policies, -// either expressed or implied, of DoAT. - -package raml - -// This file contains all code related to YAML and RAML errors. - -import ( - "fmt" - "strings" - - yaml "github.com/buddhamagnet/yaml" -) - -// A RamlError is returned by the ParseFile function when RAML or YAML problems -// are encountered when parsing the RAML document. -type RamlError struct { - Errors []string -} - -func (e *RamlError) Error() string { - return fmt.Sprintf("Error parsing RAML:\n %s\n", - strings.Join(e.Errors, "\n ")) -} - -// Populate the RAML error value with converted YAML error strings (with -// additional context) -func populateRAMLError(ramlError *RamlError, - yamlErrors *yaml.TypeError) { - - // Go over the errors - for _, currErr := range yamlErrors.Errors { - - // Create the RAML errors - ramlError.Errors = - append(ramlError.Errors, convertYAMLError(currErr)) - } -} - -// Convert a YAML error string into RAML error string, with more context -func convertYAMLError(yamlError string) string { - - if strings.Contains(yamlError, "cannot unmarshal") { - - yamlErrorParts := strings.Split(yamlError, " ") - - if len(yamlErrorParts) >= 7 { - - fmt.Println(yamlError) - - var ok bool - var source string - var target string - var targetName string - line := yamlErrorParts[1] - line = line[:len(line)-1] - - // TODO: support more complex types: - // map[string]raml.NamedParameter --> - // detect map, format to: - // "mapping of %s to %s", ramlTypeNames["string"], ramlTypeNames["raml.NamedParameter"] - // if "string" is not found, use the key, i.e. "string" in this case. - // so the output would be: - // mapping of string to named parameter - - // TODO: instead of having string in the key of some mappings, - // perhaps use a type alias: - // type Name string - // map[Name]NamedParameter - // would output: - // mapping of name string to named parameter - - if source, ok = yamlTypeToName[yamlErrorParts[4]]; !ok { - source = yamlErrorParts[4] - } - fmt.Println("source: ", source) - - if source == "string" { - source = fmt.Sprintf("string (got %s)", yamlErrorParts[5]) - target = yamlErrorParts[7] - } else { - target = yamlErrorParts[6] - - } - if targetName, ok = ramlTypeNames[target]; !ok { - targetName = target - } - - target, _ = ramlTypes[target] - - return fmt.Sprintf("line %s: %s cannot be of "+ - "type %s, must be %s", line, targetName, source, target) - - } - } - - // Otherwise - return fmt.Sprintf("YAML error, %s", yamlError) -} - -var yamlTypeToName map[string]string = map[string]string{ - "!!seq": "sequence", - "!!map": "mapping", - "!!int": "integer", - "!!str": "string", - "!!null": "null", - "!!bool": "boolean", - "!!float": "float", - "!!timestamp": "timestamp", - "!!binary": "binary", - "!!merge": "merge", -} - -var ramlTypeNames map[string]string = map[string]string{ - "string": "string value", - "int": "numeric value", - "raml.NamedParameter": "named parameter", - "raml.HTTPCode": "HTTP code", - "raml.HTTPHeader": "HTTP header", - "raml.Header": "header", - "raml.Documentation": "documentation", - "raml.Body": "body", - "raml.Response": "response", - "raml.DefinitionParameters": "definition parameters", - "raml.DefinitionChoice": "definition choice", - "raml.Trait": "trait", - "raml.ResourceTypeMethod": "resource type method", - "raml.ResourceType": "resource type", - "raml.SecuritySchemeMethod": "security scheme method", - "raml.SecurityScheme": "security scheme", - "raml.Method": "method", - "raml.Resource": "resource", - "raml.APIDefinition": "API definition", -} - -var ramlTypes map[string]string = map[string]string{ - "string": "string", - "int": "integer", - "raml.NamedParameter": "mapping", - "raml.HTTPCode": "integer", - "raml.HTTPHeader": "string", - "raml.Header": "mapping", - "raml.Documentation": "mapping", - "raml.Body": "mapping", - "raml.Response": "mapping", - "raml.DefinitionParameters": "mapping", - "raml.DefinitionChoice": "string or mapping", - "raml.Trait": "mapping", - "raml.ResourceTypeMethod": "mapping", - "raml.ResourceType": "mapping", - "raml.SecuritySchemeMethod": "mapping", - "raml.SecurityScheme": "mapping", - "raml.Method": "mapping", - "raml.Resource": "mapping", - "raml.APIDefinition": "mapping", -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/parser.go b/Godeps/_workspace/src/github.com/buddhamagnet/raml/parser.go deleted file mode 100644 index 57c7434..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/parser.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2014 DoAT. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER. -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// The views and conclusions contained in the software and documentation are those of -// the authors and should not be interpreted as representing official policies, -// either expressed or implied, of DoAT. - -package raml - -// This file contains all of the RAML parser related code. - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "io" - "io/ioutil" - "path/filepath" - "strings" - - yaml "github.com/buddhamagnet/yaml" -) - -// Parse a RAML file. Returns a raml.APIDefinition value or an error if -// everything is something went wrong. -// This is the main entry point to the RAML parser. -func ParseFile(filePath string) (*APIDefinition, error) { - - // Get the working directory - workingDirectory, fileName := filepath.Split(filePath) - - // Read original file contents into a byte array - mainFileBytes, err := readFileContents(workingDirectory, fileName) - - if err != nil { - return nil, err - } - - // Get the contents of the main file - mainFileBuffer := bytes.NewBuffer(mainFileBytes) - - // Verify the YAML version - var ramlVersion string - if firstLine, err := mainFileBuffer.ReadString('\n'); err != nil { - return nil, fmt.Errorf("Problem reading RAML file (Error: %s)", err.Error()) - } else { - - // We read some data... - if len(firstLine) >= 10 { - ramlVersion = firstLine[:10] - } - - // TODO: Make this smart. We probably won't support multiple RAML - // versions in the same package - we'll have different branches - // for different versions. This one is hard-coded to 0.8. - // Still, would be good to think about this. - if ramlVersion != "#%RAML 0.8" { - return nil, errors.New("Input file is not a RAML 0.8 file. Make " + - "sure the file starts with #%RAML 0.8") - } - } - - // Pre-process the original file, following !include directive - preprocessedContentsBytes, err := - preProcess(mainFileBuffer, workingDirectory) - - if err != nil { - return nil, - fmt.Errorf("Error preprocessing RAML file (Error: %s)", err.Error()) - } - - //pretty.Println(string(preprocessedContentsBytes)) - - // Unmarshal into an APIDefinition value - apiDefinition := new(APIDefinition) - apiDefinition.RAMLVersion = ramlVersion - - // Go! - err = yaml.Unmarshal(preprocessedContentsBytes, apiDefinition) - - // Any errors? - if err != nil { - - // Create a RAML error value - ramlError := new(RamlError) - - // Copy the YAML errors into it.. - if yamlErrors, ok := err.(*yaml.TypeError); ok { - populateRAMLError(ramlError, yamlErrors) - } else { - // Or just any other error, though this shouldn't happen. - ramlError.Errors = append(ramlError.Errors, err.Error()) - } - - return nil, ramlError - } - - postProcess(apiDefinition) - - // Good. - return apiDefinition, nil -} - -func postProcess(d *APIDefinition) { - for _, r := range d.Resources { - addMethodNames(&r) - } -} - -func addMethodNames(r *Resource) { - if r.Get != nil { - r.Get.Name = "GET" - } - if r.Post != nil { - r.Post.Name = "POST" - } - if r.Put != nil { - r.Put.Name = "PUT" - } - if r.Patch != nil { - r.Patch.Name = "PATCH" - } - if r.Head != nil { - r.Head.Name = "HEAD" - } - if r.Delete != nil { - r.Delete.Name = "DELETE" - } - - for _, n := range r.Nested { - addMethodNames(n) - } -} - -// Reads the contents of a file, returns a bytes buffer -func readFileContents(workingDirectory string, fileName string) ([]byte, error) { - - filePath := filepath.Join(workingDirectory, fileName) - - if fileName == "" { - return nil, fmt.Errorf("File name cannot be nil: %s", filePath) - } - - // Read the file - fileContentsArray, err := ioutil.ReadFile(filePath) - if err != nil { - return nil, - fmt.Errorf("Could not read file %s (Error: %s)", - filePath, err.Error()) - } - - return fileContentsArray, nil -} - -// preProcess acts as a preprocessor for a RAML document in YAML format, -// including files referenced via !include. It returns a pre-processed document. -func preProcess(originalContents io.Reader, workingDirectory string) ([]byte, error) { - - // NOTE: Since YAML doesn't support !include directives, and since go-yaml - // does NOT play nice with !include tags, this has to be done like this. - // I am considering modifying go-yaml to add custom handlers for specific - // tags, to add support for !include, but for now - this method is - // GoodEnough(TM) and since it will only happen once, I am not prematurely - // optimizing it. - - var preprocessedContents bytes.Buffer - - // Go over each line, looking for !include tags - scanner := bufio.NewScanner(originalContents) - var line string - - // Scan the file until we reach EOF or error out - for scanner.Scan() { - line = scanner.Text() - - // Did we find an !include directive to handle? - if idx := strings.Index(line, "!include"); idx != -1 { - - // TODO: Do this better - includeLength := len("!include ") - - includedFile := line[idx+includeLength:] - - preprocessedContents.Write([]byte(line[:idx])) - - // Get the included file contents - includedContents, err := - readFileContents(workingDirectory, includedFile) - - if err != nil { - return nil, - fmt.Errorf("Error including file %s:\n %s", - includedFile, err.Error()) - } - - // TODO: Check that you only insert .yaml, .raml, .txt and .md files - // In case of .raml or .yaml, remove the comments - // In case of other files, Base64 them first. - - // TODO: Better, step by step checks .. though prolly it'll panic - // Write text files in the same indentation as the first line - internalScanner := - bufio.NewScanner(bytes.NewBuffer(includedContents)) - - // Indent by this much - firstLine := true - indentationString := "" - - // Go over each line, write it - for internalScanner.Scan() { - internalLine := internalScanner.Text() - - preprocessedContents.WriteString(indentationString) - if firstLine { - indentationString = strings.Repeat(" ", idx) - firstLine = false - } - - preprocessedContents.WriteString(internalLine) - preprocessedContents.WriteByte('\n') - } - - } else { - - // No, just a simple line.. write it - preprocessedContents.WriteString(line) - preprocessedContents.WriteByte('\n') - } - } - - // Any errors encountered? - if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("Error reading YAML file: %s", err.Error()) - } - - // Return the preprocessed contents - return preprocessedContents.Bytes(), nil -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/bad_raml.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/bad_raml.raml deleted file mode 100644 index 29b9497..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/bad_raml.raml +++ /dev/null @@ -1,127 +0,0 @@ -#%RAML 0.8 -title: Notes Example API -/jobs: - displayName: Jobs - post: - description: Create a job -/projects: - displayName: Projects - post: - description: Create a project -/resources: - displayName: Resources - type: - searchableCollection: - queryParamName: title - fallbackParamName: digest_all_fields - get: - description: Get a resource - is: - - secured: - tokenName: access_token - paged: - maxPages: 10 - post: - description: Post a resource - /{resourceId}: - get: - description: Get a resource ID - put: - description: Put resource ID - delete: - description: Delete a resource ID - /yet_another: - get: - description: Yet another -uriParameters: - communityDomain: - displayName: Community Domain - type: string - communityPath: - displayName: Community Path - type: string - pattern: ^[a-zA-Z0-9][-a-zA-Z0-9]*$ - minLength: "hello" -baseUri: /lala -protocols: [HTTP, HTTPS] -traits: - - secured: - queryParameters: - <>: - description: A valid <> is required - paged: - queryParameters: - numPages: - description: The number of pages to return, not to exceed <> -resourceTypes: - - rttest: - description: test - - one: - description: hi - - auditableResource: - post?: - body: - application/x-www-form-urlencoded: - formParameters: - createAuthority: - description: | - If the resource has a post method defined, expect a createAuthority - property in its body - delete?: - body: - multipart/form-data: - formParameters: - deleteAuthority: - description: | - If the resource has a delete method defined, expect a deleteAuthority - property in its body - - searchableCollection: - get: - queryParameters: - <>: - description: Return <> that have their <> matching the given value - <>: - description: If no values match the value given for <>, use <> instead -securitySchemes: - - oauth_2_0: - description: | - Dropbox supports OAuth 2.0 for authenticating all API requests. - type: OAuth 2.0 - describedBy: - headers: - Authorization: - description: | - Used to send a valid OAuth 2 access token. Do not use - with the "access_token" query string parameter. - type: string - queryParameters: - access_token: - description: | - Used to send a valid OAuth 2 access token. Do not use together with - the "Authorization" header - type: string - responses: - 401: - description: | - Bad or expired token. This can happen if the user or Dropbox - revoked or expired an access token. To fix, you should re- - authenticate the user. - 403: - description: | - Bad OAuth request (wrong consumer key, bad nonce, expired - timestamp...). Unfortunately, re-authenticating the user won't help here. - settings: - authorizationUri: https://www.dropbox.com/1/oauth2/authorize - accessTokenUri: https://api.dropbox.com/1/oauth2/token - authorizationGrants: [ code, token ] - - oauth_1_0: - description: | - OAuth 1.0 continues to be supported for all API requests, but OAuth 2.0 is now preferred. - type: OAuth 1.0 - settings: - requestTokenUri: https://api.dropbox.com/1/oauth/request_token - authorizationUri: https://www.dropbox.com/1/oauth/authorize - tokenCredentialsUri: https://api.dropbox.com/1/oauth/access_token - - customHeader: - description: | - A custom diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/congo/api.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/congo/api.raml deleted file mode 100644 index 75f8487..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/congo/api.raml +++ /dev/null @@ -1,205 +0,0 @@ -#%RAML 0.8 -title: Congo API For Drone Deliveries -mediaType: application/json -/deliveries: - get: - description: Get a list of deliveries - queryParameters: - sinceDate: - type: date - example: Mon, 14 Jul 2014 07:00:00 GMT - throughDate: - type: date - example: Mon, 18 Jul 2014 07:00:00 GMT - responses: - 200: - body: - example: | - [ - { - "id": "4", - "at": "Tue, 08 Jul 2014 13:00:00 GMT", - "toAddressId": "gi6w4fgi", - "orderItemId": "6782798", - "status": "completed", - "droneId": "f" - }, - { - "id": "137", - "at": "Sun, 20 Jul 2014 19:36:00 GMT", - "toAddressId": "6tg23d6i", - "orderItemId": "7626827", - "status": "scheduled", - "droneId": "a" - }, - { - "id": "8", - "at": "Sun, 20 Jul 2014 21:20:00 GMT", - "toAddressId": "gi6w4fgi", - "orderItemId": "9877292", - "status": "scheduled", - "droneId": "f" - } - ] - post: - description: Create/request a new delivery - body: - example: | - { - "at": "Sun, 20 Jul 2014 21:20:00 GMT", - "toAddressId": "273hh79", - "orderItemId": "736786" - } - responses: - 201: - headers: - Location: - body: - example: | - { - "id": "987", - "at": "Sun, 20 Jul 2014 21:20:00 GMT", - "toAddressId": "273hh79", - "orderItemId": "736786", - "status": "scheduled", - "droneId": "f" - } - /{deliveryId}: - get: - description: Get information on a specific delivery - responses: - 200: - body: - example: | - { - "id": "8", - "at": "Sun, 20 Jul 2014 21:20:00 GMT", - "toAddressId": "gi6w4fgi", - "orderItemId": "736786", - "status": "scheduled", - "droneId": "f" - } - patch: - description: Update the information on a specific delivery - body: - example: | - { - "at": "Mon, 21 Jul 2014 00:00:00 GMT" - } - responses: - 200: - body: - example: | - { - "id": "8", - "at": "Mon, 21 Jul 2014 00:00:00 GMT", - "toAddressId": "gi6w4fgi", - "orderItemId": "736786", - "status": "scheduled", - "droneId": "f" - } - delete: - description: Cancel a specific delivery - responses: - 204: -/drones: - get: - description: Get a list of drones - queryParameters: - atLatitude: - description: Latitude in decimal degrees - type: number - example: 37.8 - atLongitude: - description: Longitude in decimal degrees - type: number - example: -122.3 - atAltitude: - description: Altitude in meters above the [ellipsoid](http://www.w3.org/TR/geolocation-API/#ref-wgs) - type: number - example: 0 - atRange: - description: Maximum distance from location, in meters - type: number - example: 50 - default: 100 - responses: - 200: - body: - example: | - [ - { - "id": "a", - "latitude": 37.787862, - "longitude": -122.404694, - "altitude": 28.3, - "name": "High Flyer" - }, - { - "id": "f", - "latitude": 37.852519, - "longitude": -122.237390, - "altitude": 56.9, - "name": "Camelot" - } - ] - post: - description: Add a new drone to the fleet - body: - example: | - { - "name": "Lancelot" - } - /{droneId}: - get: - description: Get information on a specific drone - responses: - 200: - body: - example: | - { - "id": "f", - "latitude": 37.852519, - "longitude": -122.237390, - "altitude": 56.9, - "name": "Camelot" - } - patch: - description: Update the information on a specific drone - body: - example: | - { - "name": "Arthur" - } - responses: - 200: - body: - example: | - { - "id": "f", - "latitude": 37.852519, - "longitude": -122.237390, - "altitude": 56.9, - "name": "Arthur" - } - delete: - description: Remove a drone from the fleet - responses: - 204: - /deliveries: - get: - description: The deliveries scheduled for the current drone - responses: - 200: - body: - example: | - [ - { - "id": "8", - "at": "Sun, 20 Jul 2014 21:20:00 GMT", - "toAddressId": "gi6w4fgi", - "orderItemId": "736786", - "status": "scheduled", - "droneId": "f" - } - ] diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/example.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/example.raml deleted file mode 100644 index e9d0de8..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/example.raml +++ /dev/null @@ -1,172 +0,0 @@ -#%RAML 0.8 ---- -title: Example API -baseUri: http://example.com -securitySchemes: - - basic: - type: Basic Authentication -traits: - - secured: - description: Some requests require authentication - - unsecured: - description: This is not secured - - catpictures: - description: requires cat headers - - anotherTrait: {} - - andAnotherTrait: {} - - andYetAnotherTrait: {} - - aFinalTrait: {} - - someParameterizedTrait: - description: <> -resourceTypes: - - collection: - description: bunk -documentation: - - title: Getting Started - content: | - # Header - Content - ## Subheader - **Bolded content** -/resource: - displayName: First One - is: - [ secured ] - options: - connect: - trace: - patch: - delete: - put: - get: - description: get the first one - headers: - x-custom: - /{resourceId}: - description: This is a resource description *with* some _markdown_ embedded in it - uriParameters: - resourceId: - required: true - description: Which resoure would you like to view - get: - description: | - Instagram’s API uses the [OAuth 2.0 protocol](http://tools.ietf.org/html/draft-ietf-oauth-v2-12) for simple, but effective authentication and authorization. OAuth 2.0 is much easier to use than previous schemes; developers can start using the Instagram API almost immediately. The one thing to keep in mind is that all requests to the API must be made over SSL (https:// not http://) - - ## Do you need to authenticate? - - For the most part, Instagram’s API only requires the use of a _client_id). A client_id simply associates your server, script, or program with a specific application. However, some requests require authentication - specifically requests made on behalf of a user. Authenticated requests require an _access_token_. These tokens are unique to a user and should be stored securely. Access tokens may expire at any time in the future. - - Note that in many situations, you may not need to authenticate users at all. For instance, you may request popular photos without authenticating (i.e. you do not need to provide an access_token; just use your client ID with your request). We only require authentication in cases where your application is making requests on behalf of a user (commenting, liking, browsing a user’s feed, etc.). - - ## Receiving an access_token - queryParameters: - filter: - description: What to filter - type: string - post: - body: - application/json: - application/x-www-form-urlencoded: - formParameters: - name: - description: The name of the resource to create - type: string - example: Comment - description: - description: A description of the resource to create - type: string - example: User-generated content pertinent to the associated blog post - multipart/form-data: - formParameters: - name: - description: The name of the resource to create - type: string - example: Comment - description: - description: A description of the resource to create - type: string - example: User-generated content pertinent to the associated blog post - -/another/resource: - displayName: Cats - type: collection - is: [secured, catpictures] - connect: !!null - head: !!null - get: - queryParameters: - chunk: - displayName: page - description: Which page to display - type: integer - example: 1 - minimum: 1 - maximum: 100 - required: true - order: - description: The sort order of resources - type: string - enum: ["oldest", "newest"] - example: oldest - minLength: 5 - maxLength: 7 - default: newest - query: - description: A query parameter - repeat: true - -/resource-with-headers: - displayName: Resource With headers - get: - headers: - x-custom-header: - displayName: Custom header - description: This header is used to send data that... - type: string - pattern: ^\w+$ - x-p-{*}: - displayName: Parameterized header - -/secured-resource: - displayName: SO SECURE - get: - securedBy: [basic] -/resource-with-method-level-traits: - displayName: First One - is: [secured] - get: - is: [unsecured, catpictures, anotherTrait, andAnotherTrait, andYetAnotherTrait, aFinalTrait, someParameterizedTrait: { someParameterName: someParameterValue }, otherParameterizedTrait : {asd: 123}] - description: get the first one - -/resource-with-form-and-multipart-form-parameters: - get: - queryParameters: - some_query_param: - displayName: Some Query Param - description: Your value for some thing. - type: string - required: true - example: "my value" - body: - application/json: - example: | - { - "api_key": "c4f820f0420a013ea143230c290fbf99", - ... - } - application/x-www-form-urlencoded: - formParameters: - api_key: - displayName: API Key - description: Your license key for the application. Please contact developer@nzpost.co.nz for a license key - type: string - required: true - example: "c4f820f0420a013ea143230c290fbf99" - multipart/form-data: - formParameters: - api_key: - displayName: API Key - description: Your license key for the application. Please contact developer@nzpost.co.nz for a license key - type: string - required: true - example: "c4f820f0420a013ea143230c290fbf99" diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/github/github-api-v3.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/github/github-api-v3.raml deleted file mode 100644 index 5809611..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/github/github-api-v3.raml +++ /dev/null @@ -1,21650 +0,0 @@ -#%RAML 0.8 ---- -title: GitHub API -version: v3 -baseUri: https://api.github.com/ -securitySchemes: - - oauth_2_0: - description: | - OAuth2 is a protocol that lets external apps request authorization to private - details in a user's GitHub account without getting their password. This is - preferred over Basic Authentication because tokens can be limited to specific - types of data, and can be revoked by users at any time. - type: OAuth 2.0 - describedBy: - headers: - Authorization: - description: | - Used to send a valid OAuth 2 access token. Do not use together with - the "access_token" query string parameter. - type: string - queryParameters: - access_token: - description: | - Used to send a valid OAuth 2 access token. Do not use together with - the "Authorization" header - type: string - responses: - 404: - description: Unauthorized - settings: - authorizationUri: https://github.com/login/oauth/authorize - accessTokenUri: https://github.com/login/oauth/access_token - authorizationGrants: [ code ] - scopes: - - "user" - - "user:email" - - "user:follow" - - "public_repo" - - "repo" - - "repo:status" - - "delete_repo" - - "notifications" - - "gist" -securedBy: [ oauth_2_0 ] -mediaType: application/json -resourceTypes: - - base: - get?: &common - headers: - X-GitHub-Media-Type: - description: | - You can check the current version of media type in responses. - type: string - Accept: - description: Is used to set specified media type. - type: string - X-RateLimit-Limit: - type: integer - X-RateLimit-Remaining: - type: integer - X-RateLimit-Reset: - type: integer - X-GitHub-Request-Id: - type: integer - responses: - 403: - description: | - API rate limit exceeded. See http://developer.github.com/v3/#rate-limiting - for details. - post?: *common - patch?: *common - put?: *common - delete?: *common - - item: - type: base - get?: - post?: - patch?: - put?: - delete?: - responses: - 204: - description: Item removed. - - collection: - type: base - get?: - post?: -traits: - - historical: - queryParameters: - since: - description: | - Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - Only gists updated at or after this time are returned. - type: string - - filterable: - queryParameters: - filter: - description: | - Issues assigned to you / created by you / mentioning you / you're - subscribed to updates for / All issues the authenticated user can see - enum: - - assigned - - created - - mentioned - - subscribed - - all - default: all - required: true - state: - enum: - - open - - closed - default: open - required: true - labels: - description: String list of comma separated Label names. Example - bug,ui,@high. - type: string - required: true - sort: - enum: - - created - - updated - - comments - default: created - required: true - direction: - enum: - - asc - - desc - default: desc - required: true - since: - description: | - Optional string of a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - Only issues updated at or after this time are returned. - type: string -# Search -/search: - /repositories: - type: collection - get: - description: Search repositories. - queryParameters: - q: - description: | - The search terms. This can be any combination of the supported repository - search parameters: - 'Search In' Qualifies which fields are searched. With this qualifier you - can restrict the search to just the repository name, description, readme, - or any combination of these. - 'Size' Finds repositories that match a certain size (in kilobytes). - 'Forks' Filters repositories based on the number of forks, and/or whether - forked repositories should be included in the results at all. - 'Created' and 'Last Updated' Filters repositories based on times of - creation, or when they were last updated. - 'Users or Repositories' Limits searches to a specific user or repository. - 'Languages' Searches repositories based on the language they're written in. - 'Stars' Searches repositories based on the number of stars. - type: string - required: true - sort: - description: If not provided, results are sorted by best match. - enum: - - stars - - forks - - updated - order: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "total_count": { - "type": "integer" - }, - "items": [ - { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "received_events_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "private": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "homepage": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "forks_count": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "forks": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "default_branch": { - "type": "string" - }, - "score": { - "type": "number" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "total_count": 40, - "items": [ - { - "id": 3081286, - "name": "Tetris", - "full_name": "dtrupenn/Tetris", - "owner": { - "login": "dtrupenn", - "id": 872147, - "avatar_url": "https://secure.gravatar.com/avatar/e7956084e75f239de85d3a31bc172ace?d=https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-user-420.png", - "gravatar_id": "e7956084e75f239de85d3a31bc172ace", - "url": "https://api.github.com/users/dtrupenn", - "received_events_url": "https://api.github.com/users/dtrupenn/received_events", - "type": "User" - }, - "private": false, - "html_url": "https://github.com/dtrupenn/Tetris", - "description": "A C implementation of Tetris using Pennsim through LC4", - "fork": false, - "url": "https://api.github.com/repos/dtrupenn/Tetris", - "created_at": "2012-01-01T00:31:50Z", - "updated_at": "2013-01-05T17:58:47Z", - "pushed_at": "2012-01-01T00:37:02Z", - "homepage": "", - "size": 524, - "watchers_count": 1, - "language": "Assembly", - "forks_count": 0, - "open_issues_count": 0, - "forks": 0, - "open_issues": 0, - "watchers": 1, - "master_branch": "master", - "default_branch": "master", - "score": 10.309712 - } - ] - } - /code: - type: collection - get: - description: Search code. - queryParameters: - q: - description: | - The search terms. This can be any combination of the supported code - search parameters: - 'Search In' Qualifies which fields are searched. With this qualifier - you can restrict the search to just the file contents, the file path, - or both. - 'Languages' Searches code based on the language it's written in. - 'Forks' Filters repositories based on the number of forks, and/or - whether code from forked repositories should be included in the results - at all. - 'Size' Finds files that match a certain size (in bytes). - 'Path' Specifies the path that the resulting file must be at. - 'Extension' Matches files with a certain extension. - 'Users' or 'Repositories' Limits searches to a specific user or repository. - type: string - required: true - sort: - description: | - Can only be 'indexed', which indicates how recently a file has been indexed - by the GitHub search infrastructure. If not provided, results are sorted - by best match. - enum: - - indexed - order: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "total_count": { - "type": "integer" - }, - "items": [ - { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "repository": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "followers_url": { - "type": "string" - }, - "following_url": { - "type": "string" - }, - "gists_url": { - "type": "string" - }, - "starred_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "repos_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "received_events_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "private": { - "type": "boolean" - }, - "html_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "forks_url": { - "type": "string" - }, - "keys_url": { - "type": "string" - }, - "collaborators_url": { - "type": "string" - }, - "teams_url": { - "type": "string" - }, - "hooks_url": { - "type": "string" - }, - "issue_events_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "assignees_url": { - "type": "string" - }, - "branches_url": { - "type": "string" - }, - "tags_url": { - "type": "string" - }, - "blobs_url": { - "type": "string" - }, - "git_tags_url": { - "type": "string" - }, - "git_refs_url": { - "type": "string" - }, - "trees_url": { - "type": "string" - }, - "statuses_url": { - "type": "string" - }, - "languages_url": { - "type": "string" - }, - "stargazers_url": { - "type": "string" - }, - "contributors_url": { - "type": "string" - }, - "subscribers_url": { - "type": "string" - }, - "subscription_url": { - "type": "string" - }, - "commits_url": { - "type": "string" - }, - "git_commits_url": { - "type": "string" - }, - "comments_url": { - "type": "string" - }, - "issue_comment_url": { - "type": "string" - }, - "contents_url": { - "type": "string" - }, - "compare_url": { - "type": "string" - }, - "merges_url": { - "type": "string" - }, - "archive_url": { - "type": "string" - }, - "downloads_url": { - "type": "string" - }, - "issues_url": { - "type": "string" - }, - "pulls_url": { - "type": "string" - }, - "milestones_url": { - "type": "string" - }, - "notifications_url": { - "type": "string" - }, - "labels_url": { - "type": "string" - } - }, - "type": "object" - }, - "score": { - "type": "number" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "total_count": 104, - "items": [ - { - "name": "github-issue-importer.gemspec", - "path": "github-issue-importer.gemspec", - "sha": "394508202991504d8a0771ae027454facaaa045a", - "url": "https://api.github.com/repositories/1586630/contents/github-issue-importer.gemspec?ref=aa22a4be513163c73531e96bd99f4b49d6ded8a6", - "git_url": "https://api.github.com/repositories/1586630/git/blobs/394508202991504d8a0771ae027454facaaa045a", - "html_url": "https://github.com/johnf/github-issue-importer/blob/aa22a4be513163c73531e96bd99f4b49d6ded8a6/github-issue-importer.gemspec", - "repository": { - "id": 1586630, - "name": "github-issue-importer", - "full_name": "johnf/github-issue-importer", - "owner": { - "login": "johnf", - "id": 42590, - "avatar_url": "https://secure.gravatar.com/avatar/ab4d879ba3233a270aa14f447c795505?d=https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-user-420.png", - "gravatar_id": "ab4d879ba3233a270aa14f447c795505", - "url": "https://api.github.com/users/johnf", - "html_url": "https://github.com/johnf", - "followers_url": "https://api.github.com/users/johnf/followers", - "following_url": "https://api.github.com/users/johnf/following{/other_user}", - "gists_url": "https://api.github.com/users/johnf/gists{/gist_id}", - "starred_url": "https://api.github.com/users/johnf/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/johnf/subscriptions", - "organizations_url": "https://api.github.com/users/johnf/orgs", - "repos_url": "https://api.github.com/users/johnf/repos", - "events_url": "https://api.github.com/users/johnf/events{/privacy}", - "received_events_url": "https://api.github.com/users/johnf/received_events", - "type": "User" - }, - "private": false, - "html_url": "https://github.com/johnf/github-issue-importer", - "description": "Import Issues from Launchpad (for now) into github", - "fork": false, - "url": "https://api.github.com/repos/johnf/github-issue-importer", - "forks_url": "https://api.github.com/repos/johnf/github-issue-importer/forks", - "keys_url": "https://api.github.com/repos/johnf/github-issue-importer/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/johnf/github-issue-importer/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/johnf/github-issue-importer/teams", - "hooks_url": "https://api.github.com/repos/johnf/github-issue-importer/hooks", - "issue_events_url": "https://api.github.com/repos/johnf/github-issue-importer/issues/events{/number}", - "events_url": "https://api.github.com/repos/johnf/github-issue-importer/events", - "assignees_url": "https://api.github.com/repos/johnf/github-issue-importer/assignees{/user}", - "branches_url": "https://api.github.com/repos/johnf/github-issue-importer/branches{/branch}", - "tags_url": "https://api.github.com/repos/johnf/github-issue-importer/tags", - "blobs_url": "https://api.github.com/repos/johnf/github-issue-importer/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/johnf/github-issue-importer/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/johnf/github-issue-importer/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/johnf/github-issue-importer/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/johnf/github-issue-importer/statuses/{sha}", - "languages_url": "https://api.github.com/repos/johnf/github-issue-importer/languages", - "stargazers_url": "https://api.github.com/repos/johnf/github-issue-importer/stargazers", - "contributors_url": "https://api.github.com/repos/johnf/github-issue-importer/contributors", - "subscribers_url": "https://api.github.com/repos/johnf/github-issue-importer/subscribers", - "subscription_url": "https://api.github.com/repos/johnf/github-issue-importer/subscription", - "commits_url": "https://api.github.com/repos/johnf/github-issue-importer/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/johnf/github-issue-importer/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/johnf/github-issue-importer/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/johnf/github-issue-importer/issues/comments/{number}", - "contents_url": "https://api.github.com/repos/johnf/github-issue-importer/contents/{ path}", - "compare_url": "https://api.github.com/repos/johnf/github-issue-importer/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/johnf/github-issue-importer/merges", - "archive_url": "https://api.github.com/repos/johnf/github-issue-importer/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/johnf/github-issue-importer/downloads", - "issues_url": "https://api.github.com/repos/johnf/github-issue-importer/issues{/number}", - "pulls_url": "https://api.github.com/repos/johnf/github-issue-importer/pulls{/number}", - "milestones_url": "https://api.github.com/repos/johnf/github-issue-importer/milestones{/number}", - "notifications_url": "https://api.github.com/repos/johnf/github-issue-importer/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/johnf/github-issue-importer/labels{/name}" - }, - "score": 0.96691436 - } - ] - } - /users: - type: collection - get: - description: Search users. - queryParameters: - q: - description: | - The search terms. This can be any combination of the supported user - search parameters: - 'Search In' Qualifies which fields are searched. With this qualifier you - can restrict the search to just the username, public email, full name, - location, or any combination of these. - 'Repository count' Filters users based on the number of repositories they - have. - 'Location' Filter users by the location indicated in their profile. - 'Language' Search for users that have repositories that match a certain - language. - 'Created' Filter users based on when they joined. - 'Followers' Filter users based on the number of followers they have. - type: string - required: true - sort: - description: If not provided, results are sorted by best match. - enum: - - followers - - repositories - - joined - order: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "total_count": { - "type": "integer" - }, - "items": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "followers_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "repos_url": { - "type": "string" - }, - "received_events_url": { - "type": "string" - }, - "type": { - "type": "string" - }, - "score": { - "type": "number" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "total_count": 12, - "items": [ - { - "login": "mojombo", - "id": 1, - "avatar_url": "https://secure.gravatar.com/avatar/25c7c18223fb42a4c6ae1c8db6f50f9b?d=https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-user-420.png", - "gravatar_id": "25c7c18223fb42a4c6ae1c8db6f50f9b", - "url": "https://api.github.com/users/mojombo", - "html_url": "https://github.com/mojombo", - "followers_url": "https://api.github.com/users/mojombo/followers", - "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", - "organizations_url": "https://api.github.com/users/mojombo/orgs", - "repos_url": "https://api.github.com/users/mojombo/repos", - "received_events_url": "https://api.github.com/users/mojombo/received_events", - "type": "User", - "score": 105.47857 - } - ] - } -# Events -/events: - type: collection - get: - description: List public events. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] -# Feeds -/feeds: - type: collection - get: - description: | - List Feeds. - GitHub provides several timeline resources in Atom format. The Feeds API - lists all the feeds available to the authenticating user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "timeline_url": { - "type": "string" - }, - "user_url": { - "type": "string" - }, - "current_user_public": { - "type": "string" - }, - "current_user_url": { - "type": "string" - }, - "current_user_actor_url": { - "type": "string" - }, - "current_user_organization_url": { - "type": "string" - }, - "_links": { - "properties": { - "timeline": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_public": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_actor": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "current_user_organization": { - "properties": { - "href": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - } - } - } - } - } - example: | - { - "timeline_url": "https://github.com/timeline", - "user_url": "https://github.com/{user}", - "current_user_public": "https://github.com/defunkt", - "current_user_url": "https://github.com/defunkt.private?token=abc123", - "current_user_actor_url": "https://github.com/defunkt.private.actor?token=abc123", - "current_user_organization_url": "https://github.com/organizations/{org}/defunkt.private.atom?token=abc123", - "_links": { - "timeline": { - "href": "https://github.com/timeline", - "type": "application/atom xml" - }, - "user": { - "href": "https://github.com/{user}", - "type": "application/atom xml" - }, - "current_user_public": { - "href": "https://github.com/defunkt", - "type": "application/atom xml" - }, - "current_user": { - "href": "https://github.com/defunkt.private?token=abc123", - "type": "application/atom xml" - }, - "current_user_actor": { - "href": "https://github.com/defunkt.private.actor?token=abc123", - "type": "application/atom xml" - }, - "current_user_organization": { - "href": "https://github.com/organizations/{org}/defunkt.private.atom?token=abc123", - "type": "application/atom xml" - } - } - } -# Meta -/meta: - type: collection - get: - description: This gives some information about GitHub.com, the service. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "hooks": [ - { - "description": "An Array of IP addresses in CIDR format specifying the addresses that incoming service hooks will originate from.", - "type": "string" - } - ], - "type": "array", - "git": [ - { - "description": "An Array of IP addresses in CIDR format specifying the Git servers at GitHub.", - "type": "string" - } - ] - } - } - example: | - { - "hooks": [ - "127.0.0.1/32" - ], - "git": [ - "127.0.0.1/32" - ] - } -# Rate limit -/rate_limit: - type: collection - get: - description: | - Get your current rate limit status - Note: Accessing this endpoint does not count against your rate limit. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "rate": { - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset": { - "type": "integer" - } - } - } - } - } - example: | - { - "rate": { - "limit": 5000, - "remaining": 4999, - "reset": 1372700873 - } - } -# Issues -/issues: - type: item - get: - is: [ filterable ] - description: | - List issues. - List all issues across all the authenticated user's visible repositories. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "issues": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - ] -# Other -/notifications: - type: collection - get: - description: | - List your notifications. - List all notifications for the current user, grouped by repository. - queryParameters: - all: - description: True to show notifications marked as read. - type: string - participating: - description: | - True to show only notifications in which the user is directly participating - or mentioned. - type: string - since: - description: | - Time filters out any notifications updated before the given time. The - time should be passed in as UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - Example: "2012-10-09T23:39:01Z". - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "id": { - "type": "integer" - }, - "repository": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - } - }, - "type": "object" - }, - "subject": { - "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "latest_comment_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "reason": { - "type": "string" - }, - "unread": { - "type": "boolean" - }, - "updated_at": { - "type": "string" - }, - "last_read_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "repository": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World" - }, - "subject": { - "title": "Greetings", - "url": "https://api.github.com/repos/pengwynn/octokit/issues/123", - "latest_comment_url": "https://api.github.com/repos/pengwynn/octokit/issues/comments/123", - "type": "Issue" - }, - "reason": "subscribed", - "unread": true, - "updated_at": "2012-09-25T07:54:41-07:00", - "last_read_at": "2012-09-25T07:54:41-07:00", - "url": "https://api.github.com/notifications/threads/1" - } - ] - put: - description: | - Mark as read. - Marking a notification as "read" removes it from the default view on GitHub.com. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "last_read_at": { - "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated. Default: Now.", - "type": "string" - } - } - } - responses: - 205: - description: Marked as read. - /threads/{id}: - uriParameters: - id: - description: Id of a thread. - type: integer - type: item - get: - description: View a single thread. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "id": { - "type": "integer" - }, - "repository": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - } - }, - "type": "object" - }, - "subject": { - "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "latest_comment_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "reason": { - "type": "string" - }, - "unread": { - "type": "boolean" - }, - "updated_at": { - "type": "string" - }, - "last_read_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "repository": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World" - }, - "subject": { - "title": "Greetings", - "url": "https://api.github.com/repos/pengwynn/octokit/issues/123", - "latest_comment_url": "https://api.github.com/repos/pengwynn/octokit/issues/comments/123", - "type": "Issue" - }, - "reason": "subscribed", - "unread": true, - "updated_at": "2012-09-25T07:54:41-07:00", - "last_read_at": "2012-09-25T07:54:41-07:00", - "url": "https://api.github.com/notifications/threads/1" - } - ] - patch: - responses: - 205: - description: Thread marked as read. - /subscription: - type: item - get: - description: Get a Thread Subscription. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed":{ - "type": "boolean" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "boolean" - }, - "created_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "thread_url": { - "type": "string" - } - } - } - example: | - { - "subscribed": true, - "ignored": false, - "reason": null, - "created_at": "2012-10-06T21:34:12Z", - "url": "https://api.github.com/notifications/threads/1/subscription", - "thread_url": "https://api.github.com/notifications/threads/1" - } - put: - description: | - Set a Thread Subscription. - This lets you subscribe to a thread, or ignore it. Subscribing to a thread - is unnecessary if the user is already subscribed to the repository. Ignoring - a thread will mute all future notifications (until you comment or get @mentioned). - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed": { - "description": "Determines if notifications should be received from this thread.", - "type": "boolean" - }, - "ignored": { - "description": "Determines if all notifications should be blocked from this thread.", - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed":{ - "type": "boolean" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "boolean" - }, - "created_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "thread_url": { - "type": "string" - } - } - } - example: | - { - "subscribed": true, - "ignored": false, - "reason": null, - "created_at": "2012-10-06T21:34:12Z", - "url": "https://api.github.com/notifications/threads/1/subscription", - "thread_url": "https://api.github.com/notifications/threads/1" - } - delete: - description: Delete a Thread Subscription. -/gists: - securedBy: [ null, oauth_2_0 ] - type: collection - get: - is: [ historical ] - description: | - List the authenticated user's gists or if called anonymously, this will - return all public gists. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "gists": [ - { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "type": "string" - } - } - } - ] - } - example: | - [ - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z" - } - ] - post: - description: Create a gist. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "files": { - "description": "Files that make up this gist. The key of which should be a required string filename and the value another required hash with parameter 'content'.", - "type": "string" - }, - "content": { - "description": "File contents.", - "type": "string" - } - }, - "required": [ "public", "files", "content" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "forks": [ - { - "properties": { - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "history": [ - { - "properties": { - "url": { - "type": "string" - }, - "version": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "change_status": { - "properties": { - "deletions": { - "type": "integer" - }, - "additions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "committed_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "type": "object" - } - } - ] - } - } - example: | - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z", - "forks": [ - { - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "url": "https://api.github.com/gists/d39d0d37fb24f12e2045", - "created_at": "2011-04-14T16:00:49Z" - } - ], - "history": [ - { - "url": "https://api.github.com/gists/3a8bdc16d2e39d809469", - "version": "57a7f021a713b1c5a6a199b54cc514735d2d462f", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "change_status": { - "deletions": 0, - "additions": 180, - "total": 180 - }, - "committed_at": "2010-04-14T02:15:15Z" - } - ] - } - # Public - /public: - securedBy: [ null, oauth_2_0 ] - type: collection - get: - is: [ historical ] - description: List all public gists. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "gists": [ - { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "type": "string" - } - } - } - ] - } - example: | - [ - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z" - } - ] - # Starred - /starred: - securedBy: [ null, oauth_2_0 ] - type: collection - get: - is: [ historical ] - description: List the authenticated user's starred gists. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "gists": [ - { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "type": "string" - } - } - } - ] - } - example: | - [ - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z" - } - ] - # ID - /{id}: - uriParameters: - id: - description: Id of a thread. - type: integer - type: item - get: - description: Get a single gist. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "forks": [ - { - "properties": { - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "history": [ - { - "properties": { - "url": { - "type": "string" - }, - "version": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "change_status": { - "properties": { - "deletions": { - "type": "integer" - }, - "additions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "committed_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "type": "object" - } - } - ] - } - } - example: | - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z", - "forks": [ - { - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "url": "https://api.github.com/gists/d39d0d37fb24f12e2045", - "created_at": "2011-04-14T16:00:49Z" - } - ], - "history": [ - { - "url": "https://api.github.com/gists/3a8bdc16d2e39d809469", - "version": "57a7f021a713b1c5a6a199b54cc514735d2d462f", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "change_status": { - "deletions": 0, - "additions": 180, - "total": 180 - }, - "committed_at": "2010-04-14T02:15:15Z" - } - ] - } - patch: - description: Edit a gist. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "files": { - "properties": { - "file1.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "old_name.txt": { - "properties": { - "filename": { - "type": "string" - }, - "content": { - "type": "string" - } - }, - "type": "object" - }, - "new_file.txt": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object" - }, - "delete_this_file.txt": { - "type": "string" - } - } - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "forks": [ - { - "properties": { - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - }, - "created_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "history": [ - { - "properties": { - "url": { - "type": "string" - }, - "version": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "change_status": { - "properties": { - "deletions": { - "type": "integer" - }, - "additions": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "committed_at": { - "description": "Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.", - "type": "string" - }, - "type": "object" - } - } - ] - } - } - example: | - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z", - "forks": [ - { - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "url": "https://api.github.com/gists/d39d0d37fb24f12e2045", - "created_at": "2011-04-14T16:00:49Z" - } - ], - "history": [ - { - "url": "https://api.github.com/gists/3a8bdc16d2e39d809469", - "version": "57a7f021a713b1c5a6a199b54cc514735d2d462f", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "change_status": { - "deletions": 0, - "additions": 180, - "total": 180 - }, - "committed_at": "2010-04-14T02:15:15Z" - } - ] - } - delete: - description: Delete a gist. - # Star - /star: - type: base - put: - description: Star a gist. - responses: - 204: - description: Starred. - delete: - description: Unstar a gist. - responses: - 204: - description: Item removed. - get: - description: Check if a gist is starred. - responses: - 204: - description: Exists. - 404: - description: Not exists. - # Forks - /forks: - type: base - post: - description: Fork a gist. - responses: - 204: - description: Exists. - 404: - description: Not exists. - /comments: - type: collection - get: - description: List comments on a gist. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "comments": [ - { - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "url": "https://api.github.com/gists/ae709e9cf889e485e65f/comments/1", - "body": "Just commenting for the sake of commenting", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-18T23:23:56Z" - } - ] - post: - description: Create a comment - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - } - }, - "required": [ "body" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/gists/83ba86d111d39709da8c/comments/1", - "body": "Just commenting for the sake of commenting", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-18T23:23:56Z" - } - /{commentId}: - type: item - uriParameters: - commentId: - description: Id of the comment. - type: integer - get: - description: Get a single comment. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/gists/83ba86d111d39709da8c/comments/1", - "body": "Just commenting for the sake of commenting", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-18T23:23:56Z" - } - patch: - description: Edit a comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601.", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/gists/83ba86d111d39709da8c/comments/1", - "body": "Just commenting for the sake of commenting", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-18T23:23:56Z" - } - delete: - description: Delete a comment. -/orgs/{orgId}: - uriParameters: - orgId: - description: Id of organisation. - type: integer - type: item - get: - description: Get an Organization. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "avatar_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "company": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "location": { - "type": "string" - }, - "email": { - "type": "string" - }, - "public_repos": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "type": { - "type": "string" - } - } - } - example: | - { - "login": "github", - "id": 1, - "url": "https://api.github.com/orgs/github", - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "name": "github", - "company": "GitHub", - "blog": "https://github.com/blog", - "location": "San Francisco", - "email": "octocat@github.com", - "public_repos": 2, - "public_gists": 1, - "followers": 20, - "following": 0, - "html_url": "https://github.com/octocat", - "created_at": "2008-01-14T04:33:35Z", - "type": "Organization" - } - patch: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "billing_email": { - "description": "Billing email address. This address is not publicized.", - "type": "string" - }, - "company": { - "type": "string" - }, - "email": { - "description": "Publicly visible email address.", - "type": "string" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "avatar_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "company": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "location": { - "type": "string" - }, - "email": { - "type": "string" - }, - "public_repos": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "type": { - "type": "string" - } - } - } - example: | - { - "login": "github", - "id": 1, - "url": "https://api.github.com/orgs/github", - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "name": "github", - "company": "GitHub", - "blog": "https://github.com/blog", - "location": "San Francisco", - "email": "octocat@github.com", - "public_repos": 2, - "public_gists": 1, - "followers": 20, - "following": 0, - "html_url": "https://github.com/octocat", - "created_at": "2008-01-14T04:33:35Z", - "type": "Organization" - } - description: Edit an Organization. - # Events - /events: - type: collection - get: - description: List public events for an organization. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - # Issues - /issues: - type: collection - get: - is: [ filterable ] - description: | - List issues. - List all issues for a given organization for the authenticated user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "issues": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - ] - /members: - type: collection - get: - description: | - Members list. - List all users who are members of an organization. A member is a user that - belongs to at least 1 team in the organization. If the authenticated user - is also an owner of this organization then both concealed and public members - will be returned. If the requester is not an owner of the organization the - query will be redirected to the public members list. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - 302: - description: Response if requester is not an organization member. - /{userId}: - type: item - uriParameters: - userId: - description: Id of the user. - type: integer - delete: - description: | - Remove a member. - Removing a user from this list will remove them from all teams and they - will no longer have any access to the organization's repositories. - /public_members: - type: collection - get: - description: | - Public members list. - Members of an organization can choose to have their membership publicized - or not. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{userId}: - uriParameters: - userId: - description: Id of the user. - type: integer - type: base - get: - description: Check public membership. - responses: - 204: - description: User is a public member. - 404: - description: User is not a public member. - put: - description: Publicize a user's membership. - responses: - 204: - description: Publicized. - delete: - description: Conceal a user's membership. - responses: - 204: - description: Concealed. - /teams: - type: collection - get: - description: List teams. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/teams/1", - "name": "Owners", - "id": 1 - } - ] - post: - description: | - Create team. - In order to create a team, the authenticated user must be an owner of orgId. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "repo_names": [ - { - "type": "string" - } - ], - "type": "array", - "permission": { - "enum": [ - "pull", - "push", - "admin" - ] - } - }, - "required": [ - "name" - ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "permission": { - "type": "string" - }, - "members_count": { - "type": "integer" - }, - "repos_count": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/teams/1", - "name": "Owners", - "id": 1 - } - ] - /repos: - type: collection - get: - description: List repositories for the specified org. - queryParameters: - type: - enum: - - all - - public - - private - - forks - - sources - - member - default: all - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - post: - description: | - Create a new repository for the authenticated user. OAuth users must supply - repo scope. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "private": { - "description": "True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account.", - "type": "boolean" - }, - "has_issues": { - "description": "True to enable issues for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_wiki": { - "description": "True to enable the wiki for this repository, false to disable it. Default is true.", - "type": "boolean" - }, - "has_downloads": { - "description": "True to enable downloads for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "team_id": { - "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.", - "type": "integer" - }, - "auto_init": { - "description": "True to create an initial commit with empty README. Default is false.", - "type": "boolean" - }, - "gitignore_template": { - "description": "Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, \"Haskell\" Ignored if auto_init parameter is not provided. ", - "type": "string" - } - }, - "required": [ "name" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] -/teams/{teamsId}: - uriParameters: - teamsId: - description: Id of a team. - type: integer - type: item - get: - description: Get team. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "permission": { - "type": "string" - }, - "members_count": { - "type": "integer" - }, - "repos_count": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/teams/1", - "name": "Owners", - "id": 1 - } - ] - patch: - description: | - Edit team. - In order to edit a team, the authenticated user must be an owner of the org - that the team is associated with. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "permission": { - "values": [ - "pull", - "push", - "admin" - ] - } - }, - "required": [ "name" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "permission": { - "type": "string" - }, - "members_count": { - "type": "integer" - }, - "repos_count": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/teams/1", - "name": "Owners", - "id": 1 - } - ] - delete: - description: | - Delete team. - In order to delete a team, the authenticated user must be an owner of the - org that the team is associated with. - /members: - type: collection - get: - description: | - List team members. - In order to list members in a team, the authenticated user must be a member - of the team. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{userId}: - uriParameters: - userId: - description: Id of a member. - type: integer - type: base - get: - description: | - Get team member. - In order to get if a user is a member of a team, the authenticated user must - be a member of the team. - responses: - 204: - description: User is a member. - 404: - description: User is not a member. - put: - description: | - Add team member. - In order to add a user to a team, the authenticated user must have 'admin' - permissions to the team or be an owner of the org that the team is associated - with. - responses: - 204: - description: Team member added. - 422: - description: If you attempt to add an organization to a team, you will get this. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "errors": [ - { - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "resource": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "object" - } - } - example: | - { - "message": "Validation Failed", - "errors": [ - { - "code": "org", - "field": "user", - "resource": "TeamMember" - } - ] - } - delete: - description: | - Remove team member. - In order to remove a user from a team, the authenticated user must have 'admin' - permissions to the team or be an owner of the org that the team is associated - with. - NOTE This does not delete the user, it just remove them from the team. - responses: - 204: - description: Team member removed. -/repositories: - type: collection - get: - securedBy: [ null, oauth_2_0 ] - description: | - List all public repositories. - This provides a dump of every public repository, in the order that they - were created. - Note: Pagination is powered exclusively by the since parameter. is the - Link header to get the URL for the next page of repositories. - queryParameters: - since: - description: | - The integer ID of the last Repository that you've seen. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World" - } - ] -/repos/{ownerId}/{repoId}: - uriParameters: - ownerId: - description: Id of the owner. - type: integer - repoId: - description: Id of repository. - type: integer - type: item - get: - description: Get repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "organization": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "parent": { - "description": "Is present when the repo is a fork. Parent is the repo this repo was forked from.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "source": { - "description": "Is present when the repo is a fork. Source is the ultimate source for the network.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "has_downloads": { - "type": "boolean" - } - } - } - example: | - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z", - "organization": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "type": "Organization" - }, - "parent": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "source": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "has_issues": true, - "has_wiki": true, - "has_downloads": true - } - patch: - description: Edit repository. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "private": { - "description": "True makes the repository private, and false makes it public.", - "type": "boolean" - }, - "has_issues": { - "description": "True to enable issues for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_wiki": { - "description": "True to enable the wiki for this repository, false to disable it. Default is true.", - "type": "boolean" - }, - "has_downloads": { - "description": "True to enable downloads for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "default_branch": { - "description": "Update the default branch for this repository.", - "type": "string" - } - }, - "required": [ "name" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "organization": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "parent": { - "description": "Is present when the repo is a fork. Parent is the repo this repo was forked from.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "source": { - "description": "Is present when the repo is a fork. Source is the ultimate source for the network.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "has_downloads": { - "type": "boolean" - } - } - } - example: | - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z", - "organization": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "type": "Organization" - }, - "parent": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "source": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "has_issues": true, - "has_wiki": true, - "has_downloads": true - } - delete: - description: | - Delete a Repository. - Deleting a repository requires admin access. If OAuth is used, the delete_repo - scope is required. - # Events - /events: - type: collection - get: - description: Get list of repository events. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - # Languages - /languages: - type: collection - get: - description: | - List languages. - List languages for the specified repository. The value on the right of a - language is the number of bytes of code written in that language. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "count": { - "type": "string" - } - } - } - example: | - { - "C": 78769, - "Python": 7769 - } - # GIT - /git: - /blobs: - type: collection - post: - description: Create a Blob. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "encoding": { - "enum": [ - "utf-8", - "base64" - ] - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - } - } - } - example: | - { - "sha": "3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15" - } - /{shaCode}: - uriParameters: - shaCode: - description: SHA-1 code. - type: string - type: item - get: - description: | - Get a Blob. - Since blobs can be any arbitrary binary data, the input and responses for - the blob API takes an encoding parameter that can be either utf-8 or - base64. If your data cannot be losslessly sent as a UTF-8 string, you can - base64 encode it. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "encoding": { - "enum": [ - "utf-8", - "base64" - ] - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - } - } - } - example: | - { - "content": "Content of the blob", - "encoding": "utf-8", - "sha": "3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15", - "size": 100 - } - /commits: - type: item - post: - description: Create a Commit. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "message": { - "description": "String of the commit message", - "type": "string" - }, - "tree": { - "description": "String of the SHA of the tree object this commit points to.", - "type": "string" - }, - "parents": [ - { - "description": "Array of the SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided, for a merge commit, an array of more than one should be provided.", - "type": "string" - } - ], - "type": "array", - "author": { - "properties": { - "name": { - "description": "String of the name of the author of the commit.", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the commit.", - "type": "string" - }, - "date": { - "description": "Timestamp of when this commit was authored.", - "type": "timestamp" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "description": "String of the name of the committer of the commit.", - "type": "string" - }, - "email": { - "description": "String of the email of the committer of the commit.", - "type": "string" - }, - "date": { - "description": "Timestamp of when this commit was committed.", - "type": "timestamp" - } - }, - "type": "object" - } - }, - "required": [ - "message", - "tree", - "parents" - ] - } - responses: - 201: - body: - schema: | - { - "": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "author": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "type": "string" - } - ], - "tree": { - "type": "string" - } - } - } - example: | - { - "message": "my commit message", - "author": { - "name": "Scott Chacon", - "email": "schacon@gmail.com", - "date": "2008-07-09T16:13:30 12:00" - }, - "parents": [ - "7d1b31e74ee336d15cbd21741bc88a537ed063a0" - ], - "tree": "827efc6d56897b048c772eb4087f854f46256132" - } - /{shaCode}: - uriParameters: - shaCode: - description: SHA-1 code. - type: string - type: item - get: - description: Get a Commit. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "author": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "sha": "7638417db6d59f3c431d3e1f261cc637155684cd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd", - "author": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "committer": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "message": "added readme, because im a good github citizen\n", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/691272480426f78a0138979dd3ce63b77f706feb", - "sha": "691272480426f78a0138979dd3ce63b77f706feb" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/1acc419d4d6a9ce985db7be48c6349a0475975b5", - "sha": "1acc419d4d6a9ce985db7be48c6349a0475975b5" - } - ] - } - /refs: - type: collection - get: - description: Get all References - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "references": [ - { - "properties": { - "ref": { - "type": "string" - }, - "url": { - "type": "string" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "ref": "refs/heads/master", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/master", - "object": { - "type": "commit", - "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" - } - }, - { - "ref": "refs/heads/gh-pages", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/gh-pages", - "object": { - "type": "commit", - "sha": "612077ae6dffb4d2fbd8ce0cccaa58893b07b5ac", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/612077ae6dffb4d2fbd8ce0cccaa58893b07b5ac" - } - }, - { - "ref": "refs/tags/v0.0.1", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/tags/v0.0.1", - "object": { - "type": "tag", - "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac" - } - } - ] - post: - description: Create a Reference - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "ref": { - "description": "String of the name of the fully qualified reference (ie: refs/heads/master). If it doesn't start with ?refs' and have at least two slashes, it will be rejected.", - "type": "string" - }, - "sha": { - "description": "String of the SHA1 value to set this reference to.", - "type": "string" - } - }, - "required": [ - "ref", - "sha" - ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "ref": { - "type": "string" - }, - "url": { - "type": "string" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "ref": "refs/heads/sc/featureA", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/sc/featureA", - "object": { - "type": "commit", - "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" - } - } - /{heads}: - uriParameters: - heads: - description: Subfolder of path to the branch. - type: string - type: collection - get: - description: Get list of subdirectories. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "name": { - "type": "string" - }, - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "zipball_url": { - "type": "string" - }, - "tarball_url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "name": "v0.1", - "commit": { - "sha": "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", - "url": "https://api.github.com/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc" - }, - "zipball_url": "https://github.com/octocat/Hello-World/zipball/v0.1", - "tarball_url": "https://github.com/octocat/Hello-World/tarball/v0.1" - } - ] - /{branch}: - type: item - uriParameters: - branch: - description: Path to the branch. - type: string - get: - description: Get a Reference. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "ref": { - "type": "string" - }, - "url": { - "type": "string" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "ref": "refs/heads/sc/featureA", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/sc/featureA", - "object": { - "type": "commit", - "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" - } - } - patch: - description: Update a Reference - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "description": "String of the SHA1 value to set this reference to.", - "type": "string" - }, - "force": { - "description": "Boolean indicating whether to force the update or to make sure the update is a fast-forward update. The default is false, so leaving this out or setting it to false will make sure you're not overwriting work.", - "type": "boolean" - } - }, - "required": [ - "sha", - "force" - ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "ref": { - "type": "string" - }, - "url": { - "type": "string" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "ref": "refs/heads/sc/featureA", - "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/sc/featureA", - "object": { - "type": "commit", - "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" - } - } - delete: - description: Delete a Reference. - /tags: - type: collection - post: - description: | - Create a Tag Object. - Note that creating a tag object does not create the reference that makes a - tag in Git. If you want to create an annotated tag in Git, you have to do - this call to create the tag object, and then create the refs/tags/[tag] - reference. If you want to create a lightweight tag, you only have to create - the tag reference - this call would be unnecessary. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "tagger": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "description": "String of the SHA of the git object this is tagging.", - "type": "string" - }, - "type": { - "description": "String of the type of the object we're tagging. Normally this is a commit but it can also be a tree or a blob.", - "type": "string" - }, - "tagger": { - "properties": { - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "date": { - "description": "Timestamp of when this object was tagged.", - "type": "timestamp" - } - }, - "type": "object" - } - }, - "required": [ - "tag", - "message", - "object", - "type", - "tagger" - ] - } - example: | - { - "tag": "v0.0.1", - "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "message": "initial version\n", - "tagger": { - "name": "Scott Chacon", - "email": "schacon@gmail.com", - "date": "2011-06-17T14:53:35-07:00" - }, - "object": { - "type": "commit", - "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c" - } - } - /{shaCode}: - type: item - get: - description: Get a Tag. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "tagger": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "object": { - "properties": { - "type": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "tag": "v0.0.1", - "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "message": "initial version\n", - "tagger": { - "name": "Scott Chacon", - "email": "schacon@gmail.com", - "date": "2011-06-17T14:53:35-07:00" - }, - "object": { - "type": "commit", - "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c" - } - } - /trees: - type: collection - post: - description: | - Create a Tree. - The tree creation API will take nested entries as well. If both a tree and - a nested path modifying that tree are specified, it will overwrite the - contents of that tree with the new path contents and write a new tree out. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "tree": [ - { - "path": { - "type": "string" - }, - "mode": { - "type": "string" - }, - "type": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - } - ], - "type": "array" - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "base_tree": { - "type": "string" - }, - "tree": [ - { - "properties": { - "path": { - "type": "string" - }, - "mode": { - "description": "One of 100644 for file (blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink.", - "type": "string", - "enum": [ - "100644", - "100755", - "040000", - "160000", - "120000" - ] - }, - "type": { - "type": "string", - "enum": [ - "blob", - "tree", - "commit" - ] - }, - "oneOf": [ - { - "sha": { - "description": "SHA1 checksum ID of the object in the tree.", - "type": "string" - } - }, - { - "content": { - "description": "content you want this file to have - GitHub will write this blob out and use that SHA for this entry.", - "type": "string" - } - } - ] - }, - "type": "object" - } - ], - "type": "array" - }, - "required": [ - "tree" - ] - } - example: | - { - "sha": "cd8274d15fa3ae2ab983129fb037999f264ba9a7", - "url": "https://api.github.com/repo/octocat/Hello-World/trees/cd8274d15fa3ae2ab983129fb037999f264ba9a7", - "tree": [ - { - "path": "file.rb", - "mode": "100644", - "type": "blob", - "size": 132, - "sha": "7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b", - "url": "https://api.github.com/octocat/Hello-World/git/blobs/7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b" - } - ] - } - /{shaCode}: - uriParameters: - shaCode: - description: Id of the owner. - type: integer - type: item - get: - description: Get a Tree. - queryParameters: - recursive: - description: Get a Tree Recursively. (0 or 1) - type: integer - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "tree": [ - { - "path": { - "type": "string" - }, - "mode": { - "type": "string" - }, - "type": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - } - ], - "type": "array" - } - } - example: | - { - "sha": "9fb037999f264ba9a7fc6274d15fa3ae2ab98312", - "url": "https://api.github.com/repos/octocat/Hello-World/trees/9fb037999f264ba9a7fc6274d15fa3ae2ab98312", - "tree": [ - { - "path": "file.rb", - "mode": "100644", - "type": "blob", - "size": 30, - "sha": "44b4fc6d56897b048c772eb4087f854f46256132", - "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132" - }, - { - "path": "subdir", - "mode": "040000", - "type": "tree", - "sha": "f484d249c660418515fb01c2b9662073663c242e", - "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/f484d249c660418515fb01c2b9662073663c242e" - }, - { - "path": "exec_file", - "mode": "100755", - "type": "blob", - "size": 75, - "sha": "45b983be36b73c0788dc9cbcb76cbb80fc7bb057", - "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/45b983be36b73c0788dc9cbcb76cbb80fc7bb057" - } - ] - } - # Readme - /readme: - type: item - get: - description: | - Get the README. - This method returns the preferred README for a repository. - queryParameters: - ref: - description: The String name of the Commit/Branch/Tag. Defaults to master. - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "content": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "_links": { - "properties": { - "git": { - "type": "string" - }, - "self": { - "type": "string" - }, - "html": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "type": "file", - "encoding": "base64", - "size": 5362, - "name": "README.md", - "path": "README.md", - "content": "encoded content ...", - "sha": "3d21ec53a331a6f037a91c368710b99387d012c1", - "url": "https://api.github.com/repos/pengwynn/octokit/contents/README.md", - "git_url": "https://api.github.com/repos/pengwynn/octokit/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", - "html_url": "https://github.com/pengwynn/octokit/blob/master/README.md", - "_links": { - "git": "https://api.github.com/repos/pengwynn/octokit/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", - "self": "https://api.github.com/repos/pengwynn/octokit/contents/README.md", - "html": "https://github.com/pengwynn/octokit/blob/master/README.md" - } - } - # Stargazers - /stargazers: - type: collection - get: - description: List Stargazers. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - # Subscribers - /subscribers: - type: collection - get: - description: List watchers. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - # Tags - /tags: - type: collection - get: - description: Get list of tags. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "message": { - "description": "String of the tag message.", - "type": "string" - }, - "object": { - "description": "String of the SHA of the git object this is tagging.", - "type": "string" - }, - "type": { - "description": "String of the type of the object we're tagging. Normally this is a commit but it can also be a tree or a blob.", - "type": "string" - }, - "tagger": { - "properties": { - "name": { - "description": "String of the name of the author of the tag.", - "type": "string" - }, - "email": { - "description": "String of the email of the author of the tag.", - "type": "string" - }, - "date": { - "description": "Timestamp of when this object was tagged.", - "type": "timestamp" - } - }, - "type": "object" - } - }, - "required": [ - "tag", - "message", - "object", - "type", - "tagger" - ] - } - example: | - { - "tag": "v0.0.1", - "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac", - "message": "initial version\n", - "tagger": { - "name": "Scott Chacon", - "email": "schacon@gmail.com", - "date": "2011-06-17T14:53:35-07:00" - }, - "object": { - "type": "commit", - "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c" - } - } - # Teams - /teams: - type: collection - get: - description: Get list of teams - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/teams/1", - "name": "Owners", - "id": 1 - } - ] - # Watchers - /watchers: - type: collection - get: - description: List Stargazers. New implementation. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - # Other links - /contributors: - type: collection - get: - description: Get list of contributors. - queryParameters: - anon: - description: Set to 1 or true to include anonymous contributors in results. - type: string - required: true - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "contributions": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "contributions": 32 - } - ] - /branches: - type: collection - get: - description: Get list of branches - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "name": { - "type": "string" - }, - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "name": "master", - "commit": { - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "url": "https://api.github.com/repos/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc" - } - } - ] - /{branchId}: - uriParameters: - branchId: - description: Id of the branch. - type: integer - type: item - get: - description: Get Branch - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "commit": { - "author": { - "name": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - } - }, - "url": { - "type": "string" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "author": { - "properties": { - "gravatar_id": { - "type": "string" - }, - "avatar_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "url": { - "type": "string" - }, - "committer": { - "properties": { - "gravatar_id": { - "type": "string" - }, - "avatar_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "login": { - "type": "string" - } - }, - "type": "object" - } - }, - "_links": { - "properties": { - "html": { - "type": "string" - }, - "self": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "name": "master", - "commit": { - "sha": "7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", - "commit": { - "author": { - "name": "The Octocat", - "date": "2012-03-06T15:06:50-08:00", - "email": "octocat@nowhere.com" - }, - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", - "message": "Merge pull request #6 from Spaceghost/patch-1\n\nNew line at end of file.", - "tree": { - "sha": "b4eecafa9be2f2006ce1b709d6857b07069b4608", - "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/b4eecafa9be2f2006ce1b709d6857b07069b4608" - }, - "committer": { - "name": "The Octocat", - "date": "2012-03-06T15:06:50-08:00", - "email": "octocat@nowhere.com" - } - }, - "author": { - "gravatar_id": "7ad39074b0584bc555d0417ae3e7d974", - "avatar_url": "https://secure.gravatar.com/avatar/7ad39074b0584bc555d0417ae3e7d974?d=https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-140.png", - "url": "https://api.github.com/users/octocat", - "id": 583231, - "login": "octocat" - }, - "parents": [ - { - "sha": "553c2077f0edc3d5dc5d17262f6aa498e69d6f8e", - "url": "https://api.github.com/repos/octocat/Hello-World/commits/553c2077f0edc3d5dc5d17262f6aa498e69d6f8e" - }, - { - "sha": "762941318ee16e59dabbacb1b4049eec22f0d303", - "url": "https://api.github.com/repos/octocat/Hello-World/commits/762941318ee16e59dabbacb1b4049eec22f0d303" - } - ], - "url": "https://api.github.com/repos/octocat/Hello-World/commits/7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", - "committer": { - "gravatar_id": "7ad39074b0584bc555d0417ae3e7d974", - "avatar_url": "https://secure.gravatar.com/avatar/7ad39074b0584bc555d0417ae3e7d974?d=https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-140.png", - "url": "https://api.github.com/users/octocat", - "id": 583231, - "login": "octocat" - } - }, - "_links": { - "html": "https://github.com/octocat/Hello-World/tree/master", - "self": "https://api.github.com/repos/octocat/Hello-World/branches/master" - } - } - /issues: - type: collection - get: - is: [ filterable ] - description: List issues for a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "issues": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - ] - post: - description: | - Create an issue. - Any user with pull access to a repository can create an issue. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "assignee": { - "description": "Login for the user that this issue should be assigned to. NOTE: Only users with push access can set the assignee for new issues. The assignee is silently dropped otherwise.", - "type": "string" - }, - "milestone": { - "description": "Milestone to associate this issue with. NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise.", - "type": "integer" - }, - "labels": [ - { - "description": "Array of strings - Labels to associate with this issue. NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise.", - "type": "string" - } - ], - "type": "array" - }, - "required": [ "title" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - /events: - type: collection - get: - description: List issue events for a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - /{eventId}: - uriParameters: - eventId: - description: Id of the event. - type: integer - type: item - get: - description: Get a single event. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "type": "object" - }, - "event": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "issue": { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/events/1", - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "event": "closed", - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "created_at": "2011-04-14T16:00:49Z", - "issue": { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - } - /{number}: - uriParameters: - number: - description: Id of the issue. - type: integer - type: item - get: - description: Get a single issue - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - patch: - description: | - Edit an issue. - Issue owners and users with push access can edit an issue. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - # Comments - /comments: - type: collection - get: - description: List comments on an issue. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - ] - post: - description: Create a comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - } - }, - "required": [ "body" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/repos/octocat/Hello-World/issues/comments/1", - "html_url": "https://github.com/octocat/Hello-World/issues/1347#issuecomment-1", - "body": "Me too", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - # Events - /events: - type: collection - get: - description: List issue events for a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - /{eventId}: - uriParameters: - eventId: - description: Id of the event. - type: integer - type: item - get: - description: Get a single event. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "type": "object" - }, - "event": { - "type": "string" - }, - "commit_id": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "issue": { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/events/1", - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "event": "closed", - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "created_at": "2011-04-14T16:00:49Z", - "issue": { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - } - # Labels - /labels: - type: collection - get: - description: List labels on an issue. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ] - post: - description: Add labels to an issue. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "description": "6 character hex code, without a leading #.", - "type": "string", - "minLength": 6, - "maxLength": 6 - } - }, - "required": [ "name", "color" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - put: - description: | - Replace all labels for an issue. - Sending an empty array ([]) will remove all Labels from the Issue. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "description": "6 character hex code, without a leading #.", - "type": "string", - "minLength": 6, - "maxLength": 6 - } - }, - "required": [ "name", "color" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - delete: - description: Remove all labels from an issue. - /{name}: - uriParameters: - name: - description: Name of the label. - type: string - type: base - delete: - description: Remove a label from an issue. - responses: - 204: - description: Item removed. - /comments: - type: collection - get: - description: List comments in a repository. - queryParameters: - sort: - enum: - - created - - updated - direction: - description: Ignored without sort parameter. - enum: - - asc - - desc - since: - description: Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - ] - /{commentId}: - uriParameters: - commentId: - description: Id of the comment. - type: integer - type: item - get: - description: Get a single comment. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/repos/octocat/Hello-World/issues/comments/1", - "html_url": "https://github.com/octocat/Hello-World/issues/1347#issuecomment-1", - "body": "Me too", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - patch: - description: Edit a comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - } - }, - "required": [ "body" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "id": 1, - "url": "https://api.github.com/repos/octocat/Hello-World/issues/comments/1", - "html_url": "https://github.com/octocat/Hello-World/issues/1347#issuecomment-1", - "body": "Me too", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - delete: - description: Delete a comment. - /notifications: - type: collection - get: - description: | - List your notifications in a repository - List all notifications for the current user. - queryParameters: - all: - description: True to show notifications marked as read. - type: string - participating: - description: | - True to show only notifications in which the user is directly participating - or mentioned. - type: string - since: - description: | - Time filters out any notifications updated before the given time. The - time should be passed in as UTC in the ISO 8601 format YYYY-MM-DDTHH:MM:SSZ. - Example: "2012-10-09T23:39:01Z". - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "id": { - "type": "integer" - }, - "repository": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - } - }, - "type": "object" - }, - "subject": { - "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "latest_comment_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "reason": { - "type": "string" - }, - "unread": { - "type": "boolean" - }, - "updated_at": { - "type": "string" - }, - "last_read_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "repository": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World" - }, - "subject": { - "title": "Greetings", - "url": "https://api.github.com/repos/pengwynn/octokit/issues/123", - "latest_comment_url": "https://api.github.com/repos/pengwynn/octokit/issues/comments/123", - "type": "Issue" - }, - "reason": "subscribed", - "unread": true, - "updated_at": "2012-09-25T07:54:41-07:00", - "last_read_at": "2012-09-25T07:54:41-07:00", - "url": "https://api.github.com/notifications/threads/1" - } - ] - put: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "last_read_at": { - "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated. Default: Now.", - "type": "string" - } - } - } - description: | - Mark notifications as read in a repository. - Marking all notifications in a repository as "read" removes them from the - default view on GitHub.com. - responses: - 205: - description: Marked as read. - /subscription: - type: collection - get: - description: Get a Repository Subscription. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed": { - "type": "boolean" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "repository_url": { - "type": "string" - } - } - } - example: | - { - "subscribed": true, - "ignored": false, - "reason": null, - "created_at": "2012-10-06T21:34:12Z", - "url": "https://api.github.com/repos/octocat/example/subscription", - "repository_url": "https://api.github.com/repos/octocat/example" - } - put: - description: Set a Repository Subscription - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed": { - "description": "Determines if notifications should be received from this repository.", - "type": "boolean" - }, - "ignored": { - "description": "Determines if all notifications should be blocked from this repository.", - "type": "boolean" - } - }, - "required": [ "subscribed", "ignored" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "subscribed": { - "type": "boolean" - }, - "ignored": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "url": { - "type": "string" - }, - "repository_url": { - "type": "string" - } - } - } - example: | - { - "subscribed": true, - "ignored": false, - "reason": null, - "created_at": "2012-10-06T21:34:12Z", - "url": "https://api.github.com/repos/octocat/example/subscription", - "repository_url": "https://api.github.com/repos/octocat/example" - } - delete: - description: Delete a Repository Subscription. - /assignees: - type: collection - get: - description: | - List assignees. - This call lists all the available assignees (owner collaborators) to which - issues may be assigned. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "integer" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{assignee}: - type: base - uriParameters: - assignee: - description: Login of the assignee. - type: string - get: - description: | - Check assignee. - You may also check to see if a particular user is an assignee for a repository. - responses: - 204: - description: User is an assignee. - 404: - description: User isn't an assignee. - /labels: - type: collection - get: - description: List all labels for this repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ] - post: - description: Create a label. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "description": "6 character hex code, without a leading #.", - "type": "string", - "minLength": 6, - "maxLength": 6 - } - }, - "required": [ "name", "color" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - /{name}: - uriParameters: - name: - description: Name of the label. - type: string - type: item - get: - description: Get a single label. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - patch: - description: Update a label. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "description": "6 character hex code, without a leading #.", - "type": "string", - "minLength": 6, - "maxLength": 6 - } - }, - "required": [ "name", "color" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - delete: - description: Delete a label. - /milestones: - type: collection - get: - description: List milestones for a repository. - queryParameters: - state: - enum: - - open - - closed - default: open - sort: - enum: - - due_date - - completeness - default: due_date - direction: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - } - post: - description: Create a milestone. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 time.", - "type": "string" - } - }, - "required": [ "title" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - } - /{number}: - uriParameters: - number: - description: Id of the milestone. - type: integer - type: item - get: - description: Get a single milestone. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - } - patch: - description: Update a milestone. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "number": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "description": { - "type": "string" - }, - "due_on": { - "description": "ISO 8601 time.", - "type": "string" - } - }, - "required": [ "number" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - } - delete: - description: Delete a milestone. - /labels: - type: collection - get: - description: Get labels for every issue in a milestone. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string", - "maxLength": 6, - "minLength": 6 - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ] - /pulls: - type: collection - get: - description: List pull requests. - queryParameters: - state: - description: String to filter by state. - enum: - - open - - closed - default: open - head: - description: | - Filter pulls by head user and branch name in the format of 'user:ref-name'. - Example: github:new-script-format. - type: string - base: - description: Filter pulls by base branch name. Example - gh-pages. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/octocat/Hello-World/pulls/1", - "html_url": "https://github.com/octocat/Hello-World/pulls/1", - "diff_url": "https://github.com/octocat/Hello-World/pulls/1.diff", - "patch_url": "https://github.com/octocat/Hello-World/pulls/1.patch", - "issue_url": "https://github.com/octocat/Hello-World/issue/1", - "number": 1, - "state": "open", - "title": "new-feature", - "body": "Please pull these awesome changes", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:01:12Z", - "closed_at": "2011-01-26T19:01:12Z", - "merged_at": "2011-01-26T19:01:12Z", - "head": { - "label": "new-topic", - "ref": "new-topic", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "base": { - "label": "master", - "ref": "master", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1" - }, - "comments": { - "href": "https://api.github.com/octocat/Hello-World/issues/1/comments" - }, - "review_comments": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1/comments" - } - }, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - } - ] - post: - description: Create a pull request. - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/octocat/Hello-World/pulls/1", - "html_url": "https://github.com/octocat/Hello-World/pulls/1", - "diff_url": "https://github.com/octocat/Hello-World/pulls/1.diff", - "patch_url": "https://github.com/octocat/Hello-World/pulls/1.patch", - "issue_url": "https://github.com/octocat/Hello-World/issue/1", - "number": 1, - "state": "open", - "title": "new-feature", - "body": "Please pull these awesome changes", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:01:12Z", - "closed_at": "2011-01-26T19:01:12Z", - "merged_at": "2011-01-26T19:01:12Z", - "head": { - "label": "new-topic", - "ref": "new-topic", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "base": { - "label": "master", - "ref": "master", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1" - }, - "comments": { - "href": "https://api.github.com/octocat/Hello-World/issues/1/comments" - }, - "review_comments": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1/comments" - } - }, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - } - ] - /{number}: - uriParameters: - number: - description: Id of a pull. - type: integer - type: item - get: - description: Get a single pull request. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "url": "https://api.github.com/octocat/Hello-World/pulls/1", - "html_url": "https://github.com/octocat/Hello-World/pulls/1", - "diff_url": "https://github.com/octocat/Hello-World/pulls/1.diff", - "patch_url": "https://github.com/octocat/Hello-World/pulls/1.patch", - "issue_url": "https://github.com/octocat/Hello-World/issue/1", - "number": 1, - "state": "open", - "title": "new-feature", - "body": "Please pull these awesome changes", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:01:12Z", - "closed_at": "2011-01-26T19:01:12Z", - "merged_at": "2011-01-26T19:01:12Z", - "head": { - "label": "new-topic", - "ref": "new-topic", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "base": { - "label": "master", - "ref": "master", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1" - }, - "comments": { - "href": "https://api.github.com/octocat/Hello-World/issues/1/comments" - }, - "review_comments": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1/comments" - } - }, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "merge_commit_sha": "e5bd3914e2e596debea16f433f57875b5b90bcd6", - "merged": false, - "mergeable": true, - "merged_by": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "comments": 10, - "commits": 3, - "additions": 100, - "deletions": 3, - "changed_files": 5 - } - patch: - description: Update a pull request. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "state": { - "enum": [ "open", "closed" ] - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "organization": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "parent": { - "description": "Is present when the repo is a fork. Parent is the repo this repo was forked from.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "source": { - "description": "Is present when the repo is a fork. Source is the ultimate source for the network.", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "has_issues": { - "type": "boolean" - }, - "has_wiki": { - "type": "boolean" - }, - "has_downloads": { - "type": "boolean" - } - } - } - example: | - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z", - "organization": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "type": "Organization" - }, - "parent": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "source": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - }, - "has_issues": true, - "has_wiki": true, - "has_downloads": true - } - # Files - /files: - type: item - get: - description: List pull requests files. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - }, - "issue_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "merged_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "head": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "base": { - "properties": { - "label": { - "type": "string" - }, - "ref": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "review_comments": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/octocat/Hello-World/pulls/1", - "html_url": "https://github.com/octocat/Hello-World/pulls/1", - "diff_url": "https://github.com/octocat/Hello-World/pulls/1.diff", - "patch_url": "https://github.com/octocat/Hello-World/pulls/1.patch", - "issue_url": "https://github.com/octocat/Hello-World/issue/1", - "number": 1, - "state": "open", - "title": "new-feature", - "body": "Please pull these awesome changes", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:01:12Z", - "closed_at": "2011-01-26T19:01:12Z", - "merged_at": "2011-01-26T19:01:12Z", - "head": { - "label": "new-topic", - "ref": "new-topic", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "base": { - "label": "master", - "ref": "master", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "repo": { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - }, - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1" - }, - "comments": { - "href": "https://api.github.com/octocat/Hello-World/issues/1/comments" - }, - "review_comments": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1/comments" - } - }, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - } - ] - # Commits - /commits: - type: item - get: - description: List commits on a pull request. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "commit": { - "properties": { - "url": { - "type": "string" - }, - "author": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - }, - "author": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array" - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "commit": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "author": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "committer": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "message": "Fix all the bugs", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/tree/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - }, - "author": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "committer": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - ] - } - ] - /merge: - type: base - get: - description: Get if a pull request has been merged. - responses: - 204: - description: Pull request has been merged. - 404: - description: Pull request has not been merged. - put: - description: Merge a pull request (Merge Button™) - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "commit_message": { - "description": "The message that will be used for the merge commit", - "type": "string" - } - } - } - responses: - 200: - description: Response if merge was successful. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - } - } - } - example: | - { - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "merged": true, - "message": "Pull Request successfully merged" - } - 405: - description: Response if merge cannot be performed. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "merged": { - "type": "boolean" - }, - "message": { - "type": "string" - } - } - } - example: | - { - "sha": null, - "merged": false, - "message": "Failure reason" - } - /comments: - type: collection - get: - description: List comments on a pull request. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - post: - description: | - Create a comment. - #TODO Alternative input ( http://developer.github.com/v3/pulls/comments/ ) - description: | - Alternative Input. - Instead of passing commit_id, path, and position you can reply to an - existing Pull Request Comment like this: - - body - Required string - in_reply_to - Required number - Comment id to reply to. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - }, - "commit_id": { - "description": "Sha of the commit to comment on.", - "type": "string" - }, - "path": { - "description": "Relative path of the file to comment on.", - "type": "string" - }, - "position": { - "description": "Line index in the diff to comment on.", - "type": "string" - } - }, - "required": [ "body", "commit_id", "path", "position" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - /comments: - type: collection - get: - description: | - List comments in a repository. - By default, Review Comments are ordered by ascending ID. - queryParameters: - sort: - enum: - - created - - updated - direction: - description: Ignored without 'sort' parameter. - enum: - - asc - - desc - since: - description: Timestamp in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - ] - /{number}: - uriParameters: - number: - description: Id of the comment. - type: integer - type: item - get: - description: Get a single comment. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - patch: - description: Edit a comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - } - }, - "required": [ "body" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "_links": { - "properties": { - "self": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "html": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - }, - "pull_request": { - "properties": { - "href": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z", - "_links": { - "self": { - "href": "https://api.github.com/octocat/Hello-World/pulls/comments/1" - }, - "html": { - "href": "https://github.com/octocat/Hello-World/pull/1#discussion-diff-1" - }, - "pull_request": { - "href": "https://api.github.com/octocat/Hello-World/pulls/1" - } - } - } - delete: - description: Delete a comment. - /collaborators: - type: collection - get: - description: | - List. - When authenticating as an organization owner of an organization-owned - repository, all organization owners are included in the list of - collaborators. Otherwise, only users with access to the repository are - returned in the collaborators list. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{user}: - uriParameters: - user: - description: Login of the user. - type: string - type: base - get: - description: Check if user is a collaborator - responses: - 204: - description: User is a collaborator. - 404: - description: User is not a collaborator. - put: - description: Add collaborator. - responses: - 204: - description: Collaborator added. - delete: - description: Remove collaborator. - responses: - 204: - description: Collaborator removed. - /comments: - type: collection - get: - description: | - List commit comments for a repository. - Comments are ordered by ascending ID. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "html_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "html_url": "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e#commitcomment-1", - "url": "https://api.github.com/repos/octocat/Hello-World/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "line": 14, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - ] - /{commentId}: - uriParameters: - commentId: - description: Id of a comment. - type: integer - type: item - get: - description: Get a single commit comment. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "html_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "html_url": "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e#commitcomment-1", - "url": "https://api.github.com/repos/octocat/Hello-World/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "line": 14, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - patch: - description: Update a commit comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "body": { - "type": "string" - } - }, - "required": [ "body" ] - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "html_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "html_url": "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e#commitcomment-1", - "url": "https://api.github.com/repos/octocat/Hello-World/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "line": 14, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - delete: - description: Delete a commit comment - /commits: - type: collection - get: - description: List commits on a repository. - queryParameters: - sha: - description: Sha or branch to start listing commits from. - type: string - path: - description: Only commits containing this file path will be returned. - type: string - author: - description: GitHub login, name, or email by which to filter by commit author. - type: string - since: - description: ISO 8601 Date - Only commits after this date will be returned. - type: string - until: - description: ISO 8601 Date - Only commits before this date will be returned. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "commit": { - "properties": { - "url": { - "type": "string" - }, - "author": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - }, - "author": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array" - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "commit": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "author": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "committer": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "message": "Fix all the bugs", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/tree/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - }, - "author": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "committer": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - ] - } - ] - /{shaCode}: - uriParameters: - shaCode: - description: SHA-1 code of the commit. - type: string - type: item - get: - description: Get a single commit. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "commit": { - "properties": { - "url": { - "type": "string" - }, - "author": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "date": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - }, - "author": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "commit": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "author": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "committer": { - "name": "Monalisa Octocat", - "email": "support@github.com", - "date": "2011-04-14T16:00:49Z" - }, - "message": "Fix all the bugs", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/tree/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - }, - "author": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "committer": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e", - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" - } - ], - "stats": { - "additions": 104, - "deletions": 4, - "total": 108 - }, - "files": [ - { - "filename": "file1.txt", - "additions": 10, - "deletions": 2, - "changes": 12, - "status": "modified", - "raw_url": "https://github.com/octocat/Hello-World/raw/7ca483543807a51b6079e54ac4cc392bc29ae284/file1.txt", - "blob_url": "https://github.com/octocat/Hello-World/blob/7ca483543807a51b6079e54ac4cc392bc29ae284/file1.txt", - "patch": "@@ -29,7 29,7 @@\n....." - } - ] - } - /comments: - type: collection - get: - description: List comments for a single commitList comments for a single commit. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "html_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "html_url": "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e#commitcomment-1", - "url": "https://api.github.com/repos/octocat/Hello-World/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "line": 14, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - ] - post: - description: Create a commit comment. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "description": "SHA of the commit to comment on.", - "type": "string" - }, - "body": { - "type": "string" - }, - "path": { - "description": "Relative path of the file to comment on.", - "type": "string" - }, - "position": { - "description": "Line index in the diff to comment on.", - "type": "integer" - }, - "line": { - "description": "Deprecated - Use position parameter instead.", - "type": "string" - }, - "number": { - "description": "Line number in the file to comment on. Defaults to null.", - "type": "string" - } - }, - "required": [ "sha", "body" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "html_url": { - "type": "string" - }, - "url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "body": { - "type": "string" - }, - "path": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "line": { - "type": "integer" - }, - "commit_id": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "html_url": "https://github.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e#commitcomment-1", - "url": "https://api.github.com/repos/octocat/Hello-World/comments/1", - "id": 1, - "body": "Great stuff", - "path": "file1.txt", - "position": 4, - "line": 14, - "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-04-14T16:00:49Z", - "updated_at": "2011-04-14T16:00:49Z" - } - /contents/{path}: - uriParameters: - path: - type: string - type: base - get: - description: | - Get contents. - This method returns the contents of a file or directory in a repository. - Files and symlinks support a custom media type for getting the raw content. - Directories and submodules do not support custom media types. - Note: This API supports files up to 1 megabyte in size. - Here can be many outcomes. For details see "http://developer.github.com/v3/repos/contents/" - queryParameters: - path: - description: The content path. - type: string - ref: - description: The String name of the Commit/Branch/Tag. Defaults to 'master'. - type: string - responses: - 200: - body: - application/json: - #TODO many outcomes - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "content": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "_links": { - "properties": { - "git": { - "type": "string" - }, - "self": { - "type": "string" - }, - "html": { - "type": "string" - } - }, - "type": "object" - } - } - } - example: | - { - "type": "file", - "encoding": "base64", - "size": 5362, - "name": "README.md", - "path": "README.md", - "content": "encoded content ...", - "sha": "3d21ec53a331a6f037a91c368710b99387d012c1", - "url": "https://api.github.com/repos/pengwynn/octokit/contents/README.md", - "git_url": "https://api.github.com/repos/pengwynn/octokit/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", - "html_url": "https://github.com/pengwynn/octokit/blob/master/README.md", - "_links": { - "git": "https://api.github.com/repos/pengwynn/octokit/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", - "self": "https://api.github.com/repos/pengwynn/octokit/contents/README.md", - "html": "https://github.com/pengwynn/octokit/blob/master/README.md" - } - } - put: - description: Create a file. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "content": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "sha": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "type": { - "type": "string" - }, - "_links": { - "properties": { - "self": { - "type": "string" - }, - "git": { - "type": "string" - }, - "html": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "author": { - "properties": { - "date": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "date": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ] - }, - "type": "object" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "path": { - "description": "The content path.", - "type": "string" - }, - "message": { - "description": "The commit message.", - "type": "string" - }, - "content": { - "description": "The new file content, Base64 encoded.", - "type": "string" - }, - "sha": { - "description": "Is included if we want to modify existing file. The blob SHA of the file being replaced.", - "type": "string" - }, - "branch": { - "description": "The branch name. If not provided, uses the repository's default branch (usually master).", - "type": "string" - }, - "author": { - "properties": { - "name": { - "description": "The name of the author of the commit.", - "type": "string" - }, - "email": { - "description": "The email of the author of the commit", - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "description": "The name of the committer of the commit.", - "type": "string" - }, - "email": { - "description": "The email of the committer of the commit.", - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ "path", "message", "content", "branch" ] - } - example: | - { - "content": { - "name": "hello.txt", - "path": "notes/hello.txt", - "sha": "95b966ae1c166bd92f8ae7d1c313e738c731dfc3", - "size": 9, - "url": "https://api.github.com/repos/octocat/Hello-World/contents/notes/hello.txt", - "html_url": "https://github.com/octocat/Hello-World/blob/master/notes/hello.txt", - "git_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/95b966ae1c166bd92f8ae7d1c313e738c731dfc3", - "type": "file", - "_links": { - "self": "https://api.github.com/repos/octocat/Hello-World/contents/notes/hello.txt", - "git": "https://api.github.com/repos/octocat/Hello-World/git/blobs/95b966ae1c166bd92f8ae7d1c313e738c731dfc3", - "html": "https://github.com/octocat/Hello-World/blob/master/notes/hello.txt" - } - }, - "commit": { - "sha": "7638417db6d59f3c431d3e1f261cc637155684cd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd", - "html_url": "https://github.com/octocat/Hello-World/git/commit/7638417db6d59f3c431d3e1f261cc637155684cd", - "author": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "committer": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "message": "my commit message", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/691272480426f78a0138979dd3ce63b77f706feb", - "sha": "691272480426f78a0138979dd3ce63b77f706feb" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/1acc419d4d6a9ce985db7be48c6349a0475975b5", - "html_url": "https://github.com/octocat/Hello-World/git/commit/1acc419d4d6a9ce985db7be48c6349a0475975b5", - "sha": "1acc419d4d6a9ce985db7be48c6349a0475975b5" - } - ] - } - } - delete: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "path": { - "description": "The content path.", - "type": "string" - }, - "message": { - "description": "The commit message.", - "type": "string" - }, - "content": { - "description": "The new file content, Base64 encoded.", - "type": "string" - }, - "sha": { - "description": "The blob SHA of the file being removed.", - "type": "string" - }, - "branch": { - "description": "The branch name. If not provided, uses the repository's default branch (usually master).", - "type": "string" - }, - "author": { - "properties": { - "name": { - "description": "The name of the author of the commit.", - "type": "string" - }, - "email": { - "description": "The email of the author of the commit", - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "description": "The name of the committer of the commit.", - "type": "string" - }, - "email": { - "description": "The email of the committer of the commit.", - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ "path", "message", "sha" ] - } - description: | - Delete a file. - This method deletes a file in a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "commit": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "author": { - "properties": { - "date": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "date": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "sha": { - "type": "string" - } - }, - "type": "object" - } - ] - }, - "type": "object" - } - } - } - example: | - { - "content": null, - "commit": { - "sha": "7638417db6d59f3c431d3e1f261cc637155684cd", - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd", - "html_url": "https://github.com/octocat/Hello-World/git/commit/7638417db6d59f3c431d3e1f261cc637155684cd", - "author": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "committer": { - "date": "2010-04-10T14:10:01-07:00", - "name": "Scott Chacon", - "email": "schacon@gmail.com" - }, - "message": "my commit message", - "tree": { - "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/691272480426f78a0138979dd3ce63b77f706feb", - "sha": "691272480426f78a0138979dd3ce63b77f706feb" - }, - "parents": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/1acc419d4d6a9ce985db7be48c6349a0475975b5", - "html_url": "https://github.com/octocat/Hello-World/git/commit/1acc419d4d6a9ce985db7be48c6349a0475975b5", - "sha": "1acc419d4d6a9ce985db7be48c6349a0475975b5" - } - ] - } - } - /{archive_format}/{path}: - type: base - uriParameters: - archive_format: - enum: - - tarball - - zipball - required: true - path: - description: Valid Git reference, defaults to 'master'. - type: string - get: - description: | - Get archive link. - This method will return a 302 to a URL to download a tarball or zipball - archive for a repository. Please make sure your HTTP framework is - configured to follow redirects or you will need to use the Location header - to make a second GET request. - Note: For private repositories, these links are temporary and expire quickly. - responses: - 302: - description: Found. - /downloads: - type: collection - get: - description: List downloads for a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "download_count": { - "type": "integer" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/downloads/1", - "html_url": "https://github.com/repos/octocat/Hello-World/downloads/new_file.jpg", - "id": 1, - "name": "new_file.jpg", - "description": "Description of your download", - "size": 1024, - "download_count": 40, - "content_type": ".jpg" - } - post: - description: | - Create a new download (Part 1: Create the resource). - For part 2 see http://developer.github.com/v3/repos/downloads/#create-a-new-download-part-2-upload-file-to-s3 - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "size": { - "description": "Size of file in bytes.", - "type": "integer" - }, - "description": { - "type": "string" - }, - "content_type": { - "type": "string" - } - }, - "required": [ "name", "size" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "download_count": { - "type": "integer" - }, - "content_type": { - "type": "string" - }, - "policy": { - "type": "string" - }, - "signature": { - "type": "string" - }, - "bucket": { - "type": "string" - }, - "accesskeyid": { - "type": "string" - }, - "path": { - "type": "string" - }, - "acl": { - "type": "string" - }, - "expirationdate": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "prefix": { - "type": "string" - }, - "mime_type": { - "type": "string" - }, - "redirect": { - "type": "boolean" - }, - "s3_url": { - "type": "string" - } - } - } - example: | - { - "url": "https://api.github.com/repos/octocat/Hello-World/downloads/1", - "html_url": "https://github.com/repos/octocat/Hello-World/downloads/new_file.jpg", - "id": 1, - "name": "new_file.jpg", - "description": "Description of your download", - "size": 1024, - "download_count": 40, - "content_type": ".jpg", - "policy": "ewogICAg...", - "signature": "mwnFDC...", - "bucket": "github", - "accesskeyid": "1ABCDEFG...", - "path": "downloads/octocat/Hello-World/new_file.jpg", - "acl": "public-read", - "expirationdate": "2011-04-14T16:00:49Z", - "prefix": "downloads/octocat/Hello-World/", - "mime_type": "image/jpeg", - "redirect": false, - "s3_url": "https://github.s3.amazonaws.com/" - } - /{downloadId}: - type: item - uriParameters: - downloadId: - description: Id of the download. - type: integer - get: - description: Get a single download. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "download_count": { - "type": "integer" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - delete: - description: Delete a download. - /forks: - type: collection - get: - description: List forks. - queryParameters: - sort: - enum: - - newest - - oldest - - watchers - default: newest - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - post: - description: | - Create a fork. - Forking a Repository happens asynchronously. Therefore, you may have to wait - a short period before accessing the git objects. If this takes longer than 5 - minutes, be sure to contact Support. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "organization": { - "description": "Organization login. The repository will be forked into this organization.", - "type": "string" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - } - } - example: | - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - /keys: - type: collection - get: - description: Get list of keys. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - ] - post: - description: Create a key. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "key": { - "type": "string" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - /{keyId}: - uriParameters: - keyId: - description: Id of a key. - type: integer - type: item - get: - description: Get a key - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - patch: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "key": { - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - description: Edit a key. - delete: - description: Delete a key. - /hooks: - type: collection - get: - description: Get list of hooks. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "url": { - "type": "string" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - }, - "id": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/hooks/1", - "updated_at": "2011-09-06T20:39:23Z", - "created_at": "2011-09-06T17:26:27Z", - "name": "web", - "events": [ - "push", - "pull_request" - ], - "active": true, - "config": { - "url": "http://example.com", - "content_type": "json" - }, - "id": 1 - } - ] - post: - description: Create a hook. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "config": { - "description": "A Hash containing key/value pairs to provide settings for this hook. Modifying this will replace the entire config object. These settings vary between the services and are defined in the github-services repo. Booleans are stored internally as \"1\" for true, and \"0\" for false. Any JSON true/false values will be converted automatically.", - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "add_events": [ - { - "description": "Determines a list of events to be added to the list of events that the Hook triggers for.", - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "remove_events": [ - { - "description": "Determines a list of events to be removed from the list of events that the Hook triggers for.", - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "description": "Determines whether the hook is actually triggered on pushes.", - "type": "boolean" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "url": { - "type": "string" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - }, - "id": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/hooks/1", - "updated_at": "2011-09-06T20:39:23Z", - "created_at": "2011-09-06T17:26:27Z", - "name": "web", - "events": [ - "push", - "pull_request" - ], - "active": true, - "config": { - "url": "http://example.com", - "content_type": "json" - }, - "id": 1 - } - ] - /{hookId}: - uriParameters: - hookId: - description: Id of the hook. - type: integer - type: item - get: - description: Get single hook. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "url": { - "type": "string" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - }, - "id": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/hooks/1", - "updated_at": "2011-09-06T20:39:23Z", - "created_at": "2011-09-06T17:26:27Z", - "name": "web", - "events": [ - "push", - "pull_request" - ], - "active": true, - "config": { - "url": "http://example.com", - "content_type": "json" - }, - "id": 1 - } - ] - patch: - description: Edit a hook. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "config": { - "description": "A Hash containing key/value pairs to provide settings for this hook. Modifying this will replace the entire config object. These settings vary between the services and are defined in the github-services repo. Booleans are stored internally as \"1\" for true, and \"0\" for false. Any JSON true/false values will be converted automatically.", - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "add_events": [ - { - "description": "Determines a list of events to be added to the list of events that the Hook triggers for.", - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "remove_events": [ - { - "description": "Determines a list of events to be removed from the list of events that the Hook triggers for.", - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "description": "Determines whether the hook is actually triggered on pushes.", - "type": "boolean" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "name": { - "type": "string" - }, - "events": [ - { - "enum": [ - "push", - "issues", - "issue_comment", - "commit_comment", - "pull_request", - "pull_request_review_comment", - "gollum", - "watch", - "download", - "fork", - "fork_apply", - "member", - "public", - "team_add", - "status" - ] - } - ], - "type": "array", - "active": { - "type": "boolean" - }, - "config": { - "properties": { - "url": { - "type": "string" - }, - "content_type": { - "type": "string" - } - }, - "type": "object" - }, - "id": { - "type": "integer" - } - } - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/hooks/1", - "updated_at": "2011-09-06T20:39:23Z", - "created_at": "2011-09-06T17:26:27Z", - "name": "web", - "events": [ - "push", - "pull_request" - ], - "active": true, - "config": { - "url": "http://example.com", - "content_type": "json" - }, - "id": 1 - } - ] - delete: - description: Delete a hook. - /tests: - type: base - post: - description: | - Test a push hook. - This will trigger the hook with the latest push to the current repository - if the hook is subscribed to push events. If the hook is not subscribed - to push events, the server will respond with 204 but no test POST will - be generated. - Note: Previously /repos/:owner/:repo/hooks/:id/test - responses: - 204: - description: Hook is triggered. - /merges: - type: base - post: - description: Perform a merge. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "base": { - "description": "The name of the base branch that the head will be merged into.", - "type": "string" - }, - "head": { - "description": "The head to merge. This can be a branch name or a commit SHA1.", - "type": "string" - }, - "commit_message": { - "description": "Commit message to use for the merge commit. If omitted, a default message will be used.", - "type": "string" - } - }, - "required": [ "base", "head" ] - } - responses: - 201: - description: Successful Response (The resulting merge commit) - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "sha": { - "type": "string" - }, - "commit": { - "properties": { - "author": { - "properties": { - "name": { - "type": "string" - }, - "date": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "name": { - "type": "string" - }, - "date": { - "type": "string" - }, - "email": { - "type": "string" - } - }, - "type": "object" - }, - "message": { - "type": "string" - }, - "tree": { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "url": { - "type": "string" - }, - "comment_count": { - "type": "integer" - } - }, - "type": "object" - }, - "url": { - "type": "string" - }, - "comments_url": { - "type": "string" - }, - "author": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "followers_url": { - "type": "string" - }, - "following_url": { - "type": "string" - }, - "gists_url": { - "type": "string" - }, - "starred_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "repos_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "received_events_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "committer": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "followers_url": { - "type": "string" - }, - "following_url": { - "type": "string" - }, - "gists_url": { - "type": "string" - }, - "starred_url": { - "type": "string" - }, - "subscriptions_url": { - "type": "string" - }, - "organizations_url": { - "type": "string" - }, - "repos_url": { - "type": "string" - }, - "events_url": { - "type": "string" - }, - "received_events_url": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "parents": [ - { - "properties": { - "sha": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array" - } - } - example: | - { - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "merged": true, - "message": "Pull Request successfully merged" - } - 204: - description: No-op response (base already contains the head, nothing to merge) - 409: - description: Merge conflict response. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "message": { - "description": "Error message", - "type": "string" - } - } - } - example: | - { - "message": "Merge Conflict" - } - 404: - description: Missing base response or missing head response - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "message": { - "description": "Error message", - "type": "string" - } - } - } - example: | - { - "message": "Base does not exist" - } - /statuses/{ref}: - type: collection - uriParameters: - ref: - description: | - Ref to list the statuses from. It can be a SHA, a branch name, or a tag name. - type: string - get: - description: List Statuses for a specific Ref. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "created_at": "2012-07-20T01:19:13Z", - "updated_at": "2012-07-20T01:19:13Z", - "state": "success", - "target_url": "https://ci.example.com/1000/output", - "description": "Build has completed successfully", - "id": 1, - "url": "https://api.github.com/repos/octocat/example/statuses/1", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - } - ] - post: - description: Create a Status. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "state": { - "enum": [ - "pending", "success", "error", "failure" - ] - }, - "target_url": { - "description": "Target url to associate with this status. This URL will be linked from the GitHub UI to allow users to easily see the ?source' of the Status.", - "type": "string" - }, - "description": { - "description": "Short description of the status", - "type": "string" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "state": { - "type": "string" - }, - "target_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "created_at": "2012-07-20T01:19:13Z", - "updated_at": "2012-07-20T01:19:13Z", - "state": "success", - "target_url": "https://ci.example.com/1000/output", - "description": "Build has completed successfully", - "id": 1, - "url": "https://api.github.com/repos/octocat/example/statuses/1", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - } - ] - /stats: - /contributors: - type: collection - get: - description: Get contributors list with additions, deletions, and commit counts. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "author": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "total": { - "description": "The Total number of commits authored by the contributor.", - "type": "integer" - }, - "weeks": [ - { - "properties": { - "w": { - "description": "Start of the week.", - "type": "string" - }, - "a": { - "description": "Number of additions.", - "type": "integer" - }, - "d": { - "description": "Number of deletions.", - "type": "integer" - }, - "c": { - "description": "Number of commits.", - "type": "integer" - } - }, - "type": "object" - } - ], - "type": "array" - } - ] - } - example: | - [ - { - "author": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "total": 135, - "weeks": [ - { - "w": "1367712000", - "a": 6898, - "d": 77, - "c": 10 - } - ] - } - ] - /commit_activity: - type: collection - get: - description: | - Get the last year of commit activity data. - Returns the last year of commit activity grouped by week. The days array - is a group of commits per day, starting on Sunday. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "days": [ - { - "type": "integer" - } - ], - "type": "array", - "total": { - "type": "integer" - }, - "week": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "days": [ - 0, - 3, - 26, - 20, - 39, - 1, - 0 - ], - "total": 89, - "week": 1336280400 - } - ] - /code_frequency: - type: collection - get: - description: | - Get the number of additions and deletions per week. - Returns a weekly aggregate of the number of additions and deletions pushed - to a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "type": "integer" - } - ] - } - example: | - [ - [ - 1302998400, - 1124, - -435 - ] - ] - /participation: - type: collection - get: - description: Get the weekly commit count for the repo owner and everyone else. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "all": [ - { - "type": "integer" - } - ], - "type": "array", - "owner": [ - { - "type": "integer" - } - ], - "type": "array" - } - } - example: | - { - "all": [ - 11, - 21, - 15, - 2, - 8, - 1, - 8, - 23, - 17, - 21, - 11, - 10, - 33, - 91, - 38, - 34, - 22, - 23, - 32, - 3, - 43, - 87, - 71, - 18, - 13, - 5, - 13, - 16, - 66, - 27, - 12, - 45, - 110, - 117, - 13, - 8, - 18, - 9, - 19, - 26, - 39, - 12, - 20, - 31, - 46, - 91, - 45, - 10, - 24, - 9, - 29, - 7 - ], - "owner": [ - 3, - 2, - 3, - 0, - 2, - 0, - 5, - 14, - 7, - 9, - 1, - 5, - 0, - 48, - 19, - 2, - 0, - 1, - 10, - 2, - 23, - 40, - 35, - 8, - 8, - 2, - 10, - 6, - 30, - 0, - 2, - 9, - 53, - 104, - 3, - 3, - 10, - 4, - 7, - 11, - 21, - 4, - 4, - 22, - 26, - 63, - 11, - 2, - 14, - 1, - 10, - 3 - ] - } - /punch_card: - type: collection - get: - description: | - Get the number of commits per hour in each day. - Each array contains the day number, hour number, and number of commits - 0-6 Sunday - Saturday - 0-23 Hour of day - Number of commits - - For example, [2, 14, 25] indicates that there were 25 total commits, during - the 2.00pm hour on Tuesdays. All times are based on the time zone of - individual commits. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "": [ - { - "type": "integer" - } - ] - } - ] - } - example: | - [ - [ - 0, - 0, - 5 - ], - [ - 0, - 1, - 43 - ], - [ - 0, - 2, - 21 - ] - ] -/user: - type: item - get: - description: Get the authenticated user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "company": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "location": { - "type": "string" - }, - "email": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "bio": { - "type": "string" - }, - "public_repos": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "type": { - "type": "string" - }, - "total_private_repos": { - "type": "integer" - }, - "owned_private_repos": { - "type": "integer" - }, - "private_gists": { - "type": "integer" - }, - "disk_usage": { - "type": "integer" - }, - "collaborators": { - "type": "integer" - }, - "plan": { - "properties": { - "name": { - "type": "string" - }, - "space": { - "type": "integer" - }, - "collaborators": { - "type": "integer" - }, - "private_repos": { - "type": "integer" - } - }, - "type": "object" - } - } - } - example: | - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "name": "monalisa octocat", - "company": "GitHub", - "blog": "https://github.com/blog", - "location": "San Francisco", - "email": "octocat@github.com", - "hireable": false, - "bio": "There once was...", - "public_repos": 2, - "public_gists": 1, - "followers": 20, - "following": 0, - "html_url": "https://github.com/octocat", - "created_at": "2008-01-14T04:33:35Z", - "type": "User", - "total_private_repos": 100, - "owned_private_repos": 100, - "private_gists": 81, - "disk_usage": 10000, - "collaborators": 8, - "plan": { - "name": "Medium", - "space": 400, - "collaborators": 10, - "private_repos": 20 - } - } - patch: - description: Update the authenticated user. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "company": { - "type": "string" - }, - "location": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "bio": { - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "company": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "location": { - "type": "string" - }, - "email": { - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "bio": { - "type": "string" - }, - "public_repos": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "type": { - "type": "string" - }, - "total_private_repos": { - "type": "integer" - }, - "owned_private_repos": { - "type": "integer" - }, - "private_gists": { - "type": "integer" - }, - "disk_usage": { - "type": "integer" - }, - "collaborators": { - "type": "integer" - }, - "plan": { - "properties": { - "name": { - "type": "string" - }, - "space": { - "type": "integer" - }, - "collaborators": { - "type": "integer" - }, - "private_repos": { - "type": "integer" - } - }, - "type": "object" - } - } - } - example: | - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "name": "monalisa octocat", - "company": "GitHub", - "blog": "https://github.com/blog", - "location": "San Francisco", - "email": "octocat@github.com", - "hireable": false, - "bio": "There once was...", - "public_repos": 2, - "public_gists": 1, - "followers": 20, - "following": 0, - "html_url": "https://github.com/octocat", - "created_at": "2008-01-14T04:33:35Z", - "type": "User", - "total_private_repos": 100, - "owned_private_repos": 100, - "private_gists": 81, - "disk_usage": 10000, - "collaborators": 8, - "plan": { - "name": "Medium", - "space": 400, - "collaborators": 10, - "private_repos": 20 - } - } - /orgs: - type: collection - get: - description: List public and private organizations for the authenticated user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "avatar_url": { - "type": "string" - } - } - ] - } - example: | - [ - { - "login": "github", - "id": 1, - "url": "https://api.github.com/orgs/github", - "avatar_url": "https://github.com/images/error/octocat_happy.gif" - } - ] - # Other - /{userId}: - type: collection - uriParameters: - userId: - type: integer - get: - securedBy: [ oauth_2_0, null ] - description: Get a single user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "company": { - "type": "string" - }, - "blog": { - "type": "string" - }, - "location": { - "type": "string" - }, - "email": { - "description": "Note: The returned email is the user's publicly visible email address (or null if the user has not specified a public email address in their profile).", - "type": "string" - }, - "hireable": { - "type": "boolean" - }, - "bio": { - "type": "string" - }, - "public_repos": { - "type": "integer" - }, - "public_gists": { - "type": "integer" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "html_url": { - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "type": { - "type": "string" - } - } - } - example: | - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat", - "name": "monalisa octocat", - "company": "GitHub", - "blog": "https://github.com/blog", - "location": "San Francisco", - "email": "octocat@github.com", - "hireable": false, - "bio": "There once was...", - "public_repos": 2, - "public_gists": 1, - "followers": 20, - "following": 0, - "html_url": "https://github.com/octocat", - "created_at": "2008-01-14T04:33:35Z", - "type": "User" - } - # Received events - /received_events: - type: collection - get: - description: List events that a user has received. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - /public: - type: collection - get: - description: List public events that a user has received. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - # Orgs - /orgs: - type: collection - get: - description: List all public organizations for a user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "avatar_url": { - "type": "string" - } - } - ] - } - example: | - [ - { - "login": "github", - "id": 1, - "url": "https://api.github.com/orgs/github", - "avatar_url": "https://github.com/images/error/octocat_happy.gif" - } - ] - /events: - type: collection - get: - description: | - List events performed by a user. - If you are authenticated as the given user, you will see your private events. - Otherwise, you'll only see public events. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - # Public - /public: - type: collection - get: - description: List public events performed by a user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - # Orgs events - /orgs/{orgId}: - uriParameters: - orgId: - type: integer - type: collection - get: - description: List events for an organization. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] - /starred: - type: collection - get: - description: List repositories being starred. - queryParameters: - sort: - enum: - - created - - updated - default: created - direction: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - /subscriptions: - type: collection - get: - description: List repositories being watched by a user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - /emails: - type: collection - get: - description: | - List email addresses for a user. - In the final version of the API, this method will return an array of hashes - with extended information for each email address indicating if the address - has been verified and if it's the user's primary email address for GitHub. - Until API v3 is finalized, use the application/vnd.github.v3 media type to - get other response format. - responses: - 200: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "type": "string" - } - ] - } - example: | - [ - "octocat@github.com", - "support@github.com" - ] - application/vnd.github.v3: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "properties": { - "email": { - "type": "string" - }, - "verified": { - "type": "boolean" - }, - "primary": { - "type": "boolean" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "email": "octocat@github.com", - "verified": true, - "primary": true - } - ] - post: - description: | - Add email address(es). - You can post a single email address or an array of addresses. - delete: - description: | - Delete email address(es). - You can include a single email address or an array of addresses. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "type": "string" - } - ] - } - /following: - type: collection - get: - description: List who the authenticated user is following. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{userId}: - uriParameters: - userId: - type: integer - type: base - get: - description: Check if you are following a user. - responses: - 204: - description: Response if you are following this user. - 404: - description: Response if you are not following this user. - put: - description: | - Follow a user. - Following a user requires the user to be logged in and authenticated with - basic auth or OAuth with the user:follow scope. - responses: - 204: - description: You are now following the user. - delete: - description: | - Unfollow a user. - Unfollowing a user requires the user to be logged in and authenticated with - basic auth or OAuth with the user:follow scope. - responses: - 204: - description: User unfollowed. - /keys: - type: collection - get: - description: | - List your public keys. - Lists the current user's keys. Management of public keys via the API requires - that you are authenticated through basic auth, or OAuth with the 'user' scope. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - ] - post: - description: Create a public key. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "key": { - "type": "string" - } - } - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - /{keyId}: - uriParameters: - keyId: - type: integer - type: item - get: - description: Get a single public key. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - patch: - description: Update a public key. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "key": { - "type": "string" - } - } - } - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - } - } - } - example: | - { - "id": 1, - "key": "ssh-rsa AAA...", - "url": "https://api.github.com/user/keys/1", - "title": "octocat@octomac" - } - delete: - description: Delete a public key. - /starred: - type: collection - get: - description: List repositories being starred by the authenticated user. - queryParameters: - sort: - enum: - - created - - updated - default: created - direction: - enum: - - asc - - desc - default: desc - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - /{ownerId}/{repoId}: - type: base - get: - description: Check if you are starring a repository. - responses: - 204: - description: This repository is starred by you. - 404: - description: This repository is not starred by you. - put: - description: Star a repository. - responses: - 204: - description: Repository starred. - delete: - description: Unstar a repository - responses: - 204: - description: Unstarred. - /subscriptions: - type: collection - get: - description: List repositories being watched by the authenticated user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "integer" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": false, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - /{ownerId}/{repoId}: - type: base - uriParameters: - ownerId: - description: Id of the owner. - type: integer - repoId: - description: Id of repository. - type: integer - get: - description: Check if you are watching a repository. - responses: - 204: - description: Repository is watched by you. - 404: - description: Repository is not watched by you. - put: - description: Watch a repository. - responses: - 204: - description: Repository is watched. - delete: - description: Stop watching a repository - responses: - 204: - description: Unwatched. - /issues: - type: collection - get: - is: [ filterable ] - description: | - List issues. - List all issues across owned and member repositories for the authenticated - user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "issues": [ - { - "properties": { - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "labels": [ - { - "properties": { - "url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "type": "object" - } - ], - "type": "array", - "assignee": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "milestone": { - "properties": { - "url": { - "type": "string" - }, - "number": { - "type": "integer" - }, - "state": { - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "creator": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "open_issues": { - "type": "integer" - }, - "closed_issues": { - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "due_on": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "pull_request": { - "properties": { - "html_url": { - "type": "string" - }, - "diff_url": { - "type": "string" - }, - "patch_url": { - "type": "string" - } - }, - "type": "object" - }, - "closed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347", - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "number": 1347, - "state": "open", - "title": "Found a bug", - "body": "I'm having a problem with this.", - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "labels": [ - { - "url": "https://api.github.com/repos/octocat/Hello-World/labels/bug", - "name": "bug", - "color": "f29513" - } - ], - "assignee": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "milestone": { - "url": "https://api.github.com/repos/octocat/Hello-World/milestones/1", - "number": 1, - "state": "open", - "title": "v1.0", - "description": "", - "creator": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "open_issues": 4, - "closed_issues": 8, - "created_at": "2011-04-10T20:09:31Z", - "due_on": null - }, - "comments": 0, - "pull_request": { - "html_url": "https://github.com/octocat/Hello-World/issues/1347", - "diff_url": "https://github.com/octocat/Hello-World/issues/1347.diff", - "patch_url": "https://github.com/octocat/Hello-World/issues/1347.patch" - }, - "closed_at": null, - "created_at": "2011-04-22T13:33:48Z", - "updated_at": "2011-04-22T13:33:48Z" - } - ] - /repos: - type: collection - get: - description: | - List repositories for the authenticated user. Note that this does not include - repositories owned by organizations which the user can access. You can list - user organizations and list organization repositories separately. - queryParameters: - type: - enum: - - all - - public - - private - - forks - - sources - - member - default: all - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] - post: - description: | - Create a new repository for the authenticated user. OAuth users must supply - repo scope. - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "private": { - "description": "True to create a private repository, false to create a public one. Creating private repositories requires a paid GitHub account.", - "type": "boolean" - }, - "has_issues": { - "description": "True to enable issues for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "has_wiki": { - "description": "True to enable the wiki for this repository, false to disable it. Default is true.", - "type": "boolean" - }, - "has_downloads": { - "description": "True to enable downloads for this repository, false to disable them. Default is true.", - "type": "boolean" - }, - "team_id": { - "description": "The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.", - "type": "integer" - }, - "auto_init": { - "description": "True to create an initial commit with empty README. Default is false.", - "type": "boolean" - }, - "gitignore_template": { - "description": "Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, \"Haskell\" Ignored if auto_init parameter is not provided. ", - "type": "string" - } - }, - "required": [ "name" ] - } - responses: - 201: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] -/users: - type: collection - get: - description: | - Get all users. - This provides a dump of every user, in the order that they signed up for GitHub. - Note: Pagination is powered exclusively by the since parameter. Use the Link - header to get the URL for the next page of users. - queryParameters: - since: - description: The integer ID of the last User that you've seen. - type: integer - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - /{userId}: - uriParameters: - userId: - type: integer - type: collection - get: - description: List a user's followers. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "list": [ - { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - } - ] - # Followers - /following/{targetUserId}: - uriParameters: - targetUserId: - type: integer - type: base - get: - description: Check if one user follows another. - responses: - 204: - description: Response if user follows target user. - 404: - description: Response if user does not follow target user. - # Keys - /keys: - type: collection - get: - description: | - List public keys for a user. - Lists the verified public keys for a user. This is accessible by anyone. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "id": { - "type": "integer" - }, - "key": { - "type": "string" - } - } - ] - } - example: | - [ - { - "id": 1, - "key": "ssh-rsa AAA..." - } - ] - # Gists - /gists: - type: collection - get: - securedBy: [ null, oauth_2_0 ] - description: List a user's gists. - queryParameters: - since: - description: | - Timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - Only gists updated at or after this time are returned. - type: string - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "gists": [ - { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "user": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "files": { - "properties": { - "ring.erl": { - "properties": { - "size": { - "type": "integer" - }, - "filename": { - "type": "string" - }, - "raw_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "comments": { - "type": "integer" - }, - "comments_url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "git_pull_url": { - "type": "string" - }, - "git_push_url": { - "type": "string" - }, - "created_at": { - "type": "string" - } - } - } - ] - } - example: | - [ - { - "url": "https://api.github.com/gists/20c98223d9b59e1d48e5", - "id": "1", - "description": "description of gist", - "public": true, - "user": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "files": { - "ring.erl": { - "size": 932, - "filename": "ring.erl", - "raw_url": "https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl" - } - }, - "comments": 0, - "comments_url": "https://api.github.com/gists/19d18b30e8af75090307/comments/", - "html_url": "https://gist.github.com/1", - "git_pull_url": "git://gist.github.com/1.git", - "git_push_url": "git@gist.github.com:1.git", - "created_at": "2010-04-14T02:15:15Z" - } - ] - /orgs: - type: collection - get: - description: List all public organizations for a user. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "avatar_url": { - "type": "string" - } - } - ] - } - example: | - [ - { - "login": "github", - "id": 1, - "url": "https://api.github.com/orgs/github", - "avatar_url": "https://github.com/images/error/octocat_happy.gif" - } - ] - /repos: - type: collection - get: - description: List public repositories for the specified user. - queryParameters: - type: - enum: - - all - - public - - private - - forks - - sources - - member - default: all - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "": [ - { - "properties": { - "id": { - "type": "integer" - }, - "owner": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "html_url": { - "type": "string" - }, - "clone_url": { - "type": "string" - }, - "git_url": { - "type": "string" - }, - "ssh_url": { - "type": "string" - }, - "svn_url": { - "type": "string" - }, - "mirror_url": { - "type": "string" - }, - "homepage": { - "type": "string" - }, - "language": { - "type": "string" - }, - "forks": { - "type": "integer" - }, - "forks_count": { - "type": "integer" - }, - "watchers": { - "type": "integer" - }, - "watchers_count": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "master_branch": { - "type": "string" - }, - "open_issues": { - "type": "integer" - }, - "open_issues_count": { - "type": "integer" - }, - "pushed_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "created_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - }, - "updated_at": { - "description": "ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ", - "type": "string" - } - }, - "type": "object" - } - ] - } - } - example: | - [ - { - "id": 1296269, - "owner": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "name": "Hello-World", - "full_name": "octocat/Hello-World", - "description": "This your first repo!", - "private": false, - "fork": true, - "url": "https://api.github.com/repos/octocat/Hello-World", - "html_url": "https://github.com/octocat/Hello-World", - "clone_url": "https://github.com/octocat/Hello-World.git", - "git_url": "git://github.com/octocat/Hello-World.git", - "ssh_url": "git@github.com:octocat/Hello-World.git", - "svn_url": "https://svn.github.com/octocat/Hello-World", - "mirror_url": "git://git.example.com/octocat/Hello-World", - "homepage": "https://github.com", - "language": null, - "forks": 9, - "forks_count": 9, - "watchers": 80, - "watchers_count": 80, - "size": 108, - "master_branch": "master", - "open_issues": 0, - "open_issues_count": 0, - "pushed_at": "2011-01-26T19:06:43Z", - "created_at": "2011-01-26T19:01:12Z", - "updated_at": "2011-01-26T19:14:43Z" - } - ] -/gitignore/templates: - type: collection - get: - description: | - Listing available templates. - List all templates available to pass as an option when creating a repository. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "": [ - { - "type": "string" - } - ] - } - example: | - [ - "Actionscript", - "Android", - "AppceleratorTitanium", - "Autotools", - "Bancha", - "C", - "C " - ] - /{language}: - type: item - uriParameters: - language: - type: string - get: - description: Get a single template. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "source": { - "type": "string" - } - } - } - example: | - { - "name": "C", - "source": "# Object files\n*.o\n\n# Libraries\n*.lib\n*.a\n\n# Shared objects (inc. Windows DLLs)\n*.dll\n*.so\n*.so.*\n*.dylib\n\n# Executables\n*.exe\n*.out\n*.app\n" - } -/markdown: - type: base - post: - body: - application/json: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "object", - "properties": { - "text": { - "description": "The Markdown text to render", - "type": "string" - }, - "mode": { - "enum": [ - "markdown", - "gfm" - ] - }, - "context": { - "description": "The repository context, only taken into account when rendering as gfm.", - "type": "string" - } - }, - "required": [ - "text" - ] - } - responses: - 200: - body: - text/html: - example: | -

Hello world github/linguist#1 cool, and #1!

- /raw: - type: base - post: - body: - text/plain: - example: | -

Hello world github/linguist#1 cool, and #1!

- responses: - 200: - body: - text/html: - example: | -

Hello world github/linguist#1 cool, and #1!

-/networks/{ownerId}/{repoId}/events: - type: collection - uriParameters: - ownerId: - description: Id of the owner. - type: integer - repoId: - description: Id of repository. - type: integer - get: - description: List public events for a network of repositories. - responses: - 200: - body: - schema: | - { - "$schema": "http://json-schema.org/draft-03/schema", - "type": "array", - "properties": [ - { - "properties": { - "type": { - "type": "string" - }, - "public": { - "type": "boolean" - }, - "payload": { - "properties": {}, - "type": "object" - }, - "repo": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "actor": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "org": { - "properties": { - "login": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "avatar_url": { - "type": "string" - }, - "gravatar_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "created_at": { - "type": "timestamp" - }, - "id": { - "type": "integer" - } - }, - "type": "object" - } - ] - } - example: | - [ - { - "type": "Event", - "public": true, - "payload": { - - }, - "repo": { - "id": 3, - "name": "octocat/Hello-World", - "url": "https://api.github.com/repos/octocat/Hello-World" - }, - "actor": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "org": { - "login": "octocat", - "id": 1, - "avatar_url": "https://github.com/images/error/octocat_happy.gif", - "gravatar_id": "somehexcode", - "url": "https://api.github.com/users/octocat" - }, - "created_at": "2011-09-06T17:26:27Z", - "id": "12345" - } - ] diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/notes/api.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/notes/api.raml deleted file mode 100644 index 05bd548..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/notes/api.raml +++ /dev/null @@ -1,94 +0,0 @@ -#%RAML 0.8 -title: Notes Example API -version: v2 -mediaType: application/json -documentation: - - title: Overview - content: This is an example of a simple API for a "notes" service -/notes: - description: A collection of notes - get: - description: List all notes, optionally filtered by a query string - queryParameters: - q: - description: An optional search query to filter the results - example: shopping - responses: - 200: - body: - text/json: - example: | - [ { "id": 1, "title": "Buy some milk", "status": "done" }, - { "id": 2, "title": "Return sweater", "status": "overdue", "dueInDays": -2 }, - { "id": 3, "title": "Renew license", "status": "not done", "dueInDays": 1 }, - { "id": 4, "title": "Join gym", "status": "not done", "dueInDays": 3 } ] - post: - description: Create a new note in the collection - body: - example: | - { "title": "Return sweater", "dueInDays": -2 } - headers: - X-Tracking-Example: - description: You can specify request headers like this - enum: [ accounting, payroll, finance ] - required: false # require it by changing this to true - example: accounting - responses: - 201: - headers: - X-Powered-By: - description: You can describe response headers like this - example: RAML - body: - text/json: - example: | - { - "id": 2, - "title": "Return sweater", - "status": "overdue", - "dueInDays": -2 - } - /{id}: - description: A specific note, identified by its id - uriParameters: - id: - description: The `id` of the specific note - type: number - example: 2 - get: - description: Retrieve the specified note - responses: - 200: - text/json: - body: - example: | - { - "id": 2, - "title": "Return sweater", - "status": "overdue", - "dueInDays": -2 - } - patch: - description: Update the specified note (allowing partial information) - body: - text/json: - example: | - { - "title": "Exchange sweater", - "dueInDays: 3 - } - responses: - 200: - text/json: - body: - example: | - { - "id": 2, - "title": "Exchange sweater", - "status": "not done", - "dueInDays": 3 - } - delete: - description: Remove the specified note - responses: - 204: diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/other_example.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/other_example.raml deleted file mode 100644 index 25f29c1..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/other_example.raml +++ /dev/null @@ -1,199 +0,0 @@ -#%RAML 0.8 -title: Notes Example API -mediaType: application/json -documentation: - - title: Overview - content: This is an example of a simple API for a "notes" service - - title: Explanation In Depth - content: Enjoy this -baseUri: /lala -protocols: [HTTP, HTTPS] -schemas: - - schema1: "jsonStuff" - schema2: "" - - schema3: "another value" -uriParameters: - communityDomain: - displayName: Community Domain - type: string - communityPath: - displayName: Community Path - type: string - pattern: ^[a-zA-Z0-9][-a-zA-Z0-9]*$ - minLength: 1 -baseUriParameters: - test: - displayName: TEST PARAM - description: a crazy description - type: paramType - pattern: regexpCRAZYNESS - minLength: 10 - maxLength: 20 - minimum: 0.3 - maximum: 0.5 - repeat: true - required: false - default: "default string" - example: 50 - enum: [ example, 4, 0.3 ] - apiDomain: - description: | - The sub-domain at which the API is accessible. Most API calls are sent to https://api.dropbox.com - enum: [ "api" ] -traits: - - anothertrait: - usage: any way you want it - description: why - yetanothertrait: - usage: don't use it - description: honestly, don't - - testtrait: - usage: use this trait so happilly - description: Traits RULE - queryParameters: - test: - displayName: TEST PARAM - description: a crazy description - type: paramType - pattern: regexpCRAZYNESS - minLength: 10 - maxLength: 20 - minimum: 0.3 - maximum: 0.5 - repeat: true - required: false - default: "default string" - example: 50 - enum: [ example, 4, 0.3 ] - apiDomain: - description: | - The sub-domain at which the API is accessible. Most API calls are sent to https://api.dropbox.com - enum: [ "api" ] - body: - application/json: - schema: responseExampleJSON - description: SDFSDF - example: DFGD - headers: - header5: - displayName: HEADER ONE - header9: - displayName: HEADER tWOOOOTWOTW - application/xml: - schema: responseExampleXML - description: SDFSDF - example: DFGD - formParameters: - formParam234: - displayName: SO WORKS - headers: - header10: - displayName: HEADER ONE - header20: - displayName: HEADER tWOOOOTWOTW - headers: - header1: - displayName: HEADER ONE - header2: - displayName: HEADER tWOOOOTWOTW - responses: - 200: - description: response200 - headers: - header1: - displayName: HEADER ONE - header2: - displayName: HEADER tWOOOOTWOTW - body: - application/json: - schema: responseExampleJSON - description: SDFSDF - example: DFGD - headers: - header5: - displayName: HEADER ONE - header9: - displayName: HEADER tWOOOOTWOTW - application/xml: - schema: responseExampleXML - description: SDFSDF - example: DFGD - formParameters: - formParam234: - displayName: SO WORKS - headers: - header10: - displayName: HEADER ONE - header20: - displayName: HEADER tWOOOOTWOTW - 404: - description: response404 - headers: - header1: - displayName: HEADER ONE - header2: - displayName: HEADER tWOOOOTWOTW - body: - application/json: - schema: responseExampleJSON - description: SDFSDF - example: DFGD - headers: - header5: - displayName: HEADER ONE - header9: - displayName: HEADER tWOOOOTWOTW - application/xml: - schema: responseExampleXML - description: SDFSDF - example: DFGD - formParameters: - formParam234: - displayName: SO WORKS - headers: - header10: - displayName: HEADER ONE - header20: - displayName: HEADER tWOOOOTWOTW -resourceTypes: - - rttest: - description: test - - one: - description: hi - two: - description: bye - get: - description: test - - collection: - description: collectme - get: - responses: - 200: - body: - application/json: - schema: - <> # e.g. users - post: - responses: - 200: - body: - schema: - <> # e.g. user - image/jpeg: - example: <> # e.g. user - - member: - description: memme - get: - responses: - 200: - body: - schema: - <> # e.g. user -/jobs: - displayName: Jobs - post: - description: Create a job - body: - text/xml: - schema: - schema1 # using a name from the root schemas diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/README.md b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/README.md deleted file mode 100644 index 62b57e0..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/README.md +++ /dev/null @@ -1,4 +0,0 @@ -raml-tutorial-200 -================= - -Step by step 200 raml tutorial code diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/heybulldog.mp3 b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/heybulldog.mp3 deleted file mode 100644 index 4f03cc8..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/heybulldog.mp3 +++ /dev/null @@ -1 +0,0 @@ -I am not an MP3. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-api.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-api.raml deleted file mode 100644 index 9e29587..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-api.raml +++ /dev/null @@ -1,194 +0,0 @@ -#%RAML 0.8 ---- -title: Jukebox API -baseUri: http://jukebox.api.com -version: v1 - -schemas: - - song: !include jukebox-include-song.schema - - artist: !include jukebox-include-artist.schema - - album: !include jukebox-include-album.schema - - -resourceTypes: - - readOnlyCollection: - description: Collection of available <> in Jukebox. - get: - description: Get a list of <>. - responses: - 200: - body: - application/json: - example: | - <> - - collection: - description: Collection of available <> in Jukebox. - get: - description: Get a list of <>. - responses: - 200: - body: - application/json: - example: | - <> - post: - description: | - Add a new <> to Jukebox. - queryParameters: - access_token: - description: "The access token provided by the authentication application" - example: AABBCCDD - required: true - type: string - body: - application/json: - schema: <> - example: | - <> - responses: - 200: - body: - application/json: - example: | - { "message": "The <> has been properly entered" } - - collection-item: - description: Entity representing a <> - get: - description: | - Get the <> - with <>Id = - {<>Id} - responses: - 200: - body: - application/json: - example: | - <> - 404: - body: - application/json: - example: | - {"message": "<> not found" } -traits: - - searchable: - queryParameters: - query: - description: | - JSON array [{"field1","value1","operator1"},{"field2","value2","operator2"},...,{"fieldN","valueN","operatorN"}] <> - example: | - <> - - orderable: - queryParameters: - orderBy: - description: | - Order by field: <> - type: string - required: false - order: - description: Order - enum: [desc, asc] - default: desc - required: false - - pageable: - queryParameters: - offset: - description: Skip over a number of elements by specifying an offset value for the query - type: integer - required: false - example: 20 - default: 0 - limit: - description: Limit the number of elements on the response - type: integer - required: false - example: 80 - default: 10 - -/songs: - type: - collection: - exampleCollection: !include jukebox-include-songs.sample - exampleItem: !include jukebox-include-song-new.sample - get: - is: [ - searchable: {description: "with valid searchable fields: songTitle", example: "[\"songTitle\", \"Get L\", \"like\"]"}, - orderable: {fieldsList: "songTitle"}, - pageable - ] - /{songId}: - type: - collection-item: - exampleItem: !include jukebox-include-song-retrieve.sample - /file-content: - description: The file to be reproduced by the client - get: - description: Get the file content - responses: - 200: - body: - binary/octet-stream: - example: - !include heybulldog.mp3 - post: - description: | - Enters the file content for an existing song entity. - - The song needs to be created for the `/songs/{songId}/file-content` to exist. - You can use this second resource to get and post the file to reproduce. - - Use the "binary/octet-stream" content type to specify the content from any consumer (excepting web-browsers). - Use the "multipart-form/data" content type to upload a file which content will become the file-content - body: - binary/octet-stream: - multipart/form-data: - formParameters: - file: - description: The file to be uploaded - required: true - type: file -/artists: - type: - collection: - exampleCollection: !include jukebox-include-artists.sample - exampleItem: !include jukebox-include-artist-new.sample - get: - is: [ - searchable: {description: "with valid searchable fields: countryCode", example: "[\"countryCode\", \"FRA\", \"equals\"]"}, - orderable: {fieldsList: "artistName, nationality"}, - pageable - ] - /{artistId}: - type: - collection-item: - exampleItem: !include jukebox-include-artist-retrieve.sample - /albums: - type: - readOnlyCollection: - exampleCollection: !include jukebox-include-artist-albums.sample - description: Collection of albulms belonging to the artist - get: - description: Get a specific artist's albums list - is: [orderable: {fieldsList: "albumName"}, pageable] -/albums: - type: - collection: - exampleCollection: !include jukebox-include-albums.sample - exampleItem: !include jukebox-include-album-new.sample - get: - is: [ - searchable: {description: "with valid searchable fields: genreCode", example: "[\"genreCode\", \"ELE\", \"equals\"]"}, - orderable: {fieldsList: "albumName, genre"}, - pageable - ] - /{albumId}: - type: - collection-item: - exampleItem: !include jukebox-include-album-retrieve.sample - /songs: - type: - readOnlyCollection: - exampleCollection: | - !include jukebox-include-album-songs.sample - get: - is: [orderable: {fieldsList: "songTitle"}] - description: Get the list of songs for the album with `albumId = {albumId}` diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-new.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-new.sample deleted file mode 100644 index 71a6015..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-new.sample +++ /dev/null @@ -1,8 +0,0 @@ -'{ - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "year": "2013", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg", - "genreCode": "ELE", - "artistId": "110e8300-e32b-41d4-a716-664400445500" -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-retrieve.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-retrieve.sample deleted file mode 100644 index 0dfda66..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-retrieve.sample +++ /dev/null @@ -1,30 +0,0 @@ -'{ - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "year": "2013", - "genre": "Electric Funk", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg", - "genre": { - "countryCode": "ELE", - "countryName": "Electronict" - }, - "songs": [ - { - "songId": "550e8400-e29b-41d4-a716-446655440000", - "songTitle": "Get Lucky" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440111", - "songTitle": "Loose yourself to dance" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440222", - "songTitle": "Gio sorgio by Moroder" - } - ], - "artist": { - "artistId": "110e8300-e32b-41d4-a716-664400445500", - "artistName": "Daft Punk", - "imageURL": "http://travelhymns.com/wp-content/uploads/2013/06/random-access-memories1.jpg" - } -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-songs.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-songs.sample deleted file mode 100644 index 044e9c8..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album-songs.sample +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "songId": "550e8400-e29b-41d4-a716-446655440000", - "songTitle": "Get Lucky" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440111", - "songTitle": "Loose yourself to dance" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440222", - "songTitle": "Gio sorgio by Moroder" - } -] diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album.schema b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album.schema deleted file mode 100644 index 4f8295e..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-album.schema +++ /dev/null @@ -1,36 +0,0 @@ -'{ - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required":false, - "properties": { - "albumId": { - "type": "string", - "required":true, - "minLength": 36, - "maxLength": 36 - }, - "albumName": { - "type": "string", - "required": true - }, - "year": { - "type": "string", - "required": false - }, - "iamgeURL": { - "type": "string", - "required": false - }, - "genreCode": { - "type": "string", - "required": true - }, - "artistId": { - "type": "string", - "required":true, - "minLength": 36, - "maxLength": 36 - } - } -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-albums.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-albums.sample deleted file mode 100644 index 8566ac2..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-albums.sample +++ /dev/null @@ -1,32 +0,0 @@ -'[ - { - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg", - "artistId": "110e8300-e32b-41d4-a716-664400445500", - "genre": { - "countryCode": "ELE", - "countryName": "Electronict" - } - }, - { - "albumId": "183100e3-0e2b-4404-3123-66111d4de520", - "albumName": "OK Computer", - "imageURL": "http://www.greenplastic.com/dev/wp-content/uploads/2010/12/ok-computer.jpg", - "artistId": "11032be3-41d4-4455-a716-664400a71600", - "genre": { - "countryCode": "ALT", - "countryName": "Alternative Rock" - } - }, - { - "albumId": "183100e3-cccc-4404-1111-63204d64coda", - "albumName": "The Dark Side of the Moon", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/3/3b/Dark_Side_of_the_Moon.png", - "artistId": "110e8300-e32b-41d4-a716-229932554400", - "genre": { - "countryCode": "PRO", - "countryName": "Progressive Rock" - } - } -]' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-albums.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-albums.sample deleted file mode 100644 index 7c790c8..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-albums.sample +++ /dev/null @@ -1,42 +0,0 @@ -'[ - { - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440551", - "albumName": "TRON: Legacy R3CONF1GUR3D", - "imageURL": "http://ecx.images-amazon.com/images/I/51Tvo-iArBL.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440552", - "albumName": "TRON: Legacy", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/3/39/Tron_Legacy_Soundtrack.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440553", - "albumName": "Alive", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/4/49/Daft_Punk_Alive_2007.JPG" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440554", - "albumName": "Musique Vol. 1", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/ab/Musique_Vol._1_1993%E2%80%932005.png" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440555", - "albumName": "Human After All", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/0/0d/Humanafterall.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440556", - "albumName": "Daft Club", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/f/fc/Daftclub.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440557", - "albumName": "Discovery", - "imageURL": "http://ecx.images-amazon.com/images/I/71bsHTr6idL._SL1500_.jpg" - } -]' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-new.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-new.sample deleted file mode 100644 index 61e902c..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-new.sample +++ /dev/null @@ -1,5 +0,0 @@ -'{ - "artistName": "Daft Punk", - "description": "French electronic music duo consisting of musicians Guy-Manuel de Homem-Christo and Thomas Bangalter", - "imageURL": "http://travelhymns.com/wp-content/uploads/2013/06/random-access-memories1.jpg" -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-retrieve.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-retrieve.sample deleted file mode 100644 index c3f6b56..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist-retrieve.sample +++ /dev/null @@ -1,51 +0,0 @@ -'{ - "artistId": "110e8300-e32b-41d4-a716-664400445500", - "artistName": "Daft Punk", - "description": "French electronic music duo consisting of musicians Guy-Manuel de Homem-Christo and Thomas Bangalter", - "imageURL": "http://travelhymns.com/wp-content/uploads/2013/06/random-access-memories1.jpg", - "nationality": { - "countryCode": "FRA", - "countryName": "France" - }, - "albums": [ - { - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440551", - "albumName": "TRON: Legacy R3CONF1GUR3D", - "imageURL": "http://ecx.images-amazon.com/images/I/51Tvo-iArBL.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440552", - "albumName": "TRON: Legacy", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/3/39/Tron_Legacy_Soundtrack.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440553", - "albumName": "Alive", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/4/49/Daft_Punk_Alive_2007.JPG" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440554", - "albumName": "Musique Vol. 1", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/ab/Musique_Vol._1_1993%E2%80%932005.png" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440555", - "albumName": "Human After All", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/0/0d/Humanafterall.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440556", - "albumName": "Daft Club", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/f/fc/Daftclub.jpg" - }, - { - "albumId": "183100e3-0e2b-4404-a716-66104d440557", - "albumName": "Discovery", - "imageURL": "http://ecx.images-amazon.com/images/I/71bsHTr6idL._SL1500_.jpg" - }] -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist.schema b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist.schema deleted file mode 100644 index 8875b5d..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artist.schema +++ /dev/null @@ -1,20 +0,0 @@ -'{ - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required":false, - "properties": { - "artistName": { - "type": "string", - "required":true - }, - "description": { - "type": "string", - "required": false - }, - "imageURL": { - "type": "string", - "required": false - } - } -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artists.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artists.sample deleted file mode 100644 index b1865de..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-artists.sample +++ /dev/null @@ -1,31 +0,0 @@ -'[{ - "artistId": "110e8300-e32b-41d4-a716-664400445500", - "artistName": "Daft Punk", - "description": "French electronic music duo consisting of musicians Guy-Manuel de Homem-Christo and Thomas Bangalter", - "imageURL": "http://travelhymns.com/wp-content/uploads/2013/06/random-access-memories1.jpg", - "nationality": { - "countryCode": "FRA", - "countryName": "France" - } -}, -{ - "artistId": "110e8300-e32b-41d4-a716-229932554400", - "artistName": "Pink Floyd", - "description": "English rock band that achieved international acclaim with their progressive and psychedelic music.", - "imageURL": "http://www.billboard.com/files/styles/promo_650/public/stylus/1251869-pink-floyd-reunions-617-409.jpg", - "nationality": { - "countryCode": "ENG", - "countryName": "England" - } -}, -{ - "artistId": "11032be3-41d4-4455-a716-664400a71600", - "artistName": "Radiohead", - "description": " English rock band from Abingdon, Oxfordshire, formed in 1985", - "imageURL": "http://www.wired.com/images_blogs/photos/uncategorized/2007/10/01/radiohead.jpg", - "nationality": { - "countryCode": "ENG", - "countryName": "England" - } -}, -]' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-new.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-new.sample deleted file mode 100644 index 7ca1591..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-new.sample +++ /dev/null @@ -1,5 +0,0 @@ -'{ - "songId": "550e8400-e29b-41d4-a716-446655440000", - "songTitle": "Get Lucky", - "albumId": "183100e3-0e2b-4404-a716-66104d440550" -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-retrieve.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-retrieve.sample deleted file mode 100644 index a6d617f..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song-retrieve.sample +++ /dev/null @@ -1,15 +0,0 @@ -'{ - "songId": "550e8400-e29b-41d4-a716-446655440000", - "songTitle": "Get Lucky", - "duration": "6:07", - "artist": { - "artistId": "110e8300-e32b-41d4-a716-664400445500", - "artistName": "Daft Punk", - "imageURL": "http://travelhymns.com/wp-content/uploads/2013/06/random-access-memories1.jpg" - }, - "album": { - "albumId": "183100e3-0e2b-4404-a716-66104d440550", - "albumName": "Random Access Memories", - "imageURL": "http://upload.wikimedia.org/wikipedia/en/a/a7/Random_Access_Memories.jpg" - } -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song.schema b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song.schema deleted file mode 100644 index 91bf2fc..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-song.schema +++ /dev/null @@ -1,24 +0,0 @@ -'{ - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required": true, - "properties": { - "songId": { - "type": "string", - "required": true, - "minLength": 36, - "maxLength": 36 - }, - "songTitle": { - "type": "string", - "required": true - }, - "albumId": { - "type": "string", - "required": true, - "minLength": 36, - "maxLength": 36 - } - } -}' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-songs.sample b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-songs.sample deleted file mode 100644 index 0151f31..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/raml-tutorial-200/jukebox-include-songs.sample +++ /dev/null @@ -1,14 +0,0 @@ -'[ - { - "songId": "550e8400-e29b-41d4-a716-446655440000", - "songTitle": "Get Lucky" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440111", - "songTitle": "Loose yourself to dance" - }, - { - "songId": "550e8400-e29b-41d4-a716-446655440222", - "songTitle": "Gio sorgio by Morodera" - } -]' diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/sample_documentation.yaml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/sample_documentation.yaml deleted file mode 100644 index dd170ff..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/sample_documentation.yaml +++ /dev/null @@ -1,2 +0,0 @@ -- title: Overview - content: This is an example of a simple API for a "notes" service diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/simple_example.raml b/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/simple_example.raml deleted file mode 100644 index b669a70..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/samples/simple_example.raml +++ /dev/null @@ -1,127 +0,0 @@ -#%RAML 0.8 -title: Notes Example API -/jobs: - displayName: Jobs - post: - description: Create a job -/projects: - displayName: Projects - post: - description: Create a project -/resources: - displayName: Resources - type: - searchableCollection: - queryParamName: title - fallbackParamName: digest_all_fields - get: - description: Get a resource - is: - - secured: - tokenName: access_token - paged: - maxPages: 10 - post: - description: Post a resource - /{resourceId}: - get: - description: Get a resource ID - put: - description: Put resource ID - delete: - description: Delete a resource ID - /yet_another: - get: - description: Yet another -uriParameters: - communityDomain: - displayName: Community Domain - type: string - communityPath: - displayName: Community Path - type: string - pattern: ^[a-zA-Z0-9][-a-zA-Z0-9]*$ - minLength: 1 -baseUri: /lala -protocols: [HTTP, HTTPS] -traits: - - secured: - queryParameters: - <>: - description: A valid <> is required - paged: - queryParameters: - numPages: - description: The number of pages to return, not to exceed <> -resourceTypes: - - rttest: - description: test - - one: - description: hi - - auditableResource: - post?: - body: - application/x-www-form-urlencoded: - formParameters: - createAuthority: - description: | - If the resource has a post method defined, expect a createAuthority - property in its body - delete?: - body: - multipart/form-data: - formParameters: - deleteAuthority: - description: | - If the resource has a delete method defined, expect a deleteAuthority - property in its body - - searchableCollection: - get: - queryParameters: - <>: - description: Return <> that have their <> matching the given value - <>: - description: If no values match the value given for <>, use <> instead -securitySchemes: - - oauth_2_0: - description: | - Dropbox supports OAuth 2.0 for authenticating all API requests. - type: OAuth 2.0 - describedBy: - headers: - Authorization: - description: | - Used to send a valid OAuth 2 access token. Do not use - with the "access_token" query string parameter. - type: string - queryParameters: - access_token: - description: | - Used to send a valid OAuth 2 access token. Do not use together with - the "Authorization" header - type: string - responses: - 401: - description: | - Bad or expired token. This can happen if the user or Dropbox - revoked or expired an access token. To fix, you should re- - authenticate the user. - 403: - description: | - Bad OAuth request (wrong consumer key, bad nonce, expired - timestamp...). Unfortunately, re-authenticating the user won't help here. - settings: - authorizationUri: https://www.dropbox.com/1/oauth2/authorize - accessTokenUri: https://api.dropbox.com/1/oauth2/token - authorizationGrants: [ code, token ] - - oauth_1_0: - description: | - OAuth 1.0 continues to be supported for all API requests, but OAuth 2.0 is now preferred. - type: OAuth 1.0 - settings: - requestTokenUri: https://api.dropbox.com/1/oauth/request_token - authorizationUri: https://www.dropbox.com/1/oauth/authorize - tokenCredentialsUri: https://api.dropbox.com/1/oauth/access_token - - customHeader: - description: | - A custom diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/types.go b/Godeps/_workspace/src/github.com/buddhamagnet/raml/types.go deleted file mode 100644 index cc1176a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/types.go +++ /dev/null @@ -1,836 +0,0 @@ -// Copyright 2014 DoAT. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER. -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// The views and conclusions contained in the software and documentation are those of -// the authors and should not be interpreted as representing official policies, -// either expressed or implied, of DoAT. - -// This package contains the parser, validator and types that implement the -// RAML specification, as documented here: -// http://raml.org/spec.html -package raml - -// This file contains all of the RAML types. - -// TODO: We don't support !include of non-text files. RAML supports including -// of many file types. - -// "Any" type, for our convenience -type Any interface{} - -// For extra clarity -type HTTPCode int // e.g. 200 -type HTTPHeader string // e.g. Content-Length - -// The RAML Specification uses collections of named parameters for the -// following properties: URI parameters, query string parameters, form -// parameters, request bodies (depending on the media type), and request -// and response headers. -// -// Some fields are pointers to distinguish Zero values and no values -type NamedParameter struct { - - // NOTE: We currently do not support Named Parameters With Multiple Types. - // TODO: Add support for Named Parameters With Multiple Types. Should be - // done sort of like the DefinitionChoice type. - - // The name of the Parameter, as defined by the type containing it. - Name string - // TODO: Fill this during the post-processing phase - - // A friendly name used only for display or documentation purposes. - // If displayName is not specified, it defaults to the property's key - DisplayName string `yaml:"displayName"` // TODO: Auto-fill this - - // The intended use or meaning of the parameter - Description string - - // The primitive type of the parameter's resolved value. Can be: - // - // Type Description - // string - Value MUST be a string. - // number - Value MUST be a number. Indicate floating point numbers as defined by YAML. - // integer - Value MUST be an integer. Floating point numbers are not allowed. The integer type is a subset of the number type. - // date - Value MUST be a string representation of a date as defined in RFC2616 Section 3.3 [RFC2616]. See Date Representations. - // boolean - Value MUST be either the string "true" or "false" (without the quotes). - // file - (Applicable only to Form properties) Value is a file. Client generators SHOULD use this type to handle file uploads correctly. - Type string - // TODO: Verify the enum options - - // If the enum attribute is defined, API clients and servers MUST verify - // that a parameter's value matches a value in the enum array - Enum []Any `yaml:",flow"` - - // The pattern attribute is a regular expression that a parameter of type - // string MUST match. Regular expressions MUST follow the regular - // expression specification from ECMA 262/Perl 5. (string only) - Pattern *string - - // The minLength attribute specifies the parameter value's minimum number - // of characters (string only) - MinLength *int `yaml:"minLength"` - // TODO: go-yaml doesn't raise an error when the minLength isn't an integer! - // find out why and fix it. - - // The maxLength attribute specifies the parameter value's maximum number - // of characters (string only) - MaxLength *int `yaml:"maxLength"` - - // The minimum attribute specifies the parameter's minimum value. (numbers - // only) - Minimum *float64 - - // The maximum attribute specifies the parameter's maximum value. (numbers - // only) - Maximum *float64 - - // An example value for the property. This can be used, e.g., by - // documentation generators to generate sample values for the property. - Example string - - // The repeat attribute specifies that the parameter can be repeated, - // i.e. the parameter can be used multiple times - Repeat *bool // TODO: What does this mean? - - // Whether the parameter and its value MUST be present when a call is made. - // In general, parameters are optional unless the required attribute is - // included and its value set to 'true'. - // For a URI parameter, its default value is 'true'. - Required bool - - // The default value to use for the property if the property is omitted or - // its value is not specified - Default Any - - format Any `ramlFormat:"Named parameters must be mappings. Example: userId: {displayName: 'User ID', description: 'Used to identify the user.', type: 'integer', minimum: 1, example: 5}"` -} - -// Headers used in Methods and other types -type Header NamedParameter - -// All documentation of the API is of this format. -type Documentation struct { - Title string `yaml:"title"` - Content string `yaml:"content"` -} - -// Some method verbs expect the resource to be sent as a request body. -// For example, to create a resource, the request must include the details of -// the resource to create. -// Resources CAN have alternate representations. For example, an API might -// support both JSON and XML representations. -type Body struct { - mediaType string `yaml:"mediaType"` - // TODO: Fill this during the post-processing phase - - // The structure of a request or response body MAY be further specified - // by the schema property under the appropriate media type. - // The schema key CANNOT be specified if a body's media type is - // application/x-www-form-urlencoded or multipart/form-data. - // All parsers of RAML MUST be able to interpret JSON Schema [JSON_SCHEMA] - // and XML Schema [XML_SCHEMA]. - // Alternatively, the value of the schema field MAY be the name of a schema - // specified in the root-level schemas property - Schema string `yaml:"schema"` - - // Brief description - Description string `yaml:"description"` - - // Example attribute to generate example invocations - Example string `yaml:"example"` - - // Web forms REQUIRE special encoding and custom declaration. - // If the API's media type is either application/x-www-form-urlencoded or - // multipart/form-data, the formParameters property MUST specify the - // name-value pairs that the API is expecting. - // The formParameters property is a map in which the key is the name of - // the web form parameter, and the value is itself a map the specifies - // the web form parameter's attributes - FormParameters map[string]NamedParameter `yaml:"formParameters"` - // TODO: This doesn't make sense in response bodies.. separate types for - // request and response body? - - Headers map[HTTPHeader]Header `yaml:"headers"` -} - -// Container of Body types, necessary because of technical reasons. -type Bodies struct { - - // Instead of using a simple map[HTTPHeader]Body for the body - // property of the Response and Method, we use the Bodies struct. Why? - // Because some RAML APIs don't use the MIMEType part, instead relying - // on the mediaType property in the APIDefinition. - // So, you might see: - // - // responses: - // 200: - // body: - // example: "some_example" : "123" - // - // and also: - // - // responses: - // 200: - // body: - // application/json: - // example: | - // { - // "some_example" : "123" - // } - - // As in the Body type. - DefaultSchema string `yaml:"schema"` - - // As in the Body type. - DefaultDescription string `yaml:"description"` - - // As in the Body type. - DefaultExample string `yaml:"example"` - - // As in the Body type. - DefaultFormParameters map[string]NamedParameter `yaml:"formParameters"` - - // TODO: Is this ever used? I think I put it here by mistake. - //Headers map[HTTPHeader]Header `yaml:"headers"` - - // Resources CAN have alternate representations. For example, an API - // might support both JSON and XML representations. This is the map - // between MIME-type and the body definition related to it. - ForMIMEType map[string]Body `yaml:",regexp:.*"` - - // TODO: For APIs without a priori knowledge of the response types for - // their responses, "*/*" MAY be used to indicate that responses that do - // not matching other defined data types MUST be accepted. Processing - // applications MUST match the most descriptive media type first if - // "*/*" is used. -} - -// Resource methods MAY have one or more responses. -type Response struct { - - // HTTP status code of the response - HTTPCode HTTPCode - // TODO: Fill this during the post-processing phase - - // Clarifies why the response was emitted. Response descriptions are - // particularly useful for describing error conditions. - Description string - - // An API's methods may support custom header values in responses - Headers map[HTTPHeader]Header `yaml:"headers"` - - // TODO: API's may include the the placeholder token {?} in a header name - // to indicate that any number of headers that conform to the specified - // format can be sent in responses. This is particularly useful for - // APIs that allow HTTP headers that conform to some naming convention - // to send arbitrary, custom data. - - // Each response MAY contain a body property. Responses that can return - // more than one response code MAY therefore have multiple bodies defined. - Bodies Bodies `yaml:"body"` -} - -// A ResourceType/Trait/SecurityScheme choice contains the name of a -// ResourceType/Trait/SecurityScheme as well as the parameters used to create -// an instance of it. -// Parameters MUST be of type string. -type DefinitionParameters map[string]string -type DefinitionChoice struct { - Name string - - // The definitions of resource types and traits MAY contain parameters, - // whose values MUST be specified when applying the resource type or trait, - // UNLESS the parameter corresponds to a reserved parameter name, in which - // case its value is provided by the processing application. - // Same goes for security schemes. - Parameters DefinitionParameters -} - -// Unmarshal a node which MIGHT be a simple string or a -// map[string]DefinitionParameters -func (dc *DefinitionChoice) UnmarshalYAML(unmarshaler func(interface{}) error) error { - - simpleDefinition := new(string) - parameterizedDefinition := make(map[string]DefinitionParameters) - - var err error - - // Unmarshal into a string - if err = unmarshaler(simpleDefinition); err == nil { - dc.Name = *simpleDefinition - dc.Parameters = nil - } else if err = unmarshaler(parameterizedDefinition); err == nil { - // Didn't work? Now unmarshal into a map - for choice, params := range parameterizedDefinition { - dc.Name = choice - dc.Parameters = params - } - } - - // Still didn't work? Panic - - return err -} - -// A trait is a partial method definition that, like a method, can provide -// method-level properties such as description, headers, query string -// parameters, and responses. Methods that use one or more traits inherit -// those traits' properties. -type Trait struct { - - // TODO: Parameters MUST be indicated in resource type and trait definitions - // by double angle brackets (double chevrons) enclosing the parameter name; - // for example, "<>". - - // TODO: Auto-fill the methodName parameter - - // TODO: In trait definitions, there is one reserved parameter name, - // methodName, in addition to the resourcePath and resourcePathName. The - // processing application MUST set the value of the methodName parameter - // to the inheriting method's name. The processing application MUST set - // the values of the resourcePath and resourcePathName parameters the same - // as in resource type definitions. - - // TODO: Parameter values MAY further be transformed by applying one of - // the following functions: - // * The !singularize function MUST act on the value of the parameter - // by a locale-specific singularization of its original value. The only - // locale supported by this version of RAML is United States English. - // * The !pluralize function MUST act on the value of the parameter by a - // locale-specific pluralization of its original value. The only locale - // supported by this version of RAML is United States English. - - Name string - // TODO: Fill this during the post-processing phase - - // The usage property of a resource type or trait is used to describe how - // the resource type or trait should be used - Usage string - - // Briefly describes what the method does to the resource - Description string - - // As in Method. - Bodies Bodies `yaml:"body"` - - // As in Method. - Headers map[HTTPHeader]Header `yaml:"headers"` - - // As in Method. - Responses map[HTTPCode]Response `yaml:"responses"` - - // As in Method. - QueryParameters map[string]NamedParameter `yaml:"queryParameters"` - - // As in Method. - Protocols []string `yaml:"protocols"` - - // When defining resource types and traits, it can be useful to capture - // patterns that manifest several levels below the inheriting resource or - // method, without requiring the creation of the intermediate levels. - // For example, a resource type definition may describe a body parameter - // that will be used if the API defines a post method for that resource, - // but the processing application should not create the post method itself. - // - // This optional structure key indicates that the value of the property - // should be applied if the property name itself (without the question - // mark) is already defined (whether explicitly or implicitly) at the - // corresponding level in that resource or method. - OptionalBodies Bodies `yaml:"body?"` - OptionalHeaders map[HTTPHeader]Header `yaml:"headers?"` - OptionalResponses map[HTTPCode]Response `yaml:"responses?"` - OptionalQueryParameters map[string]NamedParameter `yaml:"queryParameters?"` -} - -// Method that is part of a ResourceType. DIfferentiated from Traits since it -// doesn't contain Usage, optional fields etc. -type ResourceTypeMethod struct { - Name string - - // Briefly describes what the method does to the resource - Description string - - // As in Method. - Bodies Bodies `yaml:"body"` - // TODO: Check - how does the mediaType play play here? What it do? - - // As in Method. - Headers map[HTTPHeader]Header `yaml:"headers"` - - // As in Method. - Responses map[HTTPCode]Response `yaml:"responses"` - - // As in Method. - QueryParameters map[string]NamedParameter `yaml:"queryParameters"` - - // As in Method. - Protocols []string `yaml:"protocols"` -} - -// Resource and method declarations are frequently repetitive. For example, if -// an API requires OAuth authentication, the API definition must include the -// access_token query string parameter (which is defined by the queryParameters -// property) in all the API's resource method declarations. -// -// Moreover, there are many advantages to reusing patterns across multiple -// resources and methods. For example, after defining a collection-type -// resource's characteristics, that definition can be applied to multiple -// resources. This use of patterns encouraging consistency and reduces -// complexity for both servers and clients. -// -// A resource type is a partial resource definition that, like a resource, can -// specify a description and methods and their properties. Resources that use -// a resource type inherit its properties, such as its methods. -type ResourceType struct { - - // TODO: Auto-fill the resourcePath and resourcePathName parameters - // Remove mediaTypeExtension. - - // TODO: Parameters MUST be indicated in resource type and trait definitions - // by double angle brackets (double chevrons) enclosing the parameter name; - // for example, "<>". - - // TODO: In resource type definitions, there are two reserved parameter - // names: resourcePath and resourcePathName. The processing application - // MUST set the values of these reserved parameters to the inheriting - // resource's path (for example, "/users") and the part of the path - // following the rightmost "/" (for example, "users"), respectively. - // Processing applications MUST also omit the value of any - // mediaTypeExtension found in the resource's URI when setting - // resourcePath and resourcePathName. - - // TODO: Parameter values MAY further be transformed by applying one of - // the following functions: - // * The !singularize function MUST act on the value of the parameter - // by a locale-specific singularization of its original value. The only - // locale supported by this version of RAML is United States English. - // * The !pluralize function MUST act on the value of the parameter by a - // locale-specific pluralization of its original value. The only locale - // supported by this version of RAML is United States English. - - // Name of the resource type - Name string - // TODO: Fill this during the post-processing phase - - // The usage property of a resource type or trait is used to describe how - // the resource type or trait should be used - Usage string - - // Briefly describes what the resource type - Description string - - // As in Resource. - UriParameters map[string]NamedParameter `yaml:"uriParameters"` - - // As in Resource. - BaseUriParameters map[string]NamedParameter `yaml:"baseUriParameters"` - - // In a RESTful API, methods are operations that are performed on a - // resource. A method MUST be one of the HTTP methods defined in the - // HTTP version 1.1 specification [RFC2616] and its extension, - // RFC5789 [RFC5789]. - Get *ResourceTypeMethod `yaml:"get"` - Head *ResourceTypeMethod `yaml:"head"` - Post *ResourceTypeMethod `yaml:"post"` - Put *ResourceTypeMethod `yaml:"put"` - Delete *ResourceTypeMethod `yaml:"delete"` - Patch *ResourceTypeMethod `yaml:"patch"` - - // When defining resource types and traits, it can be useful to capture - // patterns that manifest several levels below the inheriting resource or - // method, without requiring the creation of the intermediate levels. - // For example, a resource type definition may describe a body parameter - // that will be used if the API defines a post method for that resource, - // but the processing application should not create the post method itself. - // - // This optional structure key indicates that the value of the property - // should be applied if the property name itself (without the question - // mark) is already defined (whether explicitly or implicitly) at the - // corresponding level in that resource or method. - OptionalUriParameters map[string]NamedParameter `yaml:"uriParameters?"` - OptionalBaseUriParameters map[string]NamedParameter `yaml:"baseUriParameters?"` - OptionalGet *ResourceTypeMethod `yaml:"get?"` - OptionalHead *ResourceTypeMethod `yaml:"head?"` - OptionalPost *ResourceTypeMethod `yaml:"post?"` - OptionalPut *ResourceTypeMethod `yaml:"put?"` - OptionalDelete *ResourceTypeMethod `yaml:"delete?"` - OptionalPatch *ResourceTypeMethod `yaml:"patch?"` -} - -// A trait-like structure to a security scheme mechanism so as to extend -// the mechanism, such as specifying response codes, HTTP headers or custom -// documentation. -type SecuritySchemeMethod struct { - Bodies Bodies `yaml:"body"` - Headers map[HTTPHeader]Header `yaml:"headers"` - Responses map[HTTPCode]Response `yaml:"responses"` - QueryParameters map[string]NamedParameter `yaml:"queryParameters"` -} - -// Most REST APIs have one or more mechanisms to secure data access, identify -// requests, and determine access level and data visibility. -type SecurityScheme struct { - Name string - // TODO: Fill this during the post-processing phase - - // Briefly describes the security scheme - Description string - - // The type attribute MAY be used to convey information about - // authentication flows and mechanisms to processing applications - // such as Documentation Generators and Client generators. - Type string - // TODO: Verify that it is of the values accepted: "OAuth 1.0", - // "OAuth 2.0", "Basic Authentication", "Digest Authentication", - // "x-{other}" - - // The describedBy attribute MAY be used to apply a trait-like structure - // to a security scheme mechanism so as to extend the mechanism, such as - // specifying response codes, HTTP headers or custom documentation. - // This extension allows API designers to describe security schemes. - // As a best practice, even for standard security schemes, API designers - // SHOULD describe the security schemes' required artifacts, such as - // headers, URI parameters, and so on. - // Including the security schemes' description completes an API's documentation. - DescribedBy SecuritySchemeMethod - - // The settings attribute MAY be used to provide security schema-specific - // information. Depending on the value of the type parameter, its attributes - // can vary. - Settings map[string]Any - // TODO: Verify OAuth 1.0, 2.0 settings - // TODO: Add to documentaiotn - - // If the scheme's type is x-other, API designers can use the properties - // in this mapping to provide extra information to clients that understand - // the x-other type. - Other map[string]string -} - -// Methods are operations that are performed on a resource -type Method struct { - Name string - - // Briefly describes what the method does to the resource - Description string - - DisplayName string `yaml:"displayName"` - - // Applying a securityScheme definition to a method overrides whichever - // securityScheme has been defined at the root level. To indicate that - // the method is protected using a specific security scheme, the method - // MUST be defined by using the securedBy attribute - // Custom parameters can be provided to the security scheme. - SecuredBy []DefinitionChoice `yaml:"securedBy"` - // TODO: To indicate that the method may be called without applying any - // securityScheme, the method may be annotated with the null securityScheme. - - // The method's non-standard HTTP headers. The headers property is a map - // in which the key is the name of the header, and the value is itself a - // map specifying the header attributes. - Headers map[HTTPHeader]Header `yaml:"headers"` - // TODO: Examples for headers are REQUIRED. - // TODO: If the header name contains the placeholder token {*}, processing - // applications MUST allow requests to send any number of headers that - // conform to the format specified, with {*} replaced by 0 or more valid - // header characters, and offer a way for implementations to add an - // arbitrary number of such headers. This is particularly useful for APIs - // that allow HTTP headers that conform to custom naming conventions to - // send arbitrary, custom data. - - // A RESTful API method can be reached HTTP, HTTPS, or both. - // A method can override an API's protocols value for that single method - // by setting a different value for the fields. - Protocols []string `yaml:"protocols"` - - // The queryParameters property is a map in which the key is the query - // parameter's name, and the value is itself a map specifying the query - // parameter's attributes - QueryParameters map[string]NamedParameter `yaml:"queryParameters"` - - // Some method verbs expect the resource to be sent as a request body. - // A method's body is defined in the body property as a hashmap, in which - // the key MUST be a valid media type. - Bodies Bodies `yaml:"body"` - // TODO: Check - how does the mediaType play play here? What it do? - - // Resource methods MAY have one or more responses. Responses MAY be - // described using the description property, and MAY include example - // attributes or schema properties. - // Responses MUST be a map of one or more HTTP status codes, where each - // status code itself is a map that describes that status code. - Responses map[HTTPCode]Response `yaml:"responses"` - - // Methods may specify one or more traits from which they inherit using the - // is property - Is []DefinitionChoice `yaml:"is"` - // TODO: Add support for inline traits? -} - -// A resource is the conceptual mapping to an entity or set of entities. -type Resource struct { - - // Resources are identified by their relative URI, which MUST begin with - // a slash (/). - URI string - // TODO: Fill this during the post-processing phase - - // A resource defined as a child property of another resource is called a - // nested resource, and its property's key is its URI relative to its - // parent resource's URI. If this is not nil, then this resource is a - // child resource. - Parent *Resource - // TODO: Fill this during the post-processing phase - - // A friendly name to the resource - DisplayName string - - // Briefly describes the resource - Description string - - // A securityScheme may also be applied to a resource by using the - // securedBy key, which is equivalent to applying the securityScheme to - // all methods of this Resource. - // Custom parameters can be provided to the security scheme. - SecuredBy []DefinitionChoice `yaml:"securedBy"` - // TODO: To indicate that the method may be called without applying any - // securityScheme, the method may be annotated with the null securityScheme. - - // A resource or a method can override a base URI template's values. - // This is useful to restrict or change the default or parameter selection - // in the base URI. The baseUriParameters property MAY be used to override - // any or all parameters defined at the root level baseUriParameters - // property, as well as base URI parameters not specified at the root level. - // In a resource structure of resources and nested resources with their - // methods, the most specific baseUriParameter fully overrides any - // baseUriParameter definition made before - BaseUriParameters map[string]NamedParameter `yaml:"baseUriParameters"` - - // Template URIs containing URI parameters can be used to define a - // resource's relative URI when it contains variable elements. - // The values matched by URI parameters cannot contain slash (/) characters - UriParameters map[string]NamedParameter `yaml:"uriParameters"` - - // TODO: If a URI parameter in a resource's relative URI is not explicitly - // described in a uriParameters property for that resource, it MUST still - // be treated as a URI parameter with defaults as specified in the Named - // Parameters section of this specification. Its type is "string", it is - // required, and its displayName is its name (i.e. without the surrounding - // curly brackets [{] and [}]). In the example below, the top-level - // resource has two URI parameters, "folderId" and "fileId - - // TOOD: A special uriParameter, mediaTypeExtension, is a reserved - // parameter. It may be specified explicitly in a uriParameters property - // or not specified explicitly, but its meaning is reserved: it is used - // by a client to specify that the body of the request or response be of - // the associated media type. By convention, a value of .json is - // equivalent to an Accept header of application/json and .xml is - // equivalent to an Accept header of text/xml. - - // Resources may specify the resource type from which they inherit using - // the type property. The resource type may be defined inline as the value - // of the type property (directly or via an !include), or the value of - // the type property may be the name of a resource type defined within - // the root-level resourceTypes property. - // NOTE: inline not currently supported. - Type *DefinitionChoice `yaml:"type"` - // TODO: Add support for inline ResourceTypes - - // A resource may use the is property to apply the list of traits to all - // its methods. - Is []DefinitionChoice `yaml:"is"` - // TODO: Add support for inline traits? - - // In a RESTful API, methods are operations that are performed on a - // resource. A method MUST be one of the HTTP methods defined in the - // HTTP version 1.1 specification [RFC2616] and its extension, - // RFC5789 [RFC5789]. - Get *Method `yaml:"get"` - Head *Method `yaml:"head"` - Post *Method `yaml:"post"` - Put *Method `yaml:"put"` - Delete *Method `yaml:"delete"` - Patch *Method `yaml:"patch"` - - // A resource defined as a child property of another resource is called a - // nested resource, and its property's key is its URI relative to its - // parent resource's URI. - Nested map[string]*Resource `yaml:",regexp:/.*"` -} - -func (r *Resource) Methods() []*Method { - methods := make([]*Method, 0, 6) - if r.Get != nil { - methods = append(methods, r.Get) - } - if r.Post != nil { - methods = append(methods, r.Post) - } - if r.Put != nil { - methods = append(methods, r.Put) - } - if r.Patch != nil { - methods = append(methods, r.Patch) - } - if r.Head != nil { - methods = append(methods, r.Head) - } - if r.Delete != nil { - methods = append(methods, r.Delete) - } - - return methods -} - -// TODO: Resource.GetBaseURIParameter --> includeds APIDefinition BURIParams.. -// TODO: Resource.GetAbsoluteURI - -// The API Definition describes the basic information of an API, such as its -// title and base URI, and describes how to define common schema references. -type APIDefinition struct { - - // RAML 0.8 - RAMLVersion string `yaml:"raml_version"` - - // The title property is a short plain text description of the RESTful API. - // The title property's value SHOULD be suitable for use as a title for the - // contained user documentation - Title string `yaml:"title"` - - // If RAML API definition is targeted to a specific API version, it should - // be noted here - Version string `yaml:"version"` - - // A RESTful API's resources are defined relative to the API's base URI. - // If the baseUri value is a Level 1 Template URI, the following reserved - // base URI parameters are available for replacement: - // - // version - The content of the version field. - BaseUri string - // TODO: If a URI template variable in the base URI is not explicitly - // described in a baseUriParameters property, and is not specified in a - // resource-level baseUriParameters property, it MUST still be treated as - // a base URI parameter with defaults as specified in the Named Parameters - // section of this specification. Its type is "string", it is required, - // and its displayName is its name (i.e. without the surrounding curly - // brackets [{] and [}]). - - // A resource or a method can override a base URI template's values. - // This is useful to restrict or change the default or parameter selection - // in the base URI. The baseUriParameters property MAY be used to override - // any or all parameters defined at the root level baseUriParameters - // property, as well as base URI parameters not specified at the root level. - // In a resource structure of resources and nested resources with their - // methods, the most specific baseUriParameter fully overrides any - // baseUriParameter definition made before - BaseUriParameters map[string]NamedParameter `yaml:"baseUriParameters"` - // TODO: Generate these also from the baseUri - - // Level 1 URI custom parameters, which are useful in a variety of scenario. - // URI parameters can be further defined by using the uriParameters - // property. The use of uriParameters is OPTIONAL. The uriParameters - // property MUST be a map in which each key MUST be the name of the URI - // parameter as defined in the baseUri property. The uriParameters CANNOT - // contain a key named version because it is a reserved URI parameter name. - UriParameters map[string]NamedParameter `yaml:"uriParameters"` - - // A RESTful API can be reached HTTP, HTTPS, or both - Protocols []string `yaml:"protocols"` - - // The media types returned by API responses, and expected from API - // requests that accept a body, MAY be defaulted by specifying the - // mediaType property. - // The property's value MAY be a single string with a valid media type: - // - // One of the following YAML media types: - // * text/yaml - // * text/x-yaml - // * application/yaml - // * application/x-yaml* - // - // Any type from the list of IANA MIME Media Types, - // http://www.iana.org/assignments/media-types - // A custom type that conforms to the regular expression: - // * "application\/[A-Za-z.-0-1]*+?(json|xml)" - MediaType string `yaml:"mediaType"` - - // The schemas property specifies collections of schemas that could be - // used anywhere in the API definition. - // The value of the schemas property is an array of maps; in each map, - // the keys are the schema name, and the values are schema definitions: - // []map[SchemaName]SchemaString - Schemas []map[string]string - // TODO: Flatten the arrays of maps here. - - // The securitySchemes property MUST be used to specify an API's security - // mechanisms, including the required settings and the authentication - // methods that the API supports. - // []map[SchemeName]SecurityScheme - SecuritySchemes []map[string]SecurityScheme `yaml:"securitySchemes"` - // TODO: Flatten the arrays of maps here. - - // To apply a securityScheme definition to every method in an API, the - // API MAY be defined using the securedBy attribute. This specifies that - // all methods in the API are protected using that security scheme. - // Custom parameters can be provided to the security scheme. - SecuredBy []DefinitionChoice `yaml:"securedBy"` - - // The API definition can include a variety of documents that serve as a - // user guides and reference documentation for the API. Such documents can - // clarify how the API works or provide business context. - // All the sections are in the order in which the documentation is declared. - Documentation []Documentation `yaml:"documentation"` - - // To apply a trait definition to a method, so that the method inherits the - // trait's characteristics, the method MUST be defined by using the is - // attribute. The value of the is attribute MUST be an array of any number - // of elements, each of which MUST be a) one or more trait keys (names) - // included in the traits declaration, or b) one or more trait definition - // maps. - // []map[TraitName]Trait - Traits []map[string]Trait `yaml:"traits"` - // TODO: Flatten the arrays of maps here. - - // The resourceTypes and traits properties are declared at the API - // definition's root level with the resourceTypes and traits property keys, - // respectively. The value of each of these properties is an array of maps; - // in each map, the keys are resourceType or trait names, and the values - // are resourceType or trait definitions, respectively. - // []map[ResourceTypeName]ResourceType - ResourceTypes []map[string]ResourceType `yaml:"resourceTypes"` - // TODO: Flatten the arrays of maps here. - - // Resources are identified by their relative URI, which MUST begin with a - // slash (/). A resource defined as a root-level property is called a - // top-level resource. Its property's key is the resource's URI relative - // to the baseUri. A resource defined as a child property of another - // resource is called a nested resource, and its property's key is its - // URI relative to its parent resource's URI. - Resources map[string]Resource `yaml:",regexp:/.*"` -} - -// This function receives a path, splits it and traverses the resource -// tree to find the appropriate resource -func (r *APIDefinition) GetResource(path string) *Resource { - return nil -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/raml/validator.go b/Godeps/_workspace/src/github.com/buddhamagnet/raml/validator.go deleted file mode 100644 index a6a4220..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/raml/validator.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 DoAT. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED “AS IS” WITHOUT ANY WARRANTIES WHATSOEVER. -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF NON INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL DoAT OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// The views and conclusions contained in the software and documentation are those of -// the authors and should not be interpreted as representing official policies, -// either expressed or implied, of DoAT. - -package raml - -// This file contains all of the RAML schema validator related code. - -// TODO: Inspirations: -// https://www.npmjs.com/package/raml-validate -// https://github.com/go-validator/validator -// https://github.com/asaskevich/govalidator - -// And of course: -// https://github.com/raml-org/raml-java-parser/tree/master/src/main/java/org/raml/parser/rule diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/CONTRIBUTORS b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/CONTRIBUTORS deleted file mode 100644 index 8f28b49..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/CONTRIBUTORS +++ /dev/null @@ -1,12 +0,0 @@ -go-yaml Contributor List (ordered by date): - -Gustavo Niemeyer -Dave Cheney -John Arbash Meinel [https://github.com/jameinel] -Roger Peppe [https://github.com/rogpeppe] -Abel Deuring [https://github.com/adeuring] -Jordan Liggitt [https://github.com/liggitt] -Alon Diamant - -All contributors that provided patches. -If they are missing, please update this file. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE deleted file mode 100644 index a68e67f..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE +++ /dev/null @@ -1,188 +0,0 @@ - -Copyright (c) 2011-2014 - Canonical Inc. - -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. - 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. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE.libyaml b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE.libyaml deleted file mode 100644 index 8da58fb..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/LICENSE.libyaml +++ /dev/null @@ -1,31 +0,0 @@ -The following files were ported to Go from C files of libyaml, and thus -are still covered by their original copyright and license: - - apic.go - emitterc.go - parserc.go - readerc.go - scannerc.go - writerc.go - yamlh.go - yamlprivateh.go - -Copyright (c) 2006 Kirill Simonov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/README.md b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/README.md deleted file mode 100644 index 5c1df6a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# YAML support for the Go language - -Introduction ------------- - -The yaml package enables Go programs to comfortably encode and decode YAML -values. It was developed within [Canonical](https://www.canonical.com) as -part of the [juju](https://juju.ubuntu.com) project, and is based on a -pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) -C library to parse and generate YAML data quickly and reliably. - -Compatibility -------------- - -The yaml package supports most of YAML 1.1 and 1.2, including support for -anchors, tags, map merging, etc. Multi-document unmarshalling is not yet -implemented, and base-60 floats from YAML 1.1 are purposefully not -supported since they're a poor design and are gone in YAML 1.2. - -Installation and usage ----------------------- - -The import path for the package is *gopkg.in/yaml.v2*. - -To install it, run: - - go get gopkg.in/yaml.v2 - -API documentation ------------------ - -If opened in a browser, the import path itself leads to the API documentation: - - * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) - -Additional information is available in the source files, specifically yaml.go. - -API stability -------------- - -The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). - - -License -------- - -The yaml package is licensed under the LGPL with an exception that allows it to be linked statically. Please see the LICENSE file for details. - - -Example -------- - -```Go -package main - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v2" -) - -var data = ` -a: Easy! -b: - c: 2 - d: [3, 4] -` - -type T struct { - A string - B struct{C int; D []int `yaml:",flow"`} -} - -func main() { - t := T{} - - err := yaml.Unmarshal([]byte(data), &t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t:\n%v\n\n", t) - - d, err := yaml.Marshal(&t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t dump:\n%s\n\n", string(d)) - - m := make(map[interface{}]interface{}) - - err = yaml.Unmarshal([]byte(data), &m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m:\n%v\n\n", m) - - d, err = yaml.Marshal(&m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m dump:\n%s\n\n", string(d)) -} -``` - -This example will generate the following output: - -``` ---- t: -{Easy! {2 [3 4]}} - ---- t dump: -a: Easy! -b: - c: 2 - d: [3, 4] - - ---- m: -map[a:Easy! b:map[c:2 d:[3 4]]] - ---- m dump: -a: Easy! -b: - c: 2 - d: - - 3 - - 4 -``` - diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/apic.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/apic.go deleted file mode 100644 index 95ec014..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/apic.go +++ /dev/null @@ -1,742 +0,0 @@ -package yaml - -import ( - "io" - "os" -) - -func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { - //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) - - // Check if we can move the queue at the beginning of the buffer. - if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { - if parser.tokens_head != len(parser.tokens) { - copy(parser.tokens, parser.tokens[parser.tokens_head:]) - } - parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] - parser.tokens_head = 0 - } - parser.tokens = append(parser.tokens, *token) - if pos < 0 { - return - } - copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) - parser.tokens[parser.tokens_head+pos] = *token -} - -// Create a new parser object. -func yaml_parser_initialize(parser *yaml_parser_t) bool { - *parser = yaml_parser_t{ - raw_buffer: make([]byte, 0, input_raw_buffer_size), - buffer: make([]byte, 0, input_buffer_size), - } - return true -} - -// Destroy a parser object. -func yaml_parser_delete(parser *yaml_parser_t) { - *parser = yaml_parser_t{} -} - -// String read handler. -func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - if parser.input_pos == len(parser.input) { - return 0, io.EOF - } - n = copy(buffer, parser.input[parser.input_pos:]) - parser.input_pos += n - return n, nil -} - -// File read handler. -func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - return parser.input_file.Read(buffer) -} - -// Set a string input. -func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_string_read_handler - parser.input = input - parser.input_pos = 0 -} - -// Set a file input. -func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_file_read_handler - parser.input_file = file -} - -// Set the source encoding. -func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { - if parser.encoding != yaml_ANY_ENCODING { - panic("must set the encoding only once") - } - parser.encoding = encoding -} - -// Create a new emitter object. -func yaml_emitter_initialize(emitter *yaml_emitter_t) bool { - *emitter = yaml_emitter_t{ - buffer: make([]byte, output_buffer_size), - raw_buffer: make([]byte, 0, output_raw_buffer_size), - states: make([]yaml_emitter_state_t, 0, initial_stack_size), - events: make([]yaml_event_t, 0, initial_queue_size), - } - return true -} - -// Destroy an emitter object. -func yaml_emitter_delete(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{} -} - -// String write handler. -func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - *emitter.output_buffer = append(*emitter.output_buffer, buffer...) - return nil -} - -// File write handler. -func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - _, err := emitter.output_file.Write(buffer) - return err -} - -// Set a string output. -func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_string_write_handler - emitter.output_buffer = output_buffer -} - -// Set a file output. -func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_file_write_handler - emitter.output_file = file -} - -// Set the output encoding. -func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { - if emitter.encoding != yaml_ANY_ENCODING { - panic("must set the output encoding only once") - } - emitter.encoding = encoding -} - -// Set the canonical output style. -func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { - emitter.canonical = canonical -} - -//// Set the indentation increment. -func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { - if indent < 2 || indent > 9 { - indent = 2 - } - emitter.best_indent = indent -} - -// Set the preferred line width. -func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { - if width < 0 { - width = -1 - } - emitter.best_width = width -} - -// Set if unescaped non-ASCII characters are allowed. -func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { - emitter.unicode = unicode -} - -// Set the preferred line break character. -func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { - emitter.line_break = line_break -} - -///* -// * Destroy a token object. -// */ -// -//YAML_DECLARE(void) -//yaml_token_delete(yaml_token_t *token) -//{ -// assert(token); // Non-NULL token object expected. -// -// switch (token.type) -// { -// case YAML_TAG_DIRECTIVE_TOKEN: -// yaml_free(token.data.tag_directive.handle); -// yaml_free(token.data.tag_directive.prefix); -// break; -// -// case YAML_ALIAS_TOKEN: -// yaml_free(token.data.alias.value); -// break; -// -// case YAML_ANCHOR_TOKEN: -// yaml_free(token.data.anchor.value); -// break; -// -// case YAML_TAG_TOKEN: -// yaml_free(token.data.tag.handle); -// yaml_free(token.data.tag.suffix); -// break; -// -// case YAML_SCALAR_TOKEN: -// yaml_free(token.data.scalar.value); -// break; -// -// default: -// break; -// } -// -// memset(token, 0, sizeof(yaml_token_t)); -//} -// -///* -// * Check if a string is a valid UTF-8 sequence. -// * -// * Check 'reader.c' for more details on UTF-8 encoding. -// */ -// -//static int -//yaml_check_utf8(yaml_char_t *start, size_t length) -//{ -// yaml_char_t *end = start+length; -// yaml_char_t *pointer = start; -// -// while (pointer < end) { -// unsigned char octet; -// unsigned int width; -// unsigned int value; -// size_t k; -// -// octet = pointer[0]; -// width = (octet & 0x80) == 0x00 ? 1 : -// (octet & 0xE0) == 0xC0 ? 2 : -// (octet & 0xF0) == 0xE0 ? 3 : -// (octet & 0xF8) == 0xF0 ? 4 : 0; -// value = (octet & 0x80) == 0x00 ? octet & 0x7F : -// (octet & 0xE0) == 0xC0 ? octet & 0x1F : -// (octet & 0xF0) == 0xE0 ? octet & 0x0F : -// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; -// if (!width) return 0; -// if (pointer+width > end) return 0; -// for (k = 1; k < width; k ++) { -// octet = pointer[k]; -// if ((octet & 0xC0) != 0x80) return 0; -// value = (value << 6) + (octet & 0x3F); -// } -// if (!((width == 1) || -// (width == 2 && value >= 0x80) || -// (width == 3 && value >= 0x800) || -// (width == 4 && value >= 0x10000))) return 0; -// -// pointer += width; -// } -// -// return 1; -//} -// - -// Create STREAM-START. -func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool { - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - encoding: encoding, - } - return true -} - -// Create STREAM-END. -func yaml_stream_end_event_initialize(event *yaml_event_t) bool { - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - } - return true -} - -// Create DOCUMENT-START. -func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t, - tag_directives []yaml_tag_directive_t, implicit bool) bool { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: implicit, - } - return true -} - -// Create DOCUMENT-END. -func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - implicit: implicit, - } - return true -} - -///* -// * Create ALIAS. -// */ -// -//YAML_DECLARE(int) -//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) -//{ -// mark yaml_mark_t = { 0, 0, 0 } -// anchor_copy *yaml_char_t = NULL -// -// assert(event) // Non-NULL event object is expected. -// assert(anchor) // Non-NULL anchor is expected. -// -// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 -// -// anchor_copy = yaml_strdup(anchor) -// if (!anchor_copy) -// return 0 -// -// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) -// -// return 1 -//} - -// Create SCALAR. -func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - anchor: anchor, - tag: tag, - value: value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-START. -func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-END. -func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - } - return true -} - -// Create MAPPING-START. -func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool { - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } - return true -} - -// Create MAPPING-END. -func yaml_mapping_end_event_initialize(event *yaml_event_t) bool { - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - } - return true -} - -// Destroy an event object. -func yaml_event_delete(event *yaml_event_t) { - *event = yaml_event_t{} -} - -///* -// * Create a document object. -// */ -// -//YAML_DECLARE(int) -//yaml_document_initialize(document *yaml_document_t, -// version_directive *yaml_version_directive_t, -// tag_directives_start *yaml_tag_directive_t, -// tag_directives_end *yaml_tag_directive_t, -// start_implicit int, end_implicit int) -//{ -// struct { -// error yaml_error_type_t -// } context -// struct { -// start *yaml_node_t -// end *yaml_node_t -// top *yaml_node_t -// } nodes = { NULL, NULL, NULL } -// version_directive_copy *yaml_version_directive_t = NULL -// struct { -// start *yaml_tag_directive_t -// end *yaml_tag_directive_t -// top *yaml_tag_directive_t -// } tag_directives_copy = { NULL, NULL, NULL } -// value yaml_tag_directive_t = { NULL, NULL } -// mark yaml_mark_t = { 0, 0, 0 } -// -// assert(document) // Non-NULL document object is expected. -// assert((tag_directives_start && tag_directives_end) || -// (tag_directives_start == tag_directives_end)) -// // Valid tag directives are expected. -// -// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error -// -// if (version_directive) { -// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) -// if (!version_directive_copy) goto error -// version_directive_copy.major = version_directive.major -// version_directive_copy.minor = version_directive.minor -// } -// -// if (tag_directives_start != tag_directives_end) { -// tag_directive *yaml_tag_directive_t -// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) -// goto error -// for (tag_directive = tag_directives_start -// tag_directive != tag_directives_end; tag_directive ++) { -// assert(tag_directive.handle) -// assert(tag_directive.prefix) -// if (!yaml_check_utf8(tag_directive.handle, -// strlen((char *)tag_directive.handle))) -// goto error -// if (!yaml_check_utf8(tag_directive.prefix, -// strlen((char *)tag_directive.prefix))) -// goto error -// value.handle = yaml_strdup(tag_directive.handle) -// value.prefix = yaml_strdup(tag_directive.prefix) -// if (!value.handle || !value.prefix) goto error -// if (!PUSH(&context, tag_directives_copy, value)) -// goto error -// value.handle = NULL -// value.prefix = NULL -// } -// } -// -// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, -// tag_directives_copy.start, tag_directives_copy.top, -// start_implicit, end_implicit, mark, mark) -// -// return 1 -// -//error: -// STACK_DEL(&context, nodes) -// yaml_free(version_directive_copy) -// while (!STACK_EMPTY(&context, tag_directives_copy)) { -// value yaml_tag_directive_t = POP(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// } -// STACK_DEL(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// -// return 0 -//} -// -///* -// * Destroy a document object. -// */ -// -//YAML_DECLARE(void) -//yaml_document_delete(document *yaml_document_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// tag_directive *yaml_tag_directive_t -// -// context.error = YAML_NO_ERROR // Eliminate a compliler warning. -// -// assert(document) // Non-NULL document object is expected. -// -// while (!STACK_EMPTY(&context, document.nodes)) { -// node yaml_node_t = POP(&context, document.nodes) -// yaml_free(node.tag) -// switch (node.type) { -// case YAML_SCALAR_NODE: -// yaml_free(node.data.scalar.value) -// break -// case YAML_SEQUENCE_NODE: -// STACK_DEL(&context, node.data.sequence.items) -// break -// case YAML_MAPPING_NODE: -// STACK_DEL(&context, node.data.mapping.pairs) -// break -// default: -// assert(0) // Should not happen. -// } -// } -// STACK_DEL(&context, document.nodes) -// -// yaml_free(document.version_directive) -// for (tag_directive = document.tag_directives.start -// tag_directive != document.tag_directives.end -// tag_directive++) { -// yaml_free(tag_directive.handle) -// yaml_free(tag_directive.prefix) -// } -// yaml_free(document.tag_directives.start) -// -// memset(document, 0, sizeof(yaml_document_t)) -//} -// -///** -// * Get a document node. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_node(document *yaml_document_t, index int) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (index > 0 && document.nodes.start + index <= document.nodes.top) { -// return document.nodes.start + index - 1 -// } -// return NULL -//} -// -///** -// * Get the root object. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_root_node(document *yaml_document_t) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (document.nodes.top != document.nodes.start) { -// return document.nodes.start -// } -// return NULL -//} -// -///* -// * Add a scalar node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_scalar(document *yaml_document_t, -// tag *yaml_char_t, value *yaml_char_t, length int, -// style yaml_scalar_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// value_copy *yaml_char_t = NULL -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// assert(value) // Non-NULL value is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (length < 0) { -// length = strlen((char *)value) -// } -// -// if (!yaml_check_utf8(value, length)) goto error -// value_copy = yaml_malloc(length+1) -// if (!value_copy) goto error -// memcpy(value_copy, value, length) -// value_copy[length] = '\0' -// -// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// yaml_free(tag_copy) -// yaml_free(value_copy) -// -// return 0 -//} -// -///* -// * Add a sequence node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_sequence(document *yaml_document_t, -// tag *yaml_char_t, style yaml_sequence_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_item_t -// end *yaml_node_item_t -// top *yaml_node_item_t -// } items = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error -// -// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, items) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Add a mapping node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_mapping(document *yaml_document_t, -// tag *yaml_char_t, style yaml_mapping_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_pair_t -// end *yaml_node_pair_t -// top *yaml_node_pair_t -// } pairs = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error -// -// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, pairs) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Append an item to a sequence node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_sequence_item(document *yaml_document_t, -// sequence int, item int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// assert(document) // Non-NULL document is required. -// assert(sequence > 0 -// && document.nodes.start + sequence <= document.nodes.top) -// // Valid sequence id is required. -// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) -// // A sequence node is required. -// assert(item > 0 && document.nodes.start + item <= document.nodes.top) -// // Valid item id is required. -// -// if (!PUSH(&context, -// document.nodes.start[sequence-1].data.sequence.items, item)) -// return 0 -// -// return 1 -//} -// -///* -// * Append a pair of a key and a value to a mapping node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_mapping_pair(document *yaml_document_t, -// mapping int, key int, value int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// pair yaml_node_pair_t -// -// assert(document) // Non-NULL document is required. -// assert(mapping > 0 -// && document.nodes.start + mapping <= document.nodes.top) -// // Valid mapping id is required. -// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) -// // A mapping node is required. -// assert(key > 0 && document.nodes.start + key <= document.nodes.top) -// // Valid key id is required. -// assert(value > 0 && document.nodes.start + value <= document.nodes.top) -// // Valid value id is required. -// -// pair.key = key -// pair.value = value -// -// if (!PUSH(&context, -// document.nodes.start[mapping-1].data.mapping.pairs, pair)) -// return 0 -// -// return 1 -//} -// -// diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode.go deleted file mode 100644 index f416daf..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode.go +++ /dev/null @@ -1,884 +0,0 @@ -package yaml - -import ( - "encoding" - "encoding/base64" - "fmt" - "math" - "reflect" - "strconv" - "time" -) - -const ( - documentNode = 1 << iota - mappingNode - sequenceNode - scalarNode - aliasNode -) - -type node struct { - kind int - line, column int - tag string - value string - implicit bool - children []*node - anchors map[string]*node -} - -// ---------------------------------------------------------------------------- -// Parser, produces a node tree out of a libyaml event stream. - -type parser struct { - parser yaml_parser_t - event yaml_event_t - doc *node -} - -func newParser(b []byte) *parser { - p := parser{} - if !yaml_parser_initialize(&p.parser) { - panic("failed to initialize YAML emitter") - } - - if len(b) == 0 { - b = []byte{'\n'} - } - - yaml_parser_set_input_string(&p.parser, b) - - p.skip() - if p.event.typ != yaml_STREAM_START_EVENT { - panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ))) - } - p.skip() - return &p -} - -func (p *parser) destroy() { - if p.event.typ != yaml_NO_EVENT { - yaml_event_delete(&p.event) - } - yaml_parser_delete(&p.parser) -} - -func (p *parser) skip() { - if p.event.typ != yaml_NO_EVENT { - if p.event.typ == yaml_STREAM_END_EVENT { - failf("attempted to go past the end of stream; corrupted value?") - } - yaml_event_delete(&p.event) - } - if !yaml_parser_parse(&p.parser, &p.event) { - p.fail() - } -} - -func (p *parser) fail() { - var where string - var line int - if p.parser.problem_mark.line != 0 { - line = p.parser.problem_mark.line - } else if p.parser.context_mark.line != 0 { - line = p.parser.context_mark.line - } - if line != 0 { - where = "line " + strconv.Itoa(line) + ": " - } - var msg string - if len(p.parser.problem) > 0 { - msg = p.parser.problem - } else { - msg = "unknown problem parsing YAML content" - } - failf("%s%s", where, msg) -} - -func (p *parser) anchor(n *node, anchor []byte) { - if anchor != nil { - p.doc.anchors[string(anchor)] = n - } -} - -func (p *parser) parse() *node { - switch p.event.typ { - case yaml_SCALAR_EVENT: - return p.scalar() - case yaml_ALIAS_EVENT: - return p.alias() - case yaml_MAPPING_START_EVENT: - return p.mapping() - case yaml_SEQUENCE_START_EVENT: - return p.sequence() - case yaml_DOCUMENT_START_EVENT: - return p.document() - case yaml_STREAM_END_EVENT: - // Happens when attempting to decode an empty buffer. - return nil - default: - panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ))) - } - panic("unreachable") -} - -func (p *parser) node(kind int) *node { - return &node{ - kind: kind, - line: p.event.start_mark.line, - column: p.event.start_mark.column, - } -} - -func (p *parser) document() *node { - n := p.node(documentNode) - n.anchors = make(map[string]*node) - p.doc = n - p.skip() - n.children = append(n.children, p.parse()) - if p.event.typ != yaml_DOCUMENT_END_EVENT { - panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ))) - } - p.skip() - return n -} - -func (p *parser) alias() *node { - n := p.node(aliasNode) - n.value = string(p.event.anchor) - p.skip() - return n -} - -func (p *parser) scalar() *node { - n := p.node(scalarNode) - n.value = string(p.event.value) - n.tag = string(p.event.tag) - n.implicit = p.event.implicit - p.anchor(n, p.event.anchor) - p.skip() - return n -} - -func (p *parser) sequence() *node { - n := p.node(sequenceNode) - p.anchor(n, p.event.anchor) - p.skip() - for p.event.typ != yaml_SEQUENCE_END_EVENT { - n.children = append(n.children, p.parse()) - } - p.skip() - return n -} - -func (p *parser) mapping() *node { - n := p.node(mappingNode) - p.anchor(n, p.event.anchor) - p.skip() - for p.event.typ != yaml_MAPPING_END_EVENT { - n.children = append(n.children, p.parse(), p.parse()) - } - p.skip() - return n -} - -// ---------------------------------------------------------------------------- -// Decoder, unmarshals a node into a provided value. - -type decoder struct { - doc *node - aliases map[string]bool - mapType reflect.Type - terrors []string -} - -var ( - mapItemType = reflect.TypeOf(MapItem{}) - durationType = reflect.TypeOf(time.Duration(0)) - defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) - ifaceType = defaultMapType.Elem() -) - -func newDecoder() *decoder { - - d := &decoder{mapType: defaultMapType} - d.aliases = make(map[string]bool) - return d -} - -func (d *decoder) terror(n *node, tag string, out reflect.Value) { - - if n.tag != "" { - tag = n.tag - } - - value := n.value - if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { - if len(value) > 10 { - value = " `" + value[:7] + "...`" - } else { - value = " `" + value + "`" - } - } - - d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) -} - -// Use the Unmarshaler.UnmarshalYAML for types that are Unmarshalers, performing -// custom unmarshaling. -func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { - - // Get the amount of existing decoder errors - terrlen := len(d.terrors) - - // Call the Unmarshaler, giving it a chance to handle the unmarshalling - // any way it wants, into v. - err := u.UnmarshalYAML(func(v interface{}) (err error) { - defer handleErr(&err) - - // Try and unmarshal the node into the type inputted - d.unmarshal(n, reflect.ValueOf(v)) - - // // If we have new decoder errors - if len(d.terrors) > terrlen { - - // Get new decoder errors - issues := d.terrors[terrlen:] - - // Remove them from the decoder errors list - d.terrors = d.terrors[:terrlen] - - // And return just the specific decoder errors to the calling type - return &TypeError{issues} - } - - return nil - }) - - // Append all decoding errors received, maintaing order - allow the - // calling object to return the errors it received - if e, ok := err.(*TypeError); ok { - d.terrors = append(d.terrors, e.Errors...) - return false - } - - // Or, if we had a different errors, fail immediately - if err != nil { - fail(err) - } - - // Otherwise, we're good - return true -} - -// d.prepare initializes and dereferences pointers and calls UnmarshalYAML -// if a value is found to implement it. -// It returns the initialized and dereferenced out value, whether -// unmarshalling was already done by UnmarshalYAML, and if so whether -// its types unmarshalled appropriately. -// -// If n holds a null value, prepare returns before doing anything. -func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - - // TODO: Add support for Null tags, perhaps writing a to field etc - if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "") { - return out, false, false - } - - // Loop until we have an unmarshaled value, or we are sure we have a - // scalar, mapping or sequence - again := true - for again { - again = false - - // Do we have a pointer to unmarshal into? - if out.Kind() == reflect.Ptr { - // If it is Nil, create an approriate new value and point the - // pointer to it - if out.IsNil() { - out.Set(reflect.New(out.Type().Elem())) - } - - // And dereference it, returning the actual value - out = out.Elem() - - // Try again, looking at the new value - which might not be - // addressable - again = true - } - - // Is the value an addressable value? - if out.CanAddr() { - - // Is the value an Unmarshaler? - if u, ok := out.Addr().Interface().(Unmarshaler); ok { - - // Call the Unmarshaler, allow custom unmarshalling - good = d.callUnmarshaler(n, u) - - // Value is now nmarshalled (or, attempt failed) - return out, true, good - } - } - - // If it isn't an addressable value, stop - } - - // Couldn't find an addressable value that is an Unmarshaler, return - // the last value we found - return out, false, false -} - -func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { - - // Unmarshal a node based on its kind. Documents and liases first - switch n.kind { - case documentNode: - return d.document(n, out) - case aliasNode: - return d.alias(n, out) - } - - // Prepare for unmarshaling - checking if, perhaps, it is unnecessary - // (already custom unmarshaled via Unmarshaler implementing values) - out, unmarshaled, good := d.prepare(n, out) - - // There was an attempt to unmarshal, return the result - if unmarshaled { - return good - } - - // Otherwise, unmarshal based on Go types - switch n.kind { - case scalarNode: - good = d.scalar(n, out) - case mappingNode: - good = d.mapping(n, out) - case sequenceNode: - good = d.sequence(n, out) - default: - panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) - } - - return good -} - -func (d *decoder) document(n *node, out reflect.Value) (good bool) { - if len(n.children) == 1 { - d.doc = n - d.unmarshal(n.children[0], out) - return true - } - return false -} - -func (d *decoder) alias(n *node, out reflect.Value) (good bool) { - an, ok := d.doc.anchors[n.value] - if !ok { - failf("unknown anchor '%s' referenced", n.value) - } - if d.aliases[n.value] { - failf("anchor '%s' value contains itself", n.value) - } - d.aliases[n.value] = true - good = d.unmarshal(an, out) - delete(d.aliases, n.value) - return good -} - -var zeroValue reflect.Value - -// Reset a map, clearing all of its values -func resetMap(out reflect.Value) { - - // Go over all of the Map keys - for _, k := range out.MapKeys() { - - // Delete the all of the values - out.SetMapIndex(k, zeroValue) - } -} - -func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { - var tag string - var resolved interface{} - - if n.tag == "" && !n.implicit { - tag = yaml_STR_TAG - resolved = n.value - } else { - tag, resolved = resolve(n.tag, n.value) - if tag == yaml_BINARY_TAG { - data, err := base64.StdEncoding.DecodeString(resolved.(string)) - if err != nil { - failf("!!binary value contains invalid base64 data") - } - resolved = string(data) - } - } - - // Couldn't get proper tag/value for node - if resolved == nil { - - // Is the output value for unmarshaling a map? - if out.Kind() == reflect.Map && !out.CanAddr() { - - // Clear its values - resetMap(out) - } else { - - // Otherwise, clear whatever value is there - out.Set(reflect.Zero(out.Type())) - } - - return true - } - - // Is the output value type is a TextUnmarshaler - let it handle - // unmarshaling itself. - if s, ok := resolved.(string); ok && out.CanAddr() { - if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok { - err := u.UnmarshalText([]byte(s)) - if err != nil { - fail(err) - } - return true - } - } - - // Otherwise, look at the kind of output value - switch out.Kind() { - - // Unmarshal into a string - case reflect.String: - - if tag == yaml_BINARY_TAG { - out.SetString(resolved.(string)) - good = true - } else if resolved != nil { - out.SetString(n.value) - good = true - } - - // Unmarshal into an interface{} - might be a string or a different basic - // type - case reflect.Interface: - if resolved == nil { - out.Set(reflect.Zero(out.Type())) - } else { - out.Set(reflect.ValueOf(resolved)) - } - good = true - - // Basic Go types - integers - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - switch resolved := resolved.(type) { - case int: - if !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - good = true - } - case int64: - if !out.OverflowInt(resolved) { - out.SetInt(resolved) - good = true - } - case uint64: - if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - good = true - } - case float64: - if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - good = true - } - case string: - if out.Type() == durationType { - d, err := time.ParseDuration(resolved) - if err == nil { - out.SetInt(int64(d)) - good = true - } - } - } - - // Basic Go types - unsigned integers - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - switch resolved := resolved.(type) { - case int: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - good = true - } - case int64: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - good = true - } - case uint64: - if !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - good = true - } - case float64: - if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - good = true - } - } - - // Basic Go types - booleans - case reflect.Bool: - switch resolved := resolved.(type) { - case bool: - out.SetBool(resolved) - good = true - } - - // Basic Go types - floating point numbers - case reflect.Float32, reflect.Float64: - switch resolved := resolved.(type) { - case int: - out.SetFloat(float64(resolved)) - good = true - case int64: - out.SetFloat(float64(resolved)) - good = true - case uint64: - out.SetFloat(float64(resolved)) - good = true - case float64: - out.SetFloat(resolved) - good = true - } - - // A pointer... - case reflect.Ptr: - if out.Type().Elem() == reflect.TypeOf(resolved) { - // TODO: DOes this make sense? When is out a Ptr except when decoding a nil value? - elem := reflect.New(out.Type().Elem()) - elem.Elem().Set(reflect.ValueOf(resolved)) - out.Set(elem) - good = true - } - } - - if !good { - d.terror(n, tag, out) - } - - return good -} - -func settableValueOf(i interface{}) reflect.Value { - v := reflect.ValueOf(i) - sv := reflect.New(v.Type()).Elem() - sv.Set(v) - return sv -} - -func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { - var iface reflect.Value - switch out.Kind() { - case reflect.Slice: - // okay - case reflect.Interface: - // No type hints. Will have to use a generic sequence. - iface = out - out = settableValueOf(make([]interface{}, 0)) - default: - d.terror(n, yaml_SEQ_TAG, out) - return false - } - et := out.Type().Elem() - - l := len(n.children) - for i := 0; i < l; i++ { - e := reflect.New(et).Elem() - if ok := d.unmarshal(n.children[i], e); ok { - out.Set(reflect.Append(out, e)) - } - } - if iface.IsValid() { - iface.Set(out) - } - return true -} - -// Unmarshal a YAML mapping into a map, a struct, a slice or even into an -// interface{} (actually creating a map or slice with the last encountered type) -func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { - - switch out.Kind() { - case reflect.Struct: - return d.mappingStruct(n, out) - case reflect.Slice: - return d.mappingSlice(n, out) - case reflect.Map: - // Simple case, unmarshal the YAML mapping into a map - case reflect.Interface: - // Create a map/slice of the last type encountered and set it to out. - // Starts as map[interface{}]interface{}, but might change as we go - // deeper in the children nodes and find new maps/slices to unmarshal. - if d.mapType.Kind() == reflect.Map { - iface := out - out = reflect.MakeMap(d.mapType) - iface.Set(out) - - // Got a map - continue with unmarshaling the YAML mapping into - // this new map - } else { - slicev := reflect.New(d.mapType).Elem() - if !d.mappingSlice(n, slicev) { - return false - } - out.Set(slicev) - return true - } - default: - d.terror(n, yaml_MAP_TAG, out) - return false - } - - outt := out.Type() - kt := outt.Key() - et := outt.Elem() - - mapType := d.mapType - - if outt.Key() == ifaceType && outt.Elem() == ifaceType { - d.mapType = outt - } - - if out.IsNil() { - out.Set(reflect.MakeMap(outt)) - } - - // Go over the children nodes, unmarshaling each pair into a key/value - l := len(n.children) - for i := 0; i < l; i += 2 { - - // YAML << merge key - if isMerge(n.children[i]) { - d.merge(n.children[i+1], out) - continue - } - - // Create a new value of the map's key type - k := reflect.New(kt).Elem() - - // Unmarshal into the key value - if d.unmarshal(n.children[i], k) { - - // Successful unmarshalling. - - // Get the kind of the key - a go basic type - kkind := k.Kind() - if kkind == reflect.Interface { - kkind = k.Elem().Kind() - } - - // If the map key is a map or slice - die, we can't use it as a - // key. - if kkind == reflect.Map || kkind == reflect.Slice { - failf("invalid map key: %#v", k.Interface()) - } - - // Otherwise, create a new value of the map's element type - e := reflect.New(et).Elem() - - // Unmarshal into the element value - if d.unmarshal(n.children[i+1], e) { - - // Set it into the map! - out.SetMapIndex(k, e) - } else { - // Error is set inside the unmarshal call - } - } - } - d.mapType = mapType - return true -} - -// Map a YAML mapping into a slice -func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { - outType := out.Type() - if outType.Elem() != mapItemType { - d.terror(n, yaml_MAP_TAG, out) - return false - } - - mapType := d.mapType - d.mapType = outType - - var slice []MapItem - var l = len(n.children) - for i := 0; i < l; i += 2 { - if isMerge(n.children[i]) { - d.merge(n.children[i+1], out) - continue - } - item := MapItem{} - k := reflect.ValueOf(&item.Key).Elem() - if d.unmarshal(n.children[i], k) { - v := reflect.ValueOf(&item.Value).Elem() - if d.unmarshal(n.children[i+1], v) { - slice = append(slice, item) - } - } - } - out.Set(reflect.ValueOf(slice)) - d.mapType = mapType - return true -} - -// Map a YAML mapping into a struct -func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { - - sinfo, err := getStructInfo(out.Type()) - - if err != nil { - panic(err) - } - - // Create a string-type Value, which will contain the YAML key - name := settableValueOf("") - - // Go over the children nodes, unmarshaling each pair into a key/value - l := len(n.children) - for i := 0; i < l; i += 2 { - ni := n.children[i] - - // YAML << merge key - if isMerge(ni) { - d.merge(n.children[i+1], out) - continue - } - - // Unmarshal the YAML key - if !d.unmarshal(ni, name) { - - // Problems unmarshalling the key.. - // Error is set inside the unmarshal call - continue - } - - // Search to see if we have an exact match between the YAML key and - // a field Key in the fields map. This is case sensitive, obviously - if info, ok := sinfo.FieldsMap[name.String()]; ok { - - var field reflect.Value - if info.Inline == nil { - field = out.Field(info.Num) - } else { - field = out.FieldByIndex(info.Inline) - } - - d.unmarshal(n.children[i+1], field) - } else { - // Otherwise, we try to see if the YAML key matches any regular - // expression - for _, info := range sinfo.RegexpFieldsList { - if info.Regexp.MatchString(name.String()) { - - // Get the field. It must be a map or a slice - var field reflect.Value = out.Field(info.Num) - - // Will we write to a map or a slice? - if field.Kind() == reflect.Map { - - // If the map doesn't exist yet.. - if field.IsNil() { - - // Create a map, set it - iface := field - field = reflect.MakeMap(field.Type()) - iface.Set(field) - } - - // Create a new value of the map element type - e := reflect.New(field.Type().Elem()).Elem() - - // Unmarshal into the element value - if d.unmarshal(n.children[i+1], e) { - - // Set it into the map! - field.SetMapIndex(name, e) - - } else { - // Error is set inside the unmarshal call - } - - } else { - - // If the array doesn't exist yet.. - if field.IsNil() { - - // Create a slice, set it - newSlice := reflect.MakeSlice(field.Type(), 0, 0) - field.Set(newSlice) - } - - // Create a new value of the map element type - e := reflect.New(field.Type().Elem()).Elem() - - // Unmarshal into the element value - if d.unmarshal(n.children[i+1], e) { - - // Append it to the slice - newSlice := reflect.Append(field, e) - field.Set(newSlice) - - } else { - // Error is set inside the unmarshal call - } - } - - break - - } - } - } - } - return true -} - -func failWantMap() { - failf("map merge requires map or sequence of maps as the value") -} - -func (d *decoder) merge(n *node, out reflect.Value) { - switch n.kind { - case mappingNode: - d.unmarshal(n, out) - case aliasNode: - an, ok := d.doc.anchors[n.value] - if ok && an.kind != mappingNode { - failWantMap() - } - d.unmarshal(n, out) - case sequenceNode: - // Step backwards as earlier nodes take precedence. - for i := len(n.children) - 1; i >= 0; i-- { - ni := n.children[i] - if ni.kind == aliasNode { - an, ok := d.doc.anchors[ni.value] - if ok && an.kind != mappingNode { - failWantMap() - } - } else if ni.kind != mappingNode { - failWantMap() - } - d.unmarshal(ni, out) - } - default: - failWantMap() - } -} - -func isMerge(n *node) bool { - return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode_test.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode_test.go deleted file mode 100644 index 7c6afb4..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/decode_test.go +++ /dev/null @@ -1,997 +0,0 @@ -package yaml_test - -import ( - "errors" - "math" - "net" - "reflect" - "strings" - "time" - - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" -) - -var unmarshalIntTest = 123 - -var unmarshalTests = []struct { - data string - value interface{} -}{ - { - "", - &struct{}{}, - }, { - "{}", &struct{}{}, - }, { - "v: hi", - map[string]string{"v": "hi"}, - }, { - "v: hi", map[string]interface{}{"v": "hi"}, - }, { - "v: true", - map[string]string{"v": "true"}, - }, { - "v: true", - map[string]interface{}{"v": true}, - }, { - "v: 10", - map[string]interface{}{"v": 10}, - }, { - "v: 0b10", - map[string]interface{}{"v": 2}, - }, { - "v: 0xA", - map[string]interface{}{"v": 10}, - }, { - "v: 4294967296", - map[string]int64{"v": 4294967296}, - }, { - "v: 0.1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .Inf", - map[string]interface{}{"v": math.Inf(+1)}, - }, { - "v: -.Inf", - map[string]interface{}{"v": math.Inf(-1)}, - }, { - "v: -10", - map[string]interface{}{"v": -10}, - }, { - "v: -.1", - map[string]interface{}{"v": -0.1}, - }, - - // Simple values. - { - "123", - &unmarshalIntTest, - }, - - // Floats from spec - { - "canonical: 6.8523e+5", - map[string]interface{}{"canonical": 6.8523e+5}, - }, { - "expo: 685.230_15e+03", - map[string]interface{}{"expo": 685.23015e+03}, - }, { - "fixed: 685_230.15", - map[string]interface{}{"fixed": 685230.15}, - }, { - "neginf: -.inf", - map[string]interface{}{"neginf": math.Inf(-1)}, - }, { - "fixed: 685_230.15", - map[string]float64{"fixed": 685230.15}, - }, - //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported - //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. - - // Bools from spec - { - "canonical: y", - map[string]interface{}{"canonical": true}, - }, { - "answer: NO", - map[string]interface{}{"answer": false}, - }, { - "logical: True", - map[string]interface{}{"logical": true}, - }, { - "option: on", - map[string]interface{}{"option": true}, - }, { - "option: on", - map[string]bool{"option": true}, - }, - // Ints from spec - { - "canonical: 685230", - map[string]interface{}{"canonical": 685230}, - }, { - "decimal: +685_230", - map[string]interface{}{"decimal": 685230}, - }, { - "octal: 02472256", - map[string]interface{}{"octal": 685230}, - }, { - "hexa: 0x_0A_74_AE", - map[string]interface{}{"hexa": 685230}, - }, { - "bin: 0b1010_0111_0100_1010_1110", - map[string]interface{}{"bin": 685230}, - }, { - "bin: -0b101010", - map[string]interface{}{"bin": -42}, - }, { - "decimal: +685_230", - map[string]int{"decimal": 685230}, - }, - - //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported - - // Nulls from spec - { - "empty:", - map[string]interface{}{"empty": nil}, - }, { - "canonical: ~", - map[string]interface{}{"canonical": nil}, - }, { - "english: null", - map[string]interface{}{"english": nil}, - }, { - "~: null key", - map[interface{}]string{nil: "null key"}, - }, { - "empty:", - map[string]*bool{"empty": nil}, - }, - - // Flow sequence - { - "seq: [A,B]", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq: [A,B,C,]", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]int{"seq": []int{1}}, - }, { - "seq: [A,1,C]", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - // Block sequence - { - "seq:\n - A\n - B", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq:\n - A\n - B\n - C", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]int{"seq": []int{1}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - - // Literal block scalar - { - "scalar: | # Comment\n\n literal\n\n \ttext\n\n", - map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, - }, - - // Folded block scalar - { - "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", - map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, - }, - - // Map inside interface with no type hints. - { - "a: {b: c}", - map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - }, - - // Structs and type conversions. - { - "hello: world", - &struct{ Hello string }{"world"}, - }, { - "a: {b: c}", - &struct{ A struct{ B string } }{struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A map[string]string }{map[string]string{"b": "c"}}, - }, { - "a: {b: c}", - &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, - }, { - "a:", - &struct{ A map[string]string }{}, - }, { - "a: 1", - &struct{ A int }{1}, - }, { - "a: 1", - &struct{ A float64 }{1}, - }, { - "a: 1.0", - &struct{ A int }{1}, - }, { - "a: 1.0", - &struct{ A uint }{1}, - }, { - "a: [1, 2]", - &struct{ A []int }{[]int{1, 2}}, - }, { - "a: 1", - &struct{ B int }{0}, - }, { - "a: 1", - &struct { - B int `yaml:"a"` - }{1}, - }, { - "a: y", - &struct{ A bool }{true}, - }, - - // Some cross type conversions - { - "v: 42", - map[string]uint{"v": 42}, - }, { - "v: -42", - map[string]uint{}, - }, { - "v: 4294967296", - map[string]uint64{"v": 4294967296}, - }, { - "v: -4294967296", - map[string]uint64{}, - }, - - // int - { - "int_max: 2147483647", - map[string]int{"int_max": math.MaxInt32}, - }, - { - "int_min: -2147483648", - map[string]int{"int_min": math.MinInt32}, - }, - { - "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int{}, - }, - - // int64 - { - "int64_max: 9223372036854775807", - map[string]int64{"int64_max": math.MaxInt64}, - }, - { - "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_max_base2": math.MaxInt64}, - }, - { - "int64_min: -9223372036854775808", - map[string]int64{"int64_min": math.MinInt64}, - }, - { - "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_neg_base2": -math.MaxInt64}, - }, - { - "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int64{}, - }, - - // uint - { - "uint_min: 0", - map[string]uint{"uint_min": 0}, - }, - { - "uint_max: 4294967295", - map[string]uint{"uint_max": math.MaxUint32}, - }, - { - "uint_underflow: -1", - map[string]uint{}, - }, - - // uint64 - { - "uint64_min: 0", - map[string]uint{"uint64_min": 0}, - }, - { - "uint64_max: 18446744073709551615", - map[string]uint64{"uint64_max": math.MaxUint64}, - }, - { - "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", - map[string]uint64{"uint64_max_base2": math.MaxUint64}, - }, - { - "uint64_maxint64: 9223372036854775807", - map[string]uint64{"uint64_maxint64": math.MaxInt64}, - }, - { - "uint64_underflow: -1", - map[string]uint64{}, - }, - - // float32 - { - "float32_max: 3.40282346638528859811704183484516925440e+38", - map[string]float32{"float32_max": math.MaxFloat32}, - }, - { - "float32_nonzero: 1.401298464324817070923729583289916131280e-45", - map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, - }, - { - "float32_maxuint64: 18446744073709551615", - map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, - }, - { - "float32_maxuint64+1: 18446744073709551616", - map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, - }, - - // float64 - { - "float64_max: 1.797693134862315708145274237317043567981e+308", - map[string]float64{"float64_max": math.MaxFloat64}, - }, - { - "float64_nonzero: 4.940656458412465441765687928682213723651e-324", - map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, - }, - { - "float64_maxuint64: 18446744073709551615", - map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, - }, - { - "float64_maxuint64+1: 18446744073709551616", - map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, - }, - - // Overflow cases. - { - "v: 4294967297", - map[string]int32{}, - }, { - "v: 128", - map[string]int8{}, - }, - - // Quoted values. - { - "'1': '\"2\"'", - map[interface{}]interface{}{"1": "\"2\""}, - }, { - "v:\n- A\n- 'B\n\n C'\n", - map[string][]string{"v": []string{"A", "B\nC"}}, - }, - - // Explicit tags. - { - "v: !!float '1.1'", - map[string]interface{}{"v": 1.1}, - }, { - "v: !!null ''", - map[string]interface{}{"v": nil}, - }, { - "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", - map[string]interface{}{"v": 1}, - }, - - // Anchors and aliases. - { - "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", - &struct{ A, B, C, D int }{1, 2, 1, 2}, - }, { - "a: &a {c: 1}\nb: *a", - &struct { - A, B struct { - C int - } - }{struct{ C int }{1}, struct{ C int }{1}}, - }, { - "a: &a [1, 2]\nb: *a", - &struct{ B []int }{[]int{1, 2}}, - }, - - // Bug #1133337 - { - "foo: ''", - map[string]*string{"foo": new(string)}, - }, { - "foo: null", - map[string]string{"foo": ""}, - }, { - "foo: null", - map[string]interface{}{"foo": nil}, - }, - - // Ignored field - { - "a: 1\nb: 2\n", - &struct { - A int - B int `yaml:"-"` - }{1, 0}, - }, - - // Bug #1191981 - { - "" + - "%YAML 1.1\n" + - "--- !!str\n" + - `"Generic line break (no glyph)\n\` + "\n" + - ` Generic line break (glyphed)\n\` + "\n" + - ` Line separator\u2028\` + "\n" + - ` Paragraph separator\u2029"` + "\n", - "" + - "Generic line break (no glyph)\n" + - "Generic line break (glyphed)\n" + - "Line separator\u2028Paragraph separator\u2029", - }, - - // Struct inlining - { - "a: 1\nb: 2\nc: 3\n", - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - }, - - // bug 1243827 - { - "a: -b_c", - map[string]interface{}{"a": "-b_c"}, - }, - { - "a: +b_c", - map[string]interface{}{"a": "+b_c"}, - }, - { - "a: 50cent_of_dollar", - map[string]interface{}{"a": "50cent_of_dollar"}, - }, - - // Duration - { - "a: 3s", - map[string]time.Duration{"a": 3 * time.Second}, - }, - - // Issue #24. - { - "a: ", - map[string]string{"a": ""}, - }, - - // Base 60 floats are obsolete and unsupported. - { - "a: 1:1\n", - map[string]string{"a": "1:1"}, - }, - - // Binary data. - { - "a: !!binary gIGC\n", - map[string]string{"a": "\x80\x81\x82"}, - }, { - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - map[string]string{"a": strings.Repeat("\x90", 54)}, - }, { - "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", - map[string]string{"a": strings.Repeat("\x00", 52)}, - }, - - // Ordered maps. - { - "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - }, - - // Issue #39. - { - "a:\n b:\n c: d\n", - map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, - }, - - // Custom map type. - { - "a: {b: c}", - M{"a": M{"b": "c"}}, - }, - - // Support encoding.TextUnmarshaler. - { - "a: 1.2.3.4\n", - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - }, - - // RegExp support inside structs - { - "a: ay\nb: bee\nc1: ceeone\nc2: ceetwo", - &struct { - A string - B string - C map[string]string `yaml:",regexp:c.*"` - }{"ay", "bee", map[string]string{"c1": "ceeone", "c2": "ceetwo"}}, - }, - - // RegExp support inside structs #2 - { - "a: ay\nb: bee\n" + - "c1: ceeone\n" + - "c2: ceetwo\n" + - "c12: ceeonetwo\n" + - "c22: ceetwotwo", - &struct { - A string - B string - C1 map[string]string `yaml:",regexp:c1.*"` - C2 map[string]string `yaml:",regexp:c2.*"` - }{"ay", "bee", - map[string]string{"c1": "ceeone", "c12": "ceeonetwo"}, - map[string]string{"c2": "ceetwo", "c22": "ceetwotwo"}}, - }, - - // RegExp support to slices, too - { - "a: 1\nb: 2\nnum1: 1\nnum2: 50\n" + - "phraseOne: to be or not to be\n" + - "phraseTwo: you can't touch my key!\n" + - "anotherKey: ThisValueWillNotBeUnmarshalled", - &struct { - A int - B int - Numbers map[string]int `yaml:",regexp:num.*"` - Phrases []string `yaml:",regexp:phr.*"` - }{1, 2, - map[string]int{"num1": 1, "num2": 50}, - []string{"to be or not to be", "you can't touch my key!"}}, - }, - - // RegExp priority #1 - { - "a: 1\nb: 2\nnum1: 1\nnum2: 50\n" + - "phraseOne: to be or not to be\n" + - "phraseTwo: you can't touch my key!\n" + - "anotherKey: ThisValueWillNotBeUnmarshalled", - &struct { - A int - B int - Numbers map[string]int `yaml:",regexp:num.*"` - Phrases []string `yaml:",regexp:num.*"` - }{1, 2, - map[string]int{"num1": 1, "num2": 50}, - nil}, - }, - - // RegExp priority #2 - { - "a: 1\nb: 2\nnum1: 1\nnum2: 50\n" + - "phraseOne: to be or not to be\n" + - "phraseTwo: you can't touch my key!\n" + - "anotherKey: ThisValueWillNotBeUnmarshalled\n" + - "val1: one\nval2: two\nval3: three\n", - &struct { - A int - B int - More []string `yaml:",regexp:val.*"` - Less []string `yaml:",regexp:val.*"` - }{1, 2, - []string{"one", "two", "three"}, - nil}, - }, - - // RegExp of multiple types - { - "a: 1\nb: 2\n" + - "str: hello\n" + - "flt: 0.55555555\n" + - "int: 5\n" + - "seq: [1, 2, 3]\n" + - "map: {key1: val1, key2: val2}\n", - &struct { - A int - B int - Default []interface{} `yaml:",regexp:.*"` - }{1, 2, []interface{}{"hello", 0.55555555, 5, []interface{}{1, 2, 3}, - map[interface{}]interface{}{"key2": "val2", "key1": "val1"}}}, - }, - - //"hello", 0.55555555, 5, []int {1, 2, 3}, map[string][string] {"key1": "val1", "key2": "Val2"} -} - -type M map[interface{}]interface{} - -type inlineB struct { - B int - inlineC `yaml:",inline"` -} - -type inlineC struct { - C int -} - -func (s *S) TestUnmarshal(c *C) { - for _, item := range unmarshalTests { - t := reflect.ValueOf(item.value).Type() - var value interface{} - switch t.Kind() { - case reflect.Map: - value = reflect.MakeMap(t).Interface() - case reflect.String: - value = reflect.New(t).Interface() - case reflect.Ptr: - value = reflect.New(t.Elem()).Interface() - default: - c.Fatalf("missing case for %s", t) - } - err := yaml.Unmarshal([]byte(item.data), value) - if _, ok := err.(*yaml.TypeError); !ok { - c.Assert(err, IsNil) - } - if t.Kind() == reflect.String { - c.Assert(*value.(*string), Equals, item.value) - } else { - c.Assert(value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalNaN(c *C) { - value := map[string]interface{}{} - err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) - c.Assert(err, IsNil) - c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) -} - -var unmarshalErrorTests = []struct { - data, error string -}{ - {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, - {"v: [A,", "yaml: line 1: did not find expected node content"}, - {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, - {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, - {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, - {"value: -", "yaml: block sequence entries are not allowed in this context"}, - {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, - {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, - {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, -} - -func (s *S) TestUnmarshalErrors(c *C) { - for _, item := range unmarshalErrorTests { - var value interface{} - err := yaml.Unmarshal([]byte(item.data), &value) - c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) - } -} - -var unmarshalerTests = []struct { - data, tag string - value interface{} -}{ - {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, - {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, - {"_: 10", "!!int", 10}, - {"_: null", "!!null", nil}, - {`_: BAR!`, "!!str", "BAR!"}, - {`_: "BAR!"`, "!!str", "BAR!"}, - {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, -} - -var unmarshalerResult = map[int]error{} - -type unmarshalerType struct { - value interface{} -} - -func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { - if err := unmarshal(&o.value); err != nil { - return err - } - if i, ok := o.value.(int); ok { - if result, ok := unmarshalerResult[i]; ok { - return result - } - } - return nil -} - -type unmarshalerPointer struct { - Field *unmarshalerType "_" -} - -type unmarshalerValue struct { - Field unmarshalerType "_" -} - -func (s *S) TestUnmarshalerPointerField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerPointer{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - if item.value == nil { - c.Assert(obj.Field, IsNil) - } else { - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalerValueField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerValue{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } -} - -func (s *S) TestUnmarshalerWholeDocument(c *C) { - obj := &unmarshalerType{} - err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) - c.Assert(err, IsNil) - value, ok := obj.value.(map[interface{}]interface{}) - c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) - c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) -} - -func (s *S) TestUnmarshalerTypeError(c *C) { - unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} - unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} - defer func() { - delete(unmarshalerResult, 2) - delete(unmarshalerResult, 4) - }() - - type T struct { - Before int - After int - M map[string]*unmarshalerType - } - var v T - data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " foo\n"+ - " bar\n"+ - " line 1: cannot unmarshal !!str `B` into int") - c.Assert(v.M["abc"], NotNil) - c.Assert(v.M["def"], IsNil) - c.Assert(v.M["ghi"], NotNil) - c.Assert(v.M["jkl"], IsNil) - - c.Assert(v.M["abc"].value, Equals, 1) - c.Assert(v.M["ghi"].value, Equals, 3) -} - -type proxyTypeError struct{} - -func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { - var s string - var a int32 - var b int64 - if err := unmarshal(&s); err != nil { - panic(err) - } - if s == "a" { - if err := unmarshal(&b); err == nil { - panic("should have failed") - } - return unmarshal(&a) - } - if err := unmarshal(&a); err == nil { - panic("should have failed") - } - return unmarshal(&b) -} - -func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { - type T struct { - Before int - After int - M map[string]*proxyTypeError - } - var v T - data := `{before: A, m: {abc: a, def: b}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " line 1: cannot unmarshal !!str `a` into int32\n"+ - " line 1: cannot unmarshal !!str `b` into int64\n"+ - " line 1: cannot unmarshal !!str `B` into int") -} - -type failingUnmarshaler struct{} - -var failingErr = errors.New("failingErr") - -func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { - return failingErr -} - -func (s *S) TestUnmarshalerError(c *C) { - err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) - c.Assert(err, Equals, failingErr) -} - -// From http://yaml.org/type/merge.html -var mergeTests = ` -anchors: - list: - - &CENTER { "x": 1, "y": 2 } - - &LEFT { "x": 0, "y": 2 } - - &BIG { "r": 10 } - - &SMALL { "r": 1 } - -# All the following maps are equal: - -plain: - # Explicit keys - "x": 1 - "y": 2 - "r": 10 - label: center/big - -mergeOne: - # Merge one map - << : *CENTER - "r": 10 - label: center/big - -mergeMultiple: - # Merge multiple maps - << : [ *CENTER, *BIG ] - label: center/big - -override: - # Override - << : [ *BIG, *LEFT, *SMALL ] - "x": 1 - label: center/big - -shortTag: - # Explicit short merge tag - !!merge "<<" : [ *CENTER, *BIG ] - label: center/big - -longTag: - # Explicit merge long tag - ! "<<" : [ *CENTER, *BIG ] - label: center/big - -inlineMap: - # Inlined map - << : {"x": 1, "y": 2, "r": 10} - label: center/big - -inlineSequenceMap: - # Inlined map in sequence - << : [ *CENTER, {"r": 10} ] - label: center/big -` - -func (s *S) TestMerge(c *C) { - var want = map[interface{}]interface{}{ - "x": 1, - "y": 2, - "r": 10, - "label": "center/big", - } - - var m map[interface{}]interface{} - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) - } -} - -func (s *S) TestMergeStruct(c *C) { - type Data struct { - X, Y, R int - Label string - } - want := Data{1, 2, 10, "center/big"} - - var m map[string]Data - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, Equals, want, Commentf("test %q failed", name)) - } -} - -var unmarshalNullTests = []func() interface{}{ - func() interface{} { var v interface{}; v = "v"; return &v }, - func() interface{} { var s = "s"; return &s }, - func() interface{} { var s = "s"; sptr := &s; return &sptr }, - func() interface{} { var i = 1; return &i }, - func() interface{} { var i = 1; iptr := &i; return &iptr }, - func() interface{} { m := map[string]int{"s": 1}; return &m }, - func() interface{} { m := map[string]int{"s": 1}; return m }, -} - -func (s *S) TestUnmarshalNull(c *C) { - for _, test := range unmarshalNullTests { - item := test() - zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() - err := yaml.Unmarshal([]byte("null"), item) - c.Assert(err, IsNil) - if reflect.TypeOf(item).Kind() == reflect.Map { - c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) - } else { - c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) - } - } -} - -//var data []byte -//func init() { -// var err error -// data, err = ioutil.ReadFile("/tmp/file.yaml") -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkUnmarshal(c *C) { -// var err error -// for i := 0; i < c.N; i++ { -// var v map[string]interface{} -// err = yaml.Unmarshal(data, &v) -// } -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkMarshal(c *C) { -// var v map[string]interface{} -// yaml.Unmarshal(data, &v) -// c.ResetTimer() -// for i := 0; i < c.N; i++ { -// yaml.Marshal(&v) -// } -//} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/emitterc.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/emitterc.go deleted file mode 100644 index 9b3dc4a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/emitterc.go +++ /dev/null @@ -1,1685 +0,0 @@ -package yaml - -import ( - "bytes" -) - -// Flush the buffer if needed. -func flush(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) { - return yaml_emitter_flush(emitter) - } - return true -} - -// Put a character to the output buffer. -func put(emitter *yaml_emitter_t, value byte) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - emitter.buffer[emitter.buffer_pos] = value - emitter.buffer_pos++ - emitter.column++ - return true -} - -// Put a line break to the output buffer. -func put_break(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - switch emitter.line_break { - case yaml_CR_BREAK: - emitter.buffer[emitter.buffer_pos] = '\r' - emitter.buffer_pos += 1 - case yaml_LN_BREAK: - emitter.buffer[emitter.buffer_pos] = '\n' - emitter.buffer_pos += 1 - case yaml_CRLN_BREAK: - emitter.buffer[emitter.buffer_pos+0] = '\r' - emitter.buffer[emitter.buffer_pos+1] = '\n' - emitter.buffer_pos += 2 - default: - panic("unknown line break setting") - } - emitter.column = 0 - emitter.line++ - return true -} - -// Copy a character from a string into buffer. -func write(emitter *yaml_emitter_t, s []byte, i *int) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - p := emitter.buffer_pos - w := width(s[*i]) - switch w { - case 4: - emitter.buffer[p+3] = s[*i+3] - fallthrough - case 3: - emitter.buffer[p+2] = s[*i+2] - fallthrough - case 2: - emitter.buffer[p+1] = s[*i+1] - fallthrough - case 1: - emitter.buffer[p+0] = s[*i+0] - default: - panic("unknown character width") - } - emitter.column++ - emitter.buffer_pos += w - *i += w - return true -} - -// Write a whole string into buffer. -func write_all(emitter *yaml_emitter_t, s []byte) bool { - for i := 0; i < len(s); { - if !write(emitter, s, &i) { - return false - } - } - return true -} - -// Copy a line break character from a string into buffer. -func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { - if s[*i] == '\n' { - if !put_break(emitter) { - return false - } - *i++ - } else { - if !write(emitter, s, i) { - return false - } - emitter.column = 0 - emitter.line++ - } - return true -} - -// Set an emitter error and return false. -func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_EMITTER_ERROR - emitter.problem = problem - return false -} - -// Emit an event. -func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.events = append(emitter.events, *event) - for !yaml_emitter_need_more_events(emitter) { - event := &emitter.events[emitter.events_head] - if !yaml_emitter_analyze_event(emitter, event) { - return false - } - if !yaml_emitter_state_machine(emitter, event) { - return false - } - yaml_event_delete(event) - emitter.events_head++ - } - return true -} - -// Check if we need to accumulate more events before emitting. -// -// We accumulate extra -// - 1 event for DOCUMENT-START -// - 2 events for SEQUENCE-START -// - 3 events for MAPPING-START -// -func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { - if emitter.events_head == len(emitter.events) { - return true - } - var accumulate int - switch emitter.events[emitter.events_head].typ { - case yaml_DOCUMENT_START_EVENT: - accumulate = 1 - break - case yaml_SEQUENCE_START_EVENT: - accumulate = 2 - break - case yaml_MAPPING_START_EVENT: - accumulate = 3 - break - default: - return false - } - if len(emitter.events)-emitter.events_head > accumulate { - return false - } - var level int - for i := emitter.events_head; i < len(emitter.events); i++ { - switch emitter.events[i].typ { - case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: - level++ - case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: - level-- - } - if level == 0 { - return false - } - } - return true -} - -// Append a directive to the directives stack. -func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { - for i := 0; i < len(emitter.tag_directives); i++ { - if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") - } - } - - // [Go] Do we actually need to copy this given garbage collection - // and the lack of deallocating destructors? - tag_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(tag_copy.handle, value.handle) - copy(tag_copy.prefix, value.prefix) - emitter.tag_directives = append(emitter.tag_directives, tag_copy) - return true -} - -// Increase the indentation level. -func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { - emitter.indents = append(emitter.indents, emitter.indent) - if emitter.indent < 0 { - if flow { - emitter.indent = emitter.best_indent - } else { - emitter.indent = 0 - } - } else if !indentless { - emitter.indent += emitter.best_indent - } - return true -} - -// State dispatcher. -func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { - switch emitter.state { - default: - case yaml_EMIT_STREAM_START_STATE: - return yaml_emitter_emit_stream_start(emitter, event) - - case yaml_EMIT_FIRST_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, true) - - case yaml_EMIT_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, false) - - case yaml_EMIT_DOCUMENT_CONTENT_STATE: - return yaml_emitter_emit_document_content(emitter, event) - - case yaml_EMIT_DOCUMENT_END_STATE: - return yaml_emitter_emit_document_end(emitter, event) - - case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, true) - - case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false) - - case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false) - - case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, false) - - case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, true) - - case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, false) - - case yaml_EMIT_END_STATE: - return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") - } - panic("invalid emitter state") -} - -// Expect STREAM-START. -func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_STREAM_START_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") - } - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = event.encoding - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = yaml_UTF8_ENCODING - } - } - if emitter.best_indent < 2 || emitter.best_indent > 9 { - emitter.best_indent = 2 - } - if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { - emitter.best_width = 80 - } - if emitter.best_width < 0 { - emitter.best_width = 1<<31 - 1 - } - if emitter.line_break == yaml_ANY_BREAK { - emitter.line_break = yaml_LN_BREAK - } - - emitter.indent = -1 - emitter.line = 0 - emitter.column = 0 - emitter.whitespace = true - emitter.indention = true - - if emitter.encoding != yaml_UTF8_ENCODING { - if !yaml_emitter_write_bom(emitter) { - return false - } - } - emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE - return true -} - -// Expect DOCUMENT-START or STREAM-END. -func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - - if event.typ == yaml_DOCUMENT_START_EVENT { - - if event.version_directive != nil { - if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { - return false - } - } - - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { - return false - } - if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { - return false - } - } - - for i := 0; i < len(default_tag_directives); i++ { - tag_directive := &default_tag_directives[i] - if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { - return false - } - } - - implicit := event.implicit - if !first || emitter.canonical { - implicit = false - } - - if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if event.version_directive != nil { - implicit = false - if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if len(event.tag_directives) > 0 { - implicit = false - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { - return false - } - if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if yaml_emitter_check_empty_document(emitter) { - implicit = false - } - if !implicit { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { - return false - } - if emitter.canonical { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE - return true - } - - if event.typ == yaml_STREAM_END_EVENT { - if emitter.open_ended { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_END_STATE - return true - } - - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") -} - -// Expect the root node. -func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) - return yaml_emitter_emit_node(emitter, event, true, false, false, false) -} - -// Expect DOCUMENT-END. -func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_DOCUMENT_END_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !event.implicit { - // [Go] Allocate the slice elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_DOCUMENT_START_STATE - emitter.tag_directives = emitter.tag_directives[:0] - return true -} - -// Expect a flow item node. -func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_SEQUENCE_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) - return yaml_emitter_emit_node(emitter, event, false, true, false, false) -} - -// Expect a flow key node. -func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_MAPPING_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - - if !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a flow value node. -func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a block item node. -func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { - return false - } - } - if event.typ == yaml_SEQUENCE_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) - return yaml_emitter_emit_node(emitter, event, false, true, false, false) -} - -// Expect a block key node. -func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_increase_indent(emitter, false, false) { - return false - } - } - if event.typ == yaml_MAPPING_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a block value node. -func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a node. -func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, - root bool, sequence bool, mapping bool, simple_key bool) bool { - - emitter.root_context = root - emitter.sequence_context = sequence - emitter.mapping_context = mapping - emitter.simple_key_context = simple_key - - switch event.typ { - case yaml_ALIAS_EVENT: - return yaml_emitter_emit_alias(emitter, event) - case yaml_SCALAR_EVENT: - return yaml_emitter_emit_scalar(emitter, event) - case yaml_SEQUENCE_START_EVENT: - return yaml_emitter_emit_sequence_start(emitter, event) - case yaml_MAPPING_START_EVENT: - return yaml_emitter_emit_mapping_start(emitter, event) - default: - return yaml_emitter_set_emitter_error(emitter, - "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") - } - return false -} - -// Expect ALIAS. -func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SCALAR. -func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_select_scalar_style(emitter, event) { - return false - } - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - if !yaml_emitter_process_scalar(emitter) { - return false - } - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SEQUENCE-START. -func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || - yaml_emitter_check_empty_sequence(emitter) { - emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE - } - return true -} - -// Expect MAPPING-START. -func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || - yaml_emitter_check_empty_mapping(emitter) { - emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE - } - return true -} - -// Check if the document content is an empty scalar. -func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { - return false // [Go] Huh? -} - -// Check if the next events represent an empty sequence. -func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT -} - -// Check if the next events represent an empty mapping. -func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT -} - -// Check if the next node can be expressed as a simple key. -func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { - length := 0 - switch emitter.events[emitter.events_head].typ { - case yaml_ALIAS_EVENT: - length += len(emitter.anchor_data.anchor) - case yaml_SCALAR_EVENT: - if emitter.scalar_data.multiline { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) + - len(emitter.scalar_data.value) - case yaml_SEQUENCE_START_EVENT: - if !yaml_emitter_check_empty_sequence(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - case yaml_MAPPING_START_EVENT: - if !yaml_emitter_check_empty_mapping(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - default: - return false - } - return length <= 128 -} - -// Determine an acceptable scalar style. -func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 - if no_tag && !event.implicit && !event.quoted_implicit { - return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") - } - - style := event.scalar_style() - if style == yaml_ANY_SCALAR_STYLE { - style = yaml_PLAIN_SCALAR_STYLE - } - if emitter.canonical { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - if emitter.simple_key_context && emitter.scalar_data.multiline { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - if style == yaml_PLAIN_SCALAR_STYLE { - if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || - emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if no_tag && !event.implicit { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { - if !emitter.scalar_data.single_quoted_allowed { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { - if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - - if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { - emitter.tag_data.handle = []byte{'!'} - } - emitter.scalar_data.style = style - return true -} - -// Write an achor. -func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { - if emitter.anchor_data.anchor == nil { - return true - } - c := []byte{'&'} - if emitter.anchor_data.alias { - c[0] = '*' - } - if !yaml_emitter_write_indicator(emitter, c, true, false, false) { - return false - } - return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) -} - -// Write a tag. -func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { - if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { - return true - } - if len(emitter.tag_data.handle) > 0 { - if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { - return false - } - if len(emitter.tag_data.suffix) > 0 { - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - } - } else { - // [Go] Allocate these slices elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { - return false - } - } - return true -} - -// Write a scalar. -func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { - switch emitter.scalar_data.style { - case yaml_PLAIN_SCALAR_STYLE: - return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_SINGLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_DOUBLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_LITERAL_SCALAR_STYLE: - return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) - - case yaml_FOLDED_SCALAR_STYLE: - return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) - } - panic("unknown scalar style") -} - -// Check if a %YAML directive is valid. -func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { - if version_directive.major != 1 || version_directive.minor != 1 { - return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") - } - return true -} - -// Check if a %TAG directive is valid. -func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { - handle := tag_directive.handle - prefix := tag_directive.prefix - if len(handle) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") - } - if handle[0] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") - } - if handle[len(handle)-1] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") - } - for i := 1; i < len(handle)-1; i += width(handle[i]) { - if !is_alpha(handle, i) { - return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") - } - } - if len(prefix) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") - } - return true -} - -// Check if an anchor is valid. -func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { - if len(anchor) == 0 { - problem := "anchor value must not be empty" - if alias { - problem = "alias value must not be empty" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - for i := 0; i < len(anchor); i += width(anchor[i]) { - if !is_alpha(anchor, i) { - problem := "anchor value must contain alphanumerical characters only" - if alias { - problem = "alias value must contain alphanumerical characters only" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - } - emitter.anchor_data.anchor = anchor - emitter.anchor_data.alias = alias - return true -} - -// Check if a tag is valid. -func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { - if len(tag) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") - } - for i := 0; i < len(emitter.tag_directives); i++ { - tag_directive := &emitter.tag_directives[i] - if bytes.HasPrefix(tag, tag_directive.prefix) { - emitter.tag_data.handle = tag_directive.handle - emitter.tag_data.suffix = tag[len(tag_directive.prefix):] - return true - } - } - emitter.tag_data.suffix = tag - return true -} - -// Check if a scalar is valid. -func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { - var ( - block_indicators = false - flow_indicators = false - line_breaks = false - special_characters = false - - leading_space = false - leading_break = false - trailing_space = false - trailing_break = false - break_space = false - space_break = false - - preceeded_by_whitespace = false - followed_by_whitespace = false - previous_space = false - previous_break = false - ) - - emitter.scalar_data.value = value - - if len(value) == 0 { - emitter.scalar_data.multiline = false - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = false - return true - } - - if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { - block_indicators = true - flow_indicators = true - } - - preceeded_by_whitespace = true - for i, w := 0, 0; i < len(value); i += w { - w = width(value[0]) - followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) - - if i == 0 { - switch value[i] { - case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': - flow_indicators = true - block_indicators = true - case '?', ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '-': - if followed_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } else { - switch value[i] { - case ',', '?', '[', ']', '{', '}': - flow_indicators = true - case ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '#': - if preceeded_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } - - if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { - special_characters = true - } - if is_space(value, i) { - if i == 0 { - leading_space = true - } - if i+width(value[i]) == len(value) { - trailing_space = true - } - if previous_break { - break_space = true - } - previous_space = true - previous_break = false - } else if is_break(value, i) { - line_breaks = true - if i == 0 { - leading_break = true - } - if i+width(value[i]) == len(value) { - trailing_break = true - } - if previous_space { - space_break = true - } - previous_space = false - previous_break = true - } else { - previous_space = false - previous_break = false - } - - // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. - preceeded_by_whitespace = is_blankz(value, i) - } - - emitter.scalar_data.multiline = line_breaks - emitter.scalar_data.flow_plain_allowed = true - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = true - - if leading_space || leading_break || trailing_space || trailing_break { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if trailing_space { - emitter.scalar_data.block_allowed = false - } - if break_space { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - } - if space_break || special_characters { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - emitter.scalar_data.block_allowed = false - } - if line_breaks { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if flow_indicators { - emitter.scalar_data.flow_plain_allowed = false - } - if block_indicators { - emitter.scalar_data.block_plain_allowed = false - } - return true -} - -// Check if the event data is valid. -func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - emitter.anchor_data.anchor = nil - emitter.tag_data.handle = nil - emitter.tag_data.suffix = nil - emitter.scalar_data.value = nil - - switch event.typ { - case yaml_ALIAS_EVENT: - if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { - return false - } - - case yaml_SCALAR_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - if !yaml_emitter_analyze_scalar(emitter, event.value) { - return false - } - - case yaml_SEQUENCE_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - - case yaml_MAPPING_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - } - return true -} - -// Write the BOM character. -func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { - if !flush(emitter) { - return false - } - pos := emitter.buffer_pos - emitter.buffer[pos+0] = '\xEF' - emitter.buffer[pos+1] = '\xBB' - emitter.buffer[pos+2] = '\xBF' - emitter.buffer_pos += 3 - return true -} - -func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { - indent := emitter.indent - if indent < 0 { - indent = 0 - } - if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { - if !put_break(emitter) { - return false - } - } - for emitter.column < indent { - if !put(emitter, ' ') { - return false - } - } - emitter.whitespace = true - emitter.indention = true - return true -} - -func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, indicator) { - return false - } - emitter.whitespace = is_whitespace - emitter.indention = (emitter.indention && is_indention) - emitter.open_ended = false - return true -} - -func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - for i := 0; i < len(value); { - var must_write bool - switch value[i] { - case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': - must_write = true - default: - must_write = is_alpha(value, i) - } - if must_write { - if !write(emitter, value, &i) { - return false - } - } else { - w := width(value[i]) - for k := 0; k < w; k++ { - octet := value[i] - i++ - if !put(emitter, '%') { - return false - } - - c := octet >> 4 - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - - c = octet & 0x0f - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - } - } - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - - emitter.whitespace = false - emitter.indention = false - if emitter.root_context { - emitter.open_ended = true - } - - return true -} - -func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { - return false - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if value[i] == '\'' { - if !put(emitter, '\'') { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - spaces := false - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { - return false - } - - for i := 0; i < len(value); { - if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || - is_bom(value, i) || is_break(value, i) || - value[i] == '"' || value[i] == '\\' { - - octet := value[i] - - var w int - var v rune - switch { - case octet&0x80 == 0x00: - w, v = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, v = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, v = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, v = 4, rune(octet&0x07) - } - for k := 1; k < w; k++ { - octet = value[i+k] - v = (v << 6) + (rune(octet) & 0x3F) - } - i += w - - if !put(emitter, '\\') { - return false - } - - var ok bool - switch v { - case 0x00: - ok = put(emitter, '0') - case 0x07: - ok = put(emitter, 'a') - case 0x08: - ok = put(emitter, 'b') - case 0x09: - ok = put(emitter, 't') - case 0x0A: - ok = put(emitter, 'n') - case 0x0b: - ok = put(emitter, 'v') - case 0x0c: - ok = put(emitter, 'f') - case 0x0d: - ok = put(emitter, 'r') - case 0x1b: - ok = put(emitter, 'e') - case 0x22: - ok = put(emitter, '"') - case 0x5c: - ok = put(emitter, '\\') - case 0x85: - ok = put(emitter, 'N') - case 0xA0: - ok = put(emitter, '_') - case 0x2028: - ok = put(emitter, 'L') - case 0x2029: - ok = put(emitter, 'P') - default: - if v <= 0xFF { - ok = put(emitter, 'x') - w = 2 - } else if v <= 0xFFFF { - ok = put(emitter, 'u') - w = 4 - } else { - ok = put(emitter, 'U') - w = 8 - } - for k := (w - 1) * 4; ok && k >= 0; k -= 4 { - digit := byte((v >> uint(k)) & 0x0F) - if digit < 10 { - ok = put(emitter, digit+'0') - } else { - ok = put(emitter, digit+'A'-10) - } - } - } - if !ok { - return false - } - spaces = false - } else if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { - if !yaml_emitter_write_indent(emitter) { - return false - } - if is_space(value, i+1) { - if !put(emitter, '\\') { - return false - } - } - i += width(value[i]) - } else if !write(emitter, value, &i) { - return false - } - spaces = true - } else { - if !write(emitter, value, &i) { - return false - } - spaces = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { - if is_space(value, 0) || is_break(value, 0) { - indent_hint := []byte{'0' + byte(emitter.best_indent)} - if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { - return false - } - } - - emitter.open_ended = false - - var chomp_hint [1]byte - if len(value) == 0 { - chomp_hint[0] = '-' - } else { - i := len(value) - 1 - for value[i]&0xC0 == 0x80 { - i-- - } - if !is_break(value, i) { - chomp_hint[0] = '-' - } else if i == 0 { - chomp_hint[0] = '+' - emitter.open_ended = true - } else { - i-- - for value[i]&0xC0 == 0x80 { - i-- - } - if is_break(value, i) { - chomp_hint[0] = '+' - emitter.open_ended = true - } - } - } - if chomp_hint[0] != 0 { - if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { - return false - } - } - return true -} - -func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - if !put_break(emitter) { - return false - } - emitter.indention = true - emitter.whitespace = true - breaks := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - - return true -} - -func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - - if !put_break(emitter) { - return false - } - emitter.indention = true - emitter.whitespace = true - - breaks := true - leading_spaces := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !breaks && !leading_spaces && value[i] == '\n' { - k := 0 - for is_break(value, k) { - k += width(value[k]) - } - if !is_blankz(value, k) { - if !put_break(emitter) { - return false - } - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - leading_spaces = is_blank(value, i) - } - if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - emitter.indention = false - breaks = false - } - } - return true -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode.go deleted file mode 100644 index 972bc03..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode.go +++ /dev/null @@ -1,290 +0,0 @@ -package yaml - -import ( - "encoding" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - "time" -) - -type encoder struct { - emitter yaml_emitter_t - event yaml_event_t - out []byte - flow bool -} - -func newEncoder() (e *encoder) { - e = &encoder{} - e.must(yaml_emitter_initialize(&e.emitter)) - yaml_emitter_set_output_string(&e.emitter, &e.out) - yaml_emitter_set_unicode(&e.emitter, true) - e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)) - e.emit() - e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true)) - e.emit() - return e -} - -func (e *encoder) finish() { - e.must(yaml_document_end_event_initialize(&e.event, true)) - e.emit() - e.emitter.open_ended = false - e.must(yaml_stream_end_event_initialize(&e.event)) - e.emit() -} - -func (e *encoder) destroy() { - yaml_emitter_delete(&e.emitter) -} - -func (e *encoder) emit() { - // This will internally delete the e.event value. - if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT { - e.must(false) - } -} - -func (e *encoder) must(ok bool) { - if !ok { - msg := e.emitter.problem - if msg == "" { - msg = "unknown problem generating YAML content" - } - failf("%s", msg) - } -} - -func (e *encoder) marshal(tag string, in reflect.Value) { - if !in.IsValid() { - e.nilv() - return - } - iface := in.Interface() - if m, ok := iface.(Marshaler); ok { - v, err := m.MarshalYAML() - if err != nil { - fail(err) - } - if v == nil { - e.nilv() - return - } - in = reflect.ValueOf(v) - } - if m, ok := iface.(encoding.TextMarshaler); ok { - text, err := m.MarshalText() - if err != nil { - fail(err) - } - in = reflect.ValueOf(string(text)) - } - switch in.Kind() { - case reflect.Interface: - if in.IsNil() { - e.nilv() - } else { - e.marshal(tag, in.Elem()) - } - case reflect.Map: - e.mapv(tag, in) - case reflect.Ptr: - if in.IsNil() { - e.nilv() - } else { - e.marshal(tag, in.Elem()) - } - case reflect.Struct: - e.structv(tag, in) - case reflect.Slice: - if in.Type().Elem() == mapItemType { - e.itemsv(tag, in) - } else { - e.slicev(tag, in) - } - case reflect.String: - e.stringv(tag, in) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - if in.Type() == durationType { - e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) - } else { - e.intv(tag, in) - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - e.uintv(tag, in) - case reflect.Float32, reflect.Float64: - e.floatv(tag, in) - case reflect.Bool: - e.boolv(tag, in) - default: - panic("cannot marshal type: " + in.Type().String()) - } -} - -func (e *encoder) mapv(tag string, in reflect.Value) { - e.mappingv(tag, func() { - keys := keyList(in.MapKeys()) - sort.Sort(keys) - for _, k := range keys { - e.marshal("", k) - e.marshal("", in.MapIndex(k)) - } - }) -} - -func (e *encoder) itemsv(tag string, in reflect.Value) { - e.mappingv(tag, func() { - slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) - for _, item := range slice { - e.marshal("", reflect.ValueOf(item.Key)) - e.marshal("", reflect.ValueOf(item.Value)) - } - }) -} - -func (e *encoder) structv(tag string, in reflect.Value) { - sinfo, err := getStructInfo(in.Type()) - if err != nil { - panic(err) - } - e.mappingv(tag, func() { - for _, info := range sinfo.FieldsList { - var value reflect.Value - if info.Inline == nil { - value = in.Field(info.Num) - } else { - value = in.FieldByIndex(info.Inline) - } - if info.OmitEmpty && isZero(value) { - continue - } - e.marshal("", reflect.ValueOf(info.Key)) - e.flow = info.Flow - e.marshal("", value) - } - }) -} - -func (e *encoder) mappingv(tag string, f func()) { - implicit := tag == "" - style := yaml_BLOCK_MAPPING_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_MAPPING_STYLE - } - e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) - e.emit() - f() - e.must(yaml_mapping_end_event_initialize(&e.event)) - e.emit() -} - -func (e *encoder) slicev(tag string, in reflect.Value) { - implicit := tag == "" - style := yaml_BLOCK_SEQUENCE_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_SEQUENCE_STYLE - } - e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) - e.emit() - n := in.Len() - for i := 0; i < n; i++ { - e.marshal("", in.Index(i)) - } - e.must(yaml_sequence_end_event_initialize(&e.event)) - e.emit() -} - -// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. -// -// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported -// in YAML 1.2 and by this package, but these should be marshalled quoted for -// the time being for compatibility with other parsers. -func isBase60Float(s string) (result bool) { - // Fast path. - if s == "" { - return false - } - c := s[0] - if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { - return false - } - // Do the full match. - return base60float.MatchString(s) -} - -// From http://yaml.org/type/float.html, except the regular expression there -// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. -var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) - -func (e *encoder) stringv(tag string, in reflect.Value) { - var style yaml_scalar_style_t - s := in.String() - rtag, rs := resolve("", s) - if rtag == yaml_BINARY_TAG { - if tag == "" || tag == yaml_STR_TAG { - tag = rtag - s = rs.(string) - } else if tag == yaml_BINARY_TAG { - failf("explicitly tagged !!binary data must be base64-encoded") - } else { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) - } - } - if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } else if strings.Contains(s, "\n") { - style = yaml_LITERAL_SCALAR_STYLE - } else { - style = yaml_PLAIN_SCALAR_STYLE - } - e.emitScalar(s, "", tag, style) -} - -func (e *encoder) boolv(tag string, in reflect.Value) { - var s string - if in.Bool() { - s = "true" - } else { - s = "false" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *encoder) intv(tag string, in reflect.Value) { - s := strconv.FormatInt(in.Int(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *encoder) uintv(tag string, in reflect.Value) { - s := strconv.FormatUint(in.Uint(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *encoder) floatv(tag string, in reflect.Value) { - // FIXME: Handle 64 bits here. - s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32) - switch s { - case "+Inf": - s = ".inf" - case "-Inf": - s = "-.inf" - case "NaN": - s = ".nan" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *encoder) nilv() { - e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) -} - -func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { - implicit := tag == "" - e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) - e.emit() -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode_test.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode_test.go deleted file mode 100644 index cdbf64a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/encode_test.go +++ /dev/null @@ -1,434 +0,0 @@ -package yaml_test - -import ( - "fmt" - "math" - "strconv" - "strings" - "time" - - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" - "net" -) - -var marshalIntTest = 123 - -var marshalTests = []struct { - value interface{} - data string -}{ - { - nil, - "null\n", - }, { - &struct{}{}, - "{}\n", - }, { - map[string]string{"v": "hi"}, - "v: hi\n", - }, { - map[string]interface{}{"v": "hi"}, - "v: hi\n", - }, { - map[string]string{"v": "true"}, - "v: \"true\"\n", - }, { - map[string]string{"v": "false"}, - "v: \"false\"\n", - }, { - map[string]interface{}{"v": true}, - "v: true\n", - }, { - map[string]interface{}{"v": false}, - "v: false\n", - }, { - map[string]interface{}{"v": 10}, - "v: 10\n", - }, { - map[string]interface{}{"v": -10}, - "v: -10\n", - }, { - map[string]uint{"v": 42}, - "v: 42\n", - }, { - map[string]interface{}{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]int64{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]uint64{"v": 4294967296}, - "v: 4294967296\n", - }, { - map[string]interface{}{"v": "10"}, - "v: \"10\"\n", - }, { - map[string]interface{}{"v": 0.1}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": float64(0.1)}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": -0.1}, - "v: -0.1\n", - }, { - map[string]interface{}{"v": math.Inf(+1)}, - "v: .inf\n", - }, { - map[string]interface{}{"v": math.Inf(-1)}, - "v: -.inf\n", - }, { - map[string]interface{}{"v": math.NaN()}, - "v: .nan\n", - }, { - map[string]interface{}{"v": nil}, - "v: null\n", - }, { - map[string]interface{}{"v": ""}, - "v: \"\"\n", - }, { - map[string][]string{"v": []string{"A", "B"}}, - "v:\n- A\n- B\n", - }, { - map[string][]string{"v": []string{"A", "B\nC"}}, - "v:\n- A\n- |-\n B\n C\n", - }, { - map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, - "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", - }, { - map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - "a:\n b: c\n", - }, { - map[string]interface{}{"a": "-"}, - "a: '-'\n", - }, - - // Simple values. - { - &marshalIntTest, - "123\n", - }, - - // Structures - { - &struct{ Hello string }{"world"}, - "hello: world\n", - }, { - &struct { - A struct { - B string - } - }{struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{&struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{}, - "a: null\n", - }, { - &struct{ A int }{1}, - "a: 1\n", - }, { - &struct{ A []int }{[]int{1, 2}}, - "a:\n- 1\n- 2\n", - }, { - &struct { - B int "a" - }{1}, - "a: 1\n", - }, { - &struct{ A bool }{true}, - "a: true\n", - }, - - // Conditional flag - { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{1, 0}, - "a: 1\n", - }, { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{0, 0}, - "{}\n", - }, { - &struct { - A *struct{ X int } "a,omitempty" - B int "b,omitempty" - }{nil, 0}, - "{}\n", - }, - - // Flow flag - { - &struct { - A []int "a,flow" - }{[]int{1, 2}}, - "a: [1, 2]\n", - }, { - &struct { - A map[string]string "a,flow" - }{map[string]string{"b": "c", "d": "e"}}, - "a: {b: c, d: e}\n", - }, { - &struct { - A struct { - B, D string - } "a,flow" - }{struct{ B, D string }{"c", "e"}}, - "a: {b: c, d: e}\n", - }, - - // Unexported field - { - &struct { - u int - A int - }{0, 1}, - "a: 1\n", - }, - - // Ignored field - { - &struct { - A int - B int "-" - }{1, 2}, - "a: 1\n", - }, - - // Struct inlining - { - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - "a: 1\nb: 2\nc: 3\n", - }, - - // Duration - { - map[string]time.Duration{"a": 3 * time.Second}, - "a: 3s\n", - }, - - // Issue #24: bug in map merging logic. - { - map[string]string{"a": ""}, - "a: \n", - }, - - // Issue #34: marshal unsupported base 60 floats quoted for compatibility - // with old YAML 1.1 parsers. - { - map[string]string{"a": "1:1"}, - "a: \"1:1\"\n", - }, - - // Binary data. - { - map[string]string{"a": "\x00"}, - "a: \"\\0\"\n", - }, { - map[string]string{"a": "\x80\x81\x82"}, - "a: !!binary gIGC\n", - }, { - map[string]string{"a": strings.Repeat("\x90", 54)}, - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - }, - - // Ordered maps. - { - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", - }, - - // Encode unicode as utf-8 rather than in escaped form. - { - map[string]string{"a": "你好"}, - "a: 你好\n", - }, - - // Support encoding.TextMarshaler. - { - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - "a: 1.2.3.4\n", - }, -} - -func (s *S) TestMarshal(c *C) { - for _, item := range marshalTests { - data, err := yaml.Marshal(item.value) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, item.data) - } -} - -var marshalErrorTests = []struct { - value interface{} - error string - panic string -}{{ - value: &struct { - B int - inlineB ",inline" - }{1, inlineB{2, inlineC{3}}}, - panic: `Duplicated key 'b' in struct struct \{ B int; .*`, -}} - -func (s *S) TestMarshalErrors(c *C) { - for _, item := range marshalErrorTests { - if item.panic != "" { - c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) - } else { - _, err := yaml.Marshal(item.value) - c.Assert(err, ErrorMatches, item.error) - } - } -} - -func (s *S) TestMarshalTypeCache(c *C) { - var data []byte - var err error - func() { - type T struct{ A int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - func() { - type T struct{ B int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - c.Assert(string(data), Equals, "b: 0\n") -} - -var marshalerTests = []struct { - data string - value interface{} -}{ - {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, - {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, - {"_: 10\n", 10}, - {"_: null\n", nil}, - {"_: BAR!\n", "BAR!"}, -} - -type marshalerType struct { - value interface{} -} - -func (o marshalerType) MarshalYAML() (interface{}, error) { - return o.value, nil -} - -type marshalerValue struct { - Field marshalerType "_" -} - -func (s *S) TestMarshaler(c *C) { - for _, item := range marshalerTests { - obj := &marshalerValue{} - obj.Field.value = item.value - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, string(item.data)) - } -} - -func (s *S) TestMarshalerWholeDocument(c *C) { - obj := &marshalerType{} - obj.value = map[string]string{"hello": "world!"} - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, "hello: world!\n") -} - -type failingMarshaler struct{} - -func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { - return nil, failingErr -} - -func (s *S) TestMarshalerError(c *C) { - _, err := yaml.Marshal(&failingMarshaler{}) - c.Assert(err, Equals, failingErr) -} - -func (s *S) TestSortedOutput(c *C) { - order := []interface{}{ - false, - true, - 1, - uint(1), - 1.0, - 1.1, - 1.2, - 2, - uint(2), - 2.0, - 2.1, - "", - ".1", - ".2", - ".a", - "1", - "2", - "a!10", - "a/2", - "a/10", - "a~10", - "ab/1", - "b/1", - "b/01", - "b/2", - "b/02", - "b/3", - "b/03", - "b1", - "b01", - "b3", - "c2.10", - "c10.2", - "d1", - "d12", - "d12a", - } - m := make(map[interface{}]int) - for _, k := range order { - m[k] = 1 - } - data, err := yaml.Marshal(m) - c.Assert(err, IsNil) - out := "\n" + string(data) - last := 0 - for i, k := range order { - repr := fmt.Sprint(k) - if s, ok := k.(string); ok { - if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { - repr = `"` + repr + `"` - } - } - index := strings.Index(out, "\n"+repr+":") - if index == -1 { - c.Fatalf("%#v is not in the output: %#v", k, out) - } - if index < last { - c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) - } - last = index - } -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/parserc.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/parserc.go deleted file mode 100644 index 0a7037a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/parserc.go +++ /dev/null @@ -1,1096 +0,0 @@ -package yaml - -import ( - "bytes" -) - -// The parser implements the following grammar: -// -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// implicit_document ::= block_node DOCUMENT-END* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// block_node_or_indentless_sequence ::= -// ALIAS -// | properties (block_content | indentless_block_sequence)? -// | block_content -// | indentless_block_sequence -// block_node ::= ALIAS -// | properties block_content? -// | block_content -// flow_node ::= ALIAS -// | properties flow_content? -// | flow_content -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// block_content ::= block_collection | flow_collection | SCALAR -// flow_content ::= flow_collection | SCALAR -// block_collection ::= block_sequence | block_mapping -// flow_collection ::= flow_sequence | flow_mapping -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// block_mapping ::= BLOCK-MAPPING_START -// ((KEY block_node_or_indentless_sequence?)? -// (VALUE block_node_or_indentless_sequence?)?)* -// BLOCK-END -// flow_sequence ::= FLOW-SEQUENCE-START -// (flow_sequence_entry FLOW-ENTRY)* -// flow_sequence_entry? -// FLOW-SEQUENCE-END -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// flow_mapping ::= FLOW-MAPPING-START -// (flow_mapping_entry FLOW-ENTRY)* -// flow_mapping_entry? -// FLOW-MAPPING-END -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - -// Peek the next token in the token queue. -func peek_token(parser *yaml_parser_t) *yaml_token_t { - if parser.token_available || yaml_parser_fetch_more_tokens(parser) { - return &parser.tokens[parser.tokens_head] - } - return nil -} - -// Remove the next token from the queue (must be called after peek_token). -func skip_token(parser *yaml_parser_t) { - parser.token_available = false - parser.tokens_parsed++ - parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN - parser.tokens_head++ -} - -// Get the next event. -func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { - // Erase the event object. - *event = yaml_event_t{} - - // No events after the end of the stream or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { - return true - } - - // Generate the next event. - return yaml_parser_state_machine(parser, event) -} - -// Set parser error. -func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -// State dispatcher. -func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { - //trace("yaml_parser_state_machine", "state:", parser.state.String()) - - switch parser.state { - case yaml_PARSE_STREAM_START_STATE: - return yaml_parser_parse_stream_start(parser, event) - - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, true) - - case yaml_PARSE_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, false) - - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return yaml_parser_parse_document_content(parser, event) - - case yaml_PARSE_DOCUMENT_END_STATE: - return yaml_parser_parse_document_end(parser, event) - - case yaml_PARSE_BLOCK_NODE_STATE: - return yaml_parser_parse_node(parser, event, true, false) - - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return yaml_parser_parse_node(parser, event, true, true) - - case yaml_PARSE_FLOW_NODE_STATE: - return yaml_parser_parse_node(parser, event, false, false) - - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, true) - - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, false) - - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_indentless_sequence_entry(parser, event) - - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, true) - - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, false) - - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return yaml_parser_parse_block_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, true) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, false) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) - - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, true) - - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, true) - - default: - panic("invalid parser state") - } - return false -} - -// Parse the production: -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// ************ -func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_STREAM_START_TOKEN { - return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) - } - parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - encoding: token.encoding, - } - skip_token(parser) - return true -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// * -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// ************************* -func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - // Parse extra document end indicators. - if !implicit { - for token.typ == yaml_DOCUMENT_END_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && - token.typ != yaml_TAG_DIRECTIVE_TOKEN && - token.typ != yaml_DOCUMENT_START_TOKEN && - token.typ != yaml_STREAM_END_TOKEN { - // Parse an implicit document. - if !yaml_parser_process_directives(parser, nil, nil) { - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_BLOCK_NODE_STATE - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - } else if token.typ != yaml_STREAM_END_TOKEN { - // Parse an explicit document. - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - start_mark := token.start_mark - if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { - return false - } - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_DOCUMENT_START_TOKEN { - yaml_parser_set_parser_error(parser, - "did not find expected ", token.start_mark) - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE - end_mark := token.end_mark - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: false, - } - skip_token(parser) - - } else { - // Parse the stream end. - parser.state = yaml_PARSE_END_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - } - - return true -} - -// Parse the productions: -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// *********** -// -func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || - token.typ == yaml_TAG_DIRECTIVE_TOKEN || - token.typ == yaml_DOCUMENT_START_TOKEN || - token.typ == yaml_DOCUMENT_END_TOKEN || - token.typ == yaml_STREAM_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } - return yaml_parser_parse_node(parser, event, true, false) -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// ************* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// -func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - start_mark := token.start_mark - end_mark := token.start_mark - - implicit := true - if token.typ == yaml_DOCUMENT_END_TOKEN { - end_mark = token.end_mark - skip_token(parser) - implicit = false - } - - parser.tag_directives = parser.tag_directives[:0] - - parser.state = yaml_PARSE_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - start_mark: start_mark, - end_mark: end_mark, - implicit: implicit, - } - return true -} - -// Parse the productions: -// block_node_or_indentless_sequence ::= -// ALIAS -// ***** -// | properties (block_content | indentless_block_sequence)? -// ********** * -// | block_content | indentless_block_sequence -// * -// block_node ::= ALIAS -// ***** -// | properties block_content? -// ********** * -// | block_content -// * -// flow_node ::= ALIAS -// ***** -// | properties flow_content? -// ********** * -// | flow_content -// * -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// ************************* -// block_content ::= block_collection | flow_collection | SCALAR -// ****** -// flow_content ::= flow_collection | SCALAR -// ****** -func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { - //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_ALIAS_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - *event = yaml_event_t{ - typ: yaml_ALIAS_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - anchor: token.value, - } - skip_token(parser) - return true - } - - start_mark := token.start_mark - end_mark := token.start_mark - - var tag_token bool - var tag_handle, tag_suffix, anchor []byte - var tag_mark yaml_mark_t - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - start_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } else if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - start_mark = token.start_mark - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - var tag []byte - if tag_token { - if len(tag_handle) == 0 { - tag = tag_suffix - tag_suffix = nil - } else { - for i := range parser.tag_directives { - if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { - tag = append([]byte(nil), parser.tag_directives[i].prefix...) - tag = append(tag, tag_suffix...) - break - } - } - if len(tag) == 0 { - yaml_parser_set_parser_error_context(parser, - "while parsing a node", start_mark, - "found undefined tag handle", tag_mark) - return false - } - } - } - - implicit := len(tag) == 0 - if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - return true - } - if token.typ == yaml_SCALAR_TOKEN { - var plain_implicit, quoted_implicit bool - end_mark = token.end_mark - if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { - plain_implicit = true - } else if len(tag) == 0 { - quoted_implicit = true - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - value: token.value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(token.style), - } - skip_token(parser) - return true - } - if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { - // [Go] Some of the events below can be merged as they differ only on style. - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), - } - return true - } - if token.typ == yaml_FLOW_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - return true - } - if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - return true - } - if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), - } - return true - } - if len(anchor) > 0 || len(tag) > 0 { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - quoted_implicit: false, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true - } - - context := "while parsing a flow node" - if block { - context = "while parsing a block node" - } - yaml_parser_set_parser_error_context(parser, context, start_mark, - "did not find expected node content", token.start_mark) - return false -} - -// Parse the productions: -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// ******************** *********** * ********* -// -func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } else { - parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } - if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block collection", context_mark, - "did not find expected '-' indicator", token.start_mark) -} - -// Parse the productions: -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// *********** * -func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && - token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? - } - return true -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// ******************* -// ((KEY block_node_or_indentless_sequence?)? -// *** * -// (VALUE block_node_or_indentless_sequence?)?)* -// -// BLOCK-END -// ********* -// -func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_KEY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block mapping", context_mark, - "did not find expected key", token.start_mark) -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// -// ((KEY block_node_or_indentless_sequence?)? -// -// (VALUE block_node_or_indentless_sequence?)?)* -// ***** * -// BLOCK-END -// -// -func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence ::= FLOW-SEQUENCE-START -// ******************* -// (flow_sequence_entry FLOW-ENTRY)* -// * ********** -// flow_sequence_entry? -// * -// FLOW-SEQUENCE-END -// ***************** -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow sequence", context_mark, - "did not find expected ',' or ']'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - implicit: true, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - skip_token(parser) - return true - } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true -} - -// -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// *** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - mark := token.end_mark - skip_token(parser) - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// ***** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? - } - return true -} - -// Parse the productions: -// flow_mapping ::= FLOW-MAPPING-START -// ****************** -// (flow_mapping_entry FLOW-ENTRY)* -// * ********** -// flow_mapping_entry? -// ****************** -// FLOW-MAPPING-END -// **************** -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * *** * -// -func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow mapping", context_mark, - "did not find expected ',' or '}'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } else { - parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - return true -} - -// Parse the productions: -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * ***** * -// -func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { - token := peek_token(parser) - if token == nil { - return false - } - if empty { - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Generate an empty scalar event. -func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: mark, - end_mark: mark, - value: nil, // Empty - implicit: true, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true -} - -var default_tag_directives = []yaml_tag_directive_t{ - {[]byte("!"), []byte("!")}, - {[]byte("!!"), []byte("tag:yaml.org,2002:")}, -} - -// Parse directives. -func yaml_parser_process_directives(parser *yaml_parser_t, - version_directive_ref **yaml_version_directive_t, - tag_directives_ref *[]yaml_tag_directive_t) bool { - - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - - token := peek_token(parser) - if token == nil { - return false - } - - for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { - if version_directive != nil { - yaml_parser_set_parser_error(parser, - "found duplicate %YAML directive", token.start_mark) - return false - } - if token.major != 1 || token.minor != 1 { - yaml_parser_set_parser_error(parser, - "found incompatible YAML document", token.start_mark) - return false - } - version_directive = &yaml_version_directive_t{ - major: token.major, - minor: token.minor, - } - } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { - value := yaml_tag_directive_t{ - handle: token.value, - prefix: token.prefix, - } - if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { - return false - } - tag_directives = append(tag_directives, value) - } - - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - - for i := range default_tag_directives { - if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { - return false - } - } - - if version_directive_ref != nil { - *version_directive_ref = version_directive - } - if tag_directives_ref != nil { - *tag_directives_ref = tag_directives - } - return true -} - -// Append a tag directive to the directives stack. -func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { - for i := range parser.tag_directives { - if bytes.Equal(value.handle, parser.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) - } - } - - // [Go] I suspect the copy is unnecessary. This was likely done - // because there was no way to track ownership of the data. - value_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(value_copy.handle, value.handle) - copy(value_copy.prefix, value.prefix) - parser.tag_directives = append(parser.tag_directives, value_copy) - return true -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/readerc.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/readerc.go deleted file mode 100644 index d5fb097..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/readerc.go +++ /dev/null @@ -1,391 +0,0 @@ -package yaml - -import ( - "io" -) - -// Set the reader error and return 0. -func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { - parser.error = yaml_READER_ERROR - parser.problem = problem - parser.problem_offset = offset - parser.problem_value = value - return false -} - -// Byte order marks. -const ( - bom_UTF8 = "\xef\xbb\xbf" - bom_UTF16LE = "\xff\xfe" - bom_UTF16BE = "\xfe\xff" -) - -// Determine the input stream encoding by checking the BOM symbol. If no BOM is -// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. -func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { - // Ensure that we had enough bytes in the raw buffer. - for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { - if !yaml_parser_update_raw_buffer(parser) { - return false - } - } - - // Determine the encoding. - buf := parser.raw_buffer - pos := parser.raw_buffer_pos - avail := len(buf) - pos - if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { - parser.encoding = yaml_UTF16LE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { - parser.encoding = yaml_UTF16BE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { - parser.encoding = yaml_UTF8_ENCODING - parser.raw_buffer_pos += 3 - parser.offset += 3 - } else { - parser.encoding = yaml_UTF8_ENCODING - } - return true -} - -// Update the raw buffer. -func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { - size_read := 0 - - // Return if the raw buffer is full. - if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { - return true - } - - // Return on EOF. - if parser.eof { - return true - } - - // Move the remaining bytes in the raw buffer to the beginning. - if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { - copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) - } - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] - parser.raw_buffer_pos = 0 - - // Call the read handler to fill the buffer. - size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] - if err == io.EOF { - parser.eof = true - } else if err != nil { - return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) - } - return true -} - -// Ensure that the buffer contains at least `length` characters. -// Return true on success, false on failure. -// -// The length is supposed to be significantly less that the buffer size. -func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { - if parser.read_handler == nil { - panic("read handler must be set") - } - - // If the EOF flag is set and the raw buffer is empty, do nothing. - if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { - return true - } - - // Return if the buffer contains enough characters. - if parser.unread >= length { - return true - } - - // Determine the input encoding if it is not known yet. - if parser.encoding == yaml_ANY_ENCODING { - if !yaml_parser_determine_encoding(parser) { - return false - } - } - - // Move the unread characters to the beginning of the buffer. - buffer_len := len(parser.buffer) - if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { - copy(parser.buffer, parser.buffer[parser.buffer_pos:]) - buffer_len -= parser.buffer_pos - parser.buffer_pos = 0 - } else if parser.buffer_pos == buffer_len { - buffer_len = 0 - parser.buffer_pos = 0 - } - - // Open the whole buffer for writing, and cut it before returning. - parser.buffer = parser.buffer[:cap(parser.buffer)] - - // Fill the buffer until it has enough characters. - first := true - for parser.unread < length { - - // Fill the raw buffer if necessary. - if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { - if !yaml_parser_update_raw_buffer(parser) { - parser.buffer = parser.buffer[:buffer_len] - return false - } - } - first = false - - // Decode the raw buffer. - inner: - for parser.raw_buffer_pos != len(parser.raw_buffer) { - var value rune - var width int - - raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos - - // Decode the next character. - switch parser.encoding { - case yaml_UTF8_ENCODING: - // Decode a UTF-8 character. Check RFC 3629 - // (http://www.ietf.org/rfc/rfc3629.txt) for more details. - // - // The following table (taken from the RFC) is used for - // decoding. - // - // Char. number range | UTF-8 octet sequence - // (hexadecimal) | (binary) - // --------------------+------------------------------------ - // 0000 0000-0000 007F | 0xxxxxxx - // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - // - // Additionally, the characters in the range 0xD800-0xDFFF - // are prohibited as they are reserved for use with UTF-16 - // surrogate pairs. - - // Determine the length of the UTF-8 sequence. - octet := parser.raw_buffer[parser.raw_buffer_pos] - switch { - case octet&0x80 == 0x00: - width = 1 - case octet&0xE0 == 0xC0: - width = 2 - case octet&0xF0 == 0xE0: - width = 3 - case octet&0xF8 == 0xF0: - width = 4 - default: - // The leading octet is invalid. - return yaml_parser_set_reader_error(parser, - "invalid leading UTF-8 octet", - parser.offset, int(octet)) - } - - // Check if the raw buffer contains an incomplete character. - if width > raw_unread { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-8 octet sequence", - parser.offset, -1) - } - break inner - } - - // Decode the leading octet. - switch { - case octet&0x80 == 0x00: - value = rune(octet & 0x7F) - case octet&0xE0 == 0xC0: - value = rune(octet & 0x1F) - case octet&0xF0 == 0xE0: - value = rune(octet & 0x0F) - case octet&0xF8 == 0xF0: - value = rune(octet & 0x07) - default: - value = 0 - } - - // Check and decode the trailing octets. - for k := 1; k < width; k++ { - octet = parser.raw_buffer[parser.raw_buffer_pos+k] - - // Check if the octet is valid. - if (octet & 0xC0) != 0x80 { - return yaml_parser_set_reader_error(parser, - "invalid trailing UTF-8 octet", - parser.offset+k, int(octet)) - } - - // Decode the octet. - value = (value << 6) + rune(octet&0x3F) - } - - // Check the length of the sequence against the value. - switch { - case width == 1: - case width == 2 && value >= 0x80: - case width == 3 && value >= 0x800: - case width == 4 && value >= 0x10000: - default: - return yaml_parser_set_reader_error(parser, - "invalid length of a UTF-8 sequence", - parser.offset, -1) - } - - // Check the range of the value. - if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { - return yaml_parser_set_reader_error(parser, - "invalid Unicode character", - parser.offset, int(value)) - } - - case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: - var low, high int - if parser.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - high, low = 1, 0 - } - - // The UTF-16 encoding is not as simple as one might - // naively think. Check RFC 2781 - // (http://www.ietf.org/rfc/rfc2781.txt). - // - // Normally, two subsequent bytes describe a Unicode - // character. However a special technique (called a - // surrogate pair) is used for specifying character - // values larger than 0xFFFF. - // - // A surrogate pair consists of two pseudo-characters: - // high surrogate area (0xD800-0xDBFF) - // low surrogate area (0xDC00-0xDFFF) - // - // The following formulas are used for decoding - // and encoding characters using surrogate pairs: - // - // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) - // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) - // W1 = 110110yyyyyyyyyy - // W2 = 110111xxxxxxxxxx - // - // where U is the character value, W1 is the high surrogate - // area, W2 is the low surrogate area. - - // Check for incomplete UTF-16 character. - if raw_unread < 2 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 character", - parser.offset, -1) - } - break inner - } - - // Get the character. - value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) - - // Check for unexpected low surrogate area. - if value&0xFC00 == 0xDC00 { - return yaml_parser_set_reader_error(parser, - "unexpected low surrogate area", - parser.offset, int(value)) - } - - // Check for a high surrogate area. - if value&0xFC00 == 0xD800 { - width = 4 - - // Check for incomplete surrogate pair. - if raw_unread < 4 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 surrogate pair", - parser.offset, -1) - } - break inner - } - - // Get the next character. - value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) - - // Check for a low surrogate area. - if value2&0xFC00 != 0xDC00 { - return yaml_parser_set_reader_error(parser, - "expected low surrogate area", - parser.offset+2, int(value2)) - } - - // Generate the value of the surrogate pair. - value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) - } else { - width = 2 - } - - default: - panic("impossible") - } - - // Check if the character is in the allowed range: - // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) - // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) - // | [#x10000-#x10FFFF] (32 bit) - switch { - case value == 0x09: - case value == 0x0A: - case value == 0x0D: - case value >= 0x20 && value <= 0x7E: - case value == 0x85: - case value >= 0xA0 && value <= 0xD7FF: - case value >= 0xE000 && value <= 0xFFFD: - case value >= 0x10000 && value <= 0x10FFFF: - default: - return yaml_parser_set_reader_error(parser, - "control characters are not allowed", - parser.offset, int(value)) - } - - // Move the raw pointers. - parser.raw_buffer_pos += width - parser.offset += width - - // Finally put the character into the buffer. - if value <= 0x7F { - // 0000 0000-0000 007F . 0xxxxxxx - parser.buffer[buffer_len+0] = byte(value) - } else if value <= 0x7FF { - // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) - parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) - } else if value <= 0xFFFF { - // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) - } else { - // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) - } - buffer_len += width - - parser.unread++ - } - - // On EOF, put NUL into the buffer and return. - if parser.eof { - parser.buffer[buffer_len] = 0 - buffer_len++ - parser.unread++ - break - } - } - parser.buffer = parser.buffer[:buffer_len] - return true -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/resolve.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/resolve.go deleted file mode 100644 index 93a8632..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/resolve.go +++ /dev/null @@ -1,203 +0,0 @@ -package yaml - -import ( - "encoding/base64" - "math" - "strconv" - "strings" - "unicode/utf8" -) - -type resolveMapItem struct { - value interface{} - tag string -} - -var resolveTable = make([]byte, 256) -var resolveMap = make(map[string]resolveMapItem) - -func init() { - t := resolveTable - t[int('+')] = 'S' // Sign - t[int('-')] = 'S' - for _, c := range "0123456789" { - t[int(c)] = 'D' // Digit - } - for _, c := range "yYnNtTfFoO~" { - t[int(c)] = 'M' // In map - } - t[int('.')] = '.' // Float (potentially in map) - - var resolveMapList = []struct { - v interface{} - tag string - l []string - }{ - {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, - {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, - {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, - {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, - {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, - {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, - {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, - {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, - {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, - {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, - {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, - {"<<", yaml_MERGE_TAG, []string{"<<"}}, - } - - m := resolveMap - for _, item := range resolveMapList { - for _, s := range item.l { - m[s] = resolveMapItem{item.v, item.tag} - } - } -} - -const longTagPrefix = "tag:yaml.org,2002:" - -func shortTag(tag string) string { - // TODO This can easily be made faster and produce less garbage. - if strings.HasPrefix(tag, longTagPrefix) { - return "!!" + tag[len(longTagPrefix):] - } - return tag -} - -func longTag(tag string) string { - if strings.HasPrefix(tag, "!!") { - return longTagPrefix + tag[2:] - } - return tag -} - -func resolvableTag(tag string) bool { - switch tag { - case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG: - return true - } - return false -} - -func resolve(tag string, in string) (rtag string, out interface{}) { - if !resolvableTag(tag) { - return tag, in - } - - defer func() { - switch tag { - case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: - return - } - failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) - }() - - // Any data is accepted as a !!str or !!binary. - // Otherwise, the prefix is enough of a hint about what it might be. - hint := byte('N') - if in != "" { - hint = resolveTable[in[0]] - } - if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { - // Handle things we can lookup in a map. - if item, ok := resolveMap[in]; ok { - return item.tag, item.value - } - - // Base 60 floats are a bad idea, were dropped in YAML 1.2, and - // are purposefully unsupported here. They're still quoted on - // the way out for compatibility with other parser, though. - - switch hint { - case 'M': - // We've already checked the map above. - - case '.': - // Not in the map, so maybe a normal float. - floatv, err := strconv.ParseFloat(in, 64) - if err == nil { - return yaml_FLOAT_TAG, floatv - } - - case 'D', 'S': - // Int, float, or timestamp. - plain := strings.Replace(in, "_", "", -1) - intv, err := strconv.ParseInt(plain, 0, 64) - if err == nil { - if intv == int64(int(intv)) { - return yaml_INT_TAG, int(intv) - } else { - return yaml_INT_TAG, intv - } - } - uintv, err := strconv.ParseUint(plain, 0, 64) - if err == nil { - return yaml_INT_TAG, uintv - } - floatv, err := strconv.ParseFloat(plain, 64) - if err == nil { - return yaml_FLOAT_TAG, floatv - } - if strings.HasPrefix(plain, "0b") { - intv, err := strconv.ParseInt(plain[2:], 2, 64) - if err == nil { - if intv == int64(int(intv)) { - return yaml_INT_TAG, int(intv) - } else { - return yaml_INT_TAG, intv - } - } - uintv, err := strconv.ParseUint(plain[2:], 2, 64) - if err == nil { - return yaml_INT_TAG, uintv - } - } else if strings.HasPrefix(plain, "-0b") { - intv, err := strconv.ParseInt(plain[3:], 2, 64) - if err == nil { - if intv == int64(int(intv)) { - return yaml_INT_TAG, -int(intv) - } else { - return yaml_INT_TAG, -intv - } - } - } - // XXX Handle timestamps here. - - default: - panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") - } - } - if tag == yaml_BINARY_TAG { - return yaml_BINARY_TAG, in - } - if utf8.ValidString(in) { - return yaml_STR_TAG, in - } - return yaml_BINARY_TAG, encodeBase64(in) -} - -// encodeBase64 encodes s as base64 that is broken up into multiple lines -// as appropriate for the resulting length. -func encodeBase64(s string) string { - const lineLen = 70 - encLen := base64.StdEncoding.EncodedLen(len(s)) - lines := encLen/lineLen + 1 - buf := make([]byte, encLen*2+lines) - in := buf[0:encLen] - out := buf[encLen:] - base64.StdEncoding.Encode(in, []byte(s)) - k := 0 - for i := 0; i < len(in); i += lineLen { - j := i + lineLen - if j > len(in) { - j = len(in) - } - k += copy(out[k:], in[i:j]) - if lines > 1 { - out[k] = '\n' - k++ - } - } - return string(out[:k]) -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/scannerc.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/scannerc.go deleted file mode 100644 index fe93b19..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/scannerc.go +++ /dev/null @@ -1,2710 +0,0 @@ -package yaml - -import ( - "bytes" - "fmt" -) - -// Introduction -// ************ -// -// The following notes assume that you are familiar with the YAML specification -// (http://yaml.org/spec/cvs/current.html). We mostly follow it, although in -// some cases we are less restrictive that it requires. -// -// The process of transforming a YAML stream into a sequence of events is -// divided on two steps: Scanning and Parsing. -// -// The Scanner transforms the input stream into a sequence of tokens, while the -// parser transform the sequence of tokens produced by the Scanner into a -// sequence of parsing events. -// -// The Scanner is rather clever and complicated. The Parser, on the contrary, -// is a straightforward implementation of a recursive-descendant parser (or, -// LL(1) parser, as it is usually called). -// -// Actually there are two issues of Scanning that might be called "clever", the -// rest is quite straightforward. The issues are "block collection start" and -// "simple keys". Both issues are explained below in details. -// -// Here the Scanning step is explained and implemented. We start with the list -// of all the tokens produced by the Scanner together with short descriptions. -// -// Now, tokens: -// -// STREAM-START(encoding) # The stream start. -// STREAM-END # The stream end. -// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. -// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. -// DOCUMENT-START # '---' -// DOCUMENT-END # '...' -// BLOCK-SEQUENCE-START # Indentation increase denoting a block -// BLOCK-MAPPING-START # sequence or a block mapping. -// BLOCK-END # Indentation decrease. -// FLOW-SEQUENCE-START # '[' -// FLOW-SEQUENCE-END # ']' -// BLOCK-SEQUENCE-START # '{' -// BLOCK-SEQUENCE-END # '}' -// BLOCK-ENTRY # '-' -// FLOW-ENTRY # ',' -// KEY # '?' or nothing (simple keys). -// VALUE # ':' -// ALIAS(anchor) # '*anchor' -// ANCHOR(anchor) # '&anchor' -// TAG(handle,suffix) # '!handle!suffix' -// SCALAR(value,style) # A scalar. -// -// The following two tokens are "virtual" tokens denoting the beginning and the -// end of the stream: -// -// STREAM-START(encoding) -// STREAM-END -// -// We pass the information about the input stream encoding with the -// STREAM-START token. -// -// The next two tokens are responsible for tags: -// -// VERSION-DIRECTIVE(major,minor) -// TAG-DIRECTIVE(handle,prefix) -// -// Example: -// -// %YAML 1.1 -// %TAG ! !foo -// %TAG !yaml! tag:yaml.org,2002: -// --- -// -// The correspoding sequence of tokens: -// -// STREAM-START(utf-8) -// VERSION-DIRECTIVE(1,1) -// TAG-DIRECTIVE("!","!foo") -// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") -// DOCUMENT-START -// STREAM-END -// -// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole -// line. -// -// The document start and end indicators are represented by: -// -// DOCUMENT-START -// DOCUMENT-END -// -// Note that if a YAML stream contains an implicit document (without '---' -// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be -// produced. -// -// In the following examples, we present whole documents together with the -// produced tokens. -// -// 1. An implicit document: -// -// 'a scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// STREAM-END -// -// 2. An explicit document: -// -// --- -// 'a scalar' -// ... -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// SCALAR("a scalar",single-quoted) -// DOCUMENT-END -// STREAM-END -// -// 3. Several documents in a stream: -// -// 'a scalar' -// --- -// 'another scalar' -// --- -// 'yet another scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// DOCUMENT-START -// SCALAR("another scalar",single-quoted) -// DOCUMENT-START -// SCALAR("yet another scalar",single-quoted) -// STREAM-END -// -// We have already introduced the SCALAR token above. The following tokens are -// used to describe aliases, anchors, tag, and scalars: -// -// ALIAS(anchor) -// ANCHOR(anchor) -// TAG(handle,suffix) -// SCALAR(value,style) -// -// The following series of examples illustrate the usage of these tokens: -// -// 1. A recursive sequence: -// -// &A [ *A ] -// -// Tokens: -// -// STREAM-START(utf-8) -// ANCHOR("A") -// FLOW-SEQUENCE-START -// ALIAS("A") -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A tagged scalar: -// -// !!float "3.14" # A good approximation. -// -// Tokens: -// -// STREAM-START(utf-8) -// TAG("!!","float") -// SCALAR("3.14",double-quoted) -// STREAM-END -// -// 3. Various scalar styles: -// -// --- # Implicit empty plain scalars do not produce tokens. -// --- a plain scalar -// --- 'a single-quoted scalar' -// --- "a double-quoted scalar" -// --- |- -// a literal scalar -// --- >- -// a folded -// scalar -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// DOCUMENT-START -// SCALAR("a plain scalar",plain) -// DOCUMENT-START -// SCALAR("a single-quoted scalar",single-quoted) -// DOCUMENT-START -// SCALAR("a double-quoted scalar",double-quoted) -// DOCUMENT-START -// SCALAR("a literal scalar",literal) -// DOCUMENT-START -// SCALAR("a folded scalar",folded) -// STREAM-END -// -// Now it's time to review collection-related tokens. We will start with -// flow collections: -// -// FLOW-SEQUENCE-START -// FLOW-SEQUENCE-END -// FLOW-MAPPING-START -// FLOW-MAPPING-END -// FLOW-ENTRY -// KEY -// VALUE -// -// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and -// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' -// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the -// indicators '?' and ':', which are used for denoting mapping keys and values, -// are represented by the KEY and VALUE tokens. -// -// The following examples show flow collections: -// -// 1. A flow sequence: -// -// [item 1, item 2, item 3] -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-SEQUENCE-START -// SCALAR("item 1",plain) -// FLOW-ENTRY -// SCALAR("item 2",plain) -// FLOW-ENTRY -// SCALAR("item 3",plain) -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A flow mapping: -// -// { -// a simple key: a value, # Note that the KEY token is produced. -// ? a complex key: another value, -// } -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// FLOW-ENTRY -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// FLOW-ENTRY -// FLOW-MAPPING-END -// STREAM-END -// -// A simple key is a key which is not denoted by the '?' indicator. Note that -// the Scanner still produce the KEY token whenever it encounters a simple key. -// -// For scanning block collections, the following tokens are used (note that we -// repeat KEY and VALUE here): -// -// BLOCK-SEQUENCE-START -// BLOCK-MAPPING-START -// BLOCK-END -// BLOCK-ENTRY -// KEY -// VALUE -// -// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation -// increase that precedes a block collection (cf. the INDENT token in Python). -// The token BLOCK-END denote indentation decrease that ends a block collection -// (cf. the DEDENT token in Python). However YAML has some syntax pecularities -// that makes detections of these tokens more complex. -// -// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators -// '-', '?', and ':' correspondingly. -// -// The following examples show how the tokens BLOCK-SEQUENCE-START, -// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: -// -// 1. Block sequences: -// -// - item 1 -// - item 2 -// - -// - item 3.1 -// - item 3.2 -// - -// key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 3.1",plain) -// BLOCK-ENTRY -// SCALAR("item 3.2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Block mappings: -// -// a simple key: a value # The KEY token is produced here. -// ? a complex key -// : another value -// a mapping: -// key 1: value 1 -// key 2: value 2 -// a sequence: -// - item 1 -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// KEY -// SCALAR("a mapping",plain) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML does not always require to start a new block collection from a new -// line. If the current line contains only '-', '?', and ':' indicators, a new -// block collection may start at the current line. The following examples -// illustrate this case: -// -// 1. Collections in a sequence: -// -// - - item 1 -// - item 2 -// - key 1: value 1 -// key 2: value 2 -// - ? complex key -// : complex value -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("complex key") -// VALUE -// SCALAR("complex value") -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Collections in a mapping: -// -// ? a sequence -// : - item 1 -// - item 2 -// ? a mapping -// : key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// KEY -// SCALAR("a mapping",plain) -// VALUE -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML also permits non-indented sequences if they are included into a block -// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: -// -// key: -// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key",plain) -// VALUE -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// - -// Ensure that the buffer contains the required number of characters. -// Return true on success, false on failure (reader error or memory error). -func cache(parser *yaml_parser_t, length int) bool { - // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) - return parser.unread >= length || yaml_parser_update_buffer(parser, length) -} - -// Advance the buffer pointer. -func skip(parser *yaml_parser_t) { - parser.mark.index++ - parser.mark.column++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) -} - -func skip_line(parser *yaml_parser_t) { - if is_crlf(parser.buffer, parser.buffer_pos) { - parser.mark.index += 2 - parser.mark.column = 0 - parser.mark.line++ - parser.unread -= 2 - parser.buffer_pos += 2 - } else if is_break(parser.buffer, parser.buffer_pos) { - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) - } -} - -// Copy a character to a string buffer and advance pointers. -func read(parser *yaml_parser_t, s []byte) []byte { - w := width(parser.buffer[parser.buffer_pos]) - if w == 0 { - panic("invalid character sequence") - } - if len(s) == 0 { - s = make([]byte, 0, 32) - } - if w == 1 && len(s)+w <= cap(s) { - s = s[:len(s)+1] - s[len(s)-1] = parser.buffer[parser.buffer_pos] - parser.buffer_pos++ - } else { - s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) - parser.buffer_pos += w - } - parser.mark.index++ - parser.mark.column++ - parser.unread-- - return s -} - -// Copy a line break character to a string buffer and advance pointers. -func read_line(parser *yaml_parser_t, s []byte) []byte { - buf := parser.buffer - pos := parser.buffer_pos - switch { - case buf[pos] == '\r' && buf[pos+1] == '\n': - // CR LF . LF - s = append(s, '\n') - parser.buffer_pos += 2 - parser.mark.index++ - parser.unread-- - case buf[pos] == '\r' || buf[pos] == '\n': - // CR|LF . LF - s = append(s, '\n') - parser.buffer_pos += 1 - case buf[pos] == '\xC2' && buf[pos+1] == '\x85': - // NEL . LF - s = append(s, '\n') - parser.buffer_pos += 2 - case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): - // LS|PS . LS|PS - s = append(s, buf[parser.buffer_pos:pos+3]...) - parser.buffer_pos += 3 - default: - return s - } - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - return s -} - -// Get the next token. -func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { - // Erase the token object. - *token = yaml_token_t{} // [Go] Is this necessary? - - // No tokens after STREAM-END or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR { - return true - } - - // Ensure that the tokens queue contains enough tokens. - if !parser.token_available { - if !yaml_parser_fetch_more_tokens(parser) { - return false - } - } - - // Fetch the next token from the queue. - *token = parser.tokens[parser.tokens_head] - parser.tokens_head++ - parser.tokens_parsed++ - parser.token_available = false - - if token.typ == yaml_STREAM_END_TOKEN { - parser.stream_end_produced = true - } - return true -} - -// Set the scanner error and return false. -func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { - parser.error = yaml_SCANNER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = parser.mark - return false -} - -func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { - context := "while parsing a tag" - if directive { - context = "while parsing a %TAG directive" - } - return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet") -} - -func trace(args ...interface{}) func() { - pargs := append([]interface{}{"+++"}, args...) - fmt.Println(pargs...) - pargs = append([]interface{}{"---"}, args...) - return func() { fmt.Println(pargs...) } -} - -// Ensure that the tokens queue contains at least one token which can be -// returned to the Parser. -func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { - // While we need more tokens to fetch, do it. - for { - // Check if we really need to fetch more tokens. - need_more_tokens := false - - if parser.tokens_head == len(parser.tokens) { - // Queue is empty. - need_more_tokens = true - } else { - // Check if any potential simple key may occupy the head position. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - if simple_key.possible && simple_key.token_number == parser.tokens_parsed { - need_more_tokens = true - break - } - } - } - - // We are finished. - if !need_more_tokens { - break - } - // Fetch the next token. - if !yaml_parser_fetch_next_token(parser) { - return false - } - } - - parser.token_available = true - return true -} - -// The dispatcher for token fetchers. -func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { - // Ensure that the buffer is initialized. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check if we just started scanning. Fetch STREAM-START then. - if !parser.stream_start_produced { - return yaml_parser_fetch_stream_start(parser) - } - - // Eat whitespaces and comments until we reach the next token. - if !yaml_parser_scan_to_next_token(parser) { - return false - } - - // Remove obsolete potential simple keys. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - // Check the indentation level against the current column. - if !yaml_parser_unroll_indent(parser, parser.mark.column) { - return false - } - - // Ensure that the buffer contains at least 4 characters. 4 is the length - // of the longest indicators ('--- ' and '... '). - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - // Is it the end of the stream? - if is_z(parser.buffer, parser.buffer_pos) { - return yaml_parser_fetch_stream_end(parser) - } - - // Is it a directive? - if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { - return yaml_parser_fetch_directive(parser) - } - - buf := parser.buffer - pos := parser.buffer_pos - - // Is it the document start indicator? - if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) - } - - // Is it the document end indicator? - if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) - } - - // Is it the flow sequence start indicator? - if buf[pos] == '[' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) - } - - // Is it the flow mapping start indicator? - if parser.buffer[parser.buffer_pos] == '{' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) - } - - // Is it the flow sequence end indicator? - if parser.buffer[parser.buffer_pos] == ']' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_SEQUENCE_END_TOKEN) - } - - // Is it the flow mapping end indicator? - if parser.buffer[parser.buffer_pos] == '}' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_MAPPING_END_TOKEN) - } - - // Is it the flow entry indicator? - if parser.buffer[parser.buffer_pos] == ',' { - return yaml_parser_fetch_flow_entry(parser) - } - - // Is it the block entry indicator? - if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { - return yaml_parser_fetch_block_entry(parser) - } - - // Is it the key indicator? - if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_key(parser) - } - - // Is it the value indicator? - if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_value(parser) - } - - // Is it an alias? - if parser.buffer[parser.buffer_pos] == '*' { - return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) - } - - // Is it an anchor? - if parser.buffer[parser.buffer_pos] == '&' { - return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) - } - - // Is it a tag? - if parser.buffer[parser.buffer_pos] == '!' { - return yaml_parser_fetch_tag(parser) - } - - // Is it a literal scalar? - if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, true) - } - - // Is it a folded scalar? - if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, false) - } - - // Is it a single-quoted scalar? - if parser.buffer[parser.buffer_pos] == '\'' { - return yaml_parser_fetch_flow_scalar(parser, true) - } - - // Is it a double-quoted scalar? - if parser.buffer[parser.buffer_pos] == '"' { - return yaml_parser_fetch_flow_scalar(parser, false) - } - - // Is it a plain scalar? - // - // A plain scalar may start with any non-blank characters except - // - // '-', '?', ':', ',', '[', ']', '{', '}', - // '#', '&', '*', '!', '|', '>', '\'', '\"', - // '%', '@', '`'. - // - // In the block context (and, for the '-' indicator, in the flow context - // too), it may also start with the characters - // - // '-', '?', ':' - // - // if it is followed by a non-space character. - // - // The last rule is more restrictive than the specification requires. - // [Go] Make this logic more reasonable. - //switch parser.buffer[parser.buffer_pos] { - //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': - //} - if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || - parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || - parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || - (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level == 0 && - (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && - !is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_plain_scalar(parser) - } - - // If we don't determine the token type so far, it is an error. - return yaml_parser_set_scanner_error(parser, - "while scanning for the next token", parser.mark, - "found character that cannot start any token") -} - -// Check the list of potential simple keys and remove the positions that -// cannot contain simple keys anymore. -func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { - // Check for a potential simple key for each flow level. - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - - // The specification requires that a simple key - // - // - is limited to a single line, - // - is shorter than 1024 characters. - if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { - - // Check if the potential simple key to be removed is required. - if simple_key.required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - simple_key.possible = false - } - } - return true -} - -// Check if a simple key may start at the current position and add it if -// needed. -func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { - // A simple key is required at the current position if the scanner is in - // the block context and the current column coincides with the indentation - // level. - - required := parser.flow_level == 0 && parser.indent == parser.mark.column - - // A simple key is required only when it is the first token in the current - // line. Therefore it is always allowed. But we add a check anyway. - if required && !parser.simple_key_allowed { - panic("should not happen") - } - - // - // If the current position may start a simple key, save it. - // - if parser.simple_key_allowed { - simple_key := yaml_simple_key_t{ - possible: true, - required: required, - token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), - } - simple_key.mark = parser.mark - - if !yaml_parser_remove_simple_key(parser) { - return false - } - parser.simple_keys[len(parser.simple_keys)-1] = simple_key - } - return true -} - -// Remove a potential simple key at the current flow level. -func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { - i := len(parser.simple_keys) - 1 - if parser.simple_keys[i].possible { - // If the key is required, it is an error. - if parser.simple_keys[i].required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", parser.simple_keys[i].mark, - "could not find expected ':'") - } - } - // Remove the key from the stack. - parser.simple_keys[i].possible = false - return true -} - -// Increase the flow level and resize the simple key list if needed. -func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { - // Reset the simple key on the next level. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - // Increase the flow level. - parser.flow_level++ - return true -} - -// Decrease the flow level. -func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { - if parser.flow_level > 0 { - parser.flow_level-- - parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] - } - return true -} - -// Push the current indentation level to the stack and set the new level -// the current column is greater than the indentation level. In this case, -// append or insert the specified token into the token queue. -func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - if parser.indent < column { - // Push the current indentation level to the stack and set the new - // indentation level. - parser.indents = append(parser.indents, parser.indent) - parser.indent = column - - // Create a token and insert it into the queue. - token := yaml_token_t{ - typ: typ, - start_mark: mark, - end_mark: mark, - } - if number > -1 { - number -= parser.tokens_parsed - } - yaml_insert_token(parser, number, &token) - } - return true -} - -// Pop indentation levels from the indents stack until the current level -// becomes less or equal to the column. For each intendation level, append -// the BLOCK-END token. -func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - // Loop through the intendation levels in the stack. - for parser.indent > column { - // Create a token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - yaml_insert_token(parser, -1, &token) - - // Pop the indentation level. - parser.indent = parser.indents[len(parser.indents)-1] - parser.indents = parser.indents[:len(parser.indents)-1] - } - return true -} - -// Initialize the scanner and produce the STREAM-START token. -func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { - - // Set the initial indentation. - parser.indent = -1 - - // Initialize the simple key stack. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - // A simple key is allowed at the beginning of the stream. - parser.simple_key_allowed = true - - // We have started. - parser.stream_start_produced = true - - // Create the STREAM-START token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_START_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - encoding: parser.encoding, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the STREAM-END token and shut down the scanner. -func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { - - // Force new line. - if parser.mark.column != 0 { - parser.mark.column = 0 - parser.mark.line++ - } - - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the STREAM-END token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. -func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. - token := yaml_token_t{} - if !yaml_parser_scan_directive(parser, &token) { - return false - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the DOCUMENT-START or DOCUMENT-END token. -func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Consume the token. - start_mark := parser.mark - - skip(parser) - skip(parser) - skip(parser) - - end_mark := parser.mark - - // Create the DOCUMENT-START or DOCUMENT-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. -func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // The indicators '[' and '{' may start a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // Increase the flow level. - if !yaml_parser_increase_flow_level(parser) { - return false - } - - // A simple key may follow the indicators '[' and '{'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. -func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset any potential simple key on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Decrease the flow level. - if !yaml_parser_decrease_flow_level(parser) { - return false - } - - // No simple keys after the indicators ']' and '}'. - parser.simple_key_allowed = false - - // Consume the token. - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-ENTRY token. -func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after ','. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_FLOW_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the BLOCK-ENTRY token. -func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { - // Check if the scanner is in the block context. - if parser.flow_level == 0 { - // Check if we are allowed to start a new entry. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "block sequence entries are not allowed in this context") - } - // Add the BLOCK-SEQUENCE-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { - return false - } - } else { - // It is an error for the '-' indicator to occur in the flow context, - // but we let the Parser detect and report about it because the Parser - // is able to point to the context. - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '-'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the BLOCK-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the KEY token. -func yaml_parser_fetch_key(parser *yaml_parser_t) bool { - - // In the block context, additional checks are required. - if parser.flow_level == 0 { - // Check if we are allowed to start a new key (not nessesary simple). - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping keys are not allowed in this context") - } - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '?' in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the KEY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the VALUE token. -func yaml_parser_fetch_value(parser *yaml_parser_t) bool { - - simple_key := &parser.simple_keys[len(parser.simple_keys)-1] - - // Have we found a simple key? - if simple_key.possible { - // Create the KEY token and insert it into the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: simple_key.mark, - end_mark: simple_key.mark, - } - yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) - - // In the block context, we may need to add the BLOCK-MAPPING-START token. - if !yaml_parser_roll_indent(parser, simple_key.mark.column, - simple_key.token_number, - yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { - return false - } - - // Remove the simple key. - simple_key.possible = false - - // A simple key cannot follow another simple key. - parser.simple_key_allowed = false - - } else { - // The ':' indicator follows a complex key. - - // In the block context, extra checks are required. - if parser.flow_level == 0 { - - // Check if we are allowed to start a complex value. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping values are not allowed in this context") - } - - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Simple keys after ':' are allowed in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - } - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the VALUE token and append it to the queue. - token := yaml_token_t{ - typ: yaml_VALUE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the ALIAS or ANCHOR token. -func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // An anchor or an alias could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow an anchor or an alias. - parser.simple_key_allowed = false - - // Create the ALIAS or ANCHOR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_anchor(parser, &token, typ) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the TAG token. -func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { - // A tag could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a tag. - parser.simple_key_allowed = false - - // Create the TAG token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_tag(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. -func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { - // Remove any potential simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // A simple key may follow a block scalar. - parser.simple_key_allowed = true - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_block_scalar(parser, &token, literal) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. -func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_flow_scalar(parser, &token, single) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,plain) token. -func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_plain_scalar(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Eat whitespaces and comments until the next token is found. -func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { - - // Until the next token is not found. - for { - // Allow the BOM mark to start a line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { - skip(parser) - } - - // Eat whitespaces. - // Tabs are allowed: - // - in the flow context - // - in the block context, but not at the beginning of the line or - // after '-', '?', or ':' (complex value). - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Eat a comment until a line break. - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // If it is a line break, eat it. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - - // In the block context, a new line may start a simple key. - if parser.flow_level == 0 { - parser.simple_key_allowed = true - } - } else { - break // We have found a token. - } - } - - return true -} - -// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { - // Eat '%'. - start_mark := parser.mark - skip(parser) - - // Scan the directive name. - var name []byte - if !yaml_parser_scan_directive_name(parser, start_mark, &name) { - return false - } - - // Is it a YAML directive? - if bytes.Equal(name, []byte("YAML")) { - // Scan the VERSION directive value. - var major, minor int8 - if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { - return false - } - end_mark := parser.mark - - // Create a VERSION-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_VERSION_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - major: major, - minor: minor, - } - - // Is it a TAG directive? - } else if bytes.Equal(name, []byte("TAG")) { - // Scan the TAG directive value. - var handle, prefix []byte - if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { - return false - } - end_mark := parser.mark - - // Create a TAG-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_TAG_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - prefix: prefix, - } - - // Unknown directive. - } else { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found uknown directive name") - return false - } - - // Eat the rest of the line including any comments. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - return true -} - -// Scan the directive name. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^ -// -func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { - // Consume the directive name. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - var s []byte - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the name is empty. - if len(s) == 0 { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "could not find expected directive name") - return false - } - - // Check for an blank character after the name. - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unexpected non-alphabetical character") - return false - } - *name = s - return true -} - -// Scan the value of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^ -func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the major version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { - return false - } - - // Eat '.'. - if parser.buffer[parser.buffer_pos] != '.' { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected digit or '.' character") - } - - skip(parser) - - // Consume the minor version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { - return false - } - return true -} - -const max_number_length = 2 - -// Scan the version number of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^ -// %YAML 1.1 # a comment \n -// ^ -func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { - - // Repeat while the next character is digit. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var value, length int8 - for is_digit(parser.buffer, parser.buffer_pos) { - // Check if the number is too long. - length++ - if length > max_number_length { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "found extremely long version number") - } - value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the number was present. - if length == 0 { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected version number") - } - *number = value - return true -} - -// Scan the value of a TAG-DIRECTIVE token. -// -// Scope: -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { - var handle_value, prefix_value []byte - - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a handle. - if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { - return false - } - - // Expect a whitespace. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blank(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace") - return false - } - - // Eat whitespaces. - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a prefix. - if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { - return false - } - - // Expect a whitespace or line break. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace or line break") - return false - } - - *handle = handle_value - *prefix = prefix_value - return true -} - -func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { - var s []byte - - // Eat the indicator character. - start_mark := parser.mark - skip(parser) - - // Consume the value. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - end_mark := parser.mark - - /* - * Check if length of the anchor is greater than 0 and it is followed by - * a whitespace character or one of the indicators: - * - * '?', ':', ',', ']', '}', '%', '@', '`'. - */ - - if len(s) == 0 || - !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || - parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '`') { - context := "while scanning an alias" - if typ == yaml_ANCHOR_TOKEN { - context = "while scanning an anchor" - } - yaml_parser_set_scanner_error(parser, context, start_mark, - "did not find expected alphabetic or numeric character") - return false - } - - // Create a token. - *token = yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - value: s, - } - - return true -} - -/* - * Scan a TAG token. - */ - -func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { - var handle, suffix []byte - - start_mark := parser.mark - - // Check if the tag is in the canonical form. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - if parser.buffer[parser.buffer_pos+1] == '<' { - // Keep the handle as '' - - // Eat '!<' - skip(parser) - skip(parser) - - // Consume the tag value. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - - // Check for '>' and eat it. - if parser.buffer[parser.buffer_pos] != '>' { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find the expected '>'") - return false - } - - skip(parser) - } else { - // The tag has either the '!suffix' or the '!handle!suffix' form. - - // First, try to scan a handle. - if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { - return false - } - - // Check if it is, indeed, handle. - if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { - // Scan the suffix now. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - } else { - // It wasn't a handle after all. Scan the rest of the tag. - if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { - return false - } - - // Set the handle to '!'. - handle = []byte{'!'} - - // A special case: the '!' tag. Set the handle to '' and the - // suffix to '!'. - if len(suffix) == 0 { - handle, suffix = suffix, handle - } - } - } - - // Check the character which ends the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find expected whitespace or line break") - return false - } - - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_TAG_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - suffix: suffix, - } - return true -} - -// Scan a tag handle. -func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { - // Check the initial '!' character. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] != '!' { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - - var s []byte - - // Copy the '!' character. - s = read(parser, s) - - // Copy all subsequent alphabetical and numerical characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the trailing character is '!' and copy it. - if parser.buffer[parser.buffer_pos] == '!' { - s = read(parser, s) - } else { - // It's either the '!' tag or not really a tag handle. If it's a %TAG - // directive, it's an error. If it's a tag token, it must be a part of URI. - if directive && !(s[0] == '!' && s[1] == 0) { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - } - - *handle = s - return true -} - -// Scan a tag. -func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { - //size_t length = head ? strlen((char *)head) : 0 - var s []byte - - // Copy the head if needed. - // - // Note that we don't copy the leading '!' character. - if len(head) > 1 { - s = append(s, head[1:]...) - } - - // Scan the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // The set of characters that may appear in URI is as follows: - // - // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', - // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', - // '%'. - // [Go] Convert this into more reasonable logic. - for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || - parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || - parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || - parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || - parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || - parser.buffer[parser.buffer_pos] == '%' { - // Check if it is a URI-escape sequence. - if parser.buffer[parser.buffer_pos] == '%' { - if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { - return false - } - } else { - s = read(parser, s) - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the tag is non-empty. - if len(s) == 0 { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected tag URI") - return false - } - *uri = s - return true -} - -// Decode an URI-escape sequence corresponding to a single UTF-8 character. -func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { - - // Decode the required number of characters. - w := 1024 - for w > 0 { - // Check for a URI-escaped octet. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - - if !(parser.buffer[parser.buffer_pos] == '%' && - is_hex(parser.buffer, parser.buffer_pos+1) && - is_hex(parser.buffer, parser.buffer_pos+2)) { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find URI escaped octet") - } - - // Get the octet. - octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) - - // If it is the leading octet, determine the length of the UTF-8 sequence. - if w == 1024 { - w = width(octet) - if w == 0 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect leading UTF-8 octet") - } - } else { - // Check if the trailing octet is correct. - if octet&0xC0 != 0x80 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect trailing UTF-8 octet") - } - } - - // Copy the octet and move the pointers. - *s = append(*s, octet) - skip(parser) - skip(parser) - skip(parser) - w-- - } - return true -} - -// Scan a block scalar. -func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { - // Eat the indicator '|' or '>'. - start_mark := parser.mark - skip(parser) - - // Scan the additional block scalar indicators. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check for a chomping indicator. - var chomping, increment int - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - // Set the chomping method and eat the indicator. - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - - // Check for an indentation indicator. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if is_digit(parser.buffer, parser.buffer_pos) { - // Check that the intendation is greater than 0. - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an intendation indicator equal to 0") - return false - } - - // Get the intendation level and eat the indicator. - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - } - - } else if is_digit(parser.buffer, parser.buffer_pos) { - // Do the same as above, but in the opposite order. - - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an intendation indicator equal to 0") - return false - } - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - } - } - - // Eat whitespaces and comments to the end of the line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - end_mark := parser.mark - - // Set the intendation level if it was specified. - var indent int - if increment > 0 { - if parser.indent >= 0 { - indent = parser.indent + increment - } else { - indent = increment - } - } - - // Scan the leading line breaks and determine the indentation level if needed. - var s, leading_break, trailing_breaks []byte - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - - // Scan the block scalar content. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var leading_blank, trailing_blank bool - for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { - // We are at the beginning of a non-empty line. - - // Is it a trailing whitespace? - trailing_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Check if we need to fold the leading line break. - if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { - // Do we need to join the lines by space? - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } - } else { - s = append(s, leading_break...) - } - leading_break = leading_break[:0] - - // Append the remaining line breaks. - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - - // Is it a leading whitespace? - leading_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Consume the current line. - for !is_breakz(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - leading_break = read_line(parser, leading_break) - - // Eat the following intendation spaces and line breaks. - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - } - - // Chomp the tail. - if chomping != -1 { - s = append(s, leading_break...) - } - if chomping == 1 { - s = append(s, trailing_breaks...) - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_LITERAL_SCALAR_STYLE, - } - if !literal { - token.style = yaml_FOLDED_SCALAR_STYLE - } - return true -} - -// Scan intendation spaces and line breaks for a block scalar. Determine the -// intendation level if needed. -func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { - *end_mark = parser.mark - - // Eat the intendation spaces and line breaks. - max_indent := 0 - for { - // Eat the intendation spaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.mark.column > max_indent { - max_indent = parser.mark.column - } - - // Check for a tab character messing the intendation. - if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { - return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found a tab character where an intendation space is expected") - } - - // Have we found a non-empty line? - if !is_break(parser.buffer, parser.buffer_pos) { - break - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - // [Go] Should really be returning breaks instead. - *breaks = read_line(parser, *breaks) - *end_mark = parser.mark - } - - // Determine the indentation level if needed. - if *indent == 0 { - *indent = max_indent - if *indent < parser.indent+1 { - *indent = parser.indent + 1 - } - if *indent < 1 { - *indent = 1 - } - } - return true -} - -// Scan a quoted scalar. -func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { - // Eat the left quote. - start_mark := parser.mark - skip(parser) - - // Consume the content of the quoted scalar. - var s, leading_break, trailing_breaks, whitespaces []byte - for { - // Check that there are no document indicators at the beginning of the line. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected document indicator") - return false - } - - // Check for EOF. - if is_z(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected end of stream") - return false - } - - // Consume non-blank characters. - leading_blanks := false - for !is_blankz(parser.buffer, parser.buffer_pos) { - if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { - // Is is an escaped single quote. - s = append(s, '\'') - skip(parser) - skip(parser) - - } else if single && parser.buffer[parser.buffer_pos] == '\'' { - // It is a right single quote. - break - } else if !single && parser.buffer[parser.buffer_pos] == '"' { - // It is a right double quote. - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { - // It is an escaped line break. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - skip(parser) - skip_line(parser) - leading_blanks = true - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' { - // It is an escape sequence. - code_length := 0 - - // Check the escape character. - switch parser.buffer[parser.buffer_pos+1] { - case '0': - s = append(s, 0) - case 'a': - s = append(s, '\x07') - case 'b': - s = append(s, '\x08') - case 't', '\t': - s = append(s, '\x09') - case 'n': - s = append(s, '\x0A') - case 'v': - s = append(s, '\x0B') - case 'f': - s = append(s, '\x0C') - case 'r': - s = append(s, '\x0D') - case 'e': - s = append(s, '\x1B') - case ' ': - s = append(s, '\x20') - case '"': - s = append(s, '"') - case '\'': - s = append(s, '\'') - case '\\': - s = append(s, '\\') - case 'N': // NEL (#x85) - s = append(s, '\xC2') - s = append(s, '\x85') - case '_': // #xA0 - s = append(s, '\xC2') - s = append(s, '\xA0') - case 'L': // LS (#x2028) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA8') - case 'P': // PS (#x2029) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA9') - case 'x': - code_length = 2 - case 'u': - code_length = 4 - case 'U': - code_length = 8 - default: - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found unknown escape character") - return false - } - - skip(parser) - skip(parser) - - // Consume an arbitrary escape code. - if code_length > 0 { - var value int - - // Scan the character value. - if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { - return false - } - for k := 0; k < code_length; k++ { - if !is_hex(parser.buffer, parser.buffer_pos+k) { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "did not find expected hexdecimal number") - return false - } - value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) - } - - // Check the value and write the character. - if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found invalid Unicode character escape code") - return false - } - if value <= 0x7F { - s = append(s, byte(value)) - } else if value <= 0x7FF { - s = append(s, byte(0xC0+(value>>6))) - s = append(s, byte(0x80+(value&0x3F))) - } else if value <= 0xFFFF { - s = append(s, byte(0xE0+(value>>12))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } else { - s = append(s, byte(0xF0+(value>>18))) - s = append(s, byte(0x80+((value>>12)&0x3F))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } - - // Advance the pointer. - for k := 0; k < code_length; k++ { - skip(parser) - } - } - } else { - // It is a non-escaped non-blank character. - s = read(parser, s) - } - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - // Check if we are at the end of the scalar. - if single { - if parser.buffer[parser.buffer_pos] == '\'' { - break - } - } else { - if parser.buffer[parser.buffer_pos] == '"' { - break - } - } - - // Consume blank characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Join the whitespaces or fold line breaks. - if leading_blanks { - // Do we need to fold line breaks? - if len(leading_break) > 0 && leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Eat the right quote. - skip(parser) - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_SINGLE_QUOTED_SCALAR_STYLE, - } - if !single { - token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - return true -} - -// Scan a plain scalar. -func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { - - var s, leading_break, trailing_breaks, whitespaces []byte - var leading_blanks bool - var indent = parser.indent + 1 - - start_mark := parser.mark - end_mark := parser.mark - - // Consume the content of the plain scalar. - for { - // Check for a document indicator. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - break - } - - // Check for a comment. - if parser.buffer[parser.buffer_pos] == '#' { - break - } - - // Consume non-blank characters. - for !is_blankz(parser.buffer, parser.buffer_pos) { - - // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". - if parser.flow_level > 0 && - parser.buffer[parser.buffer_pos] == ':' && - !is_blankz(parser.buffer, parser.buffer_pos+1) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found unexpected ':'") - return false - } - - // Check for indicators that may end a plain scalar. - if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level > 0 && - (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}')) { - break - } - - // Check if we need to join whitespaces and breaks. - if leading_blanks || len(whitespaces) > 0 { - if leading_blanks { - // Do we need to fold line breaks? - if leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - leading_blanks = false - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Copy the character. - s = read(parser, s) - - end_mark = parser.mark - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - // Is it the end? - if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { - break - } - - // Consume blank characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - - // Check for tab character that abuse intendation. - if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violate intendation") - return false - } - - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check intendation level. - if parser.flow_level == 0 && parser.mark.column < indent { - break - } - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_PLAIN_SCALAR_STYLE, - } - - // Note that we change the 'simple_key_allowed' flag. - if leading_blanks { - parser.simple_key_allowed = true - } - return true -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/sorter.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/sorter.go deleted file mode 100644 index 5958822..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/sorter.go +++ /dev/null @@ -1,104 +0,0 @@ -package yaml - -import ( - "reflect" - "unicode" -) - -type keyList []reflect.Value - -func (l keyList) Len() int { return len(l) } -func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l keyList) Less(i, j int) bool { - a := l[i] - b := l[j] - ak := a.Kind() - bk := b.Kind() - for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { - a = a.Elem() - ak = a.Kind() - } - for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { - b = b.Elem() - bk = b.Kind() - } - af, aok := keyFloat(a) - bf, bok := keyFloat(b) - if aok && bok { - if af != bf { - return af < bf - } - if ak != bk { - return ak < bk - } - return numLess(a, b) - } - if ak != reflect.String || bk != reflect.String { - return ak < bk - } - ar, br := []rune(a.String()), []rune(b.String()) - for i := 0; i < len(ar) && i < len(br); i++ { - if ar[i] == br[i] { - continue - } - al := unicode.IsLetter(ar[i]) - bl := unicode.IsLetter(br[i]) - if al && bl { - return ar[i] < br[i] - } - if al || bl { - return bl - } - var ai, bi int - var an, bn int64 - for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { - an = an*10 + int64(ar[ai]-'0') - } - for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { - bn = bn*10 + int64(br[bi]-'0') - } - if an != bn { - return an < bn - } - if ai != bi { - return ai < bi - } - return ar[i] < br[i] - } - return len(ar) < len(br) -} - -// keyFloat returns a float value for v if it is a number/bool -// and whether it is a number/bool or not. -func keyFloat(v reflect.Value) (f float64, ok bool) { - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return float64(v.Int()), true - case reflect.Float32, reflect.Float64: - return v.Float(), true - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return float64(v.Uint()), true - case reflect.Bool: - if v.Bool() { - return 1, true - } - return 0, true - } - return 0, false -} - -// numLess returns whether a < b. -// a and b must necessarily have the same kind. -func numLess(a, b reflect.Value) bool { - switch a.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return a.Int() < b.Int() - case reflect.Float32, reflect.Float64: - return a.Float() < b.Float() - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return a.Uint() < b.Uint() - case reflect.Bool: - return !a.Bool() && b.Bool() - } - panic("not a number") -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/suite_test.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/suite_test.go deleted file mode 100644 index c5cf1ed..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/suite_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package yaml_test - -import ( - . "gopkg.in/check.v1" - "testing" -) - -func Test(t *testing.T) { TestingT(t) } - -type S struct{} - -var _ = Suite(&S{}) diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/writerc.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/writerc.go deleted file mode 100644 index 190362f..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/writerc.go +++ /dev/null @@ -1,89 +0,0 @@ -package yaml - -// Set the writer error and return false. -func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_WRITER_ERROR - emitter.problem = problem - return false -} - -// Flush the output buffer. -func yaml_emitter_flush(emitter *yaml_emitter_t) bool { - if emitter.write_handler == nil { - panic("write handler not set") - } - - // Check if the buffer is empty. - if emitter.buffer_pos == 0 { - return true - } - - // If the output encoding is UTF-8, we don't need to recode the buffer. - if emitter.encoding == yaml_UTF8_ENCODING { - if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - return true - } - - // Recode the buffer into the raw buffer. - var low, high int - if emitter.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - high, low = 1, 0 - } - - pos := 0 - for pos < emitter.buffer_pos { - // See the "reader.c" code for more details on UTF-8 encoding. Note - // that we assume that the buffer contains a valid UTF-8 sequence. - - // Read the next UTF-8 character. - octet := emitter.buffer[pos] - - var w int - var value rune - switch { - case octet&0x80 == 0x00: - w, value = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, value = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, value = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, value = 4, rune(octet&0x07) - } - for k := 1; k < w; k++ { - octet = emitter.buffer[pos+k] - value = (value << 6) + (rune(octet) & 0x3F) - } - pos += w - - // Write the character. - if value < 0x10000 { - var b [2]byte - b[high] = byte(value >> 8) - b[low] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1]) - } else { - // Write the character using a surrogate pair (check "reader.c"). - var b [4]byte - value -= 0x10000 - b[high] = byte(0xD8 + (value >> 18)) - b[low] = byte((value >> 10) & 0xFF) - b[high+2] = byte(0xDC + ((value >> 8) & 0xFF)) - b[low+2] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3]) - } - } - - // Write the raw buffer. - if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - emitter.raw_buffer = emitter.raw_buffer[:0] - return true -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yaml.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yaml.go deleted file mode 100644 index f2fd50a..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yaml.go +++ /dev/null @@ -1,507 +0,0 @@ -// Package yaml implements YAML support for the Go language. -// -// Source code and other details for the project are available at GitHub: -// -// https://github.com/go-yaml/yaml -// -package yaml - -import ( - "errors" - "fmt" - "reflect" - "regexp" - "strings" - "sync" -) - -// MapSlice encodes and decodes as a YAML map. -// The order of keys is preserved when encoding and decoding. -type MapSlice []MapItem - -// MapItem is an item in a MapSlice. -type MapItem struct { - Key, Value interface{} -} - -// The Unmarshaler interface may be implemented by types to customize their -// behavior when being unmarshaled from a YAML document. The UnmarshalYAML -// method receives a function that may be called to unmarshal the original -// YAML value into a field or variable. It is safe to call the unmarshal -// function parameter more than once if necessary. -// Generally, the idea is to call the method to unmarshal into a value of -// the correct type, then use this unmarshalled value wherever you need to. -// -// For example: -// -// type T struct { -// values map[string]int -// sum int -// } -// -// func (t *T) UnmarshalYAML(unmarshaler func(interface{}) error) error { -// -// if err := unmarshaler(t.values); err != nil { -// return err -// } -// -// for _, value := range t.values { -// t.sum += value -// } -// -// return nil -// } -// -// var t T -// yaml.Unmarshal([]byte("T:\n a: 1\n b: 2\n c:3"), &t) -// -// -type Unmarshaler interface { - UnmarshalYAML(unmarshal func(interface{}) error) error -} - -// The Marshaler interface may be implemented by types to customize their -// behavior when being marshaled into a YAML document. The returned value -// is marshaled in place of the original value implementing Marshaler. -// -// If an error is returned by MarshalYAML, the marshaling procedure stops -// and returns with the provided error. -type Marshaler interface { - MarshalYAML() (interface{}, error) -} - -// Unmarshal decodes the first document found within the in byte slice -// and assigns decoded values into the out value. -// -// Maps and pointers (to a struct, string, int, etc) are accepted as out -// values. If an internal pointer within a struct is not initialized, -// the yaml package will initialize it if necessary for unmarshalling -// the provided data. The out parameter must not be nil. -// -// The type of the decoded values should be compatible with the respective -// values in out. If one or more values cannot be decoded due to a type -// mismatches, decoding continues partially until the end of the YAML -// content, and a *yaml.TypeError is returned with details for all -// missed values. -// -// Struct fields are only unmarshalled if they are exported (have an -// upper case first letter), and are unmarshalled using the field name -// lowercased as the default key. Custom keys may be defined via the -// "yaml" name in the field tag: the content preceding the first comma -// is used as the key, and the following comma-separated options are -// used to tweak the marshalling process (see Marshal). -// Conflicting names result in a runtime error. -// -// For example: -// -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) -// -// -// Another flag which is supported during umarshaling, but must be used on -// its own, is: -// -// regexp Unmarshal all encountered YAML values with keys that -// match the regular expression into the tagged field, -// which must be a map or a slice of a type that the -// YAML value should be unmarshaled into. -// [Unmarshaling] -// -// For example: -// -// type T struct { -// A int -// B int -// Numbers map[string]int `yaml:",regexp:num.*"` -// Phrases []string `yaml:",regexp:phr.*"` -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2\nnum1: 1\nnum2: 50\n" + -// "phraseOne: to be or not to be\n" + -// "phraseTwo: you can't touch my key!\n" + -// "anotherKey: ThisValueWillNotBeUnmarshalled"), &t) -// -// You can also use the regexp flag to get all unmapped values into a map for -// runtime usage: -// -// type T struct { -// A int -// B int -// EverythingElse map[string]interface{} `yaml:",regexp:.*"` -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2\nnum1: 1\nnum2: 50\n" + -// "anInteger: 111\n" + -// "aFloat: 0.5555\n" + -// "anotherKey: WhichIsAstring\n" + -// "aSequence: [1, 2, 3]\n" + -// "aMapping: {hello: world}"), &t) -// -// The resulting EverythingElse map will contain everything except the values of -// a and b. -// -// See the documentation of Marshal for the format of additional tags and a list -// of supported tag options. -// -func Unmarshal(in []byte, out interface{}) (err error) { - defer handleErr(&err) - d := newDecoder() - p := newParser(in) - defer p.destroy() - node := p.parse() - if node != nil { - v := reflect.ValueOf(out) - if v.Kind() == reflect.Ptr && !v.IsNil() { - v = v.Elem() - } - d.unmarshal(node, v) - } - if d.terrors != nil && len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -// Marshal serializes the value provided into a YAML document. The structure -// of the generated document will reflect the structure of the value itself. -// Maps and pointers (to struct, string, int, etc) are accepted as the in value. -// -// Struct fields are only unmarshalled if they are exported (have an upper case -// first letter), and are unmarshalled using the field name lowercased as the -// default key. Custom keys may be defined via the "yaml" name in the field -// tag: the content preceding the first comma is used as the key, and the -// following comma-separated options are used to tweak the marshalling process. -// Conflicting names result in a runtime error. -// -// The field tag format accepted is: -// -// `(...) yaml:"[][,[,]]" (...)` -// -// The following flags are currently supported: -// -// omitempty Only include the field when marshaling if it's -// not set to the zero value for the type or to empty -// slices or maps. Does not apply to zero valued structs. -// [Marshaling] -// -// flow Use a flow style when marshaling (useful for structs, -// sequences and maps.) -// [Marshaling] -// -// inline Inline the struct it's applied to, so its fields -// are processed (during marshaling and unmarshaling) -// as if they were part of the outer struct. -// [Marshaling, Unmarshaling] -// -// In addition, if the key is "-", the field is ignored. -// -// For example: -// -// type T struct { -// F int "a,omitempty" -// B int -// } -// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" -// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" -// -func Marshal(in interface{}) (out []byte, err error) { - defer handleErr(&err) - e := newEncoder() - defer e.destroy() - e.marshal("", reflect.ValueOf(in)) - e.finish() - out = e.out - return -} - -func handleErr(err *error) { - if v := recover(); v != nil { - if e, ok := v.(yamlError); ok { - *err = e.err - } else { - panic(v) - } - } -} - -type yamlError struct { - err error -} - -func fail(err error) { - panic(yamlError{err}) -} - -func failf(format string, args ...interface{}) { - panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) -} - -// A TypeError is returned by Unmarshal when one or more fields in -// the YAML document cannot be properly decoded into the requested -// types. When this error is returned, the value is still -// unmarshaled partially. -type TypeError struct { - Errors []string -} - -func (e *TypeError) Error() string { - return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) -} - -// -------------------------------------------------------------------------- -// Maintain a mapping of keys to structure field indexes - -// The code in this section was copied from mgo/bson. - -// structInfo holds details for the serialization of fields of -// a given struct. -type structInfo struct { - Type reflect.Type - FieldsMap map[string]fieldInfo - FieldsList []fieldInfo - - // InlineMap is the number of the field in the struct that - // contains an ,inline map, or -1 if there's none. - InlineMap int - - // This a list of fields with regexps that are tested during unmarshaling, - // and when matched by a YAML key, will write the value to the designated - // field value. This is check from top to bottom, the first match wins. - // Exact key match (using FieldsMap) is checked before the regular - // expression phase. - RegexpFieldsList []fieldInfo -} - -type fieldInfo struct { - - // YAML key to use for marshaling/unmarshaling of this field - Key string - - // Index of the field in the struct - Num int - - // When marshaling, whether to omit this field when it is set to Zero - OmitEmpty bool - - // Whether to marhsal using the YAML flow style - Flow bool - - // Regular expression that the YAML key must match for unmarshaling into - // this field - Regexp *regexp.Regexp - - // Inline holds the field index if the field is part of an inlined struct. - Inline []int -} - -var structMap = make(map[reflect.Type]*structInfo) -var fieldMapMutex sync.RWMutex - -func getStructInfo(st reflect.Type) (*structInfo, error) { - - // Try and get the relevant structInfo - fieldMapMutex.RLock() - sinfo, found := structMap[st] - fieldMapMutex.RUnlock() - - // Return it, if found - if found { - return sinfo, nil - } - - // Otherwise, let's create it. - n := st.NumField() - fieldsMap := make(map[string]fieldInfo) - fieldsList := make([]fieldInfo, 0, n) - regexpFieldsList := make([]fieldInfo, 0) - inlineMap := -1 - - // Go over each field - for i := 0; i != n; i++ { - - // Get the StructField - field := st.Field(i) - - if field.PkgPath != "" { - continue // Skip private fields - } - - // Create a fieldInfo struct - info := fieldInfo{Num: i} - - // Try and get the yaml tag from the field - tag := field.Tag.Get("yaml") - - // An empty tag means a possibly badly formatted tag. We try and act nice - if tag == "" { - - rawTagString := string(field.Tag) - - if strings.Index(string(field.Tag), ":") < 0 { - // Handle tags with no yaml: prefix, just use the raw comment - // tag string - tag = rawTagString - } else if strings.HasPrefix(rawTagString, "yaml:") { - // Handle badly formatted yaml: tags (no quotes, for example) - failf("Detected badly formatted tag for field %s; missing quotes?\n", - field.Name) - } - - // TODO: Consider whether we should be more strict: - // if tag != "" { - // return nil, - // fmt.Errof("Badly formatted yaml tag detected: %s", - // string(field.Tag) - // } - } - - // '-' means - skip this field - if tag == "-" { - continue - } - - // First, try and see if we have a regexp flag set - if so, handle it. - if strings.HasPrefix(tag, ",regexp:") { - - // Store just the pattern - regex := tag[8:] - - // Compile parses a regular expression. Use it as the key in the - // hash. - compiledRegexp := regexp.MustCompile(regex) - - // Verify that the type is indeed a map or a slice - if field.Type.Kind() != reflect.Map && - field.Type.Kind() != reflect.Slice { - - // Die - failf("field %s.%s has regexp flag set but is not a map or slice", - st.Name(), field.Name) - } - - info.Regexp = compiledRegexp - regexpFieldsList = append(regexpFieldsList, info) - continue - } - - // Try and see what flags are set - inline := false - if fields := strings.Split(tag, ","); len(fields) > 1 { - for _, flag := range fields[1:] { - switch flag { - - // Only include the field if it's not set to the zero - // value for the type or to empty slices or maps. - // Does not apply to zero valued structs. [Marshaling] - case "omitempty": - info.OmitEmpty = true - - // Marshal using a flow style (useful for structs, sequences and - // maps.) [Marshaling] - case "flow": - info.Flow = true - - // Inline the struct it's applied to, so its fields are processed - // as if they were part of the outer struct. - // [Marshaling, Unmarshaling] - case "inline": - inline = true - - // Unsupported flag? - default: - return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) - } - } - tag = fields[0] - } - - // Handle the struct fields as if they were part of the outer struct. - if inline { - switch field.Type.Kind() { - // TODO: Implement support for inline maps. - //case reflect.Map: - // if inlineMap >= 0 { - // return nil, errors.New("Multiple ,inline maps in struct " + st.String()) - // } - // if field.Type.Key() != reflect.TypeOf("") { - // return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) - // } - // inlineMap = info.Num - case reflect.Struct: - sinfo, err := getStructInfo(field.Type) - if err != nil { - return nil, err - } - for _, finfo := range sinfo.FieldsList { - if _, found := fieldsMap[finfo.Key]; found { - msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - if finfo.Inline == nil { - finfo.Inline = []int{i, finfo.Num} - } else { - finfo.Inline = append([]int{i}, finfo.Inline...) - } - fieldsMap[finfo.Key] = finfo - fieldsList = append(fieldsList, finfo) - } - default: - //return nil, errors.New("Option ,inline needs a struct value or map field") - return nil, errors.New("Option ,inline needs a struct value field") - } - continue - } - - if tag != "" { - // If we have a yaml tag with a custom mapping key, then use it - info.Key = tag - } else { - // Otherwise, use the lower-case name of the field - info.Key = strings.ToLower(field.Name) - } - - // Search for duplicate mapping keys, error if found - if _, found = fieldsMap[info.Key]; found { - msg := "Duplicated key '" + info.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - - // Add the generated fieldInfo to the fields list and map - fieldsList = append(fieldsList, info) - fieldsMap[info.Key] = info - } - - // Create a new structInfo object, with all the metadata we collected - sinfo = &structInfo{st, fieldsMap, fieldsList, inlineMap, regexpFieldsList} - - // Set it to the struct map, return it - fieldMapMutex.Lock() - structMap[st] = sinfo - fieldMapMutex.Unlock() - - return sinfo, nil -} - -func isZero(v reflect.Value) bool { - switch v.Kind() { - case reflect.String: - return len(v.String()) == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - case reflect.Slice: - return v.Len() == 0 - case reflect.Map: - return v.Len() == 0 - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Bool: - return !v.Bool() - } - return false -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlh.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlh.go deleted file mode 100644 index 4b020b1..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlh.go +++ /dev/null @@ -1,716 +0,0 @@ -package yaml - -import ( - "io" -) - -// The version directive data. -type yaml_version_directive_t struct { - major int8 // The major version number. - minor int8 // The minor version number. -} - -// The tag directive data. -type yaml_tag_directive_t struct { - handle []byte // The tag handle. - prefix []byte // The tag prefix. -} - -type yaml_encoding_t int - -// The stream encoding. -const ( - // Let the parser choose the encoding. - yaml_ANY_ENCODING yaml_encoding_t = iota - - yaml_UTF8_ENCODING // The default UTF-8 encoding. - yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. - yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. -) - -type yaml_break_t int - -// Line break types. -const ( - // Let the parser choose the break type. - yaml_ANY_BREAK yaml_break_t = iota - - yaml_CR_BREAK // Use CR for line breaks (Mac style). - yaml_LN_BREAK // Use LN for line breaks (Unix style). - yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). -) - -type yaml_error_type_t int - -// Many bad things could happen with the parser and emitter. -const ( - // No error is produced. - yaml_NO_ERROR yaml_error_type_t = iota - - yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. - yaml_READER_ERROR // Cannot read or decode the input stream. - yaml_SCANNER_ERROR // Cannot scan the input stream. - yaml_PARSER_ERROR // Cannot parse the input stream. - yaml_COMPOSER_ERROR // Cannot compose a YAML document. - yaml_WRITER_ERROR // Cannot write to the output stream. - yaml_EMITTER_ERROR // Cannot emit a YAML stream. -) - -// The pointer position. -type yaml_mark_t struct { - index int // The position index. - line int // The position line. - column int // The position column. -} - -// Node Styles - -type yaml_style_t int8 - -type yaml_scalar_style_t yaml_style_t - -// Scalar styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota - - yaml_PLAIN_SCALAR_STYLE // The plain scalar style. - yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. - yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. - yaml_LITERAL_SCALAR_STYLE // The literal scalar style. - yaml_FOLDED_SCALAR_STYLE // The folded scalar style. -) - -type yaml_sequence_style_t yaml_style_t - -// Sequence styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota - - yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. - yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. -) - -type yaml_mapping_style_t yaml_style_t - -// Mapping styles. -const ( - // Let the emitter choose the style. - yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota - - yaml_BLOCK_MAPPING_STYLE // The block mapping style. - yaml_FLOW_MAPPING_STYLE // The flow mapping style. -) - -// Tokens - -type yaml_token_type_t int - -// Token types. -const ( - // An empty token. - yaml_NO_TOKEN yaml_token_type_t = iota - - yaml_STREAM_START_TOKEN // A STREAM-START token. - yaml_STREAM_END_TOKEN // A STREAM-END token. - - yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. - yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. - yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. - yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. - - yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. - yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. - yaml_BLOCK_END_TOKEN // A BLOCK-END token. - - yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. - yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. - yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. - yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. - - yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. - yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. - yaml_KEY_TOKEN // A KEY token. - yaml_VALUE_TOKEN // A VALUE token. - - yaml_ALIAS_TOKEN // An ALIAS token. - yaml_ANCHOR_TOKEN // An ANCHOR token. - yaml_TAG_TOKEN // A TAG token. - yaml_SCALAR_TOKEN // A SCALAR token. -) - -func (tt yaml_token_type_t) String() string { - switch tt { - case yaml_NO_TOKEN: - return "yaml_NO_TOKEN" - case yaml_STREAM_START_TOKEN: - return "yaml_STREAM_START_TOKEN" - case yaml_STREAM_END_TOKEN: - return "yaml_STREAM_END_TOKEN" - case yaml_VERSION_DIRECTIVE_TOKEN: - return "yaml_VERSION_DIRECTIVE_TOKEN" - case yaml_TAG_DIRECTIVE_TOKEN: - return "yaml_TAG_DIRECTIVE_TOKEN" - case yaml_DOCUMENT_START_TOKEN: - return "yaml_DOCUMENT_START_TOKEN" - case yaml_DOCUMENT_END_TOKEN: - return "yaml_DOCUMENT_END_TOKEN" - case yaml_BLOCK_SEQUENCE_START_TOKEN: - return "yaml_BLOCK_SEQUENCE_START_TOKEN" - case yaml_BLOCK_MAPPING_START_TOKEN: - return "yaml_BLOCK_MAPPING_START_TOKEN" - case yaml_BLOCK_END_TOKEN: - return "yaml_BLOCK_END_TOKEN" - case yaml_FLOW_SEQUENCE_START_TOKEN: - return "yaml_FLOW_SEQUENCE_START_TOKEN" - case yaml_FLOW_SEQUENCE_END_TOKEN: - return "yaml_FLOW_SEQUENCE_END_TOKEN" - case yaml_FLOW_MAPPING_START_TOKEN: - return "yaml_FLOW_MAPPING_START_TOKEN" - case yaml_FLOW_MAPPING_END_TOKEN: - return "yaml_FLOW_MAPPING_END_TOKEN" - case yaml_BLOCK_ENTRY_TOKEN: - return "yaml_BLOCK_ENTRY_TOKEN" - case yaml_FLOW_ENTRY_TOKEN: - return "yaml_FLOW_ENTRY_TOKEN" - case yaml_KEY_TOKEN: - return "yaml_KEY_TOKEN" - case yaml_VALUE_TOKEN: - return "yaml_VALUE_TOKEN" - case yaml_ALIAS_TOKEN: - return "yaml_ALIAS_TOKEN" - case yaml_ANCHOR_TOKEN: - return "yaml_ANCHOR_TOKEN" - case yaml_TAG_TOKEN: - return "yaml_TAG_TOKEN" - case yaml_SCALAR_TOKEN: - return "yaml_SCALAR_TOKEN" - } - return "" -} - -// The token structure. -type yaml_token_t struct { - // The token type. - typ yaml_token_type_t - - // The start/end of the token. - start_mark, end_mark yaml_mark_t - - // The stream encoding (for yaml_STREAM_START_TOKEN). - encoding yaml_encoding_t - - // The alias/anchor/scalar value or tag/tag directive handle - // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). - value []byte - - // The tag suffix (for yaml_TAG_TOKEN). - suffix []byte - - // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). - prefix []byte - - // The scalar style (for yaml_SCALAR_TOKEN). - style yaml_scalar_style_t - - // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). - major, minor int8 -} - -// Events - -type yaml_event_type_t int8 - -// Event types. -const ( - // An empty event. - yaml_NO_EVENT yaml_event_type_t = iota - - yaml_STREAM_START_EVENT // A STREAM-START event. - yaml_STREAM_END_EVENT // A STREAM-END event. - yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. - yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. - yaml_ALIAS_EVENT // An ALIAS event. - yaml_SCALAR_EVENT // A SCALAR event. - yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. - yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. - yaml_MAPPING_START_EVENT // A MAPPING-START event. - yaml_MAPPING_END_EVENT // A MAPPING-END event. -) - -// The event structure. -type yaml_event_t struct { - - // The event type. - typ yaml_event_type_t - - // The start and end of the event. - start_mark, end_mark yaml_mark_t - - // The document encoding (for yaml_STREAM_START_EVENT). - encoding yaml_encoding_t - - // The version directive (for yaml_DOCUMENT_START_EVENT). - version_directive *yaml_version_directive_t - - // The list of tag directives (for yaml_DOCUMENT_START_EVENT). - tag_directives []yaml_tag_directive_t - - // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). - anchor []byte - - // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - tag []byte - - // The scalar value (for yaml_SCALAR_EVENT). - value []byte - - // Is the document start/end indicator implicit, or the tag optional? - // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). - implicit bool - - // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). - quoted_implicit bool - - // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - style yaml_style_t -} - -func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } -func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } -func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } - -// Nodes - -const ( - yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. - yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. - yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. - yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. - yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. - yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. - - yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. - yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. - - // Not in original libyaml. - yaml_BINARY_TAG = "tag:yaml.org,2002:binary" - yaml_MERGE_TAG = "tag:yaml.org,2002:merge" - - yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. - yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. - yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. -) - -type yaml_node_type_t int - -// Node types. -const ( - // An empty node. - yaml_NO_NODE yaml_node_type_t = iota - - yaml_SCALAR_NODE // A scalar node. - yaml_SEQUENCE_NODE // A sequence node. - yaml_MAPPING_NODE // A mapping node. -) - -// An element of a sequence node. -type yaml_node_item_t int - -// An element of a mapping node. -type yaml_node_pair_t struct { - key int // The key of the element. - value int // The value of the element. -} - -// The node structure. -type yaml_node_t struct { - typ yaml_node_type_t // The node type. - tag []byte // The node tag. - - // The node data. - - // The scalar parameters (for yaml_SCALAR_NODE). - scalar struct { - value []byte // The scalar value. - length int // The length of the scalar value. - style yaml_scalar_style_t // The scalar style. - } - - // The sequence parameters (for YAML_SEQUENCE_NODE). - sequence struct { - items_data []yaml_node_item_t // The stack of sequence items. - style yaml_sequence_style_t // The sequence style. - } - - // The mapping parameters (for yaml_MAPPING_NODE). - mapping struct { - pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). - pairs_start *yaml_node_pair_t // The beginning of the stack. - pairs_end *yaml_node_pair_t // The end of the stack. - pairs_top *yaml_node_pair_t // The top of the stack. - style yaml_mapping_style_t // The mapping style. - } - - start_mark yaml_mark_t // The beginning of the node. - end_mark yaml_mark_t // The end of the node. - -} - -// The document structure. -type yaml_document_t struct { - - // The document nodes. - nodes []yaml_node_t - - // The version directive. - version_directive *yaml_version_directive_t - - // The list of tag directives. - tag_directives_data []yaml_tag_directive_t - tag_directives_start int // The beginning of the tag directives list. - tag_directives_end int // The end of the tag directives list. - - start_implicit int // Is the document start indicator implicit? - end_implicit int // Is the document end indicator implicit? - - // The start/end of the document. - start_mark, end_mark yaml_mark_t -} - -// The prototype of a read handler. -// -// The read handler is called when the parser needs to read more bytes from the -// source. The handler should write not more than size bytes to the buffer. -// The number of written bytes should be set to the size_read variable. -// -// [in,out] data A pointer to an application data specified by -// yaml_parser_set_input(). -// [out] buffer The buffer to write the data from the source. -// [in] size The size of the buffer. -// [out] size_read The actual number of bytes read from the source. -// -// On success, the handler should return 1. If the handler failed, -// the returned value should be 0. On EOF, the handler should set the -// size_read to 0 and return 1. -type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) - -// This structure holds information about a potential simple key. -type yaml_simple_key_t struct { - possible bool // Is a simple key possible? - required bool // Is a simple key required? - token_number int // The number of the token. - mark yaml_mark_t // The position mark. -} - -// The states of the parser. -type yaml_parser_state_t int - -const ( - yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota - - yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. - yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. - yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. - yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. - yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. - yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. - yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. - yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. - yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. - yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. - yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. - yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. - yaml_PARSE_END_STATE // Expect nothing. -) - -func (ps yaml_parser_state_t) String() string { - switch ps { - case yaml_PARSE_STREAM_START_STATE: - return "yaml_PARSE_STREAM_START_STATE" - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_START_STATE: - return "yaml_PARSE_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return "yaml_PARSE_DOCUMENT_CONTENT_STATE" - case yaml_PARSE_DOCUMENT_END_STATE: - return "yaml_PARSE_DOCUMENT_END_STATE" - case yaml_PARSE_BLOCK_NODE_STATE: - return "yaml_PARSE_BLOCK_NODE_STATE" - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" - case yaml_PARSE_FLOW_NODE_STATE: - return "yaml_PARSE_FLOW_NODE_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" - case yaml_PARSE_END_STATE: - return "yaml_PARSE_END_STATE" - } - return "" -} - -// This structure holds aliases data. -type yaml_alias_data_t struct { - anchor []byte // The anchor. - index int // The node id. - mark yaml_mark_t // The anchor mark. -} - -// The parser structure. -// -// All members are internal. Manage the structure using the -// yaml_parser_ family of functions. -type yaml_parser_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - - problem string // Error description. - - // The byte about which the problem occured. - problem_offset int - problem_value int - problem_mark yaml_mark_t - - // The error context. - context string - context_mark yaml_mark_t - - // Reader stuff - - read_handler yaml_read_handler_t // Read handler. - - input_file io.Reader // File input data. - input []byte // String input data. - input_pos int - - eof bool // EOF flag - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - unread int // The number of unread characters in the buffer. - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The input encoding. - - offset int // The offset of the current position (in bytes). - mark yaml_mark_t // The mark of the current position. - - // Scanner stuff - - stream_start_produced bool // Have we started to scan the input stream? - stream_end_produced bool // Have we reached the end of the input stream? - - flow_level int // The number of unclosed '[' and '{' indicators. - - tokens []yaml_token_t // The tokens queue. - tokens_head int // The head of the tokens queue. - tokens_parsed int // The number of tokens fetched from the queue. - token_available bool // Does the tokens queue contain a token ready for dequeueing. - - indent int // The current indentation level. - indents []int // The indentation levels stack. - - simple_key_allowed bool // May a simple key occur at the current position? - simple_keys []yaml_simple_key_t // The stack of simple keys. - - // Parser stuff - - state yaml_parser_state_t // The current parser state. - states []yaml_parser_state_t // The parser states stack. - marks []yaml_mark_t // The stack of marks. - tag_directives []yaml_tag_directive_t // The list of TAG directives. - - // Dumper stuff - - aliases []yaml_alias_data_t // The alias data. - - document *yaml_document_t // The currently parsed document. -} - -// Emitter Definitions - -// The prototype of a write handler. -// -// The write handler is called when the emitter needs to flush the accumulated -// characters to the output. The handler should write @a size bytes of the -// @a buffer to the output. -// -// @param[in,out] data A pointer to an application data specified by -// yaml_emitter_set_output(). -// @param[in] buffer The buffer with bytes to be written. -// @param[in] size The size of the buffer. -// -// @returns On success, the handler should return @c 1. If the handler failed, -// the returned value should be @c 0. -// -type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error - -type yaml_emitter_state_t int - -// The emitter states. -const ( - // Expect STREAM-START. - yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota - - yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. - yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. - yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. - yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. - yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. - yaml_EMIT_END_STATE // Expect nothing. -) - -// The emitter structure. -// -// All members are internal. Manage the structure using the @c yaml_emitter_ -// family of functions. -type yaml_emitter_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - problem string // Error description. - - // Writer stuff - - write_handler yaml_write_handler_t // Write handler. - - output_buffer *[]byte // String output data. - output_file io.Writer // File output data. - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The stream encoding. - - // Emitter stuff - - canonical bool // If the output is in the canonical style? - best_indent int // The number of indentation spaces. - best_width int // The preferred width of the output lines. - unicode bool // Allow unescaped non-ASCII characters? - line_break yaml_break_t // The preferred line break. - - state yaml_emitter_state_t // The current emitter state. - states []yaml_emitter_state_t // The stack of states. - - events []yaml_event_t // The event queue. - events_head int // The head of the event queue. - - indents []int // The stack of indentation levels. - - tag_directives []yaml_tag_directive_t // The list of tag directives. - - indent int // The current indentation level. - - flow_level int // The current flow level. - - root_context bool // Is it the document root context? - sequence_context bool // Is it a sequence context? - mapping_context bool // Is it a mapping context? - simple_key_context bool // Is it a simple mapping key context? - - line int // The current line. - column int // The current column. - whitespace bool // If the last character was a whitespace? - indention bool // If the last character was an indentation character (' ', '-', '?', ':')? - open_ended bool // If an explicit document end is required? - - // Anchor analysis. - anchor_data struct { - anchor []byte // The anchor value. - alias bool // Is it an alias? - } - - // Tag analysis. - tag_data struct { - handle []byte // The tag handle. - suffix []byte // The tag suffix. - } - - // Scalar analysis. - scalar_data struct { - value []byte // The scalar value. - multiline bool // Does the scalar contain line breaks? - flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? - block_plain_allowed bool // Can the scalar be expressed in the block plain style? - single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? - block_allowed bool // Can the scalar be expressed in the literal or folded styles? - style yaml_scalar_style_t // The output style. - } - - // Dumper stuff - - opened bool // If the stream was already opened? - closed bool // If the stream was already closed? - - // The information associated with the document nodes. - anchors *struct { - references int // The number of references. - anchor int // The anchor id. - serialized bool // If the node has been emitted? - } - - last_anchor_id int // The last assigned anchor id. - - document *yaml_document_t // The currently emitted document. -} diff --git a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlprivateh.go b/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlprivateh.go deleted file mode 100644 index 8110ce3..0000000 --- a/Godeps/_workspace/src/github.com/buddhamagnet/yaml/yamlprivateh.go +++ /dev/null @@ -1,173 +0,0 @@ -package yaml - -const ( - // The size of the input raw buffer. - input_raw_buffer_size = 512 - - // The size of the input buffer. - // It should be possible to decode the whole raw buffer. - input_buffer_size = input_raw_buffer_size * 3 - - // The size of the output buffer. - output_buffer_size = 128 - - // The size of the output raw buffer. - // It should be possible to encode the whole output buffer. - output_raw_buffer_size = (output_buffer_size*2 + 2) - - // The size of other stacks and queues. - initial_stack_size = 16 - initial_queue_size = 16 - initial_string_size = 16 -) - -// Check if the character at the specified position is an alphabetical -// character, a digit, '_', or '-'. -func is_alpha(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' -} - -// Check if the character at the specified position is a digit. -func is_digit(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' -} - -// Get the value of a digit. -func as_digit(b []byte, i int) int { - return int(b[i]) - '0' -} - -// Check if the character at the specified position is a hex-digit. -func is_hex(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' -} - -// Get the value of a hex-digit. -func as_hex(b []byte, i int) int { - bi := b[i] - if bi >= 'A' && bi <= 'F' { - return int(bi) - 'A' + 10 - } - if bi >= 'a' && bi <= 'f' { - return int(bi) - 'a' + 10 - } - return int(bi) - '0' -} - -// Check if the character is ASCII. -func is_ascii(b []byte, i int) bool { - return b[i] <= 0x7F -} - -// Check if the character at the start of the buffer can be printed unescaped. -func is_printable(b []byte, i int) bool { - return ((b[i] == 0x0A) || // . == #x0A - (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E - (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF - (b[i] > 0xC2 && b[i] < 0xED) || - (b[i] == 0xED && b[i+1] < 0xA0) || - (b[i] == 0xEE) || - (b[i] == 0xEF && // #xE000 <= . <= #xFFFD - !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF - !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) -} - -// Check if the character at the specified position is NUL. -func is_z(b []byte, i int) bool { - return b[i] == 0x00 -} - -// Check if the beginning of the buffer is a BOM. -func is_bom(b []byte, i int) bool { - return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF -} - -// Check if the character at the specified position is space. -func is_space(b []byte, i int) bool { - return b[i] == ' ' -} - -// Check if the character at the specified position is tab. -func is_tab(b []byte, i int) bool { - return b[i] == '\t' -} - -// Check if the character at the specified position is blank (space or tab). -func is_blank(b []byte, i int) bool { - //return is_space(b, i) || is_tab(b, i) - return b[i] == ' ' || b[i] == '\t' -} - -// Check if the character at the specified position is a line break. -func is_break(b []byte, i int) bool { - return (b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) -} - -func is_crlf(b []byte, i int) bool { - return b[i] == '\r' && b[i+1] == '\n' -} - -// Check if the character is a line break or NUL. -func is_breakz(b []byte, i int) bool { - //return is_break(b, i) || is_z(b, i) - return ( // is_break: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - // is_z: - b[i] == 0) -} - -// Check if the character is a line break, space, or NUL. -func is_spacez(b []byte, i int) bool { - //return is_space(b, i) || is_breakz(b, i) - return ( // is_space: - b[i] == ' ' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Check if the character is a line break, space, tab, or NUL. -func is_blankz(b []byte, i int) bool { - //return is_blank(b, i) || is_breakz(b, i) - return ( // is_blank: - b[i] == ' ' || b[i] == '\t' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Determine the width of the character. -func width(b byte) int { - // Don't replace these by a switch without first - // confirming that it is being inlined. - if b&0x80 == 0x00 { - return 1 - } - if b&0xE0 == 0xC0 { - return 2 - } - if b&0xF0 == 0xE0 { - return 3 - } - if b&0xF8 == 0xF0 { - return 4 - } - return 0 - -} diff --git a/vendor/github.com/buddhamagnet/raml b/vendor/github.com/buddhamagnet/raml new file mode 160000 index 0000000..31db66e --- /dev/null +++ b/vendor/github.com/buddhamagnet/raml @@ -0,0 +1 @@ +Subproject commit 31db66e03a8a30521506d0ffc69ed42b7ddbdae4 diff --git a/vendor/github.com/buddhamagnet/yaml b/vendor/github.com/buddhamagnet/yaml new file mode 160000 index 0000000..8e72a68 --- /dev/null +++ b/vendor/github.com/buddhamagnet/yaml @@ -0,0 +1 @@ +Subproject commit 8e72a68a3483a9d044e4c6f49cc695b5ee60c671