diff options
| author | Robert Griesemer <gri@golang.org> | 2009-11-01 10:33:16 -0800 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2009-11-01 10:33:16 -0800 |
| commit | 70e1eeffd9a4848d9c31ce9945226cafd9273c60 (patch) | |
| tree | 4a4556349ef1703ed8f9baa575c75413e1bcaf20 | |
| parent | 6b77bc7ab9f326198872fb45bec3fc60e8caa388 (diff) | |
| download | golang-70e1eeffd9a4848d9c31ce9945226cafd9273c60.tar.gz | |
don't update sync time if no files have changed
(and thus avoid re-indexing after every sync attempt)
R=rsc
http://go/go-review/1016010
| -rw-r--r-- | src/cmd/godoc/main.go | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/cmd/godoc/main.go b/src/cmd/godoc/main.go index b30b58998..1d4617a46 100644 --- a/src/cmd/godoc/main.go +++ b/src/cmd/godoc/main.go @@ -50,11 +50,11 @@ var ( ) -func exec(c *http.Conn, args []string) bool { +func exec(c *http.Conn, args []string) (status int) { r, w, err := os.Pipe(); if err != nil { log.Stderrf("os.Pipe(): %v\n", err); - return false; + return 2; } bin := args[0]; @@ -67,7 +67,7 @@ func exec(c *http.Conn, args []string) bool { w.Close(); if err != nil { log.Stderrf("os.ForkExec(%q): %v\n", bin, err); - return false; + return 2; } var buf bytes.Buffer; @@ -76,12 +76,13 @@ func exec(c *http.Conn, args []string) bool { if err != nil { os.Stderr.Write(buf.Bytes()); log.Stderrf("os.Wait(%d, 0): %v\n", pid, err); - return false; + return 2; } - if !wait.Exited() || wait.ExitStatus() != 0 { + status = wait.ExitStatus(); + if !wait.Exited() || status > 1 { os.Stderr.Write(buf.Bytes()); - log.Stderrf("executing %v failed (exit status = %d)", args, wait.ExitStatus()); - return false; + log.Stderrf("executing %v failed (exit status = %d)", args, status); + return; } if *verbose { @@ -92,18 +93,23 @@ func exec(c *http.Conn, args []string) bool { c.Write(buf.Bytes()); } - return true; + return; } func dosync(c *http.Conn, r *http.Request) { args := []string{"/bin/sh", "-c", *syncCmd}; - if exec(c, args) { - // sync succeeded + switch exec(c, args) { + case 0: + // sync succeeded and some files have changed syncTime.set(nil); + fallthrough; + case 1: + // sync failed because no files changed + // don't change the sync time syncDelay.set(*syncMin); // revert to regular sync schedule - } else { - // sync failed - back off exponentially, but try at least once a day + default: + // sync failed because of an error - back off exponentially, but try at least once a day syncDelay.backoff(24*60); } } |
