Search code examples
djangotestingcontinuous-integrationtranslationtravis-ci

Detecting changes to Django translations (PO) files in CI


I am using Django translations for a project, and would like to ensure, on TravisCI, that translations are not left behind when changes are made to translatable strings.

This is a simplified snippet of my .travis.yml:

script:
 - ...
 - python manage.py makemessages -l ja --no-wrap --no-location
 - git diff --exit-code

That recreates the PO files, and fails when the file changes. So far so good.

Unfortunately, django updates the POT-Creation-Date every time the script is run, and I can't see any flags to makemessages that would disable that, so even if there are no changes, the file changes on every run.

Am I on the right lines, or is there a better way to detect that there has been a change?


Solution

  • Git now has a nice way to ignore specific matches. The following line will fail if there is a diff, but exclude the problematic header:

    git diff --ignore-matching-lines=POT-Creation-Date --exit-code
    

    What's better, Django recently merged a change to stop this header from getting updated when there are no changes to the translations. It hasn't been released as of Django 4.0, so I expect it will arrive in Django 4.1.

    See Django bug #6106 and the commit that fixes this issue.