I’m updating foundry to a version 11 and it broke an ass ton of my assets cause they’re all “verified version 10”

So all I have to do is change that number, they’re just maps so no need to update anything else, but I have like 400+ files to convert all in individual folders.

Please tell me there’s an easy way to do this. (I’m on Linux obviously)

  • blashork [she/her]@hexbear.net
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 year ago

    I also agree sed and some regex is your best bet

    I recommend formatting the regex with regex101.com, I’m down to help you if you post some examples

    Additionally there is a cli tool, I think jq or something like that, for processing json on the command line

    I have foundry too, let me see if I can find the files that need to be updated

      • blashork [she/her]@hexbear.net
        link
        fedilink
        English
        arrow-up
        0
        ·
        edit-2
        1 year ago

        I have made a python script and ran it on a clone of your git repo to confirm it works, simply run it at the root directory of wherever the files are, it will walk through and find module.json and do the replace.

        #!/usr/bin/env python3
        
        import re
        import os
        
        import fileinput
        
        pattern = re.compile(r'(?P\.+)\"compatibility\":{\"minimum\":\"(?P\\d+)\",\"verified\":\"(?P\\d+)\"},(?P\.+)')
        
        def make11(match):
            if match.groupdict().get('min', None) and match.groupdict().get('ver', None):
                return f"{match.groupdict()['pre']}\"compatibility\":{{\"minimum\":\"11\",\"verified\":\"11\"}},{match.groupdict()['post']}"
        
        for root, dirs, files in os.walk("."):
            for file in files:
                if file == "module.json":
                    for line in fileinput.input(f"{root}/{file}", inplace=True):
                        print(re.sub(pattern, make11, line))
        

        edit: lemmy is fucking with the formatting and removing the fucking regex group names, which will bork it. I’ve tried fixing it, dm me if you want me to send a downloadable link to the script

        • umami_wasabi@lemmy.ml
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          If using Python, why not just use JSON module? Simpler and easier maintain without all those regex.

          Still +1, on sed if one is on Linux.

      • Goun@lemmy.ml
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Yeah, jq doesn’t edit files, right? You’d have to have temp files or something? jq is so good handling json, I wish there was a way of using it to edit files.

        • tony@lemmy.hoyle.me.uk
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          You really want to do it that way anyway… process the files to a new set of files. That way when you screw it up going back is just deleting the new files, fixing and rerunning.

    • duncesplayed@lemmy.one
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Find can actually do the sed itself if you don’t want to use a subshell and a shell loop.

      find . -type f -iname '*.json' -exec sed -i 's/"verified":"10"/"verified":"11"/' '{}' ';'
      
      • wewbull@feddit.uk
        link
        fedilink
        English
        arrow-up
        0
        ·
        1 year ago

        -print0 | xargs -0 sed -i to get a single sed process working across multiple files.

        Add a -P 8 to xargs to get 8 parallel processes.