diff --git a/Gopkg.lock b/Gopkg.lock index 553f72e3..e7bb0c92 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -94,6 +94,12 @@ packages = ["."] revision = "52c32ac39e436cd9295a4629a91f0613ce67052f" +[[projects]] + branch = "master" + name = "github.com/jedisct1/go-clocksmith" + packages = ["."] + revision = "cd58e2ceb29bcb6568281e33a1166f55d2d80188" + [[projects]] branch = "master" name = "github.com/jedisct1/go-minisign" @@ -116,7 +122,7 @@ branch = "master" name = "github.com/kardianos/service" packages = ["."] - revision = "89346fbadecfd8c0ca98cfd31523f8eba9b4abbf" + revision = "0ab6efe2ea51f0531a8ceaaa33416b3aab844c28" [[projects]] name = "github.com/miekg/dns" @@ -128,7 +134,7 @@ branch = "master" name = "github.com/pquerna/cachecontrol" packages = ["cacheobject"] - revision = "0dec1b30a0215bb68605dfc568e8855066c9202d" + revision = "525d0eb5f91d30e3b1548de401b7ef9ea6898520" [[projects]] branch = "master" @@ -142,7 +148,7 @@ "poly1305", "salsa20/salsa" ] - revision = "91a49db82a88618983a78a06c1cbd4e00ab749ab" + revision = "85f98707c97e11569271e4d9b3d397e079c4f4d0" [[projects]] branch = "master" @@ -154,7 +160,7 @@ "ipv4", "ipv6" ] - revision = "22ae77b79946ea320088417e4d50825671d82d57" + revision = "d25186b37f34ebdbbea8f488ef055638dfab272d" [[projects]] branch = "master" @@ -177,6 +183,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "32f9b1bb4dd9f1ca13e9daedf85fc6cc9f3a97a023171a32ac7a2144ba9c1956" + inputs-digest = "5305be9b7e7f5f7d400b08b3b175eda810ccb13aa04049ff7efd58c13c04a809" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index eecd4134..5ae3289f 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -65,3 +65,7 @@ [[constraint]] name = "gopkg.in/natefinch/lumberjack.v2" version = "2.1.0" + +[[constraint]] + branch = "master" + name = "github.com/jedisct1/go-clocksmith" diff --git a/vendor/github.com/kardianos/service/.travis.yml b/vendor/github.com/kardianos/service/.travis.yml index 564728a4..d846b4ac 100644 --- a/vendor/github.com/kardianos/service/.travis.yml +++ b/vendor/github.com/kardianos/service/.travis.yml @@ -3,10 +3,9 @@ go_import_path: github.com/kardianos/service sudo: required go: - - 1.6.x - - 1.7.x - 1.8.x - 1.9.x + - "1.10" - master before_install: diff --git a/vendor/github.com/kardianos/service/service_su_test.go b/vendor/github.com/kardianos/service/service_su_test.go index 031a6fb0..74eca3da 100644 --- a/vendor/github.com/kardianos/service/service_su_test.go +++ b/vendor/github.com/kardianos/service/service_su_test.go @@ -8,6 +8,7 @@ package service_test import ( + "flag" "fmt" "io/ioutil" "log" @@ -23,17 +24,18 @@ import ( const runAsServiceArg = "RunThisAsService" func TestMain(m *testing.M) { - if len(os.Args) == 2 { + reportDir := flag.String("su.reportDir", "", "") + runAsService := flag.Bool("su.runAsService", false, "") + flag.Parse() + if !*runAsService { os.Exit(m.Run()) - } else if len(os.Args) == 4 && os.Args[2] == runAsServiceArg { - reportDir := os.Args[3] - writeReport(reportDir, "call") - runService() - writeReport(reportDir, "finished") - os.Exit(0) } - - log.Fatalf("Invalid arguments: %v", os.Args) + if len(*reportDir) == 0 { + log.Fatal("missing su.reportDir argument") + } + writeReport(*reportDir, "call") + runService() + writeReport(*reportDir, "finished") } func TestInstallRunRestartStopRemove(t *testing.T) { @@ -168,7 +170,7 @@ func mustNewRunAsService( ) service.Service { sc := &service.Config{ Name: "go_service_test", - Arguments: []string{"-test.v=true", runAsServiceArg, reportDir}, + Arguments: []string{"-test.v=true", "-su.runAsService", "-su.reportDir", reportDir}, } s, err := service.New(p, sc) if err != nil { diff --git a/vendor/github.com/kardianos/service/service_upstart_linux.go b/vendor/github.com/kardianos/service/service_upstart_linux.go index 61c601af..17d4aac1 100644 --- a/vendor/github.com/kardianos/service/service_upstart_linux.go +++ b/vendor/github.com/kardianos/service/service_upstart_linux.go @@ -9,6 +9,8 @@ import ( "fmt" "os" "os/signal" + "regexp" + "strconv" "text/template" "time" ) @@ -54,6 +56,47 @@ func (s *upstart) configPath() (cp string, err error) { cp = "/etc/init/" + s.Config.Name + ".conf" return } + +func (s *upstart) hasKillStanza() bool { + defaultValue := true + + out, err := exec.Command("/sbin/init", "--version").Output() + if err != nil { + return defaultValue + } + + re := regexp.MustCompile(`init \(upstart (\d+.\d+.\d+)\)`) + matches := re.FindStringSubmatch(string(out)) + if len(matches) != 2 { + return defaultValue + } + + version := make([]int, 3) + for idx, vStr := range strings.Split(matches[1], ".") { + version[idx], err = strconv.Atoi(vStr) + if err != nil { + return defaultValue + } + } + + maxVersion := []int{0, 6, 5} + if versionAtMost(version, maxVersion) { + return false + } + + return defaultValue +} + +func versionAtMost(version, max []int) bool { + for idx, m := range max { + v := version[idx] + if v > m { + return false + } + } + return true +} + func (s *upstart) template() *template.Template { return template.Must(template.New("").Funcs(tf).Parse(upstartScript)) } @@ -81,10 +124,12 @@ func (s *upstart) Install() error { var to = &struct { *Config - Path string + Path string + HasKillStanza bool }{ s.Config, path, + s.hasKillStanza(), } return s.template().Execute(f, to) @@ -149,7 +194,7 @@ const upstartScript = `# {{.Description}} {{if .DisplayName}}description "{{.DisplayName}}"{{end}} -kill signal INT +{{if .HasKillStanza}}kill signal INT{{end}} {{if .ChRoot}}chroot {{.ChRoot}}{{end}} {{if .WorkingDirectory}}chdir {{.WorkingDirectory}}{{end}} start on filesystem or runlevel [2345] diff --git a/vendor/github.com/pquerna/cachecontrol/cacheobject/directive.go b/vendor/github.com/pquerna/cachecontrol/cacheobject/directive.go index 1e2a6c2e..afa640e7 100644 --- a/vendor/github.com/pquerna/cachecontrol/cacheobject/directive.go +++ b/vendor/github.com/pquerna/cachecontrol/cacheobject/directive.go @@ -41,6 +41,10 @@ var ( ErrMustRevalidateNoArgs = errors.New("Unexpected argument to `must-revalidate`") ErrPublicNoArgs = errors.New("Unexpected argument to `public`") ErrProxyRevalidateNoArgs = errors.New("Unexpected argument to `proxy-revalidate`") + // Experimental + ErrImmutableNoArgs = errors.New("Unexpected argument to `immutable`") + ErrStaleIfErrorDeltaSeconds = errors.New("Failed to parse delta-seconds in `stale-if-error`") + ErrStaleWhileRevalidateDeltaSeconds = errors.New("Failed to parse delta-seconds in `stale-while-revalidate`") ) func whitespace(b byte) bool { @@ -403,6 +407,21 @@ type ResponseCacheDirectives struct { // proxy-revalidate response directive. SMaxAge DeltaSeconds + //// + // Experimental features + // - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#Extension_Cache-Control_directives + // - https://www.fastly.com/blog/stale-while-revalidate-stale-if-error-available-today + //// + + // immutable(cast-to-bool): experimental feature + Immutable bool + + // stale-if-error(delta seconds): experimental feature + StaleIfError DeltaSeconds + + // stale-while-revalidate(delta seconds): experimental feature + StaleWhileRevalidate DeltaSeconds + // Extensions: http://tools.ietf.org/html/rfc7234#section-5.2.3 // // The Cache-Control header field can be extended through the use of one @@ -416,6 +435,9 @@ func ParseResponseCacheControl(value string) (*ResponseCacheDirectives, error) { cd := &ResponseCacheDirectives{ MaxAge: -1, SMaxAge: -1, + // Exerimantal stale timeouts + StaleIfError: -1, + StaleWhileRevalidate: -1, } err := parse(value, cd) @@ -446,6 +468,13 @@ func (cd *ResponseCacheDirectives) addToken(token string) error { err = ErrMaxAgeDeltaSeconds case "s-maxage": err = ErrSMaxAgeDeltaSeconds + // Experimental + case "immutable": + cd.Immutable = true + case "stale-if-error": + err = ErrMaxAgeDeltaSeconds + case "stale-while-revalidate": + err = ErrMaxAgeDeltaSeconds default: cd.Extensions = append(cd.Extensions, token) } @@ -500,6 +529,13 @@ func (cd *ResponseCacheDirectives) addPair(token string, v string) error { cd.MaxAge, err = parseDeltaSeconds(v) case "s-maxage": cd.SMaxAge, err = parseDeltaSeconds(v) + // Experimental + case "immutable": + err = ErrImmutableNoArgs + case "stale-if-error": + cd.StaleIfError, err = parseDeltaSeconds(v) + case "stale-while-revalidate": + cd.StaleWhileRevalidate, err = parseDeltaSeconds(v) default: // TODO(pquerna): this sucks, making user re-parse, and its technically not 'quoted' like the original, // but this is still easier, just a SplitN on "=" diff --git a/vendor/github.com/pquerna/cachecontrol/cacheobject/directive_test.go b/vendor/github.com/pquerna/cachecontrol/cacheobject/directive_test.go index 69d47b5d..4076a98a 100644 --- a/vendor/github.com/pquerna/cachecontrol/cacheobject/directive_test.go +++ b/vendor/github.com/pquerna/cachecontrol/cacheobject/directive_test.go @@ -246,6 +246,27 @@ func TestResPrivate(t *testing.T) { require.Equal(t, cd.PrivatePresent, true) } +func TestResImmutable(t *testing.T) { + cd, err := ParseResponseCacheControl(`immutable`) + require.NoError(t, err) + require.NotNil(t, cd) + require.Equal(t, cd.Immutable, true) +} + +func TestResStaleIfError(t *testing.T) { + cd, err := ParseResponseCacheControl(`stale-if-error=99999`) + require.NoError(t, err) + require.NotNil(t, cd) + require.Equal(t, cd.StaleIfError, DeltaSeconds(99999)) +} + +func TestResStaleWhileRevalidate(t *testing.T) { + cd, err := ParseResponseCacheControl(`stale-while-revalidate=99999`) + require.NoError(t, err) + require.NotNil(t, cd) + require.Equal(t, cd.StaleWhileRevalidate, DeltaSeconds(99999)) +} + func TestParseDeltaSecondsZero(t *testing.T) { ds, err := parseDeltaSeconds("0") require.NoError(t, err)