← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~abentley/launchpad/merge-translation-script into lp:launchpad/db-devel

 

Aaron Bentley has proposed merging lp:~abentley/launchpad/merge-translation-script into lp:launchpad/db-devel with lp:~abentley/launchpad/merge-job-schema as a prerequisite.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~abentley/launchpad/merge-translation-script/+merge/49099

= Summary =
Enable running TranslationMergeJobs from a cron script.

== Proposed fix ==
Turn TranslationMergeJob into a Storm class, implement a script that can run
jobs from any IJobSource.

== Pre-implementation notes ==
None

== Implementation details ==
Extracted test methods from TestTranslationMergeJob for reuse in
TestMergeTranslations.  Registered TranslationMergeJob as the utility for the
new ITranslationMergeJobSource interface.

When we add new PackagingJob types, we'll need to split TranslationMergeJob
into PackagingJob and job-specific pseudo-subclasses.

== Tests ==
bin/test -v test_merge_translations

== Demo and Q/A ==
None


= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/translations/tests/test_potemplate.py
  lib/lp/translations/scripts/tests/test_merge_translations.py
  lib/lp/translations/interfaces/potemplate.py
  database/sampledata/current.sql
  database/schema/patch-2208-90-0.sql
  lib/canonical/config/schema-lazr.conf
  database/sampledata/current-dev.sql
  cronscripts/run_jobs.py
  lib/lp/services/job/runner.py
  lib/lp/translations/tests/test_translationmerger.py
  lib/lp/translations/translationmerger.py
  database/schema/comments.sql
  database/schema/security.cfg
  lib/lp/translations/model/translationmergejob.py
  lib/lp/translations/interfaces/translationmergejob.py
  lib/lp/translations/tests/test_translationmergejob.py
  lib/lp/translations/configure.zcml
  configs/testrunner/launchpad-lazr.conf
  lib/lp/translations/model/potemplate.py
  configs/development/launchpad-lazr.conf
  scripts/rosetta/message-sharing-merge.py

./database/schema/patch-2208-90-0.sql
       7: Line exceeds 78 characters.
       8: Line exceeds 78 characters.
       9: Line exceeds 78 characters.
./lib/canonical/config/schema-lazr.conf
     522: Line exceeds 78 characters.
     605: Line exceeds 78 characters.
    1049: Line exceeds 78 characters.
./cronscripts/run_jobs.py
      10: '_pythonpath' imported but unused
./database/schema/comments.sql
      11: Line exceeds 78 characters.
      12: Line exceeds 78 characters.
      13: Line exceeds 78 characters.
      14: Line exceeds 78 characters.
      18: Line exceeds 78 characters.
      19: Line exceeds 78 characters.
      20: Line exceeds 78 characters.
      21: Line exceeds 78 characters.
      22: Line exceeds 78 characters.
      23: Line exceeds 78 characters.
      27: Line exceeds 78 characters.
      28: Line exceeds 78 characters.
      29: Line exceeds 78 characters.
      30: Line exceeds 78 characters.
      34: Line exceeds 78 characters.
      35: Line exceeds 78 characters.
      36: Line exceeds 78 characters.
      37: Line exceeds 78 characters.
      43: Line exceeds 78 characters.
      44: Line exceeds 78 characters.
      45: Line exceeds 78 characters.
      46: Line exceeds 78 characters.
      47: Line exceeds 78 characters.
      48: Line exceeds 78 characters.
      49: Line exceeds 78 characters.
      50: Line exceeds 78 characters.
      51: Line exceeds 78 characters.
      52: Line exceeds 78 characters.
      53: Line exceeds 78 characters.
      54: Line exceeds 78 characters.
      55: Line exceeds 78 characters.
      56: Line exceeds 78 characters.
      57: Line exceeds 78 characters.
      61: Line exceeds 78 characters.
      62: Line exceeds 78 characters.
      63: Line exceeds 78 characters.
      64: Line exceeds 78 characters.
      65: Line exceeds 78 characters.
      66: Line exceeds 78 characters.
      70: Line exceeds 78 characters.
      72: Line exceeds 78 characters.
      73: Line exceeds 78 characters.
      75: Line exceeds 78 characters.
      76: Line exceeds 78 characters.
      77: Line exceeds 78 characters.
      82: Line exceeds 78 characters.
      83: Line exceeds 78 characters.
      85: Line exceeds 78 characters.
      86: Line exceeds 78 characters.
      90: Line exceeds 78 characters.
      91: Line exceeds 78 characters.
      92: Line exceeds 78 characters.
      93: Line exceeds 78 characters.
      94: Line exceeds 78 characters.
      95: Line exceeds 78 characters.
      96: Line exceeds 78 characters.
      97: Line exceeds 78 characters.
      98: Line exceeds 78 characters.
      99: Line exceeds 78 characters.
     100: Line exceeds 78 characters.
     101: Line exceeds 78 characters.
     102: Line exceeds 78 characters.
     103: Line exceeds 78 characters.
     104: Line exceeds 78 characters.
     105: Line exceeds 78 characters.
     106: Line exceeds 78 characters.
     107: Line exceeds 78 characters.
     108: Line exceeds 78 characters.
     109: Line exceeds 78 characters.
     110: Line exceeds 78 characters.
     111: Line exceeds 78 characters.
     112: Line exceeds 78 characters.
     113: Line exceeds 78 characters.
     114: Line exceeds 78 characters.
     115: Line exceeds 78 characters.
     116: Line exceeds 78 characters.
     117: Line exceeds 78 characters.
     118: Line exceeds 78 characters.
     123: Line exceeds 78 characters.
     124: Line exceeds 78 characters.
     125: Line exceeds 78 characters.
     126: Line exceeds 78 characters.
     127: Line exceeds 78 characters.
     131: Line exceeds 78 characters.
     132: Line exceeds 78 characters.
     133: Line exceeds 78 characters.
     134: Line exceeds 78 characters.
     135: Line exceeds 78 characters.
     136: Line exceeds 78 characters.
     137: Line exceeds 78 characters.
     142: Line exceeds 78 characters.
     144: Line exceeds 78 characters.
     145: Line exceeds 78 characters.
     149: Line exceeds 78 characters.
     150: Line exceeds 78 characters.
     151: Line exceeds 78 characters.
     152: Line exceeds 78 characters.
     153: Line exceeds 78 characters.
     154: Line exceeds 78 characters.
     158: Line exceeds 78 characters.
     159: Line exceeds 78 characters.
     160: Line exceeds 78 characters.
     161: Line exceeds 78 characters.
     162: Line exceeds 78 characters.
     166: Line exceeds 78 characters.
     168: Line exceeds 78 characters.
     170: Line exceeds 78 characters.
     171: Line exceeds 78 characters.
     172: Line exceeds 78 characters.
     173: Line exceeds 78 characters.
     174: Line exceeds 78 characters.
     175: Line exceeds 78 characters.
     176: Line exceeds 78 characters.
     177: Line exceeds 78 characters.
     180: Line exceeds 78 characters.
     183: Line exceeds 78 characters.
     184: Line exceeds 78 characters.
     185: Line exceeds 78 characters.
     188: Line exceeds 78 characters.
     190: Line exceeds 78 characters.
     191: Line exceeds 78 characters.
     194: Line exceeds 78 characters.
     196: Line exceeds 78 characters.
     197: Line exceeds 78 characters.
     199: Line exceeds 78 characters.
     200: Line exceeds 78 characters.
     201: Line exceeds 78 characters.
     202: Line exceeds 78 characters.
     206: Line exceeds 78 characters.
     209: Line exceeds 78 characters.
     210: Line exceeds 78 characters.
     211: Line exceeds 78 characters.
     212: Line exceeds 78 characters.
     213: Line exceeds 78 characters.
     214: Line exceeds 78 characters.
     215: Line exceeds 78 characters.
     216: Line exceeds 78 characters.
     219: Line exceeds 78 characters.
     220: Line exceeds 78 characters.
     221: Line exceeds 78 characters.
     224: Line exceeds 78 characters.
     225: Line exceeds 78 characters.
     226: Line exceeds 78 characters.
     230: Line exceeds 78 characters.
     232: Line exceeds 78 characters.
     240: Line exceeds 78 characters.
     243: Line exceeds 78 characters.
     244: Line exceeds 78 characters.
     245: Line exceeds 78 characters.
     246: Line exceeds 78 characters.
     247: Line exceeds 78 characters.
     248: Line exceeds 78 characters.
     249: Line exceeds 78 characters.
     250: Line exceeds 78 characters.
     253: Line exceeds 78 characters.
     254: Line exceeds 78 characters.
     255: Line exceeds 78 characters.
     256: Line exceeds 78 characters.
     257: Line exceeds 78 characters.
     258: Line exceeds 78 characters.
     259: Line exceeds 78 characters.
     260: Line exceeds 78 characters.
     261: Line exceeds 78 characters.
     267: Line exceeds 78 characters.
     268: Line exceeds 78 characters.
     269: Line exceeds 78 characters.
     270: Line exceeds 78 characters.
     271: Line exceeds 78 characters.
     272: Line exceeds 78 characters.
     273: Line exceeds 78 characters.
     278: Line exceeds 78 characters.
     280: Line exceeds 78 characters.
     281: Line exceeds 78 characters.
     282: Line exceeds 78 characters.
     287: Line exceeds 78 characters.
     288: Line exceeds 78 characters.
     289: Line exceeds 78 characters.
     293: Line exceeds 78 characters.
     294: Line exceeds 78 characters.
     295: Line exceeds 78 characters.
     296: Line exceeds 78 characters.
     297: Line exceeds 78 characters.
     302: Line exceeds 78 characters.
     303: Line exceeds 78 characters.
     304: Line exceeds 78 characters.
     305: Line exceeds 78 characters.
     306: Line exceeds 78 characters.
     307: Line exceeds 78 characters.
     308: Line exceeds 78 characters.
     309: Line exceeds 78 characters.
     310: Line exceeds 78 characters.
     311: Line exceeds 78 characters.
     315: Line exceeds 78 characters.
     316: Line exceeds 78 characters.
     317: Line exceeds 78 characters.
     318: Line exceeds 78 characters.
     319: Line exceeds 78 characters.
     320: Line exceeds 78 characters.
     321: Line exceeds 78 characters.
     322: Line exceeds 78 characters.
     323: Line exceeds 78 characters.
     324: Line exceeds 78 characters.
     328: Line exceeds 78 characters.
     329: Line exceeds 78 characters.
     330: Line exceeds 78 characters.
     331: Line exceeds 78 characters.
     332: Line exceeds 78 characters.
     333: Line exceeds 78 characters.
     334: Line exceeds 78 characters.
     335: Line exceeds 78 characters.
     336: Line exceeds 78 characters.
     337: Line exceeds 78 characters.
     338: Line exceeds 78 characters.
     342: Line exceeds 78 characters.
     343: Line exceeds 78 characters.
     344: Line exceeds 78 characters.
     348: Line exceeds 78 characters.
     349: Line exceeds 78 characters.
     350: Line exceeds 78 characters.
     351: Line exceeds 78 characters.
     352: Line exceeds 78 characters.
     356: Line exceeds 78 characters.
     357: Line exceeds 78 characters.
     358: Line exceeds 78 characters.
     359: Line exceeds 78 characters.
     360: Line exceeds 78 characters.
     361: Line exceeds 78 characters.
     362: Line exceeds 78 characters.
     366: Line exceeds 78 characters.
     367: Line exceeds 78 characters.
     368: Line exceeds 78 characters.
     372: Line exceeds 78 characters.
     377: Line exceeds 78 characters.
     378: Line exceeds 78 characters.
     379: Line exceeds 78 characters.
     380: Line exceeds 78 characters.
     385: Line exceeds 78 characters.
     386: Line exceeds 78 characters.
     387: Line exceeds 78 characters.
     388: Line exceeds 78 characters.
     389: Line exceeds 78 characters.
     390: Line exceeds 78 characters.
     395: Line exceeds 78 characters.
     397: Line exceeds 78 characters.
     402: Line exceeds 78 characters.
     403: Line exceeds 78 characters.
     404: Line exceeds 78 characters.
     405: Line exceeds 78 characters.
     406: Line exceeds 78 characters.
     407: Line exceeds 78 characters.
     408: Line exceeds 78 characters.
     409: Line exceeds 78 characters.
     410: Line exceeds 78 characters.
     411: Line exceeds 78 characters.
     412: Line exceeds 78 characters.
     413: Line exceeds 78 characters.
     414: Line exceeds 78 characters.
     418: Line exceeds 78 characters.
     419: Line exceeds 78 characters.
     420: Line exceeds 78 characters.
     421: Line exceeds 78 characters.
     422: Line exceeds 78 characters.
     426: Line exceeds 78 characters.
     427: Line exceeds 78 characters.
     428: Line exceeds 78 characters.
     429: Line exceeds 78 characters.
     433: Line exceeds 78 characters.
     434: Line exceeds 78 characters.
     435: Line exceeds 78 characters.
     437: Line exceeds 78 characters.
     438: Line exceeds 78 characters.
     439: Line exceeds 78 characters.
     440: Line exceeds 78 characters.
     441: Line exceeds 78 characters.
     442: Line exceeds 78 characters.
     447: Line exceeds 78 characters.
     449: Line exceeds 78 characters.
     450: Line exceeds 78 characters.
     451: Line exceeds 78 characters.
     452: Line exceeds 78 characters.
     453: Line exceeds 78 characters.
     457: Line exceeds 78 characters.
     458: Line exceeds 78 characters.
     459: Line exceeds 78 characters.
     460: Line exceeds 78 characters.
     461: Line exceeds 78 characters.
     462: Line exceeds 78 characters.
     463: Line exceeds 78 characters.
     468: Line exceeds 78 characters.
     469: Line exceeds 78 characters.
     471: Line exceeds 78 characters.
     472: Line exceeds 78 characters.
     476: Line exceeds 78 characters.
     477: Line exceeds 78 characters.
     478: Line exceeds 78 characters.
     479: Line exceeds 78 characters.
     480: Line exceeds 78 characters.
     481: Line exceeds 78 characters.
     482: Line exceeds 78 characters.
     485: Line exceeds 78 characters.
     486: Line exceeds 78 characters.
     487: Line exceeds 78 characters.
     488: Line exceeds 78 characters.
     489: Line exceeds 78 characters.
     490: Line exceeds 78 characters.
     491: Line exceeds 78 characters.
     492: Line exceeds 78 characters.
     493: Line exceeds 78 characters.
     494: Line exceeds 78 characters.
     495: Line exceeds 78 characters.
     498: Line exceeds 78 characters.
     499: Line exceeds 78 characters.
     500: Line exceeds 78 characters.
     501: Line exceeds 78 characters.
     502: Line exceeds 78 characters.
     503: Line exceeds 78 characters.
     507: Line exceeds 78 characters.
     508: Line exceeds 78 characters.
     509: Line exceeds 78 characters.
     510: Line exceeds 78 characters.
     515: Line exceeds 78 characters.
     516: Line exceeds 78 characters.
     517: Line exceeds 78 characters.
     518: Line exceeds 78 characters.
     523: Line exceeds 78 characters.
     524: Line exceeds 78 characters.
     527: Line exceeds 78 characters.
     531: Line exceeds 78 characters.
     532: Line exceeds 78 characters.
     533: Line exceeds 78 characters.
     534: Line exceeds 78 characters.
     535: Line exceeds 78 characters.
     536: Line exceeds 78 characters.
     537: Line exceeds 78 characters.
     538: Line exceeds 78 characters.
     539: Line exceeds 78 characters.
     543: Line exceeds 78 characters.
     544: Line exceeds 78 characters.
     545: Line exceeds 78 characters.
     546: Line exceeds 78 characters.
     547: Line exceeds 78 characters.
     548: Line exceeds 78 characters.
     549: Line exceeds 78 characters.
     550: Line exceeds 78 characters.
     551: Line exceeds 78 characters.
     554: Line exceeds 78 characters.
     555: Line exceeds 78 characters.
     556: Line exceeds 78 characters.
     557: Line exceeds 78 characters.
     558: Line exceeds 78 characters.
     559: Line exceeds 78 characters.
     560: Line exceeds 78 characters.
     561: Line exceeds 78 characters.
     562: Line exceeds 78 characters.
     563: Line exceeds 78 characters.
     566: Line exceeds 78 characters.
     567: Line exceeds 78 characters.
     568: Line exceeds 78 characters.
     572: Line exceeds 78 characters.
     573: Line exceeds 78 characters.
     574: Line exceeds 78 characters.
     575: Line exceeds 78 characters.
     576: Line exceeds 78 characters.
     577: Line exceeds 78 characters.
     578: Line exceeds 78 characters.
     579: Line exceeds 78 characters.
     583: Line exceeds 78 characters.
     584: Line exceeds 78 characters.
     585: Line exceeds 78 characters.
     590: Line exceeds 78 characters.
     591: Line exceeds 78 characters.
     618: Line exceeds 78 characters.
     622: Line exceeds 78 characters.
     623: Line exceeds 78 characters.
     624: Line exceeds 78 characters.
     625: Line exceeds 78 characters.
     626: Line exceeds 78 characters.
     627: Line exceeds 78 characters.
     628: Line exceeds 78 characters.
     629: Line exceeds 78 characters.
     630: Line exceeds 78 characters.
     634: Line exceeds 78 characters.
     635: Line exceeds 78 characters.
     636: Line exceeds 78 characters.
     637: Line exceeds 78 characters.
     638: Line exceeds 78 characters.
     642: Line exceeds 78 characters.
     644: Line exceeds 78 characters.
     649: Line exceeds 78 characters.
     650: Line exceeds 78 characters.
     654: Line exceeds 78 characters.
     655: Line exceeds 78 characters.
     656: Line exceeds 78 characters.
     661: Line exceeds 78 characters.
     662: Line exceeds 78 characters.
     663: Line exceeds 78 characters.
     664: Line exceeds 78 characters.
     665: Line exceeds 78 characters.
     666: Line exceeds 78 characters.
     667: Line exceeds 78 characters.
     668: Line exceeds 78 characters.
     669: Line exceeds 78 characters.
     670: Line exceeds 78 characters.
     674: Line exceeds 78 characters.
     675: Line exceeds 78 characters.
     676: Line exceeds 78 characters.
     677: Line exceeds 78 characters.
     678: Line exceeds 78 characters.
     679: Line exceeds 78 characters.
     683: Line exceeds 78 characters.
     684: Line exceeds 78 characters.
     685: Line exceeds 78 characters.
     686: Line exceeds 78 characters.
     687: Line exceeds 78 characters.
     688: Line exceeds 78 characters.
     689: Line exceeds 78 characters.
     690: Line exceeds 78 characters.
     691: Line exceeds 78 characters.
     692: Line exceeds 78 characters.
     693: Line exceeds 78 characters.
     694: Line exceeds 78 characters.
     695: Line exceeds 78 characters.
     696: Line exceeds 78 characters.
     697: Line exceeds 78 characters.
     698: Line exceeds 78 characters.
     699: Line exceeds 78 characters.
     700: Line exceeds 78 characters.
     701: Line exceeds 78 characters.
     702: Line exceeds 78 characters.
     703: Line exceeds 78 characters.
     704: Line exceeds 78 characters.
     705: Line exceeds 78 characters.
     706: Line exceeds 78 characters.
     707: Line exceeds 78 characters.
     708: Line exceeds 78 characters.
     709: Line exceeds 78 characters.
     710: Line exceeds 78 characters.
     711: Line exceeds 78 characters.
     712: Line exceeds 78 characters.
     713: Line exceeds 78 characters.
     714: Line exceeds 78 characters.
     715: Line exceeds 78 characters.
     716: Line exceeds 78 characters.
     717: Line exceeds 78 characters.
     718: Line exceeds 78 characters.
     719: Line exceeds 78 characters.
     720: Line exceeds 78 characters.
     721: Line exceeds 78 characters.
     722: Line exceeds 78 characters.
     723: Line exceeds 78 characters.
     724: Line exceeds 78 characters.
     727: Line exceeds 78 characters.
     728: Line exceeds 78 characters.
     729: Line exceeds 78 characters.
     733: Line exceeds 78 characters.
     734: Line exceeds 78 characters.
     735: Line exceeds 78 characters.
     736: Line exceeds 78 characters.
     737: Line exceeds 78 characters.
     738: Line exceeds 78 characters.
     739: Line exceeds 78 characters.
     743: Line exceeds 78 characters.
     744: Line exceeds 78 characters.
     745: Line exceeds 78 characters.
     746: Line exceeds 78 characters.
     747: Line exceeds 78 characters.
     748: Line exceeds 78 characters.
     749: Line exceeds 78 characters.
     750: Line exceeds 78 characters.
     754: Line exceeds 78 characters.
     755: Line exceeds 78 characters.
     756: Line exceeds 78 characters.
     757: Line exceeds 78 characters.
     758: Line exceeds 78 characters.
     771: Line exceeds 78 characters.
     775: Line exceeds 78 characters.
     776: Line exceeds 78 characters.
     777: Line exceeds 78 characters.
     780: Line exceeds 78 characters.
     781: Line exceeds 78 characters.
     782: Line exceeds 78 characters.
     783: Line exceeds 78 characters.
     795: Line exceeds 78 characters.
     796: Line exceeds 78 characters.
     797: Line exceeds 78 characters.
     798: Line exceeds 78 characters.
     799: Line exceeds 78 characters.
     800: Line exceeds 78 characters.
     801: Line exceeds 78 characters.
     802: Line exceeds 78 characters.
     803: Line exceeds 78 characters.
     809: Line exceeds 78 characters.
     810: Line exceeds 78 characters.
     811: Line exceeds 78 characters.
     812: Line exceeds 78 characters.
     813: Line exceeds 78 characters.
     814: Line exceeds 78 characters.
     815: Line exceeds 78 characters.
     816: Line exceeds 78 characters.
     817: Line exceeds 78 characters.
     821: Line exceeds 78 characters.
     822: Line exceeds 78 characters.
     823: Line exceeds 78 characters.
     824: Line exceeds 78 characters.
     831: Line exceeds 78 characters.
     832: Line exceeds 78 characters.
     833: Line exceeds 78 characters.
     834: Line exceeds 78 characters.
     835: Line exceeds 78 characters.
     836: Line exceeds 78 characters.
     837: Line exceeds 78 characters.
     838: Line exceeds 78 characters.
     839: Line exceeds 78 characters.
     842: Line exceeds 78 characters.
     843: Line exceeds 78 characters.
     844: Line exceeds 78 characters.
     845: Line exceeds 78 characters.
     846: Line exceeds 78 characters.
     847: Line exceeds 78 characters.
     848: Line exceeds 78 characters.
     849: Line exceeds 78 characters.
     850: Line exceeds 78 characters.
     851: Line exceeds 78 characters.
     852: Line exceeds 78 characters.
     853: Line exceeds 78 characters.
     856: Line exceeds 78 characters.
     857: Line exceeds 78 characters.
     858: Line exceeds 78 characters.
     863: Line exceeds 78 characters.
     864: Line exceeds 78 characters.
     865: Line exceeds 78 characters.
     866: Line exceeds 78 characters.
     869: Line exceeds 78 characters.
     870: Line exceeds 78 characters.
     871: Line exceeds 78 characters.
     875: Line exceeds 78 characters.
     876: Line exceeds 78 characters.
     877: Line exceeds 78 characters.
     880: Line exceeds 78 characters.
     881: Line exceeds 78 characters.
     882: Line exceeds 78 characters.
     883: Line exceeds 78 characters.
     884: Line exceeds 78 characters.
     885: Line exceeds 78 characters.
     886: Line exceeds 78 characters.
     887: Line exceeds 78 characters.
     890: Line exceeds 78 characters.
     891: Line exceeds 78 characters.
     892: Line exceeds 78 characters.
     893: Line exceeds 78 characters.
     894: Line exceeds 78 characters.
     895: Line exceeds 78 characters.
     896: Line exceeds 78 characters.
     899: Line exceeds 78 characters.
     900: Line exceeds 78 characters.
     901: Line exceeds 78 characters.
     902: Line exceeds 78 characters.
     903: Line exceeds 78 characters.
     904: Line exceeds 78 characters.
     908: Line exceeds 78 characters.
     909: Line exceeds 78 characters.
     910: Line exceeds 78 characters.
     911: Line exceeds 78 characters.
     912: Line exceeds 78 characters.
     913: Line exceeds 78 characters.
     917: Line exceeds 78 characters.
     919: Line exceeds 78 characters.
     922: Line exceeds 78 characters.
     926: Line exceeds 78 characters.
     927: Line exceeds 78 characters.
     928: Line exceeds 78 characters.
     929: Line exceeds 78 characters.
     930: Line exceeds 78 characters.
     931: Line exceeds 78 characters.
     932: Line exceeds 78 characters.
     933: Line exceeds 78 characters.
     935: Line exceeds 78 characters.
     936: Line exceeds 78 characters.
     937: Line exceeds 78 characters.
     938: Line exceeds 78 characters.
     939: Line exceeds 78 characters.
     944: Line exceeds 78 characters.
     984: Line exceeds 78 characters.
     986: Line exceeds 78 characters.
     992: Line exceeds 78 characters.
     993: Line exceeds 78 characters.
     994: Line exceeds 78 characters.
     995: Line exceeds 78 characters.
     996: Line exceeds 78 characters.
     997: Line exceeds 78 characters.
     998: Line exceeds 78 characters.
     999: Line exceeds 78 characters.
    1000: Line exceeds 78 characters.
    1001: Line exceeds 78 characters.
    1002: Line exceeds 78 characters.
    1003: Line exceeds 78 characters.
    1004: Line exceeds 78 characters.
    1005: Line exceeds 78 characters.
    1006: Line exceeds 78 characters.
    1007: Line exceeds 78 characters.
    1011: Line exceeds 78 characters.
    1015: Line exceeds 78 characters.
    1016: Line exceeds 78 characters.
    1017: Line exceeds 78 characters.
    1021: Line exceeds 78 characters.
    1022: Line exceeds 78 characters.
    1023: Line exceeds 78 characters.
    1024: Line exceeds 78 characters.
    1029: Line exceeds 78 characters.
    1033: Line exceeds 78 characters.
    1037: Line exceeds 78 characters.
    1043: Line exceeds 78 characters.
    1044: Line exceeds 78 characters.
    1045: Line exceeds 78 characters.
    1050: Line exceeds 78 characters.
    1051: Line exceeds 78 characters.
    1052: Line exceeds 78 characters.
    1053: Line exceeds 78 characters.
    1054: Line exceeds 78 characters.
    1055: Line exceeds 78 characters.
    1056: Line exceeds 78 characters.
    1066: Line exceeds 78 characters.
    1067: Line exceeds 78 characters.
    1068: Line exceeds 78 characters.
    1069: Line exceeds 78 characters.
    1070: Line exceeds 78 characters.
    1071: Line exceeds 78 characters.
    1072: Line exceeds 78 characters.
    1073: Line exceeds 78 characters.
    1074: Line exceeds 78 characters.
    1075: Line exceeds 78 characters.
    1077: Line exceeds 78 characters.
    1078: Line exceeds 78 characters.
    1079: Line exceeds 78 characters.
    1080: Line exceeds 78 characters.
    1081: Line exceeds 78 characters.
    1082: Line exceeds 78 characters.
    1083: Line exceeds 78 characters.
    1088: Line exceeds 78 characters.
    1089: Line exceeds 78 characters.
    1092: Line exceeds 78 characters.
    1093: Line exceeds 78 characters.
    1094: Line exceeds 78 characters.
    1095: Line exceeds 78 characters.
    1096: Line exceeds 78 characters.
    1097: Line exceeds 78 characters.
    1098: Line exceeds 78 characters.
    1099: Line exceeds 78 characters.
    1104: Line exceeds 78 characters.
    1105: Line exceeds 78 characters.
    1106: Line exceeds 78 characters.
    1107: Line exceeds 78 characters.
    1108: Line exceeds 78 characters.
    1109: Line exceeds 78 characters.
    1110: Line exceeds 78 characters.
    1111: Line exceeds 78 characters.
    1115: Line exceeds 78 characters.
    1117: Line exceeds 78 characters.
    1119: Line exceeds 78 characters.
    1121: Line exceeds 78 characters.
    1123: Line exceeds 78 characters.
    1125: Line exceeds 78 characters.
    1128: Line exceeds 78 characters.
    1130: Line exceeds 78 characters.
    1132: Line exceeds 78 characters.
    1135: Line exceeds 78 characters.
    1137: Line exceeds 78 characters.
    1139: Line exceeds 78 characters.
    1142: Line exceeds 78 characters.
    1144: Line exceeds 78 characters.
    1146: Line exceeds 78 characters.
    1148: Line exceeds 78 characters.
    1157: Line exceeds 78 characters.
    1158: Line exceeds 78 characters.
    1159: Line exceeds 78 characters.
    1160: Line exceeds 78 characters.
    1161: Line exceeds 78 characters.
    1162: Line exceeds 78 characters.
    1163: Line exceeds 78 characters.
    1164: Line exceeds 78 characters.
    1165: Line exceeds 78 characters.
    1166: Line exceeds 78 characters.
    1167: Line exceeds 78 characters.
    1168: Line exceeds 78 characters.
    1169: Line exceeds 78 characters.
    1170: Line exceeds 78 characters.
    1171: Line exceeds 78 characters.
    1172: Line exceeds 78 characters.
    1173: Line exceeds 78 characters.
    1174: Line exceeds 78 characters.
    1178: Line exceeds 78 characters.
    1179: Line exceeds 78 characters.
    1180: Line exceeds 78 characters.
    1181: Line exceeds 78 characters.
    1185: Line exceeds 78 characters.
    1186: Line exceeds 78 characters.
    1187: Line exceeds 78 characters.
    1191: Line exceeds 78 characters.
    1192: Line exceeds 78 characters.
    1193: Line exceeds 78 characters.
    1194: Line exceeds 78 characters.
    1196: Line exceeds 78 characters.
    1197: Line exceeds 78 characters.
    1200: Line exceeds 78 characters.
    1201: Line exceeds 78 characters.
    1202: Line exceeds 78 characters.
    1203: Line exceeds 78 characters.
    1206: Line exceeds 78 characters.
    1208: Line exceeds 78 characters.
    1209: Line exceeds 78 characters.
    1210: Line exceeds 78 characters.
    1211: Line exceeds 78 characters.
    1212: Line exceeds 78 characters.
    1215: Line exceeds 78 characters.
    1217: Line exceeds 78 characters.
    1218: Line exceeds 78 characters.
    1221: Line exceeds 78 characters.
    1222: Line exceeds 78 characters.
    1224: Line exceeds 78 characters.
    1225: Line exceeds 78 characters.
    1226: Line exceeds 78 characters.
    1227: Line exceeds 78 characters.
    1228: Line exceeds 78 characters.
    1232: Line exceeds 78 characters.
    1234: Line exceeds 78 characters.
    1235: Line exceeds 78 characters.
    1236: Line exceeds 78 characters.
    1237: Line exceeds 78 characters.
    1241: Line exceeds 78 characters.
    1242: Line exceeds 78 characters.
    1246: Line exceeds 78 characters.
    1247: Line exceeds 78 characters.
    1248: Line exceeds 78 characters.
    1249: Line exceeds 78 characters.
    1250: Line exceeds 78 characters.
    1251: Line exceeds 78 characters.
    1252: Line exceeds 78 characters.
    1253: Line exceeds 78 characters.
    1254: Line exceeds 78 characters.
    1255: Line exceeds 78 characters.
    1256: Line exceeds 78 characters.
    1257: Line exceeds 78 characters.
    1258: Line exceeds 78 characters.
    1260: Line exceeds 78 characters.
    1261: Line exceeds 78 characters.
    1262: Line exceeds 78 characters.
    1263: Line exceeds 78 characters.
    1264: Line exceeds 78 characters.
    1265: Line exceeds 78 characters.
    1266: Line exceeds 78 characters.
    1267: Line exceeds 78 characters.
    1268: Line exceeds 78 characters.
    1270: Line exceeds 78 characters.
    1271: Line exceeds 78 characters.
    1273: Line exceeds 78 characters.
    1276: Line exceeds 78 characters.
    1277: Line exceeds 78 characters.
    1278: Line exceeds 78 characters.
    1281: Line exceeds 78 characters.
    1282: Line exceeds 78 characters.
    1283: Line exceeds 78 characters.
    1284: Line exceeds 78 characters.
    1285: Line exceeds 78 characters.
    1286: Line exceeds 78 characters.
    1287: Line exceeds 78 characters.
    1288: Line exceeds 78 characters.
    1292: Line exceeds 78 characters.
    1293: Line exceeds 78 characters.
    1294: Line exceeds 78 characters.
    1295: Line exceeds 78 characters.
    1296: Line exceeds 78 characters.
    1300: Line exceeds 78 characters.
    1301: Line exceeds 78 characters.
    1302: Line exceeds 78 characters.
    1303: Line exceeds 78 characters.
    1304: Line exceeds 78 characters.
    1305: Line exceeds 78 characters.
    1309: Line exceeds 78 characters.
    1310: Line exceeds 78 characters.
    1311: Line exceeds 78 characters.
    1312: Line exceeds 78 characters.
    1316: Line exceeds 78 characters.
    1317: Line exceeds 78 characters.
    1318: Line exceeds 78 characters.
    1321: Line exceeds 78 characters.
    1322: Line exceeds 78 characters.
    1324: Line exceeds 78 characters.
    1325: Line exceeds 78 characters.
    1326: Line exceeds 78 characters.
    1328: Line exceeds 78 characters.
    1330: Line exceeds 78 characters.
    1332: Line exceeds 78 characters.
    1335: Line exceeds 78 characters.
    1336: Line exceeds 78 characters.
    1337: Line exceeds 78 characters.
    1338: Line exceeds 78 characters.
    1339: Line exceeds 78 characters.
    1342: Line exceeds 78 characters.
    1343: Line exceeds 78 characters.
    1344: Line exceeds 78 characters.
    1345: Line exceeds 78 characters.
    1346: Line exceeds 78 characters.
    1348: Line exceeds 78 characters.
    1349: Line exceeds 78 characters.
    1350: Line exceeds 78 characters.
    1351: Line exceeds 78 characters.
    1354: Line exceeds 78 characters.
    1355: Line exceeds 78 characters.
    1390: Line exceeds 78 characters.
    1411: Line exceeds 78 characters.
    1412: Line exceeds 78 characters.
    1413: Line exceeds 78 characters.
    1414: Line exceeds 78 characters.
    1415: Line exceeds 78 characters.
    1416: Line exceeds 78 characters.
    1417: Line exceeds 78 characters.
    1418: Line exceeds 78 characters.
    1419: Line exceeds 78 characters.
    1420: Line exceeds 78 characters.
    1421: Line exceeds 78 characters.
    1422: Line exceeds 78 characters.
    1423: Line exceeds 78 characters.
    1424: Line exceeds 78 characters.
    1428: Line exceeds 78 characters.
    1432: Line exceeds 78 characters.
    1433: Line exceeds 78 characters.
    1434: Line exceeds 78 characters.
    1435: Line exceeds 78 characters.
    1436: Line exceeds 78 characters.
    1437: Line exceeds 78 characters.
    1438: Line exceeds 78 characters.
    1442: Line exceeds 78 characters.
    1443: Line exceeds 78 characters.
    1444: Line exceeds 78 characters.
    1445: Line exceeds 78 characters.
    1446: Line exceeds 78 characters.
    1447: Line exceeds 78 characters.
    1448: Line exceeds 78 characters.
    1449: Line exceeds 78 characters.
    1450: Line exceeds 78 characters.
    1451: Line exceeds 78 characters.
    1452: Line exceeds 78 characters.
    1456: Line exceeds 78 characters.
    1457: Line exceeds 78 characters.
    1458: Line exceeds 78 characters.
    1459: Line exceeds 78 characters.
    1460: Line exceeds 78 characters.
    1461: Line exceeds 78 characters.
    1463: Line exceeds 78 characters.
    1467: Line exceeds 78 characters.
    1468: Line exceeds 78 characters.
    1469: Line exceeds 78 characters.
    1473: Line exceeds 78 characters.
    1474: Line exceeds 78 characters.
    1475: Line exceeds 78 characters.
    1476: Line exceeds 78 characters.
    1477: Line exceeds 78 characters.
    1478: Line exceeds 78 characters.
    1482: Line exceeds 78 characters.
    1483: Line exceeds 78 characters.
    1487: Line exceeds 78 characters.
    1488: Line exceeds 78 characters.
    1489: Line exceeds 78 characters.
    1490: Line exceeds 78 characters.
    1491: Line exceeds 78 characters.
    1492: Line exceeds 78 characters.
    1493: Line exceeds 78 characters.
    1494: Line exceeds 78 characters.
    1495: Line exceeds 78 characters.
    1496: Line exceeds 78 characters.
    1497: Line exceeds 78 characters.
    1498: Line exceeds 78 characters.
    1499: Line exceeds 78 characters.
    1500: Line exceeds 78 characters.
    1501: Line exceeds 78 characters.
    1502: Line exceeds 78 characters.
    1503: Line exceeds 78 characters.
    1504: Line exceeds 78 characters.
    1505: Line exceeds 78 characters.
    1506: Line exceeds 78 characters.
    1507: Line exceeds 78 characters.
    1508: Line exceeds 78 characters.
    1509: Line exceeds 78 characters.
    1510: Line exceeds 78 characters.
    1514: Line exceeds 78 characters.
    1515: Line exceeds 78 characters.
    1516: Line exceeds 78 characters.
    1517: Line exceeds 78 characters.
    1520: Line exceeds 78 characters.
    1521: Line exceeds 78 characters.
    1522: Line exceeds 78 characters.
    1523: Line exceeds 78 characters.
    1526: Line exceeds 78 characters.
    1529: Line exceeds 78 characters.
    1530: Line exceeds 78 characters.
    1533: Line exceeds 78 characters.
    1534: Line exceeds 78 characters.
    1535: Line exceeds 78 characters.
    1538: Line exceeds 78 characters.
    1542: Line exceeds 78 characters.
    1543: Line exceeds 78 characters.
    1544: Line exceeds 78 characters.
    1545: Line exceeds 78 characters.
    1546: Line exceeds 78 characters.
    1547: Line exceeds 78 characters.
    1548: Line exceeds 78 characters.
    1549: Line exceeds 78 characters.
    1550: Line exceeds 78 characters.
    1551: Line exceeds 78 characters.
    1552: Line exceeds 78 characters.
    1553: Line exceeds 78 characters.
    1554: Line exceeds 78 characters.
    1555: Line exceeds 78 characters.
    1556: Line exceeds 78 characters.
    1557: Line exceeds 78 characters.
    1558: Line exceeds 78 characters.
    1559: Line exceeds 78 characters.
    1560: Line exceeds 78 characters.
    1561: Line exceeds 78 characters.
    1562: Line exceeds 78 characters.
    1563: Line exceeds 78 characters.
    1564: Line exceeds 78 characters.
    1565: Line exceeds 78 characters.
    1566: Line exceeds 78 characters.
    1567: Line exceeds 78 characters.
    1572: Line exceeds 78 characters.
    1573: Line exceeds 78 characters.
    1574: Line exceeds 78 characters.
    1575: Line exceeds 78 characters.
    1579: Line exceeds 78 characters.
    1583: Line exceeds 78 characters.
    1584: Line exceeds 78 characters.
    1585: Line exceeds 78 characters.
    1586: Line exceeds 78 characters.
    1587: Line exceeds 78 characters.
    1588: Line exceeds 78 characters.
    1589: Line exceeds 78 characters.
    1590: Line exceeds 78 characters.
    1591: Line exceeds 78 characters.
    1592: Line exceeds 78 characters.
    1593: Line exceeds 78 characters.
    1594: Line exceeds 78 characters.
    1598: Line exceeds 78 characters.
    1599: Line exceeds 78 characters.
    1600: Line exceeds 78 characters.
    1601: Line exceeds 78 characters.
    1602: Line exceeds 78 characters.
    1603: Line exceeds 78 characters.
    1604: Line exceeds 78 characters.
    1605: Line exceeds 78 characters.
    1606: Line exceeds 78 characters.
    1607: Line exceeds 78 characters.
    1608: Line exceeds 78 characters.
    1609: Line exceeds 78 characters.
    1610: Line exceeds 78 characters.
    1615: Line exceeds 78 characters.
    1616: Line exceeds 78 characters.
    1621: Line exceeds 78 characters.
    1622: Line exceeds 78 characters.
    1623: Line exceeds 78 characters.
    1624: Line exceeds 78 characters.
    1629: Line exceeds 78 characters.
    1630: Line exceeds 78 characters.
    1632: Line exceeds 78 characters.
    1633: Line exceeds 78 characters.
    1634: Line exceeds 78 characters.
    1638: Line exceeds 78 characters.
    1639: Line exceeds 78 characters.
    1640: Line exceeds 78 characters.
    1641: Line exceeds 78 characters.
    1642: Line exceeds 78 characters.
    1643: Line exceeds 78 characters.
    1644: Line exceeds 78 characters.
    1645: Line exceeds 78 characters.
    1646: Line exceeds 78 characters.
    1648: Line exceeds 78 characters.
    1649: Line exceeds 78 characters.
    1651: Line exceeds 78 characters.
    1652: Line exceeds 78 characters.
    1655: Line exceeds 78 characters.
    1656: Line exceeds 78 characters.
    1660: Line exceeds 78 characters.
    1661: Line exceeds 78 characters.
    1662: Line exceeds 78 characters.
    1663: Line exceeds 78 characters.
    1665: Line exceeds 78 characters.
    1666: Line exceeds 78 characters.
    1667: Line exceeds 78 characters.
    1668: Line exceeds 78 characters.
    1669: Line exceeds 78 characters.
    1670: Line exceeds 78 characters.
    1671: Line exceeds 78 characters.
    1672: Line exceeds 78 characters.
    1673: Line exceeds 78 characters.
    1676: Line exceeds 78 characters.
    1677: Line exceeds 78 characters.
    1678: Line exceeds 78 characters.
    1679: Line exceeds 78 characters.
    1680: Line exceeds 78 characters.
    1681: Line exceeds 78 characters.
    1682: Line exceeds 78 characters.
    1683: Line exceeds 78 characters.
    1686: Line exceeds 78 characters.
    1688: Line exceeds 78 characters.
    1689: Line exceeds 78 characters.
    1690: Line exceeds 78 characters.
    1691: Line exceeds 78 characters.
    1692: Line exceeds 78 characters.
    1693: Line exceeds 78 characters.
    1694: Line exceeds 78 characters.
    1695: Line exceeds 78 characters.
    1697: Line exceeds 78 characters.
    1698: Line exceeds 78 characters.
    1699: Line exceeds 78 characters.
    1702: Line exceeds 78 characters.
    1703: Line exceeds 78 characters.
    1704: Line exceeds 78 characters.
    1705: Line exceeds 78 characters.
    1706: Line exceeds 78 characters.
    1707: Line exceeds 78 characters.
    1708: Line exceeds 78 characters.
    1709: Line exceeds 78 characters.
    1711: Line exceeds 78 characters.
    1712: Line exceeds 78 characters.
    1713: Line exceeds 78 characters.
    1716: Line exceeds 78 characters.
    1717: Line exceeds 78 characters.
    1718: Line exceeds 78 characters.
    1719: Line exceeds 78 characters.
    1720: Line exceeds 78 characters.
    1721: Line exceeds 78 characters.
    1724: Line exceeds 78 characters.
    1725: Line exceeds 78 characters.
    1726: Line exceeds 78 characters.
    1727: Line exceeds 78 characters.
    1730: Line exceeds 78 characters.
    1731: Line exceeds 78 characters.
    1732: Line exceeds 78 characters.
    1733: Line exceeds 78 characters.
    1734: Line exceeds 78 characters.
    1735: Line exceeds 78 characters.
    1736: Line exceeds 78 characters.
    1737: Line exceeds 78 characters.
    1738: Line exceeds 78 characters.
    1741: Line exceeds 78 characters.
    1742: Line exceeds 78 characters.
    1743: Line exceeds 78 characters.
    1744: Line exceeds 78 characters.
    1745: Line exceeds 78 characters.
    1746: Line exceeds 78 characters.
    1747: Line exceeds 78 characters.
    1748: Line exceeds 78 characters.
    1749: Line exceeds 78 characters.
    1750: Line exceeds 78 characters.
    1754: Line exceeds 78 characters.
    1755: Line exceeds 78 characters.
    1756: Line exceeds 78 characters.
    1757: Line exceeds 78 characters.
    1759: Line exceeds 78 characters.
    1760: Line exceeds 78 characters.
    1761: Line exceeds 78 characters.
    1763: Line exceeds 78 characters.
    1764: Line exceeds 78 characters.
    1765: Line exceeds 78 characters.
    1767: Line exceeds 78 characters.
    1768: Line exceeds 78 characters.
    1769: Line exceeds 78 characters.
    1773: Line exceeds 78 characters.
    1774: Line exceeds 78 characters.
    1775: Line exceeds 78 characters.
    1776: Line exceeds 78 characters.
    1777: Line exceeds 78 characters.
    1778: Line exceeds 78 characters.
    1779: Line exceeds 78 characters.
    1780: Line exceeds 78 characters.
    1781: Line exceeds 78 characters.
    1782: Line exceeds 78 characters.
    1783: Line exceeds 78 characters.
    1784: Line exceeds 78 characters.
    1785: Line exceeds 78 characters.
    1786: Line exceeds 78 characters.
    1787: Line exceeds 78 characters.
    1788: Line exceeds 78 characters.
    1789: Line exceeds 78 characters.
    1790: Line exceeds 78 characters.
    1831: Line exceeds 78 characters.
    1832: Line exceeds 78 characters.
    1833: Line exceeds 78 characters.
    1834: Line exceeds 78 characters.
    1838: Line exceeds 78 characters.
    1839: Line exceeds 78 characters.
    1841: Line exceeds 78 characters.
    1842: Line exceeds 78 characters.
    1843: Line exceeds 78 characters.
    1844: Line exceeds 78 characters.
    1845: Line exceeds 78 characters.
    1848: Line exceeds 78 characters.
    1849: Line exceeds 78 characters.
    1850: Line exceeds 78 characters.
    1851: Line exceeds 78 characters.
    1864: Line exceeds 78 characters.
    1868: Line exceeds 78 characters.
    1869: Line exceeds 78 characters.
    1870: Line exceeds 78 characters.
    1871: Line exceeds 78 characters.
    1872: Line exceeds 78 characters.
    1873: Line exceeds 78 characters.
    1881: Line exceeds 78 characters.
    1882: Line exceeds 78 characters.
    1883: Line exceeds 78 characters.
    1885: Line exceeds 78 characters.
    1892: Line exceeds 78 characters.
    1895: Line exceeds 78 characters.
    1896: Line exceeds 78 characters.
    1898: Line exceeds 78 characters.
    1900: Line exceeds 78 characters.
    1903: Line exceeds 78 characters.
    1910: Line exceeds 78 characters.
    1913: Line exceeds 78 characters.
    1914: Line exceeds 78 characters.
    1915: Line exceeds 78 characters.
    1916: Line exceeds 78 characters.
    1917: Line exceeds 78 characters.
    1918: Line exceeds 78 characters.
    1919: Line exceeds 78 characters.
    1920: Line exceeds 78 characters.
    1921: Line exceeds 78 characters.
    1922: Line exceeds 78 characters.
    1923: Line exceeds 78 characters.
    1924: Line exceeds 78 characters.
    1925: Line exceeds 78 characters.
    1926: Line exceeds 78 characters.
    1928: Line exceeds 78 characters.
    1933: Line exceeds 78 characters.
    1935: Line exceeds 78 characters.
    1936: Line exceeds 78 characters.
    1937: Line exceeds 78 characters.
    1940: Line exceeds 78 characters.
    1942: Line exceeds 78 characters.
    1943: Line exceeds 78 characters.
    1944: Line exceeds 78 characters.
    1945: Line exceeds 78 characters.
    1946: Line exceeds 78 characters.
    1949: Line exceeds 78 characters.
    1950: Line exceeds 78 characters.
    1951: Line exceeds 78 characters.
    1953: Line exceeds 78 characters.
    1956: Line exceeds 78 characters.
    1957: Line exceeds 78 characters.
    1958: Line exceeds 78 characters.
    1959: Line exceeds 78 characters.
    1960: Line exceeds 78 characters.
    1961: Line exceeds 78 characters.
    1964: Line exceeds 78 characters.
    1965: Line exceeds 78 characters.
    1966: Line exceeds 78 characters.
    1967: Line exceeds 78 characters.
    1968: Line exceeds 78 characters.
    1974: Line exceeds 78 characters.
    1975: Line exceeds 78 characters.
    1976: Line exceeds 78 characters.
    1977: Line exceeds 78 characters.
    1978: Line exceeds 78 characters.
    1979: Line exceeds 78 characters.
    1983: Line exceeds 78 characters.
    1993: Line exceeds 78 characters.
    1994: Line exceeds 78 characters.
    1995: Line exceeds 78 characters.
    1997: Line exceeds 78 characters.
    2001: Line exceeds 78 characters.
    2003: Line exceeds 78 characters.
    2004: Line exceeds 78 characters.
    2005: Line exceeds 78 characters.
    2006: Line exceeds 78 characters.
    2007: Line exceeds 78 characters.
    2009: Line exceeds 78 characters.
    2010: Line exceeds 78 characters.
    2011: Line exceeds 78 characters.
    2012: Line exceeds 78 characters.
    2013: Line exceeds 78 characters.
    2016: Line exceeds 78 characters.
    2017: Line exceeds 78 characters.
    2018: Line exceeds 78 characters.
    2019: Line exceeds 78 characters.
    2022: Line exceeds 78 characters.
    2023: Line exceeds 78 characters.
    2024: Line exceeds 78 characters.
    2025: Line exceeds 78 characters.
    2026: Line exceeds 78 characters.
    2029: Line exceeds 78 characters.
    2030: Line exceeds 78 characters.
    2031: Line exceeds 78 characters.
    2032: Line exceeds 78 characters.
    2035: Line exceeds 78 characters.
    2036: Line exceeds 78 characters.
    2037: Line exceeds 78 characters.
    2038: Line exceeds 78 characters.
    2041: Line exceeds 78 characters.
    2042: Line exceeds 78 characters.
    2044: Line exceeds 78 characters.
    2047: Line exceeds 78 characters.
    2048: Line exceeds 78 characters.
    2049: Line exceeds 78 characters.
    2050: Line exceeds 78 characters.
    2051: Line exceeds 78 characters.
    2052: Line exceeds 78 characters.
    2053: Line exceeds 78 characters.
    2054: Line exceeds 78 characters.
    2055: Line exceeds 78 characters.
    2056: Line exceeds 78 characters.
    2057: Line exceeds 78 characters.
    2058: Line exceeds 78 characters.
    2059: Line exceeds 78 characters.
    2060: Line exceeds 78 characters.
    2061: Line exceeds 78 characters.
    2064: Line exceeds 78 characters.
    2065: Line exceeds 78 characters.
    2066: Line exceeds 78 characters.
    2067: Line exceeds 78 characters.
    2068: Line exceeds 78 characters.
    2069: Line exceeds 78 characters.
    2070: Line exceeds 78 characters.
    2071: Line exceeds 78 characters.
    2072: Line exceeds 78 characters.
    2073: Line exceeds 78 characters.
    2074: Line exceeds 78 characters.
    2075: Line exceeds 78 characters.
    2076: Line exceeds 78 characters.
    2077: Line exceeds 78 characters.
    2079: Line exceeds 78 characters.
    2080: Line exceeds 78 characters.
    2081: Line exceeds 78 characters.
    2082: Line exceeds 78 characters.
    2083: Line exceeds 78 characters.
    2084: Line exceeds 78 characters.
    2085: Line exceeds 78 characters.
    2086: Line exceeds 78 characters.
    2087: Line exceeds 78 characters.
    2088: Line exceeds 78 characters.
    2089: Line exceeds 78 characters.
    2090: Line exceeds 78 characters.
    2091: Line exceeds 78 characters.
    2092: Line exceeds 78 characters.
    2096: Line exceeds 78 characters.
    2097: Line exceeds 78 characters.
    2098: Line exceeds 78 characters.
    2099: Line exceeds 78 characters.
    2100: Line exceeds 78 characters.
    2101: Line exceeds 78 characters.
    2104: Line exceeds 78 characters.
    2105: Line exceeds 78 characters.
    2106: Line exceeds 78 characters.
    2111: Line exceeds 78 characters.
    2112: Line exceeds 78 characters.
    2113: Line exceeds 78 characters.
    2114: Line exceeds 78 characters.
    2115: Line exceeds 78 characters.
    2116: Line exceeds 78 characters.
    2117: Line exceeds 78 characters.
    2118: Line exceeds 78 characters.
    2119: Line exceeds 78 characters.
    2123: Line exceeds 78 characters.
    2124: Line exceeds 78 characters.
    2125: Line exceeds 78 characters.
    2126: Line exceeds 78 characters.
    2127: Line exceeds 78 characters.
    2128: Line exceeds 78 characters.
    2129: Line exceeds 78 characters.
    2130: Line exceeds 78 characters.
    2131: Line exceeds 78 characters.
    2132: Line exceeds 78 characters.
    2136: Line exceeds 78 characters.
    2137: Line exceeds 78 characters.
    2138: Line exceeds 78 characters.
    2139: Line exceeds 78 characters.
    2140: Line exceeds 78 characters.
    2141: Line exceeds 78 characters.
    2142: Line exceeds 78 characters.
    2143: Line exceeds 78 characters.
    2144: Line exceeds 78 characters.
    2146: Line exceeds 78 characters.
    2147: Line exceeds 78 characters.
    2148: Line exceeds 78 characters.
    2149: Line exceeds 78 characters.
    2150: Line exceeds 78 characters.
    2154: Line exceeds 78 characters.
    2155: Line exceeds 78 characters.
    2156: Line exceeds 78 characters.
    2170: Line exceeds 78 characters.
    2171: Line exceeds 78 characters.
    2172: Line exceeds 78 characters.
    2176: Line exceeds 78 characters.
    2177: Line exceeds 78 characters.
    2178: Line exceeds 78 characters.
    2181: Line exceeds 78 characters.
    2182: Line exceeds 78 characters.
    2185: Line exceeds 78 characters.
    2186: Line exceeds 78 characters.
    2187: Line exceeds 78 characters.
    2194: Line exceeds 78 characters.
    2195: Line exceeds 78 characters.
    2196: Line exceeds 78 characters.
    2197: Line exceeds 78 characters.
    2202: Line exceeds 78 characters.
    2203: Line exceeds 78 characters.
    2204: Line exceeds 78 characters.
    2207: Line exceeds 78 characters.
    2208: Line exceeds 78 characters.
    2213: Line exceeds 78 characters.
    2214: Line exceeds 78 characters.
    2215: Line exceeds 78 characters.
    2216: Line exceeds 78 characters.
    2217: Line exceeds 78 characters.
    2219: Line exceeds 78 characters.
    2220: Line exceeds 78 characters.
    2221: Line exceeds 78 characters.
    2223: Line exceeds 78 characters.
    2224: Line exceeds 78 characters.
    2225: Line exceeds 78 characters.
    2226: Line exceeds 78 characters.
    2227: Line exceeds 78 characters.
    2228: Line exceeds 78 characters.
    2229: Line exceeds 78 characters.
    2232: Line exceeds 78 characters.
    2234: Line exceeds 78 characters.
    2235: Line exceeds 78 characters.
    2236: Line exceeds 78 characters.
    2237: Line exceeds 78 characters.
    2238: Line exceeds 78 characters.
    2239: Line exceeds 78 characters.
    2240: Line exceeds 78 characters.
    2243: Line exceeds 78 characters.
    2245: Line exceeds 78 characters.
    2247: Line exceeds 78 characters.
    2248: Line exceeds 78 characters.
    2249: Line exceeds 78 characters.
    2252: Line exceeds 78 characters.
    2255: Line exceeds 78 characters.
    2256: Line exceeds 78 characters.
    2257: Line exceeds 78 characters.
    2258: Line exceeds 78 characters.
    2259: Line exceeds 78 characters.
    2260: Line exceeds 78 characters.
    2261: Line exceeds 78 characters.
    2265: Line exceeds 78 characters.
    2266: Line exceeds 78 characters.
    2267: Line exceeds 78 characters.
    2268: Line exceeds 78 characters.
    2269: Line exceeds 78 characters.
    2270: Line exceeds 78 characters.
    2272: Line exceeds 78 characters.
    2273: Line exceeds 78 characters.
    2274: Line exceeds 78 characters.
    2275: Line exceeds 78 characters.
    2276: Line exceeds 78 characters.
    2280: Line exceeds 78 characters.
    2284: Line exceeds 78 characters.
    2287: Line exceeds 78 characters.
    2290: Line exceeds 78 characters.
    2291: Line exceeds 78 characters.
    2296: Line exceeds 78 characters.
    2298: Line exceeds 78 characters.
    2301: Line exceeds 78 characters.
    2303: Line exceeds 78 characters.
    2304: Line exceeds 78 characters.
    2305: Line exceeds 78 characters.
    2309: Line exceeds 78 characters.
    2310: Line exceeds 78 characters.
    2312: Line exceeds 78 characters.
    2313: Line exceeds 78 characters.
    2314: Line exceeds 78 characters.
    2315: Line exceeds 78 characters.
    2316: Line exceeds 78 characters.
    2318: Line exceeds 78 characters.
    2319: Line exceeds 78 characters.
    2320: Line exceeds 78 characters.
    2322: Line exceeds 78 characters.
    2323: Line exceeds 78 characters.
    2324: Line exceeds 78 characters.
    2325: Line exceeds 78 characters.
    2326: Line exceeds 78 characters.
    2332: Line exceeds 78 characters.
    2334: Line exceeds 78 characters.
    2336: Line exceeds 78 characters.
    2338: Line exceeds 78 characters.
    2339: Line exceeds 78 characters.
    2340: Line exceeds 78 characters.
    2341: Line exceeds 78 characters.
    2343: Line exceeds 78 characters.
    2345: Line exceeds 78 characters.
    2346: Line exceeds 78 characters.
    2347: Line exceeds 78 characters.
    2348: Line exceeds 78 characters.
    2349: Line exceeds 78 characters.
    2350: Line exceeds 78 characters.
    2352: Line exceeds 78 characters.
    2354: Line exceeds 78 characters.
    2356: Line exceeds 78 characters.
    2358: Line exceeds 78 characters.
    2361: Line exceeds 78 characters.
    2369: Line exceeds 78 characters.
    2374: Line exceeds 78 characters.
    2375: Line exceeds 78 characters.
    2376: Line exceeds 78 characters.
    2382: Line exceeds 78 characters.
    2383: Line exceeds 78 characters.
    2384: Line exceeds 78 characters.
    2385: Line exceeds 78 characters.
    2386: Line exceeds 78 characters.
    2387: Line exceeds 78 characters.
    2388: Line exceeds 78 characters.
    2389: Line exceeds 78 characters.
    2390: Line exceeds 78 characters.
    2394: Line exceeds 78 characters.
    2395: Line exceeds 78 characters.
    2399: Line exceeds 78 characters.
    2400: Line exceeds 78 characters.
    2401: Line exceeds 78 characters.
    2402: Line exceeds 78 characters.
    2403: Line exceeds 78 characters.
    2404: Line exceeds 78 characters.
    2405: Line exceeds 78 characters.
    2406: Line exceeds 78 characters.
    2407: Line exceeds 78 characters.
    2408: Line exceeds 78 characters.
    2409: Line exceeds 78 characters.
    2410: Line exceeds 78 characters.
    2413: Line exceeds 78 characters.
    2415: Line exceeds 78 characters.
    2419: Line exceeds 78 characters.
    2420: Line exceeds 78 characters.
    2421: Line exceeds 78 characters.
    2425: Line exceeds 78 characters.
    2426: Line exceeds 78 characters.
    2427: Line exceeds 78 characters.
    2428: Line exceeds 78 characters.
    2429: Line exceeds 78 characters.
    2430: Line exceeds 78 characters.
    2431: Line exceeds 78 characters.
    2432: Line exceeds 78 characters.
    2434: Line exceeds 78 characters.
    2435: Line exceeds 78 characters.
    2438: Line exceeds 78 characters.
    2440: Line exceeds 78 characters.
    2441: Line exceeds 78 characters.
    2442: Line exceeds 78 characters.
    2443: Line exceeds 78 characters.
    2444: Line exceeds 78 characters.
    2445: Line exceeds 78 characters.
    2446: Line exceeds 78 characters.
    2448: Line exceeds 78 characters.
    2451: Line exceeds 78 characters.
    2453: Line exceeds 78 characters.
    2454: Line exceeds 78 characters.
    2455: Line exceeds 78 characters.
    2456: Line exceeds 78 characters.
    2457: Line exceeds 78 characters.
    2461: Line exceeds 78 characters.
    2463: Line exceeds 78 characters.
    2470: Line exceeds 78 characters.
    2472: Line exceeds 78 characters.
    2474: Line exceeds 78 characters.
    2475: Line exceeds 78 characters.
    2476: Line exceeds 78 characters.
    2480: Line exceeds 78 characters.
    2487: Line exceeds 78 characters.
    2488: Line exceeds 78 characters.
    2489: Line exceeds 78 characters.
    2492: Line exceeds 78 characters.
    2493: Line exceeds 78 characters.
    2494: Line exceeds 78 characters.
    2497: Line exceeds 78 characters.
    2498: Line exceeds 78 characters.
    2499: Line exceeds 78 characters.
    2502: Line exceeds 78 characters.
    2503: Line exceeds 78 characters.
    2504: Line exceeds 78 characters.
    2506: Line exceeds 78 characters.
    2507: Line exceeds 78 characters.
    2509: Line exceeds 78 characters.
    2512: Line exceeds 78 characters.
    2515: Line exceeds 78 characters.
    2516: Line exceeds 78 characters.
    2528: Line exceeds 78 characters.
./database/schema/security.cfg
     727: Line exceeds 78 characters.
     728: Line exceeds 78 characters.
     729: Line exceeds 78 characters.
     755: Line exceeds 78 characters.
     759: Line exceeds 78 characters.
     814: Line exceeds 78 characters.
     827: Line exceeds 78 characters.
     828: Line exceeds 78 characters.
     844: Line exceeds 78 characters.
     845: Line exceeds 78 characters.
     846: Line exceeds 78 characters.
     847: Line exceeds 78 characters.
     848: Line exceeds 78 characters.
     900: Line exceeds 78 characters.
     901: Line exceeds 78 characters.
     902: Line exceeds 78 characters.
     932: Line exceeds 78 characters.
    1013: Line exceeds 78 characters.
    1023: Line exceeds 78 characters.
    1024: Line exceeds 78 characters.
./configs/testrunner/launchpad-lazr.conf
     145: Line exceeds 78 characters.
./configs/development/launchpad-lazr.conf
      97: Line exceeds 78 characters.
     116: Line exceeds 78 characters.
     127: Line exceeds 78 characters.
./scripts/rosetta/message-sharing-merge.py
      10: '_pythonpath' imported but unused
      24: E303 too many blank lines (3)
-- 
https://code.launchpad.net/~abentley/launchpad/merge-translation-script/+merge/49099
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~abentley/launchpad/merge-translation-script into lp:launchpad/db-devel.
=== modified file 'configs/development/launchpad-lazr.conf'
--- configs/development/launchpad-lazr.conf	2010-12-23 17:14:16 +0000
+++ configs/development/launchpad-lazr.conf	2011-02-09 17:52:58 +0000
@@ -226,6 +226,10 @@
 error_dir: /var/tmp/codehosting.test
 oops_prefix: DMPJ
 
+[merge_translations]
+oops_prefix: DMT
+error_dir: /var/tmp/lperr
+
 [personalpackagearchive]
 root: /var/tmp/ppa/
 private_root: /var/tmp/ppa

=== modified file 'configs/testrunner/launchpad-lazr.conf'
--- configs/testrunner/launchpad-lazr.conf	2010-09-17 09:16:27 +0000
+++ configs/testrunner/launchpad-lazr.conf	2011-02-09 17:52:58 +0000
@@ -183,6 +183,10 @@
 oops_prefix: TMPJ
 error_dir: /var/tmp/codehosting.test
 
+[merge_translations]
+oops_prefix: TMT
+error_dir: /var/tmp/lperr.test
+
 [upgrade_branches]
 oops_prefix: TUB
 error_dir: /var/tmp/codehosting.test

=== added file 'cronscripts/run_jobs.py'
--- cronscripts/run_jobs.py	1970-01-01 00:00:00 +0000
+++ cronscripts/run_jobs.py	2011-02-09 17:52:58 +0000
@@ -0,0 +1,16 @@
+#!/usr/bin/python -S
+#
+# Copyright 2010 Canonical Ltd.  This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Run jobs specified by a config section."""
+
+__metaclass__ = type
+
+import _pythonpath
+
+from lp.services.job.runner import JobCronScript
+
+if __name__ == '__main__':
+    script = JobCronScript(commandline_config=True)
+    script.lock_and_run()

=== modified file 'lib/canonical/config/schema-lazr.conf'
--- lib/canonical/config/schema-lazr.conf	2011-02-03 03:49:36 +0000
+++ lib/canonical/config/schema-lazr.conf	2011-02-09 17:52:58 +0000
@@ -598,6 +598,21 @@
 # See [error_reports].
 copy_to_zlog: false
 
+[merge_translations]
+# The database user which will be used by this process.
+# datatype: string
+dbuser: rosettaadmin
+source_interface: lp.translations.interfaces.translationmergejob.ITranslationMergeJobSource
+
+# See [error_reports].
+error_dir: none
+
+# See [error_reports].
+oops_prefix: none
+
+# See [error_reports].
+copy_to_zlog: false
+
 
 [cveupdater]
 # The database user which will be used by this process.

=== modified file 'lib/lp/services/job/runner.py'
--- lib/lp/services/job/runner.py	2010-10-26 15:47:24 +0000
+++ lib/lp/services/job/runner.py	2011-02-09 17:52:58 +0000
@@ -284,20 +284,26 @@
     response = [('success', amp.Integer()), ('oops_id', amp.String())]
 
 
+def import_source(job_source_name):
+    """Return the IJobSource specified by its full name."""
+    module, name = job_source_name.rsplit('.', 1)
+    source_module = __import__(module, fromlist=[name])
+    return getattr(source_module, name)
+
+
 class JobRunnerProcess(child.AMPChild):
     """Base class for processes that run jobs."""
 
     def __init__(self, job_source_name, dbuser):
         child.AMPChild.__init__(self)
-        module, name = job_source_name.rsplit('.', 1)
-        source_module = __import__(module, fromlist=[name])
-        self.job_source = getattr(source_module, name)
+        self.job_source = import_source(job_source_name)
         self.context_manager = self.job_source.contextManager()
         # icky, but it's really a global value anyhow.
         self.__class__.dbuser = dbuser
 
     @classmethod
     def __enter__(cls):
+
         def handler(signum, frame):
             raise TimeoutError
         scripts.execute_zcml_for_scripts(use_web_security=False)
@@ -368,6 +374,7 @@
             'Running %r, lease expires %s', job, job.lease_expires)
         deferred = self.pool.doWork(
             RunJobCommand, job_id = job_id, _deadline=deadline)
+
         def update(response):
             if response['success']:
                 self.completed_jobs.append(job)
@@ -377,6 +384,7 @@
                 self.logger.debug('Incomplete %r', job)
             if response['oops_id'] != '':
                 self._logOopsId(response['oops_id'])
+
         def job_raised(failure):
             self.incomplete_jobs.append(job)
             info = (failure.type, failure.value, failure.tb)
@@ -387,6 +395,7 @@
 
     def getTaskSource(self):
         """Return a task source for all jobs in job_source."""
+
         def producer():
             while True:
                 jobs = list(self.job_source.iterReady())
@@ -442,10 +451,16 @@
 
     config_name = None
 
-    def __init__(self, runner_class=JobRunner, test_args=None, name=None):
+    def __init__(self, runner_class=JobRunner, test_args=None, name=None,
+                 commandline_config=False):
         super(JobCronScript, self).__init__(
             name=name, dbuser=None, test_args=test_args)
         self._runner_class = runner_class
+        if not commandline_config:
+            return
+        self.config_name = self.args[0]
+        self.source_interface = import_source(
+            self.config_section.source_interface)
 
     @property
     def dbuser(self):

=== modified file 'lib/lp/translations/configure.zcml'
--- lib/lp/translations/configure.zcml	2010-12-23 22:12:49 +0000
+++ lib/lp/translations/configure.zcml	2011-02-09 17:52:58 +0000
@@ -623,6 +623,16 @@
         provides="lp.translations.interfaces.translationtemplatesbuildjob.ITranslationTemplatesBuildJobSource">
         <allow interface="lp.translations.interfaces.translationtemplatesbuildjob.ITranslationTemplatesBuildJobSource"/>
     </securedutility>
+    <securedutility
+        component='lp.translations.model.translationmergejob.TranslationMergeJob'
+        provides='lp.translations.interfaces.translationmergejob.ITranslationMergeJobSource'
+    >
+        <allow interface='lp.translations.interfaces.translationmergejob.ITranslationMergeJobSource'/>
+    </securedutility>
+    <class
+        class="lp.translations.model.translationmergejob.TranslationMergeJob">
+        <allow interface='lp.services.job.interfaces.job.IRunnableJob'/>
+    </class>
     <utility
         component="lp.translations.model.translationtemplatesbuildjob.TranslationTemplatesBuildJob"
         provides="lp.buildmaster.interfaces.buildfarmjob.IBuildFarmJob"

=== added file 'lib/lp/translations/interfaces/translationmergejob.py'
--- lib/lp/translations/interfaces/translationmergejob.py	1970-01-01 00:00:00 +0000
+++ lib/lp/translations/interfaces/translationmergejob.py	2011-02-09 17:52:58 +0000
@@ -0,0 +1,7 @@
+from lp.services.job.interfaces.job import (
+    IJobSource,
+    )
+
+
+class ITranslationMergeJobSource(IJobSource):
+    """Marker interface for Translation merge jobs."""

=== modified file 'lib/lp/translations/model/translationmergejob.py'
--- lib/lp/translations/model/translationmergejob.py	2011-02-09 17:52:58 +0000
+++ lib/lp/translations/model/translationmergejob.py	2011-02-09 17:52:58 +0000
@@ -6,10 +6,35 @@
 __metaclass__ = type
 
 
-from zope.interface import implements
+from lazr.enum import (
+    DBEnumeratedType,
+    DBItem,
+    )
+from storm.locals import (
+    Int,
+    Reference,
+    )
+from zope.interface import (
+    classProvides,
+    implements,
+    )
 
-from lp.services.job.interfaces.job import IRunnableJob
+from canonical.database.enumcol import EnumCol
+from canonical.launchpad.interfaces.lpstorm import (
+    IStore,
+    )
+from lp.registry.model.distroseries import DistroSeries
+from lp.registry.model.productseries import ProductSeries
+from lp.registry.model.sourcepackagename import SourcePackageName
+from lp.services.database.stormbase import StormBase
+from lp.services.job.interfaces.job import (
+    IRunnableJob,
+    )
+from lp.services.job.model.job import Job
 from lp.services.job.runner import BaseRunnableJob
+from lp.translations.interfaces.translationmergejob import (
+    ITranslationMergeJobSource,
+    )
 from lp.translations.model.potemplate import POTemplate, POTemplateSubset
 from lp.translations.translationmerger import (
     TransactionManager,
@@ -19,11 +44,45 @@
 __all__ = ['TranslationMergeJob']
 
 
-class TranslationMergeJob(BaseRunnableJob):
+class PackagingJobType(DBEnumeratedType):
+    """Types of Packaging Job."""
+
+    TRANSLATION_MERGE = DBItem(0, """
+        Merge translations betweeen productseries and sourcepackage.
+
+        Merge translations betweeen productseries and sourcepackage.
+        """)
+
+
+class TranslationMergeJob(StormBase, BaseRunnableJob):
     """Job for merging translations between a product and sourcepackage."""
 
+    classProvides(ITranslationMergeJobSource)
+
     implements(IRunnableJob)
 
+    __storm_table__ = 'PackagingJob'
+
+    id = Int(primary=True)
+
+    job_id = Int('job')
+
+    job = Reference(job_id, Job.id)
+
+    job_type = EnumCol(enum=PackagingJobType, notNull=True)
+
+    productseries_id = Int('productseries')
+
+    productseries = Reference(productseries_id, ProductSeries.id)
+
+    distroseries_id = Int('distroseries')
+
+    distroseries = Reference(distroseries_id, DistroSeries.id)
+
+    sourcepackagename_id = Int('sourcepackagename')
+
+    sourcepackagename = Reference(sourcepackagename_id, SourcePackageName.id)
+
     def __init__(self, job, productseries, distroseries, sourcepackagename):
         """"Constructor.
 
@@ -33,10 +92,24 @@
         :param sourcepackagename: The name of the Packaging sourcepackage.
         """
         self.job = job
+        self.job_type = PackagingJobType.TRANSLATION_MERGE
         self.distroseries = distroseries
         self.sourcepackagename = sourcepackagename
         self.productseries = productseries
 
+    @classmethod
+    def iterReady(cls):
+        """See `IJobSource`."""
+        store = IStore(cls)
+        jobs = store.find(
+            (TranslationMergeJob),
+            TranslationMergeJob.job_type ==
+                PackagingJobType.TRANSLATION_MERGE,
+            TranslationMergeJob.job == Job.id,
+            Job.id.is_in(Job.ready_jobs),
+        )
+        return jobs
+
     def run(self):
         """See `IRunnableJob`."""
         template_map = dict()

=== added file 'lib/lp/translations/scripts/tests/test_merge_translations.py'
--- lib/lp/translations/scripts/tests/test_merge_translations.py	1970-01-01 00:00:00 +0000
+++ lib/lp/translations/scripts/tests/test_merge_translations.py	2011-02-09 17:52:58 +0000
@@ -0,0 +1,37 @@
+# Copyright 2011 Canonical Ltd.  This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Test the merge_translations script."""
+
+
+from textwrap import dedent
+
+import transaction
+
+from canonical.launchpad.scripts.tests import run_script
+from canonical.testing.layers import ZopelessAppServerLayer
+from lp.testing import TestCaseWithFactory
+from lp.translations.tests.test_translationmergejob import (
+    count_translations,
+    make_translation_merge_job,
+    )
+
+
+class TestMergeTranslations(TestCaseWithFactory):
+
+    layer = ZopelessAppServerLayer
+
+    def test_merge_translations(self):
+        job = make_translation_merge_job(self.factory)
+        transaction.commit()
+        retcode, stdout, stderr = run_script(
+            'cronscripts/run_jobs.py', ['merge_translations'],
+            expect_returncode=0)
+        self.assertEqual(dedent("""\
+            INFO    Creating lockfile: /var/lock/launchpad-jobcronscript.lock
+            INFO    Running synchronously.
+            INFO    Deleted POTMsgSets: 1.  TranslationMessages: 1.
+            INFO    Ran 1 TranslationMergeJob jobs.
+            """), stderr)
+        self.assertEqual('', stdout)
+        self.assertEqual(1, count_translations(job))

=== modified file 'lib/lp/translations/tests/test_translationmergejob.py'
--- lib/lp/translations/tests/test_translationmergejob.py	2011-02-09 17:52:58 +0000
+++ lib/lp/translations/tests/test_translationmergejob.py	2011-02-09 17:52:58 +0000
@@ -14,91 +14,96 @@
 from lp.services.job.model.job import Job
 from lp.testing import TestCaseWithFactory
 from lp.translations.interfaces.side import TranslationSide
+from lp.translations.interfaces.translationmergejob import (
+    ITranslationMergeJobSource,
+    )
 from lp.translations.model.potemplate import POTemplateSubset
 from lp.translations.model.translationmergejob import TranslationMergeJob
 
 
+def make_translation_merge_job(factory):
+    singular = factory.getUniqueString()
+    upstream_pofile = factory.makePOFile(side=TranslationSide.UPSTREAM)
+    upstream_potmsgset = factory.makePOTMsgSet(
+        upstream_pofile.potemplate, singular, sequence=1)
+    upstream = factory.makeCurrentTranslationMessage(
+        pofile=upstream_pofile, potmsgset=upstream_potmsgset)
+    ubuntu_potemplate = factory.makePOTemplate(
+        side=TranslationSide.UBUNTU, name=upstream_pofile.potemplate.name)
+    ubuntu_pofile = factory.makePOFile(
+        potemplate=ubuntu_potemplate, language=upstream_pofile.language)
+    ubuntu_potmsgset = factory.makePOTMsgSet(
+        ubuntu_pofile.potemplate, singular, sequence=1)
+    ubuntu = factory.makeCurrentTranslationMessage(
+        pofile=ubuntu_pofile, potmsgset=ubuntu_potmsgset,
+        translations=upstream.translations)
+    productseries = upstream_pofile.potemplate.productseries
+    distroseries = ubuntu_pofile.potemplate.distroseries
+    sourcepackagename = ubuntu_pofile.potemplate.sourcepackagename
+    return TranslationMergeJob(
+        job=Job(), productseries=productseries, distroseries=distroseries,
+        sourcepackagename=sourcepackagename)
+
+
+def get_msg_sets(productseries=None, distroseries=None,
+               sourcepackagename=None):
+    msg_sets = []
+    for template in POTemplateSubset(
+        productseries=productseries, distroseries=distroseries,
+        sourcepackagename=sourcepackagename):
+        msg_sets.extend(template.getPOTMsgSets())
+    return msg_sets
+
+
+def get_translations(productseries=None, distroseries=None,
+                    sourcepackagename=None):
+    msg_sets = get_msg_sets(
+        productseries=productseries, distroseries=distroseries,
+        sourcepackagename=sourcepackagename)
+    translations = set()
+    for msg_set in msg_sets:
+        translations.update(msg_set.getAllTranslationMessages())
+    return translations
+
+
+def count_translations(job):
+    tm = get_translations(productseries=job.productseries)
+    tm.update(get_translations(
+        sourcepackagename=job.sourcepackagename,
+        distroseries=job.distroseries))
+    return len(tm)
+
+
 class TestTranslationMergeJob(TestCaseWithFactory):
 
     layer = LaunchpadZopelessLayer
 
-    def makeTranslationMergeJob(self):
-        singular = self.factory.getUniqueString()
-        upstream_pofile = self.factory.makePOFile(
-            side=TranslationSide.UPSTREAM)
-        upstream_potmsgset = self.factory.makePOTMsgSet(
-            upstream_pofile.potemplate, singular, sequence=1)
-        upstream = self.factory.makeCurrentTranslationMessage(
-            pofile=upstream_pofile, potmsgset=upstream_potmsgset)
-        ubuntu_potemplate = self.factory.makePOTemplate(
-            side=TranslationSide.UBUNTU, name=upstream_pofile.potemplate.name)
-        ubuntu_pofile = self.factory.makePOFile(
-            potemplate=ubuntu_potemplate, language=upstream_pofile.language)
-        ubuntu_potmsgset = self.factory.makePOTMsgSet(
-            ubuntu_pofile.potemplate, singular, sequence=1)
-        ubuntu = self.factory.makeCurrentTranslationMessage(
-            pofile=ubuntu_pofile, potmsgset=ubuntu_potmsgset,
-            translations=upstream.translations)
-        productseries = upstream_pofile.potemplate.productseries
-        distroseries = ubuntu_pofile.potemplate.distroseries
-        sourcepackagename = ubuntu_pofile.potemplate.sourcepackagename
-        return TranslationMergeJob(
-            Job(), productseries, distroseries, sourcepackagename)
-
     def test_interface(self):
-        """TranslationMergeJob must implement IRunnableJob."""
-        job = self.makeTranslationMergeJob()
+        """TranslationMergeJob must implement its interfaces."""
+        verifyObject(ITranslationMergeJobSource, TranslationMergeJob)
+        job = make_translation_merge_job(self.factory)
         verifyObject(IRunnableJob, job)
 
-    @staticmethod
-    def getMsgSets(productseries=None, distroseries=None,
-                   sourcepackagename=None):
-        msg_sets = []
-        for template in POTemplateSubset(
-            productseries=productseries, distroseries=distroseries,
-            sourcepackagename=sourcepackagename):
-            msg_sets.extend(template.getPOTMsgSets())
-        return msg_sets
-
-    @classmethod
-    def getTranslations(cls, productseries=None, distroseries=None,
-                        sourcepackagename=None):
-        msg_sets = cls.getMsgSets(
-            productseries=productseries, distroseries=distroseries,
-            sourcepackagename=sourcepackagename)
-        translations = set()
-        for msg_set in msg_sets:
-            translations.update(msg_set.getAllTranslationMessages())
-        return translations
-
-    @classmethod
-    def countTranslations(cls, job):
-        tm = cls.getTranslations(productseries=job.productseries)
-        tm.update(cls.getTranslations(
-            sourcepackagename=job.sourcepackagename,
-            distroseries=job.distroseries))
-        return len(tm)
-
     def test_run_merges_msgset(self):
         """Run should merge msgsets."""
-        job = self.makeTranslationMergeJob()
+        job = make_translation_merge_job(self.factory)
         self.becomeDbUser('rosettaadmin')
-        product_msg = self.getMsgSets(productseries=job.productseries)
-        package_msg = self.getMsgSets(
+        product_msg = get_msg_sets(productseries=job.productseries)
+        package_msg = get_msg_sets(
             sourcepackagename=job.sourcepackagename,
             distroseries=job.distroseries)
         self.assertNotEqual(package_msg, product_msg)
         job.run()
-        product_msg = self.getMsgSets(productseries=job.productseries)
-        package_msg = self.getMsgSets(
+        product_msg = get_msg_sets(productseries=job.productseries)
+        package_msg = get_msg_sets(
             sourcepackagename=job.sourcepackagename,
             distroseries=job.distroseries)
         self.assertEqual(package_msg, product_msg)
 
     def test_run_merges_translations(self):
         """Run should merge translations."""
-        job = self.makeTranslationMergeJob()
+        job = make_translation_merge_job(self.factory)
         self.becomeDbUser('rosettaadmin')
-        self.assertEqual(2, self.countTranslations(job))
+        self.assertEqual(2, count_translations(job))
         job.run()
-        self.assertEqual(1, self.countTranslations(job))
+        self.assertEqual(1, count_translations(job))