]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: assume that code in $GOROOT is up to date
authorJoel Sing <jsing@google.com>
Wed, 26 Sep 2012 14:00:50 +0000 (00:00 +1000)
committerJoel Sing <jsing@google.com>
Wed, 26 Sep 2012 14:00:50 +0000 (00:00 +1000)
Do not check compiler/linker timestamps for packages that are in the
$GOROOT. Avoids trying to rebuild non-writable standard packages when
timestamps have not been retained on the Go binaries.

Fixes #4106.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6533053

src/cmd/go/pkg.go

index 94f01aab056279744bf382ae3bb996c91573cf06..e9f344ff91835b768d0468864f7373db031e23fd 100644 (file)
@@ -521,14 +521,19 @@ func isStale(p *Package, topRoot map[string]bool) bool {
        // As a courtesy to developers installing new versions of the compiler
        // frequently, define that packages are stale if they are
        // older than the compiler, and commands if they are older than
-       // the linker.  This heuristic will not work if the binaries are back-dated,
-       // as some binary distributions may do, but it does handle a very
-       // common case.  See issue 3036.
-       if olderThan(buildToolchain.compiler()) {
-               return true
-       }
-       if p.build.IsCommand() && olderThan(buildToolchain.linker()) {
-               return true
+       // the linker.  This heuristic will not work if the binaries are
+       // back-dated, as some binary distributions may do, but it does handle
+       // a very common case.
+       // See issue 3036.
+       // Assume code in $GOROOT is up to date, since it may not be writeable.
+       // See issue 4106.
+       if p.Root != goroot {
+               if olderThan(buildToolchain.compiler()) {
+                       return true
+               }
+               if p.build.IsCommand() && olderThan(buildToolchain.linker()) {
+                       return true
+               }
        }
 
        // Have installed copy, probably built using current compilers,