Skip to content
  • anonym's avatar
    Unfuzzy PO files changed by refs: #17005. · a5e62488
    anonym authored
    I used this hacky approach:
    
        git diff 6b9e13f1^..origin/master  -- *.po > lots-of-fuzzy.patch
        patch -R -p1 < lots-of-fuzzy.patch
        git commit
    
    So I undid all the PO changes of #17005. The idea is to unfuzzy
    lots-of-fuzzy.patch and then apply this patch instead, and then squash
    those changes into the "revert" commit we made above, turning it into
    the commit I'm writing right now.
    
    The fuzzy cases I care aboute looke like this:
    
        -#, no-wrap
        -msgid "Online anonymity and censorship circumvention\n"
        +#, fuzzy, no-wrap
        +#| msgid "Online anonymity and censorship circumvention\n"
        +msgid "Online anonymity and censorship circumvention"
         msgstr "Onlineanonymität und Zensurumgehung\n"
    
    and should be transformed into this:
    
         #, no-wrap
        -msgid "Online anonymity and censorship circumvention\n"
        +msgid "Online anonymity and censorship circumvention"
        -msgstr "Onlineanonymität und Zensurumgehung\n"
        +msgstr "Onlineanonymität und Zensurumgehung"
    
    Behold this ugly state machine (my favored way of solving these kind
    of problems in small steps without having to think much about the
    whole problem):
    
        out = open('unfuzzy.patch', 'w')
        state = 0
        fuzzy_buf = ''
        unfuzzy_buf = ''
        File.read('lots-of-fuzzy.patch').each_line do |line|
          line = line.chomp
          fuzzy_buf   += line + "\n"
          if    state == 0 && line == '-#, no-wrap'
            state = 1
            unfuzzy_buf += " #, no-wrap\n"
          elsif state == 1 && /^-msgid ".*\\n"/.match(line)
            state = 2
            unfuzzy_buf += line + "\n"
          elsif state == 1 && line == '-msgstr ""'
            ;
          elsif state == 2 && line == '+#, fuzzy, no-wrap'
            state = 3
          elsif state == 3 && /^\+#| msgid ".*\\n"/.match(line)
            state = 4
          elsif state == 4 && /^\+msgid ".*"/.match(line)
            state = 5
            unfuzzy_buf += line + "\n"
          elsif state == 5 && /^ msgstr ".*\\n"/.match(line)
            state = 6
            unfuzzy_buf += "-" + line[1..] + "\n"
            unfuzzy_buf += "+" + line[1..-4] + '"' + "\n"
          elsif state == 6 && /^\s*$/.match(line)
            state = 0
            # Eh, so in total the above transformations mean that our hunk
            # results in one less line, so the diff offset is off by one =>
            # bad patch! So we just add a line that we easily can remove
            # later. :)
            unfuzzy_buf += "+########sdf9s7d87fyusdf98sd7f098sd7f09sduf09uj######\n"
            unfuzzy_buf += line + "\n"
            out.write(unfuzzy_buf)
            fuzzy_buf = ''
            unfuzzy_buf = ''
          else
            state = 0
            out.write(fuzzy_buf)
            fuzzy_buf = ''
            unfuzzy_buf = ''
          end
        end
    
    Then I applied unfuzzy.patch and used sed to kill the weird lines I
    had to introduce (see above):
    
        pattern="########sdf9s7d87fyusdf98sd7f098sd7f09sduf09uj######"
        for f in $(git grep -l ${pattern}); do
            sed -i "/${pattern}/d" ${f}
        done
    
    and squashed, and now we have 1386 fewer fuzzy strings, yay! And
    po_lint does not complain, which seems like a good sign. :)
    a5e62488