← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~danilo/launchpad/bug-720826-db into lp:launchpad/db-devel

 

Данило Шеган has proposed merging lp:~danilo/launchpad/bug-720826-db into lp:launchpad/db-devel with lp:~danilo/launchpad/auto-creation-merged as a prerequisite.

Requested reviews:
  Stuart Bishop (stub): db
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  #720826 Add subscription description header for bug notifications
  https://bugs.launchpad.net/bugs/720826

For more details, see:
https://code.launchpad.net/~danilo/launchpad/bug-720826-db/+merge/51146

= Provide a link between bug notifications and subscription filters =

Part of bug 720826.

Record a link between bug notifications and bug subscription filters.  This only provides the code to store the link in the database, but doesn't provide automatic creation of it when notifications are constructed.  That will come in follow-up branch.

It does provide a property and a method on BugNotification that allow one to access all filters.

Since it's only a linking table, I do not directly test it, but I do test the new properties on BugNotification.

Note: I haven't updated the sample data yet because it would only increase the size of the diff.  I'll do it before submitting.

== Tests ==

bin/test -cvvt test_bugnotification

== Demo and Q/A ==

qa-untestable

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/bugs/model/bugnotification.py
  database/schema/comments.sql
  lib/lp/bugs/tests/test_bugnotification.py
  database/schema/security.cfg
  lib/lp/bugs/interfaces/bugnotification.py
  database/schema/patch-2208-96-0.sql


== Schema ==

database/sampledata/current.sql
    database/sampledata/lintdata.sql differs from database/sampledata/current.sql.
    Patches to the schema, or manual edits to database/sampledata/current.sql
    do not match the dump of the launchpad_ftest_template database.
    If database/sampledata/lintdata.sql is correct, copy it to
    database/sampledata/current.sql.
    Otherwise update database/sampledata/current.sql and run:
        make schema
        make newsampledata
        cd database/sampledata
        cp newsampledata.sql database/sampledata/current.sql
    Run make schema again to update the test/dev database.

database/sampledata/current.sql
    database/sampledata/lintdata-dev.sql differs from database/sampledata/current-dev.sql.
    Patches to the schema, or manual edits to database/sampledata/current-dev.sql
    do not match the dump of the launchpad_dev_template database.
    If database/sampledata/lintdata-dev.sql is correct, copy it to
    database/sampledata/current-dev.sql.
    Otherwise update database/sampledata/current-dev.sql and run:
        make schema
        make newsampledata
        cd database/sampledata
        cp newsampledata-dev.sql database/sampledata/current-dev.sql
    Run make schema again to update the test/dev database.

./lib/lp/bugs/model/bugnotification.py
     132: E202 whitespace before ']'
./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.
     283: Line exceeds 78 characters.
     284: Line exceeds 78 characters.
     289: Line exceeds 78 characters.
     290: Line exceeds 78 characters.
     291: Line exceeds 78 characters.
     296: Line exceeds 78 characters.
     297: Line exceeds 78 characters.
     298: 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.
     311: Line exceeds 78 characters.
     312: Line exceeds 78 characters.
     313: Line exceeds 78 characters.
     314: 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.
     324: Line exceeds 78 characters.
     325: Line exceeds 78 characters.
     326: Line exceeds 78 characters.
     327: 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.
     337: Line exceeds 78 characters.
     338: Line exceeds 78 characters.
     339: Line exceeds 78 characters.
     340: Line exceeds 78 characters.
     341: Line exceeds 78 characters.
     342: Line exceeds 78 characters.
     343: Line exceeds 78 characters.
     344: Line exceeds 78 characters.
     345: Line exceeds 78 characters.
     346: Line exceeds 78 characters.
     347: Line exceeds 78 characters.
     351: Line exceeds 78 characters.
     352: Line exceeds 78 characters.
     353: 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.
     365: Line exceeds 78 characters.
     366: Line exceeds 78 characters.
     367: Line exceeds 78 characters.
     368: Line exceeds 78 characters.
     369: Line exceeds 78 characters.
     370: Line exceeds 78 characters.
     371: Line exceeds 78 characters.
     375: Line exceeds 78 characters.
     376: Line exceeds 78 characters.
     377: Line exceeds 78 characters.
     381: Line exceeds 78 characters.
     386: Line exceeds 78 characters.
     387: Line exceeds 78 characters.
     388: Line exceeds 78 characters.
     389: Line exceeds 78 characters.
     394: Line exceeds 78 characters.
     395: Line exceeds 78 characters.
     396: Line exceeds 78 characters.
     397: Line exceeds 78 characters.
     398: Line exceeds 78 characters.
     399: Line exceeds 78 characters.
     404: Line exceeds 78 characters.
     406: Line exceeds 78 characters.
     411: Line exceeds 78 characters.
     412: Line exceeds 78 characters.
     413: Line exceeds 78 characters.
     414: Line exceeds 78 characters.
     415: Line exceeds 78 characters.
     416: Line exceeds 78 characters.
     417: 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.
     423: Line exceeds 78 characters.
     427: Line exceeds 78 characters.
     428: Line exceeds 78 characters.
     429: Line exceeds 78 characters.
     430: Line exceeds 78 characters.
     431: Line exceeds 78 characters.
     435: Line exceeds 78 characters.
     436: Line exceeds 78 characters.
     437: Line exceeds 78 characters.
     438: Line exceeds 78 characters.
     442: Line exceeds 78 characters.
     443: Line exceeds 78 characters.
     444: Line exceeds 78 characters.
     446: Line exceeds 78 characters.
     447: Line exceeds 78 characters.
     448: Line exceeds 78 characters.
     449: Line exceeds 78 characters.
     450: Line exceeds 78 characters.
     451: Line exceeds 78 characters.
     456: 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.
     466: Line exceeds 78 characters.
     467: Line exceeds 78 characters.
     468: Line exceeds 78 characters.
     469: Line exceeds 78 characters.
     470: Line exceeds 78 characters.
     471: Line exceeds 78 characters.
     472: Line exceeds 78 characters.
     477: Line exceeds 78 characters.
     478: Line exceeds 78 characters.
     480: Line exceeds 78 characters.
     481: 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.
     494: Line exceeds 78 characters.
     495: Line exceeds 78 characters.
     496: Line exceeds 78 characters.
     497: 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.
     504: Line exceeds 78 characters.
     507: Line exceeds 78 characters.
     508: Line exceeds 78 characters.
     509: Line exceeds 78 characters.
     510: Line exceeds 78 characters.
     511: Line exceeds 78 characters.
     512: Line exceeds 78 characters.
     516: Line exceeds 78 characters.
     517: Line exceeds 78 characters.
     518: Line exceeds 78 characters.
     519: Line exceeds 78 characters.
     524: Line exceeds 78 characters.
     525: Line exceeds 78 characters.
     526: Line exceeds 78 characters.
     527: Line exceeds 78 characters.
     532: Line exceeds 78 characters.
     533: Line exceeds 78 characters.
     536: Line exceeds 78 characters.
     540: Line exceeds 78 characters.
     541: Line exceeds 78 characters.
     542: 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.
     552: Line exceeds 78 characters.
     553: 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.
     563: Line exceeds 78 characters.
     564: Line exceeds 78 characters.
     565: Line exceeds 78 characters.
     566: Line exceeds 78 characters.
     567: Line exceeds 78 characters.
     568: Line exceeds 78 characters.
     569: Line exceeds 78 characters.
     570: Line exceeds 78 characters.
     571: Line exceeds 78 characters.
     572: Line exceeds 78 characters.
     575: Line exceeds 78 characters.
     576: Line exceeds 78 characters.
     577: Line exceeds 78 characters.
     581: Line exceeds 78 characters.
     582: Line exceeds 78 characters.
     583: Line exceeds 78 characters.
     584: Line exceeds 78 characters.
     585: Line exceeds 78 characters.
     586: Line exceeds 78 characters.
     587: Line exceeds 78 characters.
     588: Line exceeds 78 characters.
     592: Line exceeds 78 characters.
     593: Line exceeds 78 characters.
     594: Line exceeds 78 characters.
     599: Line exceeds 78 characters.
     600: Line exceeds 78 characters.
     627: Line exceeds 78 characters.
     631: Line exceeds 78 characters.
     632: Line exceeds 78 characters.
     633: 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.
     639: Line exceeds 78 characters.
     643: Line exceeds 78 characters.
     644: Line exceeds 78 characters.
     645: Line exceeds 78 characters.
     646: Line exceeds 78 characters.
     647: Line exceeds 78 characters.
     651: Line exceeds 78 characters.
     653: Line exceeds 78 characters.
     658: Line exceeds 78 characters.
     659: Line exceeds 78 characters.
     663: Line exceeds 78 characters.
     664: Line exceeds 78 characters.
     665: Line exceeds 78 characters.
     670: Line exceeds 78 characters.
     671: Line exceeds 78 characters.
     672: Line exceeds 78 characters.
     673: 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.
     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.
     725: Line exceeds 78 characters.
     726: Line exceeds 78 characters.
     727: Line exceeds 78 characters.
     728: Line exceeds 78 characters.
     729: Line exceeds 78 characters.
     730: Line exceeds 78 characters.
     731: Line exceeds 78 characters.
     732: Line exceeds 78 characters.
     733: Line exceeds 78 characters.
     736: Line exceeds 78 characters.
     737: Line exceeds 78 characters.
     738: Line exceeds 78 characters.
     742: 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.
     752: Line exceeds 78 characters.
     753: 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.
     759: Line exceeds 78 characters.
     763: Line exceeds 78 characters.
     764: Line exceeds 78 characters.
     765: Line exceeds 78 characters.
     766: Line exceeds 78 characters.
     767: Line exceeds 78 characters.
     780: Line exceeds 78 characters.
     784: Line exceeds 78 characters.
     785: Line exceeds 78 characters.
     786: Line exceeds 78 characters.
     789: Line exceeds 78 characters.
     790: Line exceeds 78 characters.
     791: Line exceeds 78 characters.
     792: Line exceeds 78 characters.
     804: Line exceeds 78 characters.
     805: Line exceeds 78 characters.
     806: Line exceeds 78 characters.
     807: Line exceeds 78 characters.
     808: Line exceeds 78 characters.
     809: Line exceeds 78 characters.
     810: Line exceeds 78 characters.
     811: Line exceeds 78 characters.
     812: Line exceeds 78 characters.
     818: Line exceeds 78 characters.
     819: Line exceeds 78 characters.
     820: Line exceeds 78 characters.
     821: Line exceeds 78 characters.
     822: Line exceeds 78 characters.
     823: Line exceeds 78 characters.
     824: Line exceeds 78 characters.
     825: Line exceeds 78 characters.
     826: Line exceeds 78 characters.
     830: Line exceeds 78 characters.
     831: Line exceeds 78 characters.
     832: Line exceeds 78 characters.
     833: Line exceeds 78 characters.
     840: Line exceeds 78 characters.
     841: 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.
     851: Line exceeds 78 characters.
     852: Line exceeds 78 characters.
     853: Line exceeds 78 characters.
     854: Line exceeds 78 characters.
     855: Line exceeds 78 characters.
     856: Line exceeds 78 characters.
     857: Line exceeds 78 characters.
     858: Line exceeds 78 characters.
     859: Line exceeds 78 characters.
     860: Line exceeds 78 characters.
     861: Line exceeds 78 characters.
     862: Line exceeds 78 characters.
     865: Line exceeds 78 characters.
     866: Line exceeds 78 characters.
     867: Line exceeds 78 characters.
     872: Line exceeds 78 characters.
     873: Line exceeds 78 characters.
     874: Line exceeds 78 characters.
     875: Line exceeds 78 characters.
     878: Line exceeds 78 characters.
     879: Line exceeds 78 characters.
     880: Line exceeds 78 characters.
     884: Line exceeds 78 characters.
     885: Line exceeds 78 characters.
     886: Line exceeds 78 characters.
     889: 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.
     905: 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.
     918: Line exceeds 78 characters.
     919: Line exceeds 78 characters.
     920: Line exceeds 78 characters.
     921: Line exceeds 78 characters.
     922: Line exceeds 78 characters.
     926: Line exceeds 78 characters.
     928: Line exceeds 78 characters.
     931: 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.
     940: Line exceeds 78 characters.
     941: Line exceeds 78 characters.
     942: Line exceeds 78 characters.
     944: Line exceeds 78 characters.
     945: Line exceeds 78 characters.
     946: Line exceeds 78 characters.
     947: Line exceeds 78 characters.
     948: Line exceeds 78 characters.
     953: Line exceeds 78 characters.
     993: Line exceeds 78 characters.
     995: 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.
    1008: Line exceeds 78 characters.
    1009: Line exceeds 78 characters.
    1010: Line exceeds 78 characters.
    1011: Line exceeds 78 characters.
    1012: Line exceeds 78 characters.
    1013: Line exceeds 78 characters.
    1014: Line exceeds 78 characters.
    1015: Line exceeds 78 characters.
    1016: Line exceeds 78 characters.
    1020: Line exceeds 78 characters.
    1024: Line exceeds 78 characters.
    1025: Line exceeds 78 characters.
    1026: Line exceeds 78 characters.
    1030: Line exceeds 78 characters.
    1031: Line exceeds 78 characters.
    1032: Line exceeds 78 characters.
    1033: Line exceeds 78 characters.
    1038: Line exceeds 78 characters.
    1042: Line exceeds 78 characters.
    1046: Line exceeds 78 characters.
    1052: Line exceeds 78 characters.
    1053: Line exceeds 78 characters.
    1054: Line exceeds 78 characters.
    1059: Line exceeds 78 characters.
    1060: Line exceeds 78 characters.
    1061: Line exceeds 78 characters.
    1062: Line exceeds 78 characters.
    1063: Line exceeds 78 characters.
    1064: Line exceeds 78 characters.
    1065: Line exceeds 78 characters.
    1075: Line exceeds 78 characters.
    1076: 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.
    1084: Line exceeds 78 characters.
    1086: Line exceeds 78 characters.
    1087: Line exceeds 78 characters.
    1088: Line exceeds 78 characters.
    1089: Line exceeds 78 characters.
    1090: Line exceeds 78 characters.
    1091: Line exceeds 78 characters.
    1092: Line exceeds 78 characters.
    1097: Line exceeds 78 characters.
    1098: Line exceeds 78 characters.
    1101: Line exceeds 78 characters.
    1102: Line exceeds 78 characters.
    1103: 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.
    1113: Line exceeds 78 characters.
    1114: Line exceeds 78 characters.
    1115: Line exceeds 78 characters.
    1116: Line exceeds 78 characters.
    1117: Line exceeds 78 characters.
    1118: Line exceeds 78 characters.
    1119: Line exceeds 78 characters.
    1120: Line exceeds 78 characters.
    1124: Line exceeds 78 characters.
    1126: Line exceeds 78 characters.
    1128: Line exceeds 78 characters.
    1130: Line exceeds 78 characters.
    1132: Line exceeds 78 characters.
    1134: Line exceeds 78 characters.
    1137: Line exceeds 78 characters.
    1139: Line exceeds 78 characters.
    1141: Line exceeds 78 characters.
    1144: Line exceeds 78 characters.
    1146: Line exceeds 78 characters.
    1148: Line exceeds 78 characters.
    1151: Line exceeds 78 characters.
    1153: Line exceeds 78 characters.
    1155: Line exceeds 78 characters.
    1157: 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.
    1175: Line exceeds 78 characters.
    1176: Line exceeds 78 characters.
    1177: Line exceeds 78 characters.
    1178: Line exceeds 78 characters.
    1179: Line exceeds 78 characters.
    1180: Line exceeds 78 characters.
    1181: Line exceeds 78 characters.
    1182: Line exceeds 78 characters.
    1183: Line exceeds 78 characters.
    1187: Line exceeds 78 characters.
    1188: Line exceeds 78 characters.
    1189: Line exceeds 78 characters.
    1190: Line exceeds 78 characters.
    1194: Line exceeds 78 characters.
    1195: Line exceeds 78 characters.
    1196: Line exceeds 78 characters.
    1200: Line exceeds 78 characters.
    1201: Line exceeds 78 characters.
    1202: Line exceeds 78 characters.
    1203: Line exceeds 78 characters.
    1205: Line exceeds 78 characters.
    1206: 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.
    1219: Line exceeds 78 characters.
    1220: Line exceeds 78 characters.
    1221: Line exceeds 78 characters.
    1224: Line exceeds 78 characters.
    1226: Line exceeds 78 characters.
    1227: Line exceeds 78 characters.
    1230: Line exceeds 78 characters.
    1231: Line exceeds 78 characters.
    1233: 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.
    1243: Line exceeds 78 characters.
    1244: Line exceeds 78 characters.
    1245: Line exceeds 78 characters.
    1246: Line exceeds 78 characters.
    1250: Line exceeds 78 characters.
    1251: Line exceeds 78 characters.
    1255: Line exceeds 78 characters.
    1256: Line exceeds 78 characters.
    1257: Line exceeds 78 characters.
    1258: Line exceeds 78 characters.
    1259: 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.
    1269: Line exceeds 78 characters.
    1270: Line exceeds 78 characters.
    1271: Line exceeds 78 characters.
    1272: Line exceeds 78 characters.
    1273: Line exceeds 78 characters.
    1274: Line exceeds 78 characters.
    1275: Line exceeds 78 characters.
    1276: Line exceeds 78 characters.
    1277: Line exceeds 78 characters.
    1279: Line exceeds 78 characters.
    1280: Line exceeds 78 characters.
    1282: Line exceeds 78 characters.
    1285: Line exceeds 78 characters.
    1286: Line exceeds 78 characters.
    1287: Line exceeds 78 characters.
    1290: Line exceeds 78 characters.
    1291: 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.
    1297: 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.
    1313: Line exceeds 78 characters.
    1314: Line exceeds 78 characters.
    1318: Line exceeds 78 characters.
    1319: Line exceeds 78 characters.
    1320: Line exceeds 78 characters.
    1321: Line exceeds 78 characters.
    1325: Line exceeds 78 characters.
    1326: Line exceeds 78 characters.
    1327: Line exceeds 78 characters.
    1330: Line exceeds 78 characters.
    1331: Line exceeds 78 characters.
    1333: Line exceeds 78 characters.
    1334: Line exceeds 78 characters.
    1335: Line exceeds 78 characters.
    1337: Line exceeds 78 characters.
    1339: Line exceeds 78 characters.
    1341: Line exceeds 78 characters.
    1344: Line exceeds 78 characters.
    1345: Line exceeds 78 characters.
    1346: Line exceeds 78 characters.
    1347: Line exceeds 78 characters.
    1348: Line exceeds 78 characters.
    1351: Line exceeds 78 characters.
    1352: Line exceeds 78 characters.
    1353: Line exceeds 78 characters.
    1354: Line exceeds 78 characters.
    1355: Line exceeds 78 characters.
    1357: Line exceeds 78 characters.
    1358: Line exceeds 78 characters.
    1359: Line exceeds 78 characters.
    1360: Line exceeds 78 characters.
    1363: Line exceeds 78 characters.
    1364: Line exceeds 78 characters.
    1399: 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.
    1425: Line exceeds 78 characters.
    1426: Line exceeds 78 characters.
    1427: Line exceeds 78 characters.
    1428: Line exceeds 78 characters.
    1429: Line exceeds 78 characters.
    1430: Line exceeds 78 characters.
    1431: Line exceeds 78 characters.
    1432: Line exceeds 78 characters.
    1433: Line exceeds 78 characters.
    1437: Line exceeds 78 characters.
    1441: 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.
    1451: Line exceeds 78 characters.
    1452: Line exceeds 78 characters.
    1453: Line exceeds 78 characters.
    1454: Line exceeds 78 characters.
    1455: 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.
    1465: Line exceeds 78 characters.
    1466: Line exceeds 78 characters.
    1467: Line exceeds 78 characters.
    1468: Line exceeds 78 characters.
    1469: Line exceeds 78 characters.
    1470: Line exceeds 78 characters.
    1472: 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.
    1484: Line exceeds 78 characters.
    1485: Line exceeds 78 characters.
    1486: Line exceeds 78 characters.
    1487: Line exceeds 78 characters.
    1491: Line exceeds 78 characters.
    1492: 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.
    1511: Line exceeds 78 characters.
    1512: Line exceeds 78 characters.
    1513: Line exceeds 78 characters.
    1514: Line exceeds 78 characters.
    1515: Line exceeds 78 characters.
    1516: Line exceeds 78 characters.
    1517: Line exceeds 78 characters.
    1518: Line exceeds 78 characters.
    1519: Line exceeds 78 characters.
    1523: Line exceeds 78 characters.
    1524: Line exceeds 78 characters.
    1525: Line exceeds 78 characters.
    1526: Line exceeds 78 characters.
    1529: Line exceeds 78 characters.
    1530: Line exceeds 78 characters.
    1531: Line exceeds 78 characters.
    1532: Line exceeds 78 characters.
    1535: Line exceeds 78 characters.
    1538: Line exceeds 78 characters.
    1539: Line exceeds 78 characters.
    1542: Line exceeds 78 characters.
    1543: Line exceeds 78 characters.
    1544: Line exceeds 78 characters.
    1547: 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.
    1568: Line exceeds 78 characters.
    1569: Line exceeds 78 characters.
    1570: Line exceeds 78 characters.
    1571: Line exceeds 78 characters.
    1572: Line exceeds 78 characters.
    1573: Line exceeds 78 characters.
    1574: Line exceeds 78 characters.
    1575: Line exceeds 78 characters.
    1576: Line exceeds 78 characters.
    1581: Line exceeds 78 characters.
    1582: Line exceeds 78 characters.
    1583: Line exceeds 78 characters.
    1584: Line exceeds 78 characters.
    1588: Line exceeds 78 characters.
    1592: Line exceeds 78 characters.
    1593: Line exceeds 78 characters.
    1594: Line exceeds 78 characters.
    1595: Line exceeds 78 characters.
    1596: Line exceeds 78 characters.
    1597: 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.
    1607: Line exceeds 78 characters.
    1608: Line exceeds 78 characters.
    1609: Line exceeds 78 characters.
    1610: Line exceeds 78 characters.
    1611: Line exceeds 78 characters.
    1612: Line exceeds 78 characters.
    1613: Line exceeds 78 characters.
    1614: Line exceeds 78 characters.
    1615: Line exceeds 78 characters.
    1616: Line exceeds 78 characters.
    1617: Line exceeds 78 characters.
    1618: Line exceeds 78 characters.
    1619: Line exceeds 78 characters.
    1624: Line exceeds 78 characters.
    1625: Line exceeds 78 characters.
    1630: Line exceeds 78 characters.
    1631: Line exceeds 78 characters.
    1632: Line exceeds 78 characters.
    1633: Line exceeds 78 characters.
    1638: Line exceeds 78 characters.
    1639: Line exceeds 78 characters.
    1641: Line exceeds 78 characters.
    1642: Line exceeds 78 characters.
    1643: Line exceeds 78 characters.
    1647: Line exceeds 78 characters.
    1648: Line exceeds 78 characters.
    1649: Line exceeds 78 characters.
    1650: Line exceeds 78 characters.
    1651: Line exceeds 78 characters.
    1652: Line exceeds 78 characters.
    1653: Line exceeds 78 characters.
    1654: Line exceeds 78 characters.
    1655: Line exceeds 78 characters.
    1657: Line exceeds 78 characters.
    1658: Line exceeds 78 characters.
    1660: Line exceeds 78 characters.
    1661: Line exceeds 78 characters.
    1664: Line exceeds 78 characters.
    1665: Line exceeds 78 characters.
    1669: Line exceeds 78 characters.
    1670: Line exceeds 78 characters.
    1671: Line exceeds 78 characters.
    1672: Line exceeds 78 characters.
    1674: Line exceeds 78 characters.
    1675: 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.
    1685: Line exceeds 78 characters.
    1686: Line exceeds 78 characters.
    1687: 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.
    1695: Line exceeds 78 characters.
    1697: Line exceeds 78 characters.
    1698: Line exceeds 78 characters.
    1699: Line exceeds 78 characters.
    1700: Line exceeds 78 characters.
    1701: Line exceeds 78 characters.
    1702: Line exceeds 78 characters.
    1703: Line exceeds 78 characters.
    1704: Line exceeds 78 characters.
    1706: Line exceeds 78 characters.
    1707: Line exceeds 78 characters.
    1708: Line exceeds 78 characters.
    1711: Line exceeds 78 characters.
    1712: Line exceeds 78 characters.
    1713: Line exceeds 78 characters.
    1714: Line exceeds 78 characters.
    1715: Line exceeds 78 characters.
    1716: Line exceeds 78 characters.
    1717: Line exceeds 78 characters.
    1718: Line exceeds 78 characters.
    1720: Line exceeds 78 characters.
    1721: Line exceeds 78 characters.
    1722: Line exceeds 78 characters.
    1725: Line exceeds 78 characters.
    1726: Line exceeds 78 characters.
    1727: Line exceeds 78 characters.
    1728: Line exceeds 78 characters.
    1729: Line exceeds 78 characters.
    1730: Line exceeds 78 characters.
    1733: Line exceeds 78 characters.
    1734: Line exceeds 78 characters.
    1735: Line exceeds 78 characters.
    1736: Line exceeds 78 characters.
    1739: Line exceeds 78 characters.
    1740: 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.
    1750: Line exceeds 78 characters.
    1751: Line exceeds 78 characters.
    1752: Line exceeds 78 characters.
    1753: Line exceeds 78 characters.
    1754: Line exceeds 78 characters.
    1755: Line exceeds 78 characters.
    1756: Line exceeds 78 characters.
    1757: Line exceeds 78 characters.
    1758: Line exceeds 78 characters.
    1759: Line exceeds 78 characters.
    1763: Line exceeds 78 characters.
    1764: Line exceeds 78 characters.
    1765: Line exceeds 78 characters.
    1766: Line exceeds 78 characters.
    1768: Line exceeds 78 characters.
    1769: Line exceeds 78 characters.
    1770: Line exceeds 78 characters.
    1772: Line exceeds 78 characters.
    1773: Line exceeds 78 characters.
    1774: Line exceeds 78 characters.
    1776: Line exceeds 78 characters.
    1777: Line exceeds 78 characters.
    1778: 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.
    1791: Line exceeds 78 characters.
    1792: Line exceeds 78 characters.
    1793: Line exceeds 78 characters.
    1794: Line exceeds 78 characters.
    1795: Line exceeds 78 characters.
    1796: Line exceeds 78 characters.
    1797: Line exceeds 78 characters.
    1798: Line exceeds 78 characters.
    1799: Line exceeds 78 characters.
    1840: Line exceeds 78 characters.
    1841: Line exceeds 78 characters.
    1842: Line exceeds 78 characters.
    1843: Line exceeds 78 characters.
    1847: Line exceeds 78 characters.
    1848: Line exceeds 78 characters.
    1850: Line exceeds 78 characters.
    1851: Line exceeds 78 characters.
    1852: Line exceeds 78 characters.
    1853: Line exceeds 78 characters.
    1854: Line exceeds 78 characters.
    1857: Line exceeds 78 characters.
    1858: Line exceeds 78 characters.
    1859: Line exceeds 78 characters.
    1860: Line exceeds 78 characters.
    1873: Line exceeds 78 characters.
    1877: Line exceeds 78 characters.
    1878: Line exceeds 78 characters.
    1879: Line exceeds 78 characters.
    1880: Line exceeds 78 characters.
    1881: Line exceeds 78 characters.
    1882: Line exceeds 78 characters.
    1890: Line exceeds 78 characters.
    1891: Line exceeds 78 characters.
    1892: Line exceeds 78 characters.
    1894: Line exceeds 78 characters.
    1901: Line exceeds 78 characters.
    1904: Line exceeds 78 characters.
    1905: Line exceeds 78 characters.
    1907: Line exceeds 78 characters.
    1909: Line exceeds 78 characters.
    1912: Line exceeds 78 characters.
    1919: 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.
    1927: Line exceeds 78 characters.
    1928: Line exceeds 78 characters.
    1929: Line exceeds 78 characters.
    1930: Line exceeds 78 characters.
    1931: Line exceeds 78 characters.
    1932: Line exceeds 78 characters.
    1933: Line exceeds 78 characters.
    1934: Line exceeds 78 characters.
    1935: Line exceeds 78 characters.
    1937: Line exceeds 78 characters.
    1942: Line exceeds 78 characters.
    1944: Line exceeds 78 characters.
    1945: Line exceeds 78 characters.
    1946: Line exceeds 78 characters.
    1949: Line exceeds 78 characters.
    1951: Line exceeds 78 characters.
    1952: Line exceeds 78 characters.
    1953: Line exceeds 78 characters.
    1954: Line exceeds 78 characters.
    1955: Line exceeds 78 characters.
    1958: Line exceeds 78 characters.
    1959: Line exceeds 78 characters.
    1960: Line exceeds 78 characters.
    1962: Line exceeds 78 characters.
    1965: Line exceeds 78 characters.
    1966: Line exceeds 78 characters.
    1967: Line exceeds 78 characters.
    1968: Line exceeds 78 characters.
    1969: Line exceeds 78 characters.
    1970: Line exceeds 78 characters.
    1973: Line exceeds 78 characters.
    1974: Line exceeds 78 characters.
    1975: Line exceeds 78 characters.
    1976: Line exceeds 78 characters.
    1977: Line exceeds 78 characters.
    1983: Line exceeds 78 characters.
    1984: Line exceeds 78 characters.
    1985: Line exceeds 78 characters.
    1986: Line exceeds 78 characters.
    1987: Line exceeds 78 characters.
    1988: Line exceeds 78 characters.
    1992: Line exceeds 78 characters.
    2002: Line exceeds 78 characters.
    2003: Line exceeds 78 characters.
    2004: Line exceeds 78 characters.
    2006: Line exceeds 78 characters.
    2010: Line exceeds 78 characters.
    2012: Line exceeds 78 characters.
    2013: Line exceeds 78 characters.
    2014: Line exceeds 78 characters.
    2015: Line exceeds 78 characters.
    2016: Line exceeds 78 characters.
    2018: Line exceeds 78 characters.
    2019: Line exceeds 78 characters.
    2020: Line exceeds 78 characters.
    2021: Line exceeds 78 characters.
    2022: Line exceeds 78 characters.
    2025: Line exceeds 78 characters.
    2026: Line exceeds 78 characters.
    2027: Line exceeds 78 characters.
    2028: Line exceeds 78 characters.
    2031: Line exceeds 78 characters.
    2032: Line exceeds 78 characters.
    2033: Line exceeds 78 characters.
    2034: Line exceeds 78 characters.
    2035: Line exceeds 78 characters.
    2038: Line exceeds 78 characters.
    2039: Line exceeds 78 characters.
    2040: Line exceeds 78 characters.
    2041: Line exceeds 78 characters.
    2044: Line exceeds 78 characters.
    2045: Line exceeds 78 characters.
    2046: Line exceeds 78 characters.
    2047: Line exceeds 78 characters.
    2050: Line exceeds 78 characters.
    2051: Line exceeds 78 characters.
    2053: 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.
    2062: Line exceeds 78 characters.
    2063: 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.
    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.
    2078: 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.
    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.
    2093: Line exceeds 78 characters.
    2094: Line exceeds 78 characters.
    2095: 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.
    2105: Line exceeds 78 characters.
    2106: Line exceeds 78 characters.
    2107: Line exceeds 78 characters.
    2108: Line exceeds 78 characters.
    2109: Line exceeds 78 characters.
    2110: Line exceeds 78 characters.
    2113: Line exceeds 78 characters.
    2114: Line exceeds 78 characters.
    2115: Line exceeds 78 characters.
    2120: Line exceeds 78 characters.
    2121: Line exceeds 78 characters.
    2122: 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.
    2132: Line exceeds 78 characters.
    2133: Line exceeds 78 characters.
    2134: Line exceeds 78 characters.
    2135: 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.
    2145: 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.
    2151: Line exceeds 78 characters.
    2152: Line exceeds 78 characters.
    2153: Line exceeds 78 characters.
    2155: Line exceeds 78 characters.
    2156: Line exceeds 78 characters.
    2157: Line exceeds 78 characters.
    2158: Line exceeds 78 characters.
    2159: Line exceeds 78 characters.
    2163: Line exceeds 78 characters.
    2164: Line exceeds 78 characters.
    2165: Line exceeds 78 characters.
    2179: Line exceeds 78 characters.
    2180: Line exceeds 78 characters.
    2181: Line exceeds 78 characters.
    2185: Line exceeds 78 characters.
    2186: Line exceeds 78 characters.
    2187: Line exceeds 78 characters.
    2190: Line exceeds 78 characters.
    2191: Line exceeds 78 characters.
    2194: Line exceeds 78 characters.
    2195: Line exceeds 78 characters.
    2196: Line exceeds 78 characters.
    2203: Line exceeds 78 characters.
    2204: Line exceeds 78 characters.
    2205: Line exceeds 78 characters.
    2206: Line exceeds 78 characters.
    2211: Line exceeds 78 characters.
    2212: Line exceeds 78 characters.
    2213: Line exceeds 78 characters.
    2216: Line exceeds 78 characters.
    2217: Line exceeds 78 characters.
    2222: Line exceeds 78 characters.
    2223: Line exceeds 78 characters.
    2224: Line exceeds 78 characters.
    2225: Line exceeds 78 characters.
    2226: Line exceeds 78 characters.
    2228: Line exceeds 78 characters.
    2229: Line exceeds 78 characters.
    2230: Line exceeds 78 characters.
    2232: Line exceeds 78 characters.
    2233: 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.
    2241: Line exceeds 78 characters.
    2243: Line exceeds 78 characters.
    2244: Line exceeds 78 characters.
    2245: Line exceeds 78 characters.
    2246: Line exceeds 78 characters.
    2247: Line exceeds 78 characters.
    2248: Line exceeds 78 characters.
    2249: Line exceeds 78 characters.
    2252: Line exceeds 78 characters.
    2254: Line exceeds 78 characters.
    2256: Line exceeds 78 characters.
    2257: Line exceeds 78 characters.
    2258: Line exceeds 78 characters.
    2261: Line exceeds 78 characters.
    2264: 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.
    2274: Line exceeds 78 characters.
    2275: Line exceeds 78 characters.
    2276: Line exceeds 78 characters.
    2277: Line exceeds 78 characters.
    2278: Line exceeds 78 characters.
    2279: Line exceeds 78 characters.
    2281: Line exceeds 78 characters.
    2282: Line exceeds 78 characters.
    2283: Line exceeds 78 characters.
    2284: Line exceeds 78 characters.
    2285: Line exceeds 78 characters.
    2289: Line exceeds 78 characters.
    2293: Line exceeds 78 characters.
    2296: Line exceeds 78 characters.
    2299: Line exceeds 78 characters.
    2300: Line exceeds 78 characters.
    2305: Line exceeds 78 characters.
    2307: Line exceeds 78 characters.
    2310: Line exceeds 78 characters.
    2312: Line exceeds 78 characters.
    2313: Line exceeds 78 characters.
    2314: Line exceeds 78 characters.
    2318: Line exceeds 78 characters.
    2319: Line exceeds 78 characters.
    2321: Line exceeds 78 characters.
    2322: Line exceeds 78 characters.
    2323: Line exceeds 78 characters.
    2324: Line exceeds 78 characters.
    2325: Line exceeds 78 characters.
    2327: Line exceeds 78 characters.
    2328: Line exceeds 78 characters.
    2329: Line exceeds 78 characters.
    2331: Line exceeds 78 characters.
    2332: Line exceeds 78 characters.
    2333: Line exceeds 78 characters.
    2334: Line exceeds 78 characters.
    2335: Line exceeds 78 characters.
    2341: Line exceeds 78 characters.
    2343: Line exceeds 78 characters.
    2345: 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.
    2355: Line exceeds 78 characters.
    2356: Line exceeds 78 characters.
    2357: Line exceeds 78 characters.
    2358: Line exceeds 78 characters.
    2359: Line exceeds 78 characters.
    2361: Line exceeds 78 characters.
    2363: Line exceeds 78 characters.
    2365: Line exceeds 78 characters.
    2367: Line exceeds 78 characters.
    2370: Line exceeds 78 characters.
    2378: Line exceeds 78 characters.
    2383: Line exceeds 78 characters.
    2384: Line exceeds 78 characters.
    2385: Line exceeds 78 characters.
    2391: Line exceeds 78 characters.
    2392: Line exceeds 78 characters.
    2393: Line exceeds 78 characters.
    2394: Line exceeds 78 characters.
    2395: Line exceeds 78 characters.
    2396: Line exceeds 78 characters.
    2397: Line exceeds 78 characters.
    2398: Line exceeds 78 characters.
    2399: Line exceeds 78 characters.
    2403: Line exceeds 78 characters.
    2404: Line exceeds 78 characters.
    2408: Line exceeds 78 characters.
    2409: Line exceeds 78 characters.
    2410: Line exceeds 78 characters.
    2411: Line exceeds 78 characters.
    2412: Line exceeds 78 characters.
    2413: Line exceeds 78 characters.
    2414: Line exceeds 78 characters.
    2415: Line exceeds 78 characters.
    2416: Line exceeds 78 characters.
    2417: Line exceeds 78 characters.
    2418: Line exceeds 78 characters.
    2419: Line exceeds 78 characters.
    2422: Line exceeds 78 characters.
    2424: Line exceeds 78 characters.
    2428: Line exceeds 78 characters.
    2429: Line exceeds 78 characters.
    2430: Line exceeds 78 characters.
    2434: Line exceeds 78 characters.
    2435: Line exceeds 78 characters.
    2436: Line exceeds 78 characters.
    2437: Line exceeds 78 characters.
    2438: Line exceeds 78 characters.
    2439: Line exceeds 78 characters.
    2440: Line exceeds 78 characters.
    2441: Line exceeds 78 characters.
    2443: Line exceeds 78 characters.
    2444: Line exceeds 78 characters.
    2447: Line exceeds 78 characters.
    2449: Line exceeds 78 characters.
    2450: Line exceeds 78 characters.
    2451: Line exceeds 78 characters.
    2452: Line exceeds 78 characters.
    2453: Line exceeds 78 characters.
    2454: Line exceeds 78 characters.
    2455: Line exceeds 78 characters.
    2457: Line exceeds 78 characters.
    2460: Line exceeds 78 characters.
    2462: Line exceeds 78 characters.
    2463: Line exceeds 78 characters.
    2464: Line exceeds 78 characters.
    2465: Line exceeds 78 characters.
    2466: Line exceeds 78 characters.
    2470: Line exceeds 78 characters.
    2472: Line exceeds 78 characters.
    2479: Line exceeds 78 characters.
    2481: Line exceeds 78 characters.
    2483: Line exceeds 78 characters.
    2484: Line exceeds 78 characters.
    2485: Line exceeds 78 characters.
    2489: Line exceeds 78 characters.
    2496: Line exceeds 78 characters.
    2497: Line exceeds 78 characters.
    2498: Line exceeds 78 characters.
    2501: Line exceeds 78 characters.
    2502: Line exceeds 78 characters.
    2503: Line exceeds 78 characters.
    2506: Line exceeds 78 characters.
    2507: Line exceeds 78 characters.
    2508: Line exceeds 78 characters.
    2511: Line exceeds 78 characters.
    2512: Line exceeds 78 characters.
    2513: Line exceeds 78 characters.
    2515: Line exceeds 78 characters.
    2516: Line exceeds 78 characters.
    2518: Line exceeds 78 characters.
    2521: Line exceeds 78 characters.
    2524: Line exceeds 78 characters.
    2525: Line exceeds 78 characters.
    2537: Line exceeds 78 characters.
./database/schema/security.cfg
     730: Line exceeds 78 characters.
     731: Line exceeds 78 characters.
     732: Line exceeds 78 characters.
     758: Line exceeds 78 characters.
     762: Line exceeds 78 characters.
     817: Line exceeds 78 characters.
     830: Line exceeds 78 characters.
     831: 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.
     904: Line exceeds 78 characters.
     905: Line exceeds 78 characters.
     906: Line exceeds 78 characters.
     936: Line exceeds 78 characters.
    1017: Line exceeds 78 characters.
    1027: Line exceeds 78 characters.
    1028: Line exceeds 78 characters.
-- 
https://code.launchpad.net/~danilo/launchpad/bug-720826-db/+merge/51146
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~danilo/launchpad/bug-720826-db into lp:launchpad/db-devel.
=== modified file 'database/schema/comments.sql'
--- database/schema/comments.sql	2011-02-18 20:28:07 +0000
+++ database/schema/comments.sql	2011-02-24 15:26:36 +0000
@@ -291,6 +291,13 @@
 COMMENT ON COLUMN BugNotificationAttachment.bug_notification IS 'The bug notification, to which things should be attached to.';
 
 
+-- BugNotificationFilter
+
+COMMENT ON TABLE BugNotificationFilter IS 'BugSubscriptionFilters that caused BugNotification to be generated.';
+COMMENT ON COLUMN BugNotificationFilter.bug_subscription_filter IS 'A BugSubscriptionFilter that caused a notification to go off.';
+COMMENT ON COLUMN BugNotificationFilter.bug_notification IS 'The bug notification which a filter caused to be emitted.';
+
+
 -- BugNotificationRecipient
 COMMENT ON TABLE BugNotificationRecipient IS 'The recipient for a bug notification.';
 COMMENT ON COLUMN BugNotificationRecipient.bug_notification IS 'The notification this recipient should get.';

=== added file 'database/schema/patch-2208-96-0.sql'
--- database/schema/patch-2208-96-0.sql	1970-01-01 00:00:00 +0000
+++ database/schema/patch-2208-96-0.sql	2011-02-24 15:26:36 +0000
@@ -0,0 +1,18 @@
+-- Copyright 2011 Canonical Ltd.  This software is licensed under the
+-- GNU Affero General Public License version 3 (see the file LICENSE).
+SET client_min_messages=ERROR;
+
+CREATE TABLE BugNotificationFilter (
+    id SERIAL        PRIMARY KEY,
+    bug_notification INTEGER NOT NULL REFERENCES BugNotification(id),
+    bug_subscription_filter
+                     INTEGER NOT NULL REFERENCES BugSubscriptionFilter(id)
+);
+
+CREATE INDEX BugNotificationFilter__bug_notification__idx ON
+  BugNotificationFilter(bug_notification);
+
+CREATE INDEX BugNotificationFilter__bug_subscription_filter__idx ON
+  BugNotificationFilter(bug_subscription_filter);
+
+INSERT INTO LaunchpadDatabaseRevision VALUES (2208, 96, 0);

=== modified file 'database/schema/security.cfg'
--- database/schema/security.cfg	2011-02-23 18:54:19 +0000
+++ database/schema/security.cfg	2011-02-24 15:26:36 +0000
@@ -136,6 +136,7 @@
 public.bugjob                           = SELECT, INSERT, UPDATE, DELETE
 public.bugnomination                    = SELECT, UPDATE
 public.bugnotification                  = SELECT, INSERT, UPDATE, DELETE
+public.bugnotificationfilter            = SELECT, INSERT, UPDATE, DELETE
 public.bugnotificationattachment        = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT, UPDATE, DELETE
 public.bugnotificationrecipientarchive  = SELECT, UPDATE
@@ -570,6 +571,7 @@
 public.bugmessage                       = SELECT, INSERT, UPDATE
 public.bugnomination                    = SELECT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugsubscription                  = SELECT
 public.bugsubscriptionfilter            = SELECT
@@ -665,6 +667,7 @@
 public.bugsubscriptionfilterimportance  = SELECT
 public.bugsubscriptionfiltertag         = SELECT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugtag                           = SELECT
 public.structuralsubscription           = SELECT
@@ -859,6 +862,7 @@
 public.bugsubscriptionfilterimportance  = SELECT
 public.bugsubscriptionfiltertag         = SELECT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugnomination                    = SELECT
 public.bugtag                           = SELECT
@@ -1308,6 +1312,7 @@
 public.bugsubscriptionfilterimportance  = SELECT
 public.bugsubscriptionfiltertag         = SELECT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugnomination                    = SELECT
 public.bugtag                           = SELECT
@@ -1417,6 +1422,7 @@
 public.bugsubscriptionfilterimportance  = SELECT
 public.bugsubscriptionfiltertag         = SELECT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugnomination                    = SELECT
 public.bugtag                           = SELECT
@@ -1482,6 +1488,7 @@
 public.archivearch                      = SELECT
 public.bugattachment                    = SELECT
 public.bugnotification                  = SELECT, INSERT, UPDATE
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationrecipient         = SELECT, INSERT, UPDATE
 public.bugsubscription                  = SELECT, INSERT
 public.bugsubscriptionfilter            = SELECT, INSERT
@@ -1717,6 +1724,7 @@
 public.bugsubscriptionfilterimportance  = SELECT, INSERT
 public.bugsubscriptionfiltertag         = SELECT, INSERT
 public.bugnotification                  = SELECT, INSERT
+public.bugnotificationfilter            = SELECT, INSERT
 public.bugnotificationattachment        = SELECT
 public.bugnotificationrecipient         = SELECT, INSERT
 public.bugnomination                    = SELECT, INSERT, UPDATE
@@ -2052,6 +2060,7 @@
 public.bugaffectsperson                 = SELECT
 public.bugmessage                       = SELECT, UPDATE
 public.bugnotification                  = SELECT, DELETE
+public.bugnotificationfilter            = SELECT, DELETE
 public.bugnotificationrecipientarchive  = SELECT
 public.bugtag                           = SELECT
 public.bugwatch                         = SELECT, UPDATE

=== modified file 'lib/lp/bugs/interfaces/bugnotification.py'
--- lib/lp/bugs/interfaces/bugnotification.py	2011-02-16 22:34:58 +0000
+++ lib/lp/bugs/interfaces/bugnotification.py	2011-02-24 15:26:36 +0000
@@ -8,10 +8,12 @@
 __metaclass__ = type
 __all__ = [
     'IBugNotification',
+    'IBugNotificationFilter',
+    'IBugNotificationRecipient',
     'IBugNotificationSet',
-    'IBugNotificationRecipient',
     ]
 
+from lazr.restful.fields import Reference
 from zope.interface import (
     Attribute,
     Interface,
@@ -20,11 +22,13 @@
     Bool,
     Choice,
     Datetime,
+    Int,
     TextLine,
     )
 
 from canonical.launchpad import _
 from lp.bugs.enum import BugNotificationStatus
+from lp.bugs.interfaces.bugsubscriptionfilter import IBugSubscriptionFilter
 from lp.registry.interfaces.role import IHasOwner
 from lp.services.fields import BugField
 
@@ -60,6 +64,11 @@
             description=_(
                 "The status of this bug notification."),
             )
+    bug_filters = Attribute(
+        "List of bug filters that caused this notification.")
+
+    def getFiltersByRecipient(person):
+        """Return filters for a particular recipient."""
 
 
 class IBugNotificationSet(Interface):
@@ -90,3 +99,18 @@
     reason_body = TextLine(
         title=_('Reason body'),
         description=_("The reason for this notification."))
+
+
+class IBugNotificationFilter(Interface):
+    """`BugSubscriptionFilter` that generated a bug notification."""
+    id = Int(required=True, readonly=True)
+
+    bug_notification = Reference(
+        IBugNotification,
+        title=_("Bug notification"),
+        required=True, readonly=True)
+
+    bug_subscription_filter = Reference(
+        IBugSubscriptionFilter,
+        title=_("Bug subscription filter"),
+        required=True, readonly=True)

=== modified file 'lib/lp/bugs/model/bugnotification.py'
--- lib/lp/bugs/model/bugnotification.py	2011-02-16 22:34:58 +0000
+++ lib/lp/bugs/model/bugnotification.py	2011-02-24 15:26:36 +0000
@@ -8,6 +8,7 @@
 __metaclass__ = type
 __all__ = [
     'BugNotification',
+    'BugNotificationFilter',
     'BugNotificationRecipient',
     'BugNotificationSet',
     ]
@@ -24,6 +25,10 @@
     StringCol,
     )
 from storm.store import Store
+from storm.locals import (
+    Int,
+    Reference,
+    )
 from zope.interface import implements
 
 from canonical.config import config
@@ -33,12 +38,18 @@
     SQLBase,
     sqlvalues,
     )
+from canonical.launchpad.interfaces.lpstorm import IStore
 from lp.bugs.enum import BugNotificationStatus
 from lp.bugs.interfaces.bugnotification import (
     IBugNotification,
+    IBugNotificationFilter,
     IBugNotificationRecipient,
     IBugNotificationSet,
     )
+from lp.bugs.model.bugsubscriptionfilter import BugSubscriptionFilter
+from lp.bugs.model.structuralsubscription import StructuralSubscription
+from lp.registry.model.teammembership import TeamParticipation
+from lp.services.database.stormbase import StormBase
 
 
 class BugNotification(SQLBase):
@@ -62,6 +73,27 @@
         return BugNotificationRecipient.selectBy(
             bug_notification=self, orderBy='id')
 
+    @property
+    def bug_filters(self):
+        """See `IStructuralSubscription`."""
+        return IStore(BugSubscriptionFilter).find(
+            BugSubscriptionFilter,
+            (BugSubscriptionFilter.id ==
+             BugNotificationFilter.bug_subscription_filter_id),
+            BugNotificationFilter.bug_notification == self)
+
+    def getFiltersByRecipient(self, recipient):
+        """See `IBugNotification`."""
+        return IStore(BugSubscriptionFilter).find(
+            BugSubscriptionFilter,
+            (BugSubscriptionFilter.id ==
+             BugNotificationFilter.bug_subscription_filter_id),
+            BugNotificationFilter.bug_notification == self,
+            (BugSubscriptionFilter.structural_subscription_id ==
+             StructuralSubscription.id),
+            TeamParticipation.personID == recipient.id,
+            TeamParticipation.teamID == StructuralSubscription.subscriberID)
+
 
 class BugNotificationSet:
     """A set of bug notifications."""
@@ -137,3 +169,26 @@
         dbName='person', notNull=True, foreignKey='Person')
     reason_header = StringCol(dbName='reason_header', notNull=True)
     reason_body = StringCol(dbName='reason_body', notNull=True)
+
+
+class BugNotificationFilter(StormBase):
+    """See `IBugNotificationFilter`."""
+    implements(IBugNotificationFilter)
+
+    __storm_table__ = "BugNotificationFilter"
+
+    def __init__(self, bug_notification, bug_subscription_filter):
+        self.bug_notification = bug_notification
+        self.bug_subscription_filter = bug_subscription_filter
+
+    id = Int(primary=True)
+
+    bug_notification_id = Int(
+        "bug_notification", allow_none=False)
+    bug_notification = Reference(
+        bug_notification_id, "BugNotification.id")
+
+    bug_subscription_filter_id = Int(
+        "bug_subscription_filter", allow_none=False)
+    bug_subscription_filter = Reference(
+        bug_subscription_filter_id, "BugSubscriptionFilter.id")

=== modified file 'lib/lp/bugs/tests/test_bugnotification.py'
--- lib/lp/bugs/tests/test_bugnotification.py	2011-02-16 14:31:33 +0000
+++ lib/lp/bugs/tests/test_bugnotification.py	2011-02-24 15:26:36 +0000
@@ -28,6 +28,7 @@
     )
 from lp.bugs.model.bugnotification import (
     BugNotification,
+    BugNotificationFilter,
     BugNotificationSet,
     )
 from lp.testing import TestCaseWithFactory
@@ -136,6 +137,91 @@
             [mail['To'] for mail in pop_notifications()])
 
 
+class TestNotificationsLinkToFilters(TestCaseWithFactory):
+    """Ensure link to bug subscription filters works from notifications."""
+
+    layer = LaunchpadZopelessLayer
+
+    def setUp(self):
+        super(TestNotificationsLinkToFilters, self).setUp()
+        self.bug = self.factory.makeBug()
+        message = self.factory.makeMessage()
+        self.notification = BugNotification(
+            message=message, activity=None, bug=self.bug, is_comment=False,
+            date_emailed=None)
+
+    def test_bug_filters_empty(self):
+        # When there are no linked bug filters, it returns a ResultSet
+        # with no entries.
+        self.assertTrue(self.notification.bug_filters.is_empty())
+
+    def test_bug_filters_single(self):
+        # With a linked BugSubscriptionFilter, it is returned.
+        subscriber=self.factory.makePerson()
+        subscription = self.bug.default_bugtask.target.addSubscription(
+            subscriber, subscriber)
+        bug_filter = subscription.newBugFilter()
+        BugNotificationFilter(
+            bug_notification=self.notification,
+            bug_subscription_filter=bug_filter)
+
+        self.assertContentEqual([bug_filter],
+                                self.notification.bug_filters)
+
+    def test_bug_filters_multiple(self):
+        # We can have more than one filter matched up with a single
+        # notification.
+        subscriber=self.factory.makePerson()
+        subscription = self.bug.default_bugtask.target.addSubscription(
+            subscriber, subscriber)
+        bug_filter1 = subscription.newBugFilter()
+        bug_filter2 = subscription.newBugFilter()
+        BugNotificationFilter(
+            bug_notification=self.notification,
+            bug_subscription_filter=bug_filter1)
+        BugNotificationFilter(
+            bug_notification=self.notification,
+            bug_subscription_filter=bug_filter2)
+
+        self.assertContentEqual([bug_filter1, bug_filter2],
+                                self.notification.bug_filters)
+
+    def test_getFiltersByRecipient_empty(self):
+        # When there are no linked bug filters, it returns a ResultSet
+        # with no entries.
+        subscriber = self.factory.makePerson()
+        self.assertTrue(
+            self.notification.getFiltersByRecipient(subscriber).is_empty())
+
+    def test_getFiltersByRecipient_other_persons(self):
+        # When there are no bug filters for other recipients,
+        # it returns a ResultSet with no entries.
+        recipient = self.factory.makePerson()
+        subscriber = self.factory.makePerson()
+        subscription = self.bug.default_bugtask.target.addSubscription(
+            subscriber, subscriber)
+        bug_filter = subscription.newBugFilter()
+        BugNotificationFilter(
+            bug_notification=self.notification,
+            bug_subscription_filter=bug_filter)
+        self.assertTrue(
+            self.notification.getFiltersByRecipient(recipient).is_empty())
+
+    def test_getFiltersByRecipient_match(self):
+        # When there are no bug filters for other recipients,
+        # it returns a ResultSet with no entries.
+        subscriber = self.factory.makePerson()
+        subscription = self.bug.default_bugtask.target.addSubscription(
+            subscriber, subscriber)
+        bug_filter = subscription.newBugFilter()
+        BugNotificationFilter(
+            bug_notification=self.notification,
+            bug_subscription_filter=bug_filter)
+        self.assertContentEqual(
+            [bug_filter],
+            self.notification.getFiltersByRecipient(subscriber))
+
+
 class TestNotificationProcessingWithoutRecipients(TestCaseWithFactory):
     """Adding notificatons without any recipients does not cause any harm.