)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":13,"context_line":"run_tests --makemessages-babel"},{"line_number":14,"context_line":"  Use babel to generate message catalogs"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"run_tests --compilemessages-babel"},{"line_number":17,"context_line":"  Use babel to complile message catalogs. Not yet implemented."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Once this patch lands the next step is to write an extractor that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3afb71cf_1ff41b84","line":16,"updated":"2015-06-08 17:03:41.000000000","message":"doesn\u0027t look like this exists, should remove.","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"}],"babel.cfg":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"6cbeb2ed77ae12b86d4b7c312e83c60f8e043ade","unresolved":false,"context_lines":[{"line_number":2,"context_line":"django \u003d django_babel.extract:extract_django"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"[python: **.py]"},{"line_number":5,"context_line":"[django: templates/**.*]"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"fa32b979_59b875e5","line":5,"updated":"2015-06-17 01:01:57.000000000","message":"can be more specific here templates/**.html","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"}],"run_tests.sh":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --compilemessages-babel  Compile all translation files using babel.\""},{"line_number":22,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":23,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""},{"line_number":24,"context_line":"  echo \"  -p, --pep8               Just run pep8\""}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_5ffa9376","line":21,"updated":"2015-06-08 17:03:41.000000000","message":"doesn\u0027t look like this exists, should remove.","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"function run_makemessages_babel {"},{"line_number":442,"context_line":"  OPTS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2 --keyword\u003dugettext_noop --keyword\u003dugettext_lazy --keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext:1c,2 --keyword\u003dnpgettext:1c,2,3 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":"  JSOPTS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2 --keyword\u003dpgettext:1c,2 --keyword\u003dnpgettext:1c,2,3\""},{"line_number":444,"context_line":"  cat \u003e babel.cfg \u003c\u003cEOF"},{"line_number":445,"context_line":"[extractors]"},{"line_number":446,"context_line":"django \u003d django_babel.extract:extract_django"}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_7f5e6f77","line":443,"updated":"2015-06-08 17:03:41.000000000","message":"There has to be a cleaner way of specifying the keywords. I believe these are the default keywords. Not entirely sure you need to pass them in?","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":441,"context_line":"function run_makemessages_babel {"},{"line_number":442,"context_line":"  OPTS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2 --keyword\u003dugettext_noop --keyword\u003dugettext_lazy --keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext:1c,2 --keyword\u003dnpgettext:1c,2,3 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":"  JSOPTS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2 --keyword\u003dpgettext:1c,2 --keyword\u003dnpgettext:1c,2,3\""},{"line_number":444,"context_line":"  cat \u003e babel.cfg \u003c\u003cEOF"},{"line_number":445,"context_line":"[extractors]"},{"line_number":446,"context_line":"django \u003d django_babel.extract:extract_django"},{"line_number":447,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_ca512310","line":444,"updated":"2015-06-08 17:03:41.000000000","message":"lets do this properly and add a babel.cfg file","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":443,"context_line":"  JSOPTS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2 --keyword\u003dpgettext:1c,2 --keyword\u003dnpgettext:1c,2,3\""},{"line_number":444,"context_line":"  cat \u003e babel.cfg \u003c\u003cEOF"},{"line_number":445,"context_line":"[extractors]"},{"line_number":446,"context_line":"django \u003d django_babel.extract:extract_django"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"[python: **.py]"},{"line_number":449,"context_line":"[django: templates/**.*]"}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_9f136b66","line":446,"updated":"2015-06-08 17:03:41.000000000","message":"hm interesting..... i\u0027m assuming this is where we add custom extractors?","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":454,"context_line":"[javascript: **.js]"},{"line_number":455,"context_line":"EOF"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"  echo -n \"horizon: \""}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_ff7dbfb1","line":457,"updated":"2015-06-08 17:03:41.000000000","message":"too many empty lines","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"f9653cd23366d56f0c04e320fa100f086491a065","unresolved":false,"context_lines":[{"line_number":485,"context_line":"  rm ../babel.cfg ../babeljs.cfg"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"  exit $(($HORIZON_PY_RESULT || $HORIZON_JS_RESULT || $DASHBOARD_RESULT || $DASHBOARD_JS_RESULT))"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"function run_makemessages {"}],"source_content_type":"text/x-sh","patch_set":1,"id":"3afb71cf_5f8bb3c3","line":488,"updated":"2015-06-08 17:03:41.000000000","message":"extra line","commit_id":"48018978dab7cb6b36d7f0b1180852761eeacbe2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"6cbeb2ed77ae12b86d4b7c312e83c60f8e043ade","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --compilemessages-babel  Compile all translation files using babel.\""},{"line_number":22,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":23,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""},{"line_number":24,"context_line":"  echo \"  -p, --pep8               Just run pep8\""}],"source_content_type":"text/x-sh","patch_set":7,"id":"fa32b979_6706e087","line":21,"updated":"2015-06-17 01:01:57.000000000","message":"remove, not needed since we will use django\u0027s compilemessages","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"72d656263b5649064f7abf8b6b897be9a6151cf8","unresolved":false,"context_lines":[{"line_number":438,"context_line":"  exit 0"},{"line_number":439,"context_line":"}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"function run_makemessages_babel {"},{"line_number":442,"context_line":"  OPTS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"  echo -n \"horizon: \""}],"source_content_type":"text/x-sh","patch_set":7,"id":"fa32b979_d98b1467","line":441,"updated":"2015-06-17 01:19:47.000000000","message":"The difference should give you the list of keywords needed.\n\nDefault Django keywords:\nhttps://github.com/django/django/blob/master/django/core/management/commands/makemessages.py#L123\n\nDefault Babel keywords:\nhttps://github.com/mitsuhiko/babel/blob/246996b0ee51e49ebcd504e234d3bcdcb178996c/babel/messages/extract.py#L31","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"6cbeb2ed77ae12b86d4b7c312e83c60f8e043ade","unresolved":false,"context_lines":[{"line_number":439,"context_line":"}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"function run_makemessages_babel {"},{"line_number":442,"context_line":"  OPTS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"  echo -n \"horizon: \""},{"line_number":445,"context_line":"  cd horizon"}],"source_content_type":"text/x-sh","patch_set":7,"id":"fa32b979_67b820c9","line":442,"updated":"2015-06-17 01:01:57.000000000","message":"can combine the extract options into one line, and update options into another line","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"6cbeb2ed77ae12b86d4b7c312e83c60f8e043ade","unresolved":false,"context_lines":[{"line_number":452,"context_line":"  ${command_wrapper} pybabel update -D djangojs -i locale/djangojs.pot -l en -d locale"},{"line_number":453,"context_line":"  HORIZON_JS_RESULT\u003d$?"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"  rm locale/django.pot locale/djangojs.pot"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"  echo -n \"openstack_dashboard: \""},{"line_number":458,"context_line":"  cd ../openstack_dashboard"}],"source_content_type":"text/x-sh","patch_set":7,"id":"fa32b979_c7bfaca8","line":455,"updated":"2015-06-17 01:01:57.000000000","message":"not a big deal, but after each section, the rm should be perform right away, in case an error occurs mid-way through 2nd one.","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"6cbeb2ed77ae12b86d4b7c312e83c60f8e043ade","unresolved":false,"context_lines":[{"line_number":510,"context_line":"  exit $(($HORIZON_PY_RESULT || $DASHBOARD_RESULT))"},{"line_number":511,"context_line":"}"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"function find_locales {"},{"line_number":514,"context_line":"  MYLOCALES\u003d\"\""},{"line_number":515,"context_line":"  cd locale"},{"line_number":516,"context_line":"  for file in * ; do"}],"source_content_type":"text/x-sh","patch_set":7,"id":"fa32b979_67dfc00d","line":513,"updated":"2015-06-17 01:01:57.000000000","message":"remove, not needed since we will use django\u0027s compilemessages","commit_id":"47ec00b27e9cb253be63bc656c91ab1799757855"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4cab15b1d8139e4d21c695a19615127528f9ffe1","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --compilemessages-babel  Compile all translation files using babel.\""},{"line_number":22,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":23,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""},{"line_number":24,"context_line":"  echo \"  -p, --pep8               Just run pep8\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_bf5a8cf0","line":21,"updated":"2015-06-17 17:15:26.000000000","message":"needs removing!","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"5d854e5a57690271be11a45385e544cf8a4aa5e8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --compilemessages-babel  Compile all translation files using babel.\""},{"line_number":22,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":23,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""},{"line_number":24,"context_line":"  echo \"  -p, --pep8               Just run pep8\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_573239f3","line":21,"in_reply_to":"fa32b979_bf5a8cf0","updated":"2015-06-17 23:48:29.000000000","message":"Done","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4cab15b1d8139e4d21c695a19615127528f9ffe1","unresolved":false,"context_lines":[{"line_number":436,"context_line":"  fi"},{"line_number":437,"context_line":"  exit 0"},{"line_number":438,"context_line":"}"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"function babel_extract() {"},{"line_number":441,"context_line":"  DOMAIN\u003d$1"},{"line_number":442,"context_line":"  KEYWORDS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_5f4d803c","line":439,"updated":"2015-06-17 17:15:26.000000000","message":"Just found out that you can specify these options via a setup.cfg. this might be the way to go since it gives more power to the deployers on how to extract and update translations without modifying source. http://babel.edgewall.org/wiki/Documentation/setup.html","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"5d854e5a57690271be11a45385e544cf8a4aa5e8","unresolved":false,"context_lines":[{"line_number":436,"context_line":"  fi"},{"line_number":437,"context_line":"  exit 0"},{"line_number":438,"context_line":"}"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"function babel_extract() {"},{"line_number":441,"context_line":"  DOMAIN\u003d$1"},{"line_number":442,"context_line":"  KEYWORDS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_72f74b59","line":439,"in_reply_to":"fa32b979_5f4d803c","updated":"2015-06-17 23:48:29.000000000","message":"This looks to be a little more complicated.  It seems after a bit of a poke that this applies to a setup.cfg used as part of distutils integration (i.e. integrating babel into your project). It doesn\u0027t seem as simple as just adding to our current config files.  I\u0027d like to leave this for a later patch, if we decide to do it.","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4cab15b1d8139e4d21c695a19615127528f9ffe1","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"function babel_extract() {"},{"line_number":441,"context_line":"  DOMAIN\u003d$1"},{"line_number":442,"context_line":"  KEYWORDS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"  ${command_wrapper} pybabel extract -F ../${DOMAIN}.cfg -o locale/${DOMAIN}.pot $KEYWORDS ."},{"line_number":445,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_047b2b8d","line":442,"updated":"2015-06-17 17:15:26.000000000","message":"redefinition of KEYWORDS here!","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"5d854e5a57690271be11a45385e544cf8a4aa5e8","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"function babel_extract() {"},{"line_number":441,"context_line":"  DOMAIN\u003d$1"},{"line_number":442,"context_line":"  KEYWORDS\u003d\"--keyword\u003dungettext_lazy:1,2 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"  ${command_wrapper} pybabel extract -F ../${DOMAIN}.cfg -o locale/${DOMAIN}.pot $KEYWORDS ."},{"line_number":445,"context_line":"}"}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_4db7083a","line":442,"in_reply_to":"fa32b979_047b2b8d","updated":"2015-06-17 23:48:29.000000000","message":"Done","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4cab15b1d8139e4d21c695a19615127528f9ffe1","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"function run_makemessages {"},{"line_number":456,"context_line":"  KEYWORDS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2\""},{"line_number":457,"context_line":"  KEYWORDS\u003d\"${KEYWORDS} --keyword\u003dugettext_noop --keyword\u003dugettext_lazy --keyword\u003dungettext_lazy:1,2\""},{"line_number":458,"context_line":"  KEYWORDS\u003d\"${KEYWORDS} --keyword\u003dnpgettext:1c,2,3 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":459,"context_line":""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_04a24bfd","line":456,"updated":"2015-06-17 17:15:26.000000000","message":"Not used anywhere.\nI prefer to see this formatted as following for readability:\n\n  keywords \u003d \"--keyword\u003dgettext_noop\"\n  keywords +\u003d \"--keyword\u003dgettext_lazy\"\n  ......\n\noptionally, can use \"-k gettext_noop\" format to reduce width","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"5d854e5a57690271be11a45385e544cf8a4aa5e8","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"function run_makemessages {"},{"line_number":456,"context_line":"  KEYWORDS\u003d\"--keyword\u003dgettext_noop --keyword\u003dgettext_lazy --keyword\u003dngettext_lazy:1,2\""},{"line_number":457,"context_line":"  KEYWORDS\u003d\"${KEYWORDS} --keyword\u003dugettext_noop --keyword\u003dugettext_lazy --keyword\u003dungettext_lazy:1,2\""},{"line_number":458,"context_line":"  KEYWORDS\u003d\"${KEYWORDS} --keyword\u003dnpgettext:1c,2,3 --keyword\u003dpgettext_lazy:1c,2 --keyword\u003dnpgettext_lazy:1c,2,3\""},{"line_number":459,"context_line":""}],"source_content_type":"text/x-sh","patch_set":10,"id":"fa32b979_8db19049","line":456,"in_reply_to":"fa32b979_04a24bfd","updated":"2015-06-17 23:48:29.000000000","message":"Done","commit_id":"204ca717ee5fdc37c401142950b271bf925bfe09"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"  echo \"                           environment. Useful when dependencies have\""},{"line_number":16,"context_line":"  echo \"                           been added.\""},{"line_number":17,"context_line":"  echo \"  -m, --manage             Run a Django management command.\""},{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_8ad3b35f","line":18,"updated":"2015-06-18 00:31:38.000000000","message":"\"files. Using\" --\u003e \"files using\"","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"  echo \"                           environment. Useful when dependencies have\""},{"line_number":16,"context_line":"  echo \"                           been added.\""},{"line_number":17,"context_line":"  echo \"  -m, --manage             Run a Django management command.\""},{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_aa50f732","line":18,"in_reply_to":"fa32b979_8ad3b35f","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  echo \"                           been added.\""},{"line_number":17,"context_line":"  echo \"  -m, --manage             Run a Django management command.\""},{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":22,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_8aec132b","line":19,"updated":"2015-06-18 00:31:38.000000000","message":"no longer needed, remove.","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  echo \"                           been added.\""},{"line_number":17,"context_line":"  echo \"  -m, --manage             Run a Django management command.\""},{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files. Using babel\""},{"line_number":19,"context_line":"  echo \"  --makemessages-babel     Create/Update English translation files.\""},{"line_number":20,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":21,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":22,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_4a436b6c","line":19,"in_reply_to":"fa32b979_8aec132b","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"testargs\u003d\"\""},{"line_number":88,"context_line":"with_coverage\u003d0"},{"line_number":89,"context_line":"makemessages\u003d0"},{"line_number":90,"context_line":"makemessages_babel\u003d0"},{"line_number":91,"context_line":"compilemessages\u003d0"},{"line_number":92,"context_line":"check_only\u003d0"},{"line_number":93,"context_line":"pseudo\u003d0"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_ea8a7f63","line":90,"updated":"2015-06-18 00:31:38.000000000","message":"no longer needed, remove.","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"testargs\u003d\"\""},{"line_number":88,"context_line":"with_coverage\u003d0"},{"line_number":89,"context_line":"makemessages\u003d0"},{"line_number":90,"context_line":"makemessages_babel\u003d0"},{"line_number":91,"context_line":"compilemessages\u003d0"},{"line_number":92,"context_line":"check_only\u003d0"},{"line_number":93,"context_line":"pseudo\u003d0"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_eaf6ff5b","line":90,"in_reply_to":"fa32b979_ea8a7f63","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":436,"context_line":"  exit 0"},{"line_number":437,"context_line":"}"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"function babel_extract() {"},{"line_number":440,"context_line":"  DOMAIN\u003d$1"},{"line_number":441,"context_line":"  KEYWORDS\u003d\"-k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2\""},{"line_number":442,"context_line":"  KEYWORDS+\u003d\" -k gettext_noop -k ugettext_lazy -k ungettext_lazy:1,2\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_ea4fdf31","line":439,"updated":"2015-06-18 00:31:38.000000000","message":"needs to support the $check_only option","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":436,"context_line":"  exit 0"},{"line_number":437,"context_line":"}"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"function babel_extract() {"},{"line_number":440,"context_line":"  DOMAIN\u003d$1"},{"line_number":441,"context_line":"  KEYWORDS\u003d\"-k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2\""},{"line_number":442,"context_line":"  KEYWORDS+\u003d\" -k gettext_noop -k ugettext_lazy -k ungettext_lazy:1,2\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_8a98931d","line":439,"in_reply_to":"fa32b979_ea4fdf31","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"function run_makemessages {"},{"line_number":457,"context_line":"  EXTRACT_OPTS\u003d\"-\""},{"line_number":458,"context_line":"  UPDATE_OPTS\u003d\"-l en -d locale\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"  echo -n \"horizon: \""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_ea66ffb9","line":457,"updated":"2015-06-18 00:31:38.000000000","message":"extract opts not used anywhere, remove.","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"function run_makemessages {"},{"line_number":457,"context_line":"  EXTRACT_OPTS\u003d\"-\""},{"line_number":458,"context_line":"  UPDATE_OPTS\u003d\"-l en -d locale\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"  echo -n \"horizon: \""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_4a9e0b08","line":457,"in_reply_to":"fa32b979_ea66ffb9","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"function run_makemessages {"},{"line_number":457,"context_line":"  EXTRACT_OPTS\u003d\"-\""},{"line_number":458,"context_line":"  UPDATE_OPTS\u003d\"-l en -d locale\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"  echo -n \"horizon: \""},{"line_number":461,"context_line":"  cd horizon"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_4a57ebc9","line":458,"updated":"2015-06-18 00:31:38.000000000","message":"update opts not needed here, remove.","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"function run_makemessages {"},{"line_number":457,"context_line":"  EXTRACT_OPTS\u003d\"-\""},{"line_number":458,"context_line":"  UPDATE_OPTS\u003d\"-l en -d locale\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"  echo -n \"horizon: \""},{"line_number":461,"context_line":"  cd horizon"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_6aa18f45","line":458,"in_reply_to":"fa32b979_4a57ebc9","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":468,"context_line":"  babel_extract djangojs"},{"line_number":469,"context_line":"  babel_update djangojs"},{"line_number":470,"context_line":"  HORIZON_JS_RESULT\u003d$?"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"  rm locale/djangojs.pot"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"  echo -n \"openstack_dashboard: \""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_cabd3b03","line":471,"updated":"2015-06-18 00:31:38.000000000","message":"remove extra line","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":468,"context_line":"  babel_extract djangojs"},{"line_number":469,"context_line":"  babel_update djangojs"},{"line_number":470,"context_line":"  HORIZON_JS_RESULT\u003d$?"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"  rm locale/djangojs.pot"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"  echo -n \"openstack_dashboard: \""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_aac237e7","line":471,"in_reply_to":"fa32b979_cabd3b03","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a3166de47dda4cbc7f4cf207ce5f86ad33d20cf5","unresolved":false,"context_lines":[{"line_number":484,"context_line":"  DASHBOARD_JS_RESULT\u003d$?"},{"line_number":485,"context_line":"  rm locale/djangojs.pot"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"  exit $(($HORIZON_PY_RESULT || $HORIZON_JS_RESULT || $DASHBOARD_RESULT || $DASHBOARD_JS_RESULT))"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_8a3ad397","line":487,"updated":"2015-06-18 00:31:38.000000000","message":"remove extra line","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"75172bbdf7684aef4ec2f5f805d0354562fc859e","unresolved":false,"context_lines":[{"line_number":484,"context_line":"  DASHBOARD_JS_RESULT\u003d$?"},{"line_number":485,"context_line":"  rm locale/djangojs.pot"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"  exit $(($HORIZON_PY_RESULT || $HORIZON_JS_RESULT || $DASHBOARD_RESULT || $DASHBOARD_JS_RESULT))"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa32b979_8a665328","line":487,"in_reply_to":"fa32b979_8a3ad397","updated":"2015-06-18 01:00:37.000000000","message":"Done","commit_id":"2026d423d3d7d065583b8a4794bdcd441072e710"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"4f9b5ca32cd946b747043857e0684eab6c424b74","unresolved":false,"context_lines":[{"line_number":15,"context_line":"  echo \"                           environment. Useful when dependencies have\""},{"line_number":16,"context_line":"  echo \"                           been added.\""},{"line_number":17,"context_line":"  echo \"  -m, --manage             Run a Django management command.\""},{"line_number":18,"context_line":"  echo \"  --makemessages           Create/Update English translation files using babel\""},{"line_number":19,"context_line":"  echo \"  --compilemessages        Compile all translation files.\""},{"line_number":20,"context_line":"  echo \"  --check-only             Do not update translation files (--makemessages only).\""},{"line_number":21,"context_line":"  echo \"  --pseudo                 Pseudo translate a language.\""}],"source_content_type":"text/x-sh","patch_set":14,"id":"fa32b979_99a46fba","line":18,"updated":"2015-06-18 04:46:32.000000000","message":"missing period.","commit_id":"46f2a4c91cbcc66aa0676158b32aff34ee8ac731"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"867e552a6204e284bc321d331231f8e21e13aa38","unresolved":false,"context_lines":[{"line_number":434,"context_line":"  exit 0"},{"line_number":435,"context_line":"}"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"function babel_extract() {"},{"line_number":438,"context_line":"  DOMAIN\u003d$1"},{"line_number":439,"context_line":"  KEYWORDS\u003d\"-k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2\""},{"line_number":440,"context_line":"  KEYWORDS+\u003d\" -k gettext_noop -k ugettext_lazy -k ungettext_lazy:1,2\""}],"source_content_type":"text/x-sh","patch_set":14,"id":"fa32b979_1788fc6f","line":437,"updated":"2015-06-18 21:11:13.000000000","message":"The () don\u0027t belong on these functions (or if they really do some explanation is needed)","commit_id":"46f2a4c91cbcc66aa0676158b32aff34ee8ac731"},{"author":{"_account_id":9369,"name":"Steve Kowalik","email":"steven@wedontsleep.org","username":"stevenk"},"change_message_id":"e72153664d728b9cec26b40abedcb87152dc1bba","unresolved":false,"context_lines":[{"line_number":456,"context_line":"  babel_extract django"},{"line_number":457,"context_line":"  babel_update django"},{"line_number":458,"context_line":"  HORIZON_PY_RESULT\u003d$?"},{"line_number":459,"context_line":"  rm locale/django.pot"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"  echo -n \"horizon javascript: \""},{"line_number":462,"context_line":"  babel_extract djangojs"}],"source_content_type":"text/x-sh","patch_set":17,"id":"fa32b979_61229ebb","line":459,"updated":"2015-06-22 04:58:57.000000000","message":"Why do you remove the .pot files? I\u0027ve been hitting this issue trying to update the translation scripts for Horizon to use Zanata, and the lack of .pot files in the horizon repository means that Zanata doesn\u0027t find any source documents to upload.\n\nI\u0027m aware that the Transifex scripts use horizon/locale/en/LC_MESSAGES/django.po and friends, but the Transifex client is told via a command line argument what to use -- Zanata searches for source documents and uploads what it finds (you can configure it with rules and the directory to start looking in, but that\u0027s it), and from the behaviour I\u0027m seeing it expects .pot for source translations.","commit_id":"5fd241140701ecc74b67c8832dc13437e1cf9a03"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"70ece9e952d86db5aec205c90b3da0a257fa43d2","unresolved":false,"context_lines":[{"line_number":456,"context_line":"  babel_extract django"},{"line_number":457,"context_line":"  babel_update django"},{"line_number":458,"context_line":"  HORIZON_PY_RESULT\u003d$?"},{"line_number":459,"context_line":"  rm locale/django.pot"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"  echo -n \"horizon javascript: \""},{"line_number":462,"context_line":"  babel_extract djangojs"}],"source_content_type":"text/x-sh","patch_set":17,"id":"fa32b979_d6ba4fc0","line":459,"in_reply_to":"fa32b979_61229ebb","updated":"2015-06-22 06:57:24.000000000","message":"Because that\u0027s what the current makemessages command does and I was maintaining compatibility.\n\nHappy to change this, but perhaps in a follow on patch?\n\nI\u0027d really like this one to land :)","commit_id":"5fd241140701ecc74b67c8832dc13437e1cf9a03"},{"author":{"_account_id":9369,"name":"Steve Kowalik","email":"steven@wedontsleep.org","username":"stevenk"},"change_message_id":"2b130c00533f40b4cf6afa8f5ea4e36f7fa3b679","unresolved":false,"context_lines":[{"line_number":456,"context_line":"  babel_extract django"},{"line_number":457,"context_line":"  babel_update django"},{"line_number":458,"context_line":"  HORIZON_PY_RESULT\u003d$?"},{"line_number":459,"context_line":"  rm locale/django.pot"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"  echo -n \"horizon javascript: \""},{"line_number":462,"context_line":"  babel_extract djangojs"}],"source_content_type":"text/x-sh","patch_set":17,"id":"fa32b979_1690b7eb","line":459,"in_reply_to":"fa32b979_d6ba4fc0","updated":"2015-06-22 07:09:17.000000000","message":"Sounds like an excellent plan -- note I didn\u0027t vote at all to not block this patch. :-)","commit_id":"5fd241140701ecc74b67c8832dc13437e1cf9a03"}]}
