• Austin Clements's avatar
    cmd/dist: fetch version when needed, instead of at init · f3b73e04
    Austin Clements authored
    Currently, if there is a VERSION.cache, running make.bash will set
    runtime.theVersion to the revision as of the *last* make.bash run
    instead of the current make.bash run.
    
    For example,
    
    $ git rev-parse --short HEAD
    5c4a86d0
    $ ./make.bash
    ...
    $ cat ../VERSION.cache
    devel +5c4a86d0 Tue Feb 10 01:46:30 2015 +0000
    $ git checkout a1dbb920
    $ ./make.bash
    ...
    $ go version
    go version devel +5c4a86d0 Tue Feb 10 01:46:30 2015 +0000 linux/amd64
    $ ./make.bash
    ...
    $ go version
    go version devel +a1dbb920 Tue Feb 10 02:31:27 2015 +0000 linux/amd64
    
    This happens because go tool dist reads the potentially stale
    VERSION.cache into goversion during early initialization; then cleans,
    which deletes VERSION.cache; then builds the runtime using the stale
    revision read in to goversion.  It isn't until make later in the build
    process, when make.bash invokes go tool dist again, that VERSION.cache
    gets updated with the current revision.
    
    To address this, simply don't bother fetching the version until go
    tool dist needs it and don't bother caching the value in memory.  This
    is more robust since it interacts with cleaning in the expected ways.
    Futhermore, there's no downside to eliminating the in-memory cache;
    the file system cache is perfectly reasonable for the whole three
    times make.bash consults it.
    
    Change-Id: I8c480100e56bb2db0816e8a088177004d9e87973
    Reviewed-on: https://go-review.googlesource.com/4540Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    f3b73e04
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal/syscall Loading commit data...
io Loading commit data...
lib9 Loading commit data...
libbio Loading commit data...
liblink Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...