mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-01-15 17:00:40 -05:00
This changeset performs the following: - Updates `masterzen/winrm` vendor to include change from (https://github.com/masterzen/winrm/pull/73) - Updates `dylanmei/winrmtest` vendor to include change from (https://github.com/dylanmei/winrmtest/pull/4) - Updates `packer-community/winrmcp` vendor to include the removal of the `masterzen/winrm/winrm` sub-class as a result of the `winrm` CLI tool being removed from the `masterzen/winrm` repository. - Changes `communicator/winrm/communicator.go` to conform to the new ABI in the `masterzen/winrm` library. This should completely remove any LGPL licensed dependencies inside of the Terraform project. ``` $ make test ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2017/08/20 13:40:16 Generated command/internal_plugin_list.go go test -i $(go list ./... | grep -v '/terraform/vendor/' | grep -v '/builtin/bins/') || exit 1 echo $(go list ./... | grep -v '/terraform/vendor/' | grep -v '/builtin/bins/') | \ xargs -t -n4 go test -timeout=60s -parallel=4 go test -timeout=60s -parallel=4 github.com/hashicorp/terraform github.com/hashicorp/terraform/backend github.com/hashicorp/terraform/backend/atlas github.com/hashicorp/terraform/backend/init ok github.com/hashicorp/terraform 0.011s ok github.com/hashicorp/terraform/backend 0.020s ok github.com/hashicorp/terraform/backend/atlas 0.634s ok github.com/hashicorp/terraform/backend/init 0.007s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/backend/legacy github.com/hashicorp/terraform/backend/local github.com/hashicorp/terraform/backend/remote-state github.com/hashicorp/terraf orm/backend/remote-state/azure ok github.com/hashicorp/terraform/backend/legacy 0.009s ok github.com/hashicorp/terraform/backend/local 0.211s ok github.com/hashicorp/terraform/backend/remote-state 0.006s ok github.com/hashicorp/terraform/backend/remote-state/azure 0.010s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/backend/remote-state/consul github.com/hashicorp/terraform/backend/remote-state/inmem github.com/hashicorp/terraform/backend/remote-state/s 3 github.com/hashicorp/terraform/backend/remote-state/swift ok github.com/hashicorp/terraform/backend/remote-state/consul 0.007s ok github.com/hashicorp/terraform/backend/remote-state/inmem 0.013s ok github.com/hashicorp/terraform/backend/remote-state/s3 0.007s ok github.com/hashicorp/terraform/backend/remote-state/swift 0.013s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/builtin/providers/test github.com/hashicorp/terraform/builtin/provisioners/chef github.com/hashicorp/terraform/builtin/provisioners/file gi thub.com/hashicorp/terraform/builtin/provisioners/local-exec ok github.com/hashicorp/terraform/builtin/providers/test 1.544s ok github.com/hashicorp/terraform/builtin/provisioners/chef 0.017s ok github.com/hashicorp/terraform/builtin/provisioners/file 0.006s ok github.com/hashicorp/terraform/builtin/provisioners/local-exec 0.078s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/builtin/provisioners/remote-exec github.com/hashicorp/terraform/builtin/provisioners/salt-masterless github.com/hashicorp/terraform/command github.com/hashicorp/terraform/command/clistate ok github.com/hashicorp/terraform/builtin/provisioners/remote-exec 1.037s ok github.com/hashicorp/terraform/builtin/provisioners/salt-masterless 0.008s ok github.com/hashicorp/terraform/command 14.589s ? github.com/hashicorp/terraform/command/clistate [no test files] go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/command/e2etest github.com/hashicorp/terraform/command/format github.com/hashicorp/terraform/communicator github.com/hashicorp/terraform/co mmunicator/remote ok github.com/hashicorp/terraform/command/e2etest 3.729s ok github.com/hashicorp/terraform/command/format 0.004s ok github.com/hashicorp/terraform/communicator 0.005s ok github.com/hashicorp/terraform/communicator/remote 0.003s [no tests to run] go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/communicator/shared github.com/hashicorp/terraform/communicator/ssh github.com/hashicorp/terraform/communicator/winrm github.com/hashicorp/ terraform/config ok github.com/hashicorp/terraform/communicator/shared 0.007s ok github.com/hashicorp/terraform/communicator/ssh 0.016s ok github.com/hashicorp/terraform/communicator/winrm 0.018s ok github.com/hashicorp/terraform/config 0.213s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/config/module github.com/hashicorp/terraform/dag github.com/hashicorp/terraform/digraph github.com/hashicorp/terraform/flatmap ok github.com/hashicorp/terraform/config/module 0.044s ok github.com/hashicorp/terraform/dag 0.010s ok github.com/hashicorp/terraform/digraph 0.002s ok github.com/hashicorp/terraform/flatmap 0.002s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/acctest github.com/hashicorp/terraform/helper/config github.com/hashicorp/terraform/helper/copy github.com/hashicorp/terraform/helpe r/diff ? github.com/hashicorp/terraform/helper/acctest [no test files] ok github.com/hashicorp/terraform/helper/config 0.005s ? github.com/hashicorp/terraform/helper/copy [no test files] ok github.com/hashicorp/terraform/helper/diff 0.005s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/encryption github.com/hashicorp/terraform/helper/experiment github.com/hashicorp/terraform/helper/hashcode github.com/hashicorp/terr aform/helper/hilmapstructure ? github.com/hashicorp/terraform/helper/encryption [no test files] ok github.com/hashicorp/terraform/helper/experiment 0.001s ok github.com/hashicorp/terraform/helper/hashcode 0.001s ? github.com/hashicorp/terraform/helper/hilmapstructure [no test files] go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/logging github.com/hashicorp/terraform/helper/mutexkv github.com/hashicorp/terraform/helper/pathorcontents github.com/hashicorp/terr aform/helper/resource ? github.com/hashicorp/terraform/helper/logging [no test files] ok github.com/hashicorp/terraform/helper/mutexkv 0.055s ok github.com/hashicorp/terraform/helper/pathorcontents 0.002s ok github.com/hashicorp/terraform/helper/resource 2.659s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/schema github.com/hashicorp/terraform/helper/shadow github.com/hashicorp/terraform/helper/signalwrapper github.com/hashicorp/terrafo rm/helper/slowmessage ok github.com/hashicorp/terraform/helper/schema 0.063s ok github.com/hashicorp/terraform/helper/shadow 0.156s ok github.com/hashicorp/terraform/helper/signalwrapper 0.022s ok github.com/hashicorp/terraform/helper/slowmessage 0.102s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/structure github.com/hashicorp/terraform/helper/validation github.com/hashicorp/terraform/helper/variables github.com/hashicorp/terr aform/helper/wrappedreadline ok github.com/hashicorp/terraform/helper/structure 0.004s ok github.com/hashicorp/terraform/helper/validation 0.004s ok github.com/hashicorp/terraform/helper/variables 0.006s ? github.com/hashicorp/terraform/helper/wrappedreadline [no test files] go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/helper/wrappedstreams github.com/hashicorp/terraform/moduledeps github.com/hashicorp/terraform/plugin github.com/hashicorp/terraform/plugin /discovery ? github.com/hashicorp/terraform/helper/wrappedstreams [no test files] ok github.com/hashicorp/terraform/moduledeps 0.004s ok github.com/hashicorp/terraform/plugin 0.046s ok github.com/hashicorp/terraform/plugin/discovery 0.029s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/repl github.com/hashicorp/terraform/scripts github.com/hashicorp/terraform/state github.com/hashicorp/terraform/state/remote ok github.com/hashicorp/terraform/repl 0.006s ok github.com/hashicorp/terraform/scripts 0.008s ok github.com/hashicorp/terraform/state 2.617s ok github.com/hashicorp/terraform/state/remote 0.025s go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/terraform github.com/hashicorp/terraform/tools/terraform-bundle go test -timeout=60s -parallel=4 github.com/hashicorp/terraform/terraform github.com/hashicorp/terraform/tools/terraform-bundle ok github.com/hashicorp/terraform/terraform 4.222s ? github.com/hashicorp/terraform/tools/terraform-bundle [no test files] ```
253 lines
5.8 KiB
Go
253 lines
5.8 KiB
Go
package xmlquery
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/xml"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"golang.org/x/net/html/charset"
|
|
)
|
|
|
|
// A NodeType is the type of a Node.
|
|
type NodeType uint
|
|
|
|
const (
|
|
// DocumentNode is a document object that, as the root of the document tree,
|
|
// provides access to the entire XML document.
|
|
DocumentNode NodeType = iota
|
|
// DeclarationNode is the document type declaration, indicated by the following
|
|
// tag (for example, <!DOCTYPE...> ).
|
|
DeclarationNode
|
|
// ElementNode is an element (for example, <item> ).
|
|
ElementNode
|
|
// TextNode is the text content of a node.
|
|
TextNode
|
|
// CommentNode a comment (for example, <!-- my comment --> ).
|
|
CommentNode
|
|
)
|
|
|
|
// A Node consists of a NodeType and some Data (tag name for
|
|
// element nodes, content for text) and are part of a tree of Nodes.
|
|
type Node struct {
|
|
Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node
|
|
|
|
Type NodeType
|
|
Data string
|
|
Prefix string
|
|
NamespaceURI string
|
|
Attr []xml.Attr
|
|
|
|
level int // node level in the tree
|
|
}
|
|
|
|
// InnerText returns the text between the start and end tags of the object.
|
|
func (n *Node) InnerText() string {
|
|
var output func(*bytes.Buffer, *Node)
|
|
output = func(buf *bytes.Buffer, n *Node) {
|
|
switch n.Type {
|
|
case TextNode:
|
|
buf.WriteString(n.Data)
|
|
return
|
|
case CommentNode:
|
|
return
|
|
}
|
|
for child := n.FirstChild; child != nil; child = child.NextSibling {
|
|
output(buf, child)
|
|
}
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
output(&buf, n)
|
|
return buf.String()
|
|
}
|
|
|
|
func outputXML(buf *bytes.Buffer, n *Node) {
|
|
if n.Type == TextNode || n.Type == CommentNode {
|
|
buf.WriteString(strings.TrimSpace(n.Data))
|
|
return
|
|
}
|
|
buf.WriteString("<" + n.Data)
|
|
for _, attr := range n.Attr {
|
|
if attr.Name.Space != "" {
|
|
buf.WriteString(fmt.Sprintf(` %s:%s="%s"`, attr.Name.Space, attr.Name.Local, attr.Value))
|
|
} else {
|
|
buf.WriteString(fmt.Sprintf(` %s="%s"`, attr.Name.Local, attr.Value))
|
|
}
|
|
}
|
|
buf.WriteString(">")
|
|
for child := n.FirstChild; child != nil; child = child.NextSibling {
|
|
outputXML(buf, child)
|
|
}
|
|
buf.WriteString(fmt.Sprintf("</%s>", n.Data))
|
|
}
|
|
|
|
// OutputXML returns the text that including tags name.
|
|
func (n *Node) OutputXML(self bool) string {
|
|
var buf bytes.Buffer
|
|
if self {
|
|
outputXML(&buf, n)
|
|
} else {
|
|
for n := n.FirstChild; n != nil; n = n.NextSibling {
|
|
outputXML(&buf, n)
|
|
}
|
|
}
|
|
|
|
return buf.String()
|
|
}
|
|
|
|
func addAttr(n *Node, key, val string) {
|
|
var attr xml.Attr
|
|
if i := strings.Index(key, ":"); i > 0 {
|
|
attr = xml.Attr{
|
|
Name: xml.Name{Space: key[:i], Local: key[i+1:]},
|
|
Value: val,
|
|
}
|
|
} else {
|
|
attr = xml.Attr{
|
|
Name: xml.Name{Local: key},
|
|
Value: val,
|
|
}
|
|
}
|
|
|
|
n.Attr = append(n.Attr, attr)
|
|
}
|
|
|
|
func addChild(parent, n *Node) {
|
|
n.Parent = parent
|
|
if parent.FirstChild == nil {
|
|
parent.FirstChild = n
|
|
} else {
|
|
parent.LastChild.NextSibling = n
|
|
n.PrevSibling = parent.LastChild
|
|
}
|
|
|
|
parent.LastChild = n
|
|
}
|
|
|
|
func addSibling(sibling, n *Node) {
|
|
n.Parent = sibling.Parent
|
|
sibling.NextSibling = n
|
|
n.PrevSibling = sibling
|
|
if sibling.Parent != nil {
|
|
sibling.Parent.LastChild = n
|
|
}
|
|
}
|
|
|
|
// LoadURL loads the XML document from the specified URL.
|
|
func LoadURL(url string) (*Node, error) {
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return parse(resp.Body)
|
|
}
|
|
|
|
func parse(r io.Reader) (*Node, error) {
|
|
var (
|
|
decoder = xml.NewDecoder(r)
|
|
doc = &Node{Type: DocumentNode}
|
|
space2prefix = make(map[string]string)
|
|
level = 0
|
|
)
|
|
decoder.CharsetReader = charset.NewReaderLabel
|
|
prev := doc
|
|
for {
|
|
tok, err := decoder.Token()
|
|
switch {
|
|
case err == io.EOF:
|
|
goto quit
|
|
case err != nil:
|
|
return nil, err
|
|
}
|
|
|
|
switch tok := tok.(type) {
|
|
case xml.StartElement:
|
|
if level == 0 {
|
|
// mising XML declaration
|
|
node := &Node{Type: DeclarationNode, Data: "xml", level: 1}
|
|
addChild(prev, node)
|
|
level = 1
|
|
prev = node
|
|
}
|
|
node := &Node{
|
|
Type: ElementNode,
|
|
Data: tok.Name.Local,
|
|
Prefix: space2prefix[tok.Name.Space],
|
|
NamespaceURI: tok.Name.Space,
|
|
Attr: tok.Attr,
|
|
level: level,
|
|
}
|
|
for _, att := range tok.Attr {
|
|
if att.Name.Space == "xmlns" {
|
|
space2prefix[att.Value] = att.Name.Local
|
|
}
|
|
}
|
|
//fmt.Println(fmt.Sprintf("start > %s : %d", node.Data, level))
|
|
if level == prev.level {
|
|
addSibling(prev, node)
|
|
} else if level > prev.level {
|
|
addChild(prev, node)
|
|
} else if level < prev.level {
|
|
for i := prev.level - level; i > 1; i-- {
|
|
prev = prev.Parent
|
|
}
|
|
addSibling(prev.Parent, node)
|
|
}
|
|
prev = node
|
|
level++
|
|
case xml.EndElement:
|
|
level--
|
|
case xml.CharData:
|
|
node := &Node{Type: TextNode, Data: string(tok), level: level}
|
|
if level == prev.level {
|
|
addSibling(prev, node)
|
|
} else if level > prev.level {
|
|
addChild(prev, node)
|
|
}
|
|
case xml.Comment:
|
|
node := &Node{Type: CommentNode, Data: string(tok), level: level}
|
|
if level == prev.level {
|
|
addSibling(prev, node)
|
|
} else if level > prev.level {
|
|
addChild(prev, node)
|
|
}
|
|
case xml.ProcInst: // Processing Instruction
|
|
if prev.Type != DeclarationNode {
|
|
level++
|
|
}
|
|
node := &Node{Type: DeclarationNode, Data: tok.Target, level: level}
|
|
pairs := strings.Split(string(tok.Inst), " ")
|
|
for _, pair := range pairs {
|
|
pair = strings.TrimSpace(pair)
|
|
if i := strings.Index(pair, "="); i > 0 {
|
|
addAttr(node, pair[:i], strings.Trim(pair[i+1:], `"`))
|
|
}
|
|
}
|
|
if level == prev.level {
|
|
addSibling(prev, node)
|
|
} else if level > prev.level {
|
|
addChild(prev, node)
|
|
}
|
|
prev = node
|
|
case xml.Directive:
|
|
}
|
|
|
|
}
|
|
quit:
|
|
return doc, nil
|
|
}
|
|
|
|
// Parse returns the parse tree for the XML from the given Reader.
|
|
func Parse(r io.Reader) (*Node, error) {
|
|
return parse(r)
|
|
}
|
|
|
|
// ParseXML returns the parse tree for the XML from the given Reader.Deprecated.
|
|
func ParseXML(r io.Reader) (*Node, error) {
|
|
return parse(r)
|
|
}
|