On Fri, Jan 25, 2019 at 11:43 PM Paul Jolly <p...@myitcv.io> wrote:
>
> Tim - in case it's of any interest, I am in the process of (re)writing
> a dependency-aware wrapper around go generate that caches results in
> an artefact cache (i.e. only re-runs code generation as required).

Yes interested.  Happy to talk about what we do today to be as
on-demand as possible.

> On Sat, 26 Jan 2019 at 03:56, 'Tim Hockin' via golang-nuts
> <golang-nuts@googlegroups.com> wrote:
> >
> > Fair point, of course.
> >
> > I care because Kubernetes and it's family of projects have Makefiles to 
> > encapsulate trickier aspects of building, including code generation.  
> > Compiling kubernetes takes a LONG time.  It would be nice to avoid 
> > re-triggering secondary actions when the primary artifacts have not changed.
> >
> > Could I checksum?  Sure, but then I am writing a custom builder, so I might 
> > as well use Bazel (which has other issues).
> >
> > It's not a huge deal, today, but I really wanted to understand it.  It just 
> > seemed broken.
> >
> > On Fri, Jan 25, 2019, 5:41 PM Ian Lance Taylor <i...@golang.org> wrote:
> >>
> >> On Fri, Jan 25, 2019 at 3:51 PM Tim Hockin <thoc...@google.com> wrote:
> >> >
> >> > I don't grok that reasoning - can you expand on it?  Assume for a
> >> > second that it did NOT update mtime if the result did not change.  I
> >> > can be confident that same mtime == no change, right?  It doesn't
> >> > imply that different mtime == something change, but I think that's OK
> >> > (for my use, maybe I am limited in my imagination). Even
> >> >
> >> > Does it really matter if some corner cases result in spurious updates?
> >>
> >> It would be nice if it worked that way, but I'm confident that if we
> >> avoided updating mtime when we knew the file did not change, and then
> >> later started updating mtime again, people would file bugs saying that
> >> the mtime was updated incorrectly.  Right now we provide a simple API:
> >> run "go build" or "go install" and your executable will be up to date.
> >> Why do we need a more complex API?
> >>
> >> Let me turn it around: why do you care?  For cases where you do care,
> >> could you instead keep a hash of the file contents?  For what it's
> >> worth, you can fetch a hash of a Go program by running "go tool
> >> buildid PROGRAM".  See https://golang.org/cmd/buildid.
> >>
> >> Ian
> >>
> >>
> >>
> >> > On Fri, Jan 25, 2019 at 3:02 PM Ian Lance Taylor <i...@golang.org> wrote:
> >> > >
> >> > > On Fri, Jan 25, 2019 at 1:07 PM 'Tim Hockin' via golang-nuts
> >> > > <golang-nuts@googlegroups.com> wrote:
> >> > > >
> >> > > > Example:
> >> > > >
> >> > > > ```
> >> > > > $ which git-sync
> >> > > >
> >> > > > $ go install -installsuffix "static" ./cmd/git-sync/
> >> > > >
> >> > > > $ ls -l --full-time `which git-sync`; md5sum `which git-sync`
> >> > > > -rwxr-xr-x 1 thockin primarygroup 13956902 2019-01-25
> >> > > > 13:04:40.758632955 -0800
> >> > > > /usr/local/google/home/thockin/src/go/bin/git-sync
> >> > > > 1200f479c8ba86f70f0e4a885ecdd5f2
> >> > > > /usr/local/google/home/thockin/src/go/bin/git-sync
> >> > > >
> >> > > > $ go install -installsuffix "static" ./cmd/git-sync/
> >> > > >
> >> > > > $ ls -l --full-time `which git-sync`; md5sum `which git-sync`
> >> > > > -rwxr-xr-x 1 thockin primarygroup 13956902 2019-01-25
> >> > > > 13:04:53.817700697 -0800
> >> > > > /usr/local/google/home/thockin/src/go/bin/git-sync
> >> > > > 1200f479c8ba86f70f0e4a885ecdd5f2
> >> > > > /usr/local/google/home/thockin/src/go/bin/git-sync
> >> > > > ```
> >> > > >
> >> > > > Is the desired behavior or just a side-effect?  Is there any way to
> >> > > > defeat it?  Would a patch for this be shot down?
> >> > >
> >> > > This is intended behavior.  The comment in the code
> >> > > (https://golang.org/src/cmd/go/internal/work/exec.go) is
> >> > >
> >> > > // Whether we're smart enough to avoid a complete rebuild
> >> > > // depends on exactly what the staleness and rebuild algorithms
> >> > > // are, as well as potentially the state of the Go build cache.
> >> > > // We don't really want users to be able to infer (or worse start 
> >> > > depending on)
> >> > > // those details from whether the modification time changes during
> >> > > // "go install", so do a best-effort update of the file times to make 
> >> > > it
> >> > > // look like we rewrote a.Target even if we did not. Updating the mtime
> >> > > // may also help other mtime-based systems that depend on our
> >> > > // previous mtime updates that happened more often.
> >> > > // This is still not perfect - we ignore the error result, and if the 
> >> > > file was
> >> > > // unwritable for some reason then pretending to have written it is 
> >> > > also
> >> > > // confusing - but it's probably better than not doing the mtime 
> >> > > update.
> >> > > //
> >> > > // But don't do that for the special case where building an executable
> >> > > // with -linkshared implicitly installs all its dependent libraries.
> >> > > // We want to hide that awful detail as much as possible, so don't
> >> > > // advertise it by touching the mtimes (usually the libraries are up
> >> > > // to date).
> >> > >
> >> > > Ian
> >
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "golang-nuts" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to golang-nuts+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to