Hi Leo, Leo Famulari <l...@famulari.name> writes:
> On Mon, Apr 05, 2021 at 09:45:43PM +0200, Ludovic Courtès wrote: >> The GC’s scanner still gets it wrong though. I wonder whether having >> the grafting code more capable than the scanner could lead to bad >> surprises. WDYT? > > I'm going off-topic, but I've wished we had a generic fast string-search > (and replace?) procedure. Guile has several functions to help with this, e.g. 'string-contains', 'string-replace', 'string-replace-substring', and of course the regexp functions. The grafting code can't use these things because (1) we are not searching for a single string, but rather for arbitrary nix hashes, and (2) we can't easily use the regexp functions because there could be NULs present. > The go-build-system has a slow "one byte a time" implementation because > I couldn't figure out how to re-use the code in (guix build grafts): > > https://git.savannah.gnu.org/cgit/guix.git/tree/guix/build/go-build-system.scm?h=v1.2.0#n269 >From a glance, I would think that 'replace-store-references' from (guix build grafts) is directly applicable here. Do you remember what the difficulty was in using it? Alternatively, since you are only searching for a single string to replace, I think you could read the entire file into a single string (e.g. using 'get-string-all' with "ISO-8859-1" encoding) and use 'string-replace-substring'. What do you think? Mark