Re: AddPostAction memoization problem
Mats Wichmann <[email protected]> Wed, 29 May 2024 15:41:29 -0600
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <[email protected]> |
On 5/29/24 15:27, Mike Haboustak wrote: > On Wed, May 29, 2024 at 9:49 AM Mats Wichmann <[email protected]> wrote: >> >> I'd personally agree as to correct behavior: if a step that makes >> changes has completed, information related to the node should be up to >> date and not old. I guess it's worth mentioning that the getsize() >> method isn't *officially* exposed as a public interface, it's possible >> there was an actual reason for that back in the mists of time. >> > > Is it true that a function isn't officially exposed if it doesn't have > a docstring in the API docs? The documentation includes > SCons.Node.FS.File.get_size() right next to get_relpath(). > https://scons.org/doc/latest/HTML/scons-api/SCons.Node/#SCons.Node.FS.File.get_size No, the "public API" is the manpage. Unfortunately, the "API Docs" don't distinguish between public and internal reliably (we eventually added that notation to the main page). Every so often there's a docstring annotation to help out, but it's not frequent. > >> It should be sufficient to just remove the memoized 'stat', since it's >> the thing that holds information SCons itself doesn't update - it >> eventually comes from an os.stat() call - that could be considered >> "expensive" and thus worth memoizing. > > I think exists() and rexists() need to be cleared as well. The > get_size() call returns -1 because the file didn't exist when the > Builder was executed. It never tries to get the current value > rfile().getsize() The size obtained by get_size is memoized, so it maybe needs to be cleared too. I'm not sure why we need two such similarly named node methods (get_size is for File nodes only, and as you say, accounts for a repository). Let's just say some docstrings or comments here would have been cool, for those of us who haven't been working on SCons for 20+ years.... :-) >> Stepping aside from the internal implementation questions, you could in >> this particular case do something that sidesteps the memoized stat >> structure, like: >> >> print("PostAction:", os.path.getsize(target[0].abspath)) > > This does work, and it's the same work-around we implemented. I was > just trying to use the SCons object model and API functions as much as > possible. Yeah, I get it. _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users