mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Update Godeps after removing rkt.
This was done by executing the following two commands: $ hack/run-in-gopath.sh hack/godep-save.sh $ hack/run-in-gopath.sh hack/godep-restore.sh Go packages github.com/appc/spec and github.com/coreos/go-systemd were used by the rkt/ package that is now gone.
This commit is contained in:
		
							
								
								
									
										27
									
								
								vendor/github.com/coreos/go-systemd/unit/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/coreos/go-systemd/unit/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,27 +0,0 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "deserialize.go",
 | 
			
		||||
        "escape.go",
 | 
			
		||||
        "option.go",
 | 
			
		||||
        "serialize.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "github.com/coreos/go-systemd/unit",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										276
									
								
								vendor/github.com/coreos/go-systemd/unit/deserialize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										276
									
								
								vendor/github.com/coreos/go-systemd/unit/deserialize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,276 +0,0 @@
 | 
			
		||||
// Copyright 2015 CoreOS, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package unit
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"unicode"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// SYSTEMD_LINE_MAX mimics the maximum line length that systemd can use.
 | 
			
		||||
	// On typical systemd platforms (i.e. modern Linux), this will most
 | 
			
		||||
	// commonly be 2048, so let's use that as a sanity check.
 | 
			
		||||
	// Technically, we should probably pull this at runtime:
 | 
			
		||||
	//    SYSTEMD_LINE_MAX = int(C.sysconf(C.__SC_LINE_MAX))
 | 
			
		||||
	// but this would introduce an (unfortunate) dependency on cgo
 | 
			
		||||
	SYSTEMD_LINE_MAX = 2048
 | 
			
		||||
 | 
			
		||||
	// characters that systemd considers indicate a newline
 | 
			
		||||
	SYSTEMD_NEWLINE = "\r\n"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ErrLineTooLong = fmt.Errorf("line too long (max %d bytes)", SYSTEMD_LINE_MAX)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Deserialize parses a systemd unit file into a list of UnitOption objects.
 | 
			
		||||
func Deserialize(f io.Reader) (opts []*UnitOption, err error) {
 | 
			
		||||
	lexer, optchan, errchan := newLexer(f)
 | 
			
		||||
	go lexer.lex()
 | 
			
		||||
 | 
			
		||||
	for opt := range optchan {
 | 
			
		||||
		opts = append(opts, &(*opt))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = <-errchan
 | 
			
		||||
	return opts, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newLexer(f io.Reader) (*lexer, <-chan *UnitOption, <-chan error) {
 | 
			
		||||
	optchan := make(chan *UnitOption)
 | 
			
		||||
	errchan := make(chan error, 1)
 | 
			
		||||
	buf := bufio.NewReader(f)
 | 
			
		||||
 | 
			
		||||
	return &lexer{buf, optchan, errchan, ""}, optchan, errchan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type lexer struct {
 | 
			
		||||
	buf     *bufio.Reader
 | 
			
		||||
	optchan chan *UnitOption
 | 
			
		||||
	errchan chan error
 | 
			
		||||
	section string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lex() {
 | 
			
		||||
	var err error
 | 
			
		||||
	defer func() {
 | 
			
		||||
		close(l.optchan)
 | 
			
		||||
		close(l.errchan)
 | 
			
		||||
	}()
 | 
			
		||||
	next := l.lexNextSection
 | 
			
		||||
	for next != nil {
 | 
			
		||||
		if l.buf.Buffered() >= SYSTEMD_LINE_MAX {
 | 
			
		||||
			// systemd truncates lines longer than LINE_MAX
 | 
			
		||||
			// https://bugs.freedesktop.org/show_bug.cgi?id=85308
 | 
			
		||||
			// Rather than allowing this to pass silently, let's
 | 
			
		||||
			// explicitly gate people from encountering this
 | 
			
		||||
			line, err := l.buf.Peek(SYSTEMD_LINE_MAX)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				l.errchan <- err
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			if bytes.IndexAny(line, SYSTEMD_NEWLINE) == -1 {
 | 
			
		||||
				l.errchan <- ErrLineTooLong
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		next, err = next()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			l.errchan <- err
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type lexStep func() (lexStep, error)
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexSectionName() (lexStep, error) {
 | 
			
		||||
	sec, err := l.buf.ReadBytes(']')
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.New("unable to find end of section")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return l.lexSectionSuffixFunc(string(sec[:len(sec)-1])), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexSectionSuffixFunc(section string) lexStep {
 | 
			
		||||
	return func() (lexStep, error) {
 | 
			
		||||
		garbage, _, err := l.toEOL()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		garbage = bytes.TrimSpace(garbage)
 | 
			
		||||
		if len(garbage) > 0 {
 | 
			
		||||
			return nil, fmt.Errorf("found garbage after section name %s: %v", l.section, garbage)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return l.lexNextSectionOrOptionFunc(section), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) ignoreLineFunc(next lexStep) lexStep {
 | 
			
		||||
	return func() (lexStep, error) {
 | 
			
		||||
		for {
 | 
			
		||||
			line, _, err := l.toEOL()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			line = bytes.TrimSuffix(line, []byte{' '})
 | 
			
		||||
 | 
			
		||||
			// lack of continuation means this line has been exhausted
 | 
			
		||||
			if !bytes.HasSuffix(line, []byte{'\\'}) {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// reached end of buffer, safe to exit
 | 
			
		||||
		return next, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexNextSection() (lexStep, error) {
 | 
			
		||||
	r, _, err := l.buf.ReadRune()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if err == io.EOF {
 | 
			
		||||
			err = nil
 | 
			
		||||
		}
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if r == '[' {
 | 
			
		||||
		return l.lexSectionName, nil
 | 
			
		||||
	} else if isComment(r) {
 | 
			
		||||
		return l.ignoreLineFunc(l.lexNextSection), nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return l.lexNextSection, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexNextSectionOrOptionFunc(section string) lexStep {
 | 
			
		||||
	return func() (lexStep, error) {
 | 
			
		||||
		r, _, err := l.buf.ReadRune()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if err == io.EOF {
 | 
			
		||||
				err = nil
 | 
			
		||||
			}
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if unicode.IsSpace(r) {
 | 
			
		||||
			return l.lexNextSectionOrOptionFunc(section), nil
 | 
			
		||||
		} else if r == '[' {
 | 
			
		||||
			return l.lexSectionName, nil
 | 
			
		||||
		} else if isComment(r) {
 | 
			
		||||
			return l.ignoreLineFunc(l.lexNextSectionOrOptionFunc(section)), nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		l.buf.UnreadRune()
 | 
			
		||||
		return l.lexOptionNameFunc(section), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexOptionNameFunc(section string) lexStep {
 | 
			
		||||
	return func() (lexStep, error) {
 | 
			
		||||
		var partial bytes.Buffer
 | 
			
		||||
		for {
 | 
			
		||||
			r, _, err := l.buf.ReadRune()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if r == '\n' || r == '\r' {
 | 
			
		||||
				return nil, errors.New("unexpected newline encountered while parsing option name")
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if r == '=' {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			partial.WriteRune(r)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		name := strings.TrimSpace(partial.String())
 | 
			
		||||
		return l.lexOptionValueFunc(section, name, bytes.Buffer{}), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *lexer) lexOptionValueFunc(section, name string, partial bytes.Buffer) lexStep {
 | 
			
		||||
	return func() (lexStep, error) {
 | 
			
		||||
		for {
 | 
			
		||||
			line, eof, err := l.toEOL()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if len(bytes.TrimSpace(line)) == 0 {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			partial.Write(line)
 | 
			
		||||
 | 
			
		||||
			// lack of continuation means this value has been exhausted
 | 
			
		||||
			idx := bytes.LastIndex(line, []byte{'\\'})
 | 
			
		||||
			if idx == -1 || idx != (len(line)-1) {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if !eof {
 | 
			
		||||
				partial.WriteRune('\n')
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return l.lexOptionValueFunc(section, name, partial), nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		val := partial.String()
 | 
			
		||||
		if strings.HasSuffix(val, "\n") {
 | 
			
		||||
			// A newline was added to the end, so the file didn't end with a backslash.
 | 
			
		||||
			// => Keep the newline
 | 
			
		||||
			val = strings.TrimSpace(val) + "\n"
 | 
			
		||||
		} else {
 | 
			
		||||
			val = strings.TrimSpace(val)
 | 
			
		||||
		}
 | 
			
		||||
		l.optchan <- &UnitOption{Section: section, Name: name, Value: val}
 | 
			
		||||
 | 
			
		||||
		return l.lexNextSectionOrOptionFunc(section), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// toEOL reads until the end-of-line or end-of-file.
 | 
			
		||||
// Returns (data, EOFfound, error)
 | 
			
		||||
func (l *lexer) toEOL() ([]byte, bool, error) {
 | 
			
		||||
	line, err := l.buf.ReadBytes('\n')
 | 
			
		||||
	// ignore EOF here since it's roughly equivalent to EOL
 | 
			
		||||
	if err != nil && err != io.EOF {
 | 
			
		||||
		return nil, false, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	line = bytes.TrimSuffix(line, []byte{'\r'})
 | 
			
		||||
	line = bytes.TrimSuffix(line, []byte{'\n'})
 | 
			
		||||
 | 
			
		||||
	return line, err == io.EOF, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isComment(r rune) bool {
 | 
			
		||||
	return r == '#' || r == ';'
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										116
									
								
								vendor/github.com/coreos/go-systemd/unit/escape.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								vendor/github.com/coreos/go-systemd/unit/escape.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,116 +0,0 @@
 | 
			
		||||
// Copyright 2015 CoreOS, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
// Implements systemd-escape [--unescape] [--path]
 | 
			
		||||
 | 
			
		||||
package unit
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	allowed = `:_.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// If isPath is true:
 | 
			
		||||
//   We remove redundant '/'s, the leading '/', and trailing '/'.
 | 
			
		||||
//   If the result is empty, a '/' is inserted.
 | 
			
		||||
//
 | 
			
		||||
// We always:
 | 
			
		||||
//  Replace the following characters with `\x%x`:
 | 
			
		||||
//   Leading `.`
 | 
			
		||||
//   `-`, `\`, and anything not in this set: `:-_.\[0-9a-zA-Z]`
 | 
			
		||||
//  Replace '/' with '-'.
 | 
			
		||||
func escape(unescaped string, isPath bool) string {
 | 
			
		||||
	e := []byte{}
 | 
			
		||||
	inSlashes := false
 | 
			
		||||
	start := true
 | 
			
		||||
	for i := 0; i < len(unescaped); i++ {
 | 
			
		||||
		c := unescaped[i]
 | 
			
		||||
		if isPath {
 | 
			
		||||
			if c == '/' {
 | 
			
		||||
				inSlashes = true
 | 
			
		||||
				continue
 | 
			
		||||
			} else if inSlashes {
 | 
			
		||||
				inSlashes = false
 | 
			
		||||
				if !start {
 | 
			
		||||
					e = append(e, '-')
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if c == '/' {
 | 
			
		||||
			e = append(e, '-')
 | 
			
		||||
		} else if start && c == '.' || strings.IndexByte(allowed, c) == -1 {
 | 
			
		||||
			e = append(e, []byte(fmt.Sprintf(`\x%x`, c))...)
 | 
			
		||||
		} else {
 | 
			
		||||
			e = append(e, c)
 | 
			
		||||
		}
 | 
			
		||||
		start = false
 | 
			
		||||
	}
 | 
			
		||||
	if isPath && len(e) == 0 {
 | 
			
		||||
		e = append(e, '-')
 | 
			
		||||
	}
 | 
			
		||||
	return string(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// If isPath is true:
 | 
			
		||||
//   We always return a string beginning with '/'.
 | 
			
		||||
//
 | 
			
		||||
// We always:
 | 
			
		||||
//  Replace '-' with '/'.
 | 
			
		||||
//  Replace `\x%x` with the value represented in hex.
 | 
			
		||||
func unescape(escaped string, isPath bool) string {
 | 
			
		||||
	u := []byte{}
 | 
			
		||||
	for i := 0; i < len(escaped); i++ {
 | 
			
		||||
		c := escaped[i]
 | 
			
		||||
		if c == '-' {
 | 
			
		||||
			c = '/'
 | 
			
		||||
		} else if c == '\\' && len(escaped)-i >= 4 && escaped[i+1] == 'x' {
 | 
			
		||||
			n, err := strconv.ParseInt(escaped[i+2:i+4], 16, 8)
 | 
			
		||||
			if err == nil {
 | 
			
		||||
				c = byte(n)
 | 
			
		||||
				i += 3
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		u = append(u, c)
 | 
			
		||||
	}
 | 
			
		||||
	if isPath && (len(u) == 0 || u[0] != '/') {
 | 
			
		||||
		u = append([]byte("/"), u...)
 | 
			
		||||
	}
 | 
			
		||||
	return string(u)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnitNameEscape escapes a string as `systemd-escape` would
 | 
			
		||||
func UnitNameEscape(unescaped string) string {
 | 
			
		||||
	return escape(unescaped, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnitNameUnescape unescapes a string as `systemd-escape --unescape` would
 | 
			
		||||
func UnitNameUnescape(escaped string) string {
 | 
			
		||||
	return unescape(escaped, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnitNamePathEscape escapes a string as `systemd-escape --path` would
 | 
			
		||||
func UnitNamePathEscape(unescaped string) string {
 | 
			
		||||
	return escape(unescaped, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnitNamePathUnescape unescapes a string as `systemd-escape --path --unescape` would
 | 
			
		||||
func UnitNamePathUnescape(escaped string) string {
 | 
			
		||||
	return unescape(escaped, true)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								vendor/github.com/coreos/go-systemd/unit/option.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								vendor/github.com/coreos/go-systemd/unit/option.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,54 +0,0 @@
 | 
			
		||||
// Copyright 2015 CoreOS, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package unit
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UnitOption struct {
 | 
			
		||||
	Section string
 | 
			
		||||
	Name    string
 | 
			
		||||
	Value   string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewUnitOption(section, name, value string) *UnitOption {
 | 
			
		||||
	return &UnitOption{Section: section, Name: name, Value: value}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (uo *UnitOption) String() string {
 | 
			
		||||
	return fmt.Sprintf("{Section: %q, Name: %q, Value: %q}", uo.Section, uo.Name, uo.Value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (uo *UnitOption) Match(other *UnitOption) bool {
 | 
			
		||||
	return uo.Section == other.Section &&
 | 
			
		||||
		uo.Name == other.Name &&
 | 
			
		||||
		uo.Value == other.Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AllMatch(u1 []*UnitOption, u2 []*UnitOption) bool {
 | 
			
		||||
	length := len(u1)
 | 
			
		||||
	if length != len(u2) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < length; i++ {
 | 
			
		||||
		if !u1[i].Match(u2[i]) {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										75
									
								
								vendor/github.com/coreos/go-systemd/unit/serialize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/coreos/go-systemd/unit/serialize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,75 +0,0 @@
 | 
			
		||||
// Copyright 2015 CoreOS, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package unit
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"io"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Serialize encodes all of the given UnitOption objects into a
 | 
			
		||||
// unit file. When serialized the options are sorted in their
 | 
			
		||||
// supplied order but grouped by section.
 | 
			
		||||
func Serialize(opts []*UnitOption) io.Reader {
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
 | 
			
		||||
	if len(opts) == 0 {
 | 
			
		||||
		return &buf
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Index of sections -> ordered options
 | 
			
		||||
	idx := map[string][]*UnitOption{}
 | 
			
		||||
	// Separately preserve order in which sections were seen
 | 
			
		||||
	sections := []string{}
 | 
			
		||||
	for _, opt := range opts {
 | 
			
		||||
		sec := opt.Section
 | 
			
		||||
		if _, ok := idx[sec]; !ok {
 | 
			
		||||
			sections = append(sections, sec)
 | 
			
		||||
		}
 | 
			
		||||
		idx[sec] = append(idx[sec], opt)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, sect := range sections {
 | 
			
		||||
		writeSectionHeader(&buf, sect)
 | 
			
		||||
		writeNewline(&buf)
 | 
			
		||||
 | 
			
		||||
		opts := idx[sect]
 | 
			
		||||
		for _, opt := range opts {
 | 
			
		||||
			writeOption(&buf, opt)
 | 
			
		||||
			writeNewline(&buf)
 | 
			
		||||
		}
 | 
			
		||||
		if i < len(sections)-1 {
 | 
			
		||||
			writeNewline(&buf)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &buf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func writeNewline(buf *bytes.Buffer) {
 | 
			
		||||
	buf.WriteRune('\n')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func writeSectionHeader(buf *bytes.Buffer, section string) {
 | 
			
		||||
	buf.WriteRune('[')
 | 
			
		||||
	buf.WriteString(section)
 | 
			
		||||
	buf.WriteRune(']')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func writeOption(buf *bytes.Buffer, opt *UnitOption) {
 | 
			
		||||
	buf.WriteString(opt.Name)
 | 
			
		||||
	buf.WriteRune('=')
 | 
			
		||||
	buf.WriteString(opt.Value)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user