[Bps-public-commit] SD branch, debbugs, updated. 0.74-53-g60b1b2a
Christine Spang
spang at bestpractical.com
Sat Aug 7 00:29:00 EDT 2010
The branch, debbugs has been updated
discards ff76bd5055038b764a4a38c238e8d895fd714f92 (commit)
discards 72f64d20a5cbfa44b8e48a1c8e5b3f8c5efdc1f3 (commit)
discards 4c905b151500571b38945d2d3e44a944ee31627c (commit)
discards f582f341ada6b4af86adab3e5d631e0dcc2807a2 (commit)
via 60b1b2a011b139fb78b798a97993e8b254b8ce63 (commit)
via 4b923cb34c2578f837d995847897d38bd12607e3 (commit)
via 14dd37ebfabd3c973d83b119fdc05b7ee80f036a (commit)
via 1cbe1ac3cf67225d1f64c2fd9d781bf641e30cd4 (commit)
via 3f84da7dc72997a80a9428f0f716892dc7a2c12d (commit)
via 1311d4ed8aaccfcebcebee31bb9e1bcbdbf12417 (commit)
via 5a9fdaef1630b31d67b3cbab16637e24ddb3ff1c (commit)
via f2f887c4a0330dd903d2f299af3dd40ef76d960e (commit)
via 00a04f9b894b34d52be2f18e37e30f28b7d9fb2c (commit)
via 354db4babff7b855790e213d097fb1884ccbac56 (commit)
via efaf967772189b44bb4a82141ef2190f0cd67ccc (commit)
via 62b3400cbd304b2822d00e6b7a62f24f8c536fdb (commit)
via e30b0597a3be2b23c51aa75b18549f1181b7618c (commit)
via f43ff3c0023831a68d3ca3845d5fbc0bbda6061c (commit)
via e3ad8f6a9d2b60a27af7decac8c1465b8b024b88 (commit)
via 33e2f669d0ed5ead1e3f68cdd8cc54a6ed100967 (commit)
via f141297bae761d030ab21eee3a755aa9d6b6c0e8 (commit)
via 925869ba6c0b8997effa043634c747dbe33443d3 (commit)
via cc931ee44bd1128a1f97d0060cf6305377d85771 (commit)
via 40a0a98ea7f523f60f16324d73324f06f52135c1 (commit)
via d77ab26d82d0a3ff2dfe772a75a0bb903cc3b48f (commit)
via 6506454146dba16f9339ef75cca3658b11264bec (commit)
via f081ec0357efbeaed4cec2b2ae656c08b93c6070 (commit)
via c2f4aed1a60fb0657eeb08fb23c5bd11b6742fa5 (commit)
via 344b0841bd3c6802bea32ff2903b7c76ce82ca67 (commit)
via cf53960a8088887326bc822dc83769fa01aca3bf (commit)
via 9eee276401ecd84f6f3b3e9a7638fbffb492a0da (commit)
via d6d404987ea0d309beba2c39b7185d48b89a7219 (commit)
via 2f5eb9abc97bfe17567e8eec347f0e55584fe8a8 (commit)
via 6ec433d0d422c2787602d517f93bd768586419c0 (commit)
via a815d197a452b0334ac99b38634cdc11cfe184a2 (commit)
via a035b4c1e1709476ba4eb840ad8e9c42effa680c (commit)
via 3a41d9c71c4103136afb58e33fc2d26f3ab701d3 (commit)
via 1e2cfc9d467365125964c2d40d839df6f3c6b79a (commit)
via fc26ee6b21f617cac67549717b792065c64f3601 (commit)
via 8ab4f3c558c2a7e5bbcbdce88da911bb17d23cc8 (commit)
via 92f4f8ea49f2367e1dd3948d2d62874f888ae790 (commit)
via dd0107f736fc025bdc86ee1627ee51cb6e92a6cd (commit)
via d0b3d1ca5f88d3231b7fc395bccf7d9eeac7bd54 (commit)
via 14b4daf54754968fdd0d918b1a164e45f344bdb8 (commit)
via 7aa24740e2aab14219b48e17b6f60cedd3db319b (commit)
via 6f9cc6a9c4cdf1ac37f53ff5ec9c3fec4d2343c9 (commit)
via e47c982c87a836762c6fee29864f8c4e71a32bbf (commit)
via 127b6c462b05f8fefff7c9a7be2ac9e17e410422 (commit)
via b8b7de9cd8bb3d535acb64a60c83b0e0f35bfa6b (commit)
via 657480943012211ac0d22e22480746eaf8718199 (commit)
via df20d4c354c536d0f0dbfc42b16585715f82f7e5 (commit)
via f6382766737c7d96ec7c6c286a94b9bbe8d90ab0 (commit)
via 21b642339593273e7be3ab9b6eb9ba429f27ba0e (commit)
via e952ce11ccb158108ff9ae32544d1964b9f5329e (commit)
via 933ae5a5dd84fc324f4a430576fe2af22e0d81f8 (commit)
via 5959c66f0e956a5e1784baa184beec5aaa9b5a3f (commit)
via ac0f5019a971e18fab04b3b190e357af097b4752 (commit)
via 734062f1a8daafbefe9452fabfca39f8fde99e0c (commit)
via 13e6fa7503911fc897bbed2194e08d1313a9528b (commit)
via 952e31e8e441b6ec38f00ed4a694f8208802d4f4 (commit)
via d9c7be22a9c07e156be68c73bdd301c6753adbc7 (commit)
via 7afed64ed38eec5cee98567f4b879550574b6790 (commit)
via 16d6a203b56c6e95ba22c03841c08def34eb84b8 (commit)
via 0cf0f4946332eed4c8d275930826b7027c07464e (commit)
via d673e024d37c1e6f157bd60dee313d7ea4674025 (commit)
via 03a82b8fe04a8318966994fe756cc619e931d393 (commit)
via c6e4a12bbf134cd814bd170e429106793dc128b9 (commit)
via 5c9f0476c78d97554325d4264fada915d05a6026 (commit)
via 4704b26b53e46be83128098204dba771b7bb2f0b (commit)
via 069619d34ffce7500e6679ba8a85a7175f3a6198 (commit)
via 2747ad9f6e2a1464e4f9c0e829d93ffcdd847f38 (commit)
via ec5c78d9b2b4f0e0aff59d62059a07d09241eccc (commit)
via 8a73b7eee07ad9d8ea44273960a67cebfdbe6e93 (commit)
via dc2c41ce0117d5c7e1d249d0a3eaa963d41f8815 (commit)
via db3e5c97b37142c5f6d6a6a52d4263a89d353663 (commit)
via 47ea794bfa20efa5df16b3a6b367f2e2930ca867 (commit)
via 56847fb52dd7519f379cec161b64959dbe2018d9 (commit)
via 95ef7bbffb7163d72a1ba851410383d6d592cd1e (commit)
via ea470c12b37b882dc27f04d716b10edd1eafb4f8 (commit)
via 6916fc9aca20b6b6e7015322938fe36356695447 (commit)
via 0f1546880cd709a57c1ce8a3b37ce84796c31e90 (commit)
via 6f6d231fc7adb368c36b04ce9312e4cf0bf97671 (commit)
via 0a6b5225a76a875c198b4829db443e91c9b3f5eb (commit)
via fa39770485fe48ef3d8c22ec0a46ce93de4eb4ce (commit)
via 04b6eaa47d1c6b8cad57b6681a934f41b2f2ccbc (commit)
via 99a438df879476209cb732004e8664a3d41f63a1 (commit)
via 93b1d22638b8852f858e8b9787ce734b0fe1d9e0 (commit)
via ad32aa51302cc200ae4910fd0c161ca436f92359 (commit)
via bd07bb5f13e50f36eff1b06154da26870ae35bc5 (commit)
via 8e0432d8059e90445b41673c1951c904a7c4c107 (commit)
via aaa76462ea4362fe9dcb76d5099853f8fd1104a0 (commit)
via 01245b709ebead68501f83d41ac05d960f1603d3 (commit)
via 77593a769d0616b40da7003e29ea8daad9462197 (commit)
via c4d4212edaa19f2543246d5814cb5349c9f32394 (commit)
via 288526b4433e717974cbf4386b47ec656335e0f1 (commit)
via 4f658f5a30e4922ba2c42e01b642763b01a12fa1 (commit)
via e0c6bf70a5d617f549db67c51b158962d89eb0bd (commit)
via b3bf66eadbcf68beee54b68a0dceb5e13d2ccf5f (commit)
via ac59d47435352183a8e7d6606f50677665b4d7f6 (commit)
via 0d27c86dee4085b8340211f957ee67631e53b0e9 (commit)
via 9a2896ec0243179d0c4c4a91e74b484eee25a5db (commit)
via 642968b1136e4945ccede9ce64d90a84470cd611 (commit)
via b34d29e3257a400b44686ea9c78eaccf91161e41 (commit)
via 300ef67c93bc858c077d96c35950e9255cc6e405 (commit)
via 304feb85bddd7dc0ac19bd6e24a0a27273ece504 (commit)
via 6e6411f71b746d46c5af7d5062bfd225cf876d86 (commit)
via 2b7c577ab4c96c291860ba001b075d823beb5a43 (commit)
via eaec8a43e63e5dc9c26637059dd778a533e46050 (commit)
via 4b7a0908609f51aba6b57625fdb174a0576901f1 (commit)
via 4769f5aef694ead6018e328ba48e24b2606be132 (commit)
via b3af3f07bce9a058fce3ceba4c2f3f8a0500f9ad (commit)
via a24bafedc14268fcdc3a1f62f4bf8b4f9962fb98 (commit)
via d3bb97004d18544db272f7e40137fe94ea7eb2d9 (commit)
via fd9973cf52c27d7aaf806f7924e271fcbcdf7000 (commit)
via b4a3a4725682e3a11f70eeb6c80aa40bc4d12788 (commit)
via 5ca458f9445831b4d7a2569742b5720fab6757c2 (commit)
via e5d18062eeeaa00aaab8b06a35ee2302fedc26d6 (commit)
via 209e982ebdb2ab6283074007d39f546ac9e28827 (commit)
via de37c2b45a9f9877b65906e93c0cf2defc404360 (commit)
via f02bcca6ccc39d9355b277cead100da74709f0e9 (commit)
via 006f918514d6241f1e06b171dc933d346fc90c97 (commit)
via 50c2fbabc83196882adf4a5eb722ac78e6f222fc (commit)
via bf7008a0599a9ba3afc91d2f59b2818cdc47e02a (commit)
via 69509b20dfd41a3d42aa7223002b2fe03cbf2076 (commit)
via 3b1959ddb2f0cfdba6fde5dbdc996cd4cd58454e (commit)
via 03af7c80233cbac7f11a8fa3252afb6c67a80dbc (commit)
via 50e75ff3b8eb57f55ecb263134258ed1efc6fab1 (commit)
via 74a4b300904e6defe1ae2ac419d05cc9855cad5b (commit)
via 32a70545d98457086757575596a4025816600746 (commit)
via 64a7d9703c5c65b18a8fc3d95996f3b11fac961d (commit)
via 18bcee482e3ba3c08a1a27186656bc1038d52ab9 (commit)
via c9661c0249206a6d001bb7c956add99dcaa223e9 (commit)
via 954c863776b34060c20cf191e09e671e2a8e94a6 (commit)
via b3cc86338aa96d7e5d5728f1df084f143923db07 (commit)
via e69f08d6d1b653390e9d7cd1947bb9a9cb6fedca (commit)
via 696f19491e5a557b39d98e1d773f53716914d8ec (commit)
via 67a73323e34a9015ead1445fe09b5cbe28203978 (commit)
via 08e358b1250973ac61baf99e3fef44a1f976f1e6 (commit)
via 97ac71441568c508b5f67aee2a61b82db23fd9d8 (commit)
via 2ac5ef9eb36ae10f9f4ce8599206ae193c29db14 (commit)
via 6357a0f6e3b2bed58fa5378c10067cca6f56fd67 (commit)
via 967157c51186cdd0d93e05ccc00c8fa33926a8d0 (commit)
via 7aa500791846dd7be650871c952c6518e344752b (commit)
via 1757aee005519591008033812ab5a45b99c34de7 (commit)
via d83c23dd2cabeca9bdccaf0391cf5e8b86c770ec (commit)
via e58130de8bf95ebdbcca3a690052d7ec67a7fc5b (commit)
via a2d60c44c3c42dd55dcf3bafd18799db22246bf9 (commit)
via e26cabb4039eabad2e9dce21cb706ae71764b1b6 (commit)
via e994577f7dc73c775abbcadf2fd87d798022114b (commit)
via a3dcdf23a1f5bf05d2a42705929084e1ef109d49 (commit)
via 64fd08c2dea0819a30179a168ceebb8f19a4625e (commit)
via fce493ca7ac6129493ea3a38ebece5233f14423e (commit)
via 03d81ccb794e7ba05ddf3570ffdb1f3d9ef94d5f (commit)
via 461c879eb045b95b18210e4367b0b402aaf3699a (commit)
via c02ca2731bbf1c9dd0626791cafa6089d0e79294 (commit)
via 23eb7285417f73c8d5d22a9b9d60e32c19c3e42c (commit)
via 5b1036fa4b4535d62f780860e107d66a01ad13a5 (commit)
via 667a6c163b6c2c3f3c0ca208f3e6be93d8537ac2 (commit)
via 47fa33139a05c90ae5dc646afe8e34eb78137c6a (commit)
via bcaecc8970596d25b6fd71999d120b092943d48d (commit)
via d0f4da82acf88db9c5538fcacd167c190d30c565 (commit)
via b182620ae89fedce08fb12151aaeeeb20c3da053 (commit)
via 3ca1bc96cdb3a204880414dab2dbedc26696202a (commit)
via 31b9e47939323ed14123ff90d6bb269593a5662d (commit)
via a75685711fd27baa0a1c83549c632a571419a6a3 (commit)
via d60d970b3b140adfa42e719be86513ac531d382b (commit)
via f3c6ac313c3f948bfb5043250ed0ea981cbee945 (commit)
via 2929b6cba268e349d9d62f9d46db49388e94e8fa (commit)
via 7a5545a8b8f3e0e1d1d78c62e906e9d7841a80f5 (commit)
via 28d0ac886eb3937cb8984699b85fd44cef9583e7 (commit)
via 63979a4ec9204f4cf2adfabededcb78ecb03e0e3 (commit)
via 03cc191bb8f909bad37beab9e7fb56a7b7d1460b (commit)
via 05dd4fd5a5b54a122ef83a2b125e103c2e5723b5 (commit)
via 0d7a4aada69fa9c07ee2bb843deda51a386adff4 (commit)
via 234e43e269c4e941957007de2c1714eed7f230e3 (commit)
via 4f04016383d1d36a54757bf2be5dbfa2807f2234 (commit)
via 2b57ba33170e8356a51d68f042c6f26872636516 (commit)
via 831f58dca13dff2e2aa54f4ac1c597a7e2534948 (commit)
via 9b5d23dea497dd81e7744a18c774fe3c15cd4e00 (commit)
via 715dea1d10d35be32b612bf4ca0f28ce60cfe812 (commit)
via 4097e064500fc8862b707857ff2f297bcc5b0ab5 (commit)
via bf5fc43724512b0f28c5ed7c8a7183a097f11fbe (commit)
via d02accac84c588b99422aa602f40e2ee1b6228da (commit)
via d15e489bbb0aec5721fa0b50097f42f186f5e636 (commit)
via 6f19c6323b7ff68fa8780c061e3bb96882307126 (commit)
via 4b0b745c0c98ef60e78f64183ce4ae5498a85d25 (commit)
via 52f9716da5eaf8d8f27e2a4ba2c808027efc3289 (commit)
via 97c35f96635de1e88a7c67a629a9aba7fe1af113 (commit)
via fa5c5d6ce51c08eaa50f5c8c806bc956dcf78e86 (commit)
via 21e30bf244bcacdff7cd83aeaa3ab59b2f2c3c78 (commit)
via 602082a0b0f68318067d1b5cab69aeaee40eb7d2 (commit)
via be1fb10a523b3b04ad3277aebdd25724cc9c163d (commit)
via 4ea3da43f2dc7dbdb30bdc21cfd6c1124660b867 (commit)
via 686b9fbfc794cf210ea78ad77261741b63a79afa (commit)
via 1aeff8d9beb33221174253fca5e11a4d9d0748a8 (commit)
via 98050315fdbee52f7bdacdce2fe015dd4309142e (commit)
via 653cbdcbb615a279daf151c926a3f743be986604 (commit)
via fab3b2841bee6a0520ce75d1aaa4f29f5bb17edd (commit)
via 121113ad0a04b919bf546c611dc14206a0562a7e (commit)
via ac045920008b57d06ad52a078e027da40e0d1c45 (commit)
via ba9e1e4f6f52257db25fed719c90d9a1a98bdb52 (commit)
via cc3971743306c56009874ccd751bf0a3f5bdcb7d (commit)
via 61ea767128fea0ef8f1281f1db1b75ef62011b3b (commit)
via 2196603acae32970dcf47603afb0bd6630343fd0 (commit)
via 16b8aabec64ff51006e82beadb6f7bbd524d8e61 (commit)
via eba358f0532a8136677306decaf6c51e2c446a21 (commit)
via 2453aa8913a9651a5c13a9dd3787bc58f16ff4f0 (commit)
via 84cb81e3a2286cb6c9d9409c355abdeeba153098 (commit)
via 8262b48c186e1fba806a84b4c987511e224aeed7 (commit)
via 3d369fa1c0ccc678c54f9f1f9661454e6b722731 (commit)
via c84c991f838dc6c4cd0e2c46a6ca9a92cdf03b2d (commit)
via 233ac8e5ba0061753966f0ee9a9f9d292a63c7d8 (commit)
via 77ce50e93b87ff3efe9028b3e197b974e2b190cc (commit)
via f744573a696e658b08fb7a651c40fb3a207d5737 (commit)
via fe241e27b7ef64b2dff0586c6ce287e18537807e (commit)
via d5f02b79c73b7f71d4cabdc9210bb37b05494c86 (commit)
via cbc820d18f7c39d002950976bb236b7b2ec58991 (commit)
via 83d39a83be02f6b5a41e2f54c7a4dae15e2ba246 (commit)
via a2cdc75db814f41d9730e26fa87249af3a3edbf9 (commit)
via 9c217b05313e68a14d97998022dc9c3c833e9ccf (commit)
via 8686622a6d6bcd6079a3c16684d42424c693bb73 (commit)
via fd7aeed7984c928f06d1c9e6ab386bf347f03779 (commit)
via 0cd4e635edc0a5b42412ad4cfdfcd8f5d4696fdc (commit)
via 8af979ee6f9df5c449bec83a1a2bc1856c33b418 (commit)
via d12ea619736ba858799831af439c741a04c1134a (commit)
via c60c11f6de4ec36548af8de48be08bfe900454bf (commit)
via abf990efc2578eb9715c67e818754f0a743238f9 (commit)
via 47b999d0e4c971867748dd079bcb11705e029217 (commit)
via 6ea9d6bb28ee41b9630a175cbfb5015722086393 (commit)
via 994cbcd76a4c177a572ccf83aeb095d8d4164785 (commit)
via dfb47f3098dc47a228620df53398dafa1be87c71 (commit)
via d2c018dc60d3c7de12a3684527fda1dd6d13d97f (commit)
via d5025c4568b8f683f50d6d894193c3122a0e73b0 (commit)
via 8092592607b0927aaa31ab96847efbfcbd083936 (commit)
via 3893c4689a0cb9b2219400a7d790eb37b1bf5812 (commit)
via 75b907550fcabf9e803ce4459fe17853e040360a (commit)
via 4e1d982122c0c0fc9a036d2a191f86225ce55d9e (commit)
via e0d4f670b42e5bfb2e13a3631af3359977ab4652 (commit)
via d3f6758b9c0807b726b1572adc2c319b3be08c91 (commit)
via d9f6fd26209c76c3da5dc527301c6ec7b6e60568 (commit)
via c92489b0302829cb4efbfb5e8622a01428b7412a (commit)
via ce3537f9096e41fbb4e2ca5bcc213e36768d30c7 (commit)
via 9e2a901b33fe88e94d8ba9b88459bb2281535c9e (commit)
via 8eefeff3c6b8375045c11d9447008c8ca3c1dfde (commit)
via e567c8470a5045b430ecf523cf2abc5a5caf699f (commit)
via 97fced574f7af4be040fca959f798894ca6eff7e (commit)
via 8b30d09c3547fef6b04e397154ae69e024a1025f (commit)
via 3573e587fd426ec74ba100d5a94805cf64bc498e (commit)
via b7cf5a3566ac3e58caeee1cded90d702b23cda38 (commit)
via 0b4d907bbabb068ae3ccb1f612acfb3b484fa96d (commit)
via 8ac8f7166b748313c669fc52f37cfd97df46ca4b (commit)
via 02289830494b5e751ff6999bd80d8a679e2afd9b (commit)
via 8fcb31f9602f8d54efd2af6b25c409e69299d8fc (commit)
via 2e691b99569c6431bdacc6e8cd2eac553efbfabe (commit)
via 7753d74636de3681c639debf49edd9c92682f3f8 (commit)
via 21696337a9ef28e6dd5e2ec519bc2508f25d870b (commit)
via 7946fb4af3fa2dd230108c66c595a66663d34c9b (commit)
via 7a993df98b40970525e83ec8f7965fcb7ccbfa6b (commit)
via fe48b331e95b28b61916aa0c4fd769b7069ef2a7 (commit)
via 47780a294cc68c10217ac5a7eaee5f9f47215862 (commit)
via 4a7bb005ce6e0cd50737a8893cab492f62f52dac (commit)
via bc56d697174c1ffb3f6fe8eff71303b7c1a9274a (commit)
via 81ce3ee562963647e7cb0e893cae2a0c7d57b61d (commit)
via 426b4ff23b20c434291f9f3e5a18dbb483eb0963 (commit)
via c03378a8201dabe73a0f56fda4d705169cd7de28 (commit)
via d895e8502b5635a79cd974fb53d2a05d84c0d99f (commit)
via a17e63284f41ebe19900943c524612927010d00e (commit)
via e9935402d19dc1b9f6b1890b2182b49cc3ef46d5 (commit)
via da8b6b77990621edbac8ed91e11841d96b92c82e (commit)
via c5fb6bdee1001711f7114d908eff8363ab4f2639 (commit)
via d3ff5b53308276a700b6c74b910611c034df9c5e (commit)
via d9d5d205e9af1d2a01aa5e3c9dfa619d2f7ce20e (commit)
via 7cafd88b8c9268c2f1cba4c2fc839176281e94dd (commit)
via 82861066066ac51d8c947a5c128b5fbe1982ec9e (commit)
via f48aca6dea4f753a89528ed122bfb1abda235fc0 (commit)
via 42e88417114f719ddceb56b07cdd3b5029a33de9 (commit)
via 72f08d65d88b800bca837c56f0061890f76d7af3 (commit)
via be94243d53c94600b8c334de940979a3b4957fbd (commit)
via 789b06e45e18068cee1ebcdc25f45869a6cb7463 (commit)
via d3eca042c433951ec45fe89e893535a5902a6851 (commit)
via 7300f47adf0fa6c709105a4e6a76e658180c4362 (commit)
via 3554472eecd44ea3799b23dda09eb438ec81cca0 (commit)
via 395333503b67d565e0f6611a2a61436b6723fe15 (commit)
via dc543e9025bd00ead02987240a4b82f384867bfd (commit)
via 1bee4fd1068661c8364b1d5293ba62b12c67e161 (commit)
via fd8ecfbb884800ac8b8175c3ddbe789d1e277b76 (commit)
via 0cf13ad324b39026f4273451f9ec93620a55dcca (commit)
via a82a51e31aaef6348a2f6fd74b19f1615cff8274 (commit)
via 15aafc4ae55bb6f8d32455102cf6342953427e17 (commit)
via bea95c69603837dc140e34d06773ae33742c7644 (commit)
via 73763bcf220d16513fb3999110dec5545b89df6f (commit)
via 12736f2bb1a27fdd5adeab7f3083e5900287e65c (commit)
via 58868c32e5dc978c6014769c195f87599291247c (commit)
via 2c7380eb4f254de855a3f0d8aed5eb9ba02dc71c (commit)
via bf250814eb24b08b887ea20280c6b107d9610643 (commit)
via e0a3e2e43c8134176beb1a4137c00ac1c773c6ad (commit)
via 355ed5828b3b5da51dd3cf9ee09434f18729a407 (commit)
via 40080f5ce4697bb4425fdcda2baa1bc286b705ee (commit)
via 8c01ba88e44b0170a93b2f93f04e529db48ec7fc (commit)
via f55c04f93606dab43fd9dc9b99c695c2abbf651e (commit)
via bdfa44778b5ca8caf2c831900bff07f3f89f682a (commit)
via b579dd8a176e9a787707ec63df888b3c6ae88f38 (commit)
via ac30941b6d71769156fdabb3cd1bd315d943d1a5 (commit)
via a2bf82f2d000b31c782482b4a0497b3f2b166a63 (commit)
via bcac84ef7ac2e31bee5c8f7ed471c9beb986f162 (commit)
via f95cff9f028b8b13cc8a67e59e84b7f149ae567a (commit)
via eaf67947af885b073cc2c0ba01c1284ecd547ddc (commit)
via 6929bf3b893c05b960ed9adac0b22b3a4ac1e15c (commit)
via c0392e2dccbdccd5595335fd38cb6a747b509fe7 (commit)
via 669e4c0549d2cc35c6196d12f45ae7d568037ee7 (commit)
via fa281533edfd88f1753753ea31de68af0afc4ddf (commit)
via aa394a6d833722b9fc1963f770a6d2ef20c3e0fa (commit)
via 1482d04bb00bef7aa701e0b2f51b778fd6b7232f (commit)
via 5d717a6df7e92e6b67c50388cb76986563c93aad (commit)
via 13d4df95de3381dc47574f388fbbece7c2268368 (commit)
via afd8976a2037884ec85ca961a2bef5bf8cd268a4 (commit)
via e51d29b8e5a112f945b38cb9271e60a13ec81aae (commit)
via 48c0c57ecb232d64295b12c72b37ae89021e2691 (commit)
via 1d7d3591a26f025bac6351522956c23de9fc1de9 (commit)
via 4e5889699b344ed65e99c53ab3e258939e0fbf94 (commit)
via 27151eac58c0d98ebbf8268e01504722958de342 (commit)
via 55b19743800b732a01803dedce247a55c2e2f644 (commit)
via 254abd6f0d9aec10cbc64565d52084a8d7fd2ec7 (commit)
via 993870d1058ec8e2c6de1512909054302777afaf (commit)
via d110bfaaf6a2ebdc4979e7a134d120dd8b36430d (commit)
via 3cc8437f1890481f7618c4655634ed45f9da4e08 (commit)
via ea8458fd1163fd0dd8f39011c27c95dcceeafc84 (commit)
via ac31ba362732855f82e87e1dc30e07461a990256 (commit)
via 90eca29364443088fafa46b48ba7b1d2db0a9d90 (commit)
via acb3e33ce6e2d745c59ccc3c0a1f0c0aa4d0123f (commit)
via 4cffce880542a8f0cd14509a0c942d99be414c26 (commit)
via 44f9e888e04ec1dc5974525a93b34b07e115ec78 (commit)
via a4b0508d1dabcc7b448ffdf51cdc36993adcd423 (commit)
via f624fd2a3a59f5462180620c1e54ec5292163549 (commit)
via 6f9e31d5b9898a1c6d4a23b20cc13ae0f5dfc598 (commit)
via 48e062210fa330d834263cc99b905f10855b92d8 (commit)
via d8cf98d1fceda68f32a5dfbab9fb5a0ba4d60430 (commit)
via 7ff676c9fe83a16b46f6dfd168482b38ed523776 (commit)
via a9e5b5957fe3c4b4526e825201dd2841c375f8e4 (commit)
via bf784c9f13886e60175e6dbf81402de3c05cc3f0 (commit)
via a9d6b82fdb6b5c0c2573351edeadf85d0ad1d5c4 (commit)
via 11158d0f00d5c768e0fe05d6d55d92fd2f87c739 (commit)
via 5e976d07778dae7c95a5fda45804bbb829b105b1 (commit)
via b6c8323b9ca392cb3619cb321ddb5275b01c8648 (commit)
via 0a4e1f2de20a98cbb1e3cadc84be214b3b2eee87 (commit)
via 1efca95c0c85cb96785ee7ece8155e31b4c76424 (commit)
via b33f2f20ac6f7db5d3568d74ed0f6baf435e15c8 (commit)
via 1c4c703922acdff74cd0f8352b790576311bbcc3 (commit)
via 4ea89072bfd9576201e13e5aef40c054209e328e (commit)
via ddfac2dee4a0152e8d7d61d33fbbf12528ad1ab6 (commit)
via 0a38d002f7e4b21951e9f1495cae3f9cd6f44533 (commit)
via a850853c1c52c294f328c34400a4bd9087dd23d5 (commit)
via 65a2364e0b9467094d9f244eac7780a0f5c30d13 (commit)
via cdcfeed21b4c4cbab735ed2dfa7d5dfe3257d242 (commit)
via 673beb87b9fdc8f3dd1c7fa18760ddf219031913 (commit)
via 926bd362ef4ce2a7ec69370cf9eef7736df1729b (commit)
via f983de65a7514296782e1a343ac072f03e9ad285 (commit)
via 1dcc7f59764a7c79f2e01002776b5af0476ba23a (commit)
via 4c3a92b82188a5f7d9f94131aa1216337ffeff62 (commit)
via 5027d6850e3e2ddb77b6c8b57a0960101981434a (commit)
via d423043e603b2a3c044999f18640dacb5461d235 (commit)
via c9fd2b9c190f7bfeefadca2e9fc2e6e7645d29dd (commit)
via 1d99432f41e5ea8c3074d10eeaec00fccd16d1a6 (commit)
via 54936539b8f8d16cd248d2714371b01198cc2618 (commit)
via bbb5436471d81f84feeb7d859f6ff612e52c458b (commit)
via 7402ff5643a991375f5f784b5d14957523d8ca5a (commit)
via 8d949e32df6b7f6b43f6849259354dc345cc958e (commit)
via 744bf184defdb2c5ba93363d32c5f0ff9cc7be7a (commit)
via 51734e6c2444b99149bdfd4043167e70f5589fb4 (commit)
via f7bab038816a23d8c032408f79ed59350619e2be (commit)
via 0d2b273968b51c88e0653b795372644f410a7c60 (commit)
via 5c7f66ab8426ad14118ef3f3689688815daaa22c (commit)
via 4f13565efd1d31cf612540c407684d89c4f6aaac (commit)
via adb203dde5130a3a6922e3fe804a1d88a9bc00e6 (commit)
via 5fc301e5745544bef838addc9422566e09808c09 (commit)
via d6b64c3c789bd43abc190fdfbb99857a5d8299e4 (commit)
via 5792d21821ef37c44eda97360bca16fb6190b758 (commit)
via cf1ed5fb76848f80dcf232e15b147cefb7659ffb (commit)
via 3942ad3afb4e724c552c8657fcc27dbfd11086c2 (commit)
via aad100ca4c96e0c91a6370f2fd34aa4ddf822b97 (commit)
via 49037ac8fab216783e01d8a52146e7c71170ee77 (commit)
via 6797ae93e8b1777acfaef1bc269b18f458ebe5a8 (commit)
via 848ae5fd396868fd6c5cf47a78dff4a1e165d490 (commit)
via 127405ff6ba255d0420ad9fc5783e5c0be3dafb6 (commit)
via ae4d1d67bcce1679ef251ccc569695d97c195607 (commit)
via e177896ba4bc913fc24709767c88f832e7b0ecaf (commit)
via 5895e512b1e94cbb5b5060e77e4f68cc0780f80f (commit)
via 1b56582776038fd784f2570e739409cfd002259b (commit)
via 95eb5eb6b4d2e0a1afb11d0e9c009ef47cb85e0a (commit)
via c4c51c48d97ae029048ae7ea48c5e2099c5cfcb5 (commit)
via c687bfb6ad8bd9f13e328608c20c2d846cce8941 (commit)
via a0f6df34e2cca3e1b4386cf86a1b53006242a376 (commit)
via b73e9d019515a7dc3c10b63a28e5d1fa898ebbae (commit)
via ba1029e36f1703653ec7733a61d8269461fd8cda (commit)
via e9f3a571d13c08f41f5c1094831649c30aca5c66 (commit)
via 57aca1c12806ad1ce8e1b1a6d65ed8cb6a6c7769 (commit)
via bb03d45483d78be88a6a3355b8fa19ab87e0fbea (commit)
via 21e9cc18777b167ed489a3d0511442ba0b27d452 (commit)
via 1dc867e58a83547a7210b5de0bd49607730f508a (commit)
via 0830c1562edb1c49e91ab770bf43a35362b20280 (commit)
via ece879a2f8c9842ffe844dae9ae5a5aabc8dcbe7 (commit)
via 765a8597ee96f9575f6eee3ce55a8cb63a8b550f (commit)
via 150a45689d1d5e382b17db5cc5e18957168e35c4 (commit)
via 0a3ab5a227a546875e34efe545629e82659cad21 (commit)
via baab715e2a0d850545c29004a42847c0717ffe19 (commit)
via 3d1019bdcc92e39862ef55042424d115d8243302 (commit)
via 3136814876d448b703a3ef9b615fe3cc32514c28 (commit)
via afa4d9b9e60a45a225b76af876e7c5eeea39e2fe (commit)
via c2157afdf83d4d014605ec45a5cf44fe2c784935 (commit)
via 003086fcb2062b831c6404aa5b107b614899f902 (commit)
via 6746257d389be543fd4c7f6adcbf2052ac58980a (commit)
via 11f127b4e2b97bc14f820454345734550494782b (commit)
via 76cc1896c3f05f5ef9063499a1ef33f614ce0c0e (commit)
via 47f311075594e3a95b6277edaefb738edae056da (commit)
via 2d28e2aa641809fb298c52b76a06576f78583dc4 (commit)
via 5c44257a118604a86b4772a5d26dc6dd21ae8e75 (commit)
via 831d7fa1857c79b1546da0caeb14755811e85600 (commit)
via 2534bf35fa5632440c39ac648c0a64aca6f8d504 (commit)
via 55fb218a884cae6bb997abaac77b504e4c9f0136 (commit)
via 05972d6cc5a2b74b1afc3e4e7a94282c07cd8e04 (commit)
via 1c1e1a9094c72a41286956623c513f4aef0bd398 (commit)
via 9d6a0232273b1752073bccb063296a6d1731253e (commit)
via 43ddf1d152afa136859fabbdefad67a8d26a3b0a (commit)
via 1ca629cba73a03b21007bce0c9bae93a09526b87 (commit)
via 27df700f79af4c2630a92ef696125207cc05f3f8 (commit)
via d6da3a5a36ffb438709dca0fa898b57290de2122 (commit)
via 1214ae98a1ce7ed24124c9ca8fc6899f094e72bd (commit)
via bdb68aeffe760120fc63b1322febd2e1cdf69852 (commit)
via 00a3e26b1b315974f0a8b677e8836f43a4727f3f (commit)
via 395c8bedb026d86349466e5e385e93242176d9fc (commit)
via c074790c16eac9a6cc4b07f2026eb94dde47666d (commit)
via 6c173fdfcd794d9975263c7f6bb838a5f37a574c (commit)
via 2877f7df90f21039aec81ac6a0c62519e75f6a9f (commit)
via 96092d443b526ec8228ca28596d0175fcce96381 (commit)
via 6190f1553d53c45ab1c523ea394dd747de0b73ff (commit)
via d07ad8c51033cd1f2ec6edda537bdb3c788acd1e (commit)
via 1f3494a2cb6a0c05c57ec372e5a449892c4c8bb5 (commit)
via a63f299cdf1d785d4c8e823b69f77651726925c3 (commit)
via f16af90bf40b6666e7b5fb240092eaa22528abf9 (commit)
via 9642bc24a118467a7739edd6455e55bec6d1e4d8 (commit)
via 296c389728df2b46bdc4789bb4b4ad28ab681353 (commit)
via 7f3a948407dc9fa682cf95093b015e8e0b984b21 (commit)
via 52e2d13a80216c7018320af4f6635d89ca5bfcf6 (commit)
via dc49334f0e8aa454c6c1559581697435a6dca484 (commit)
via 07fe33cc2ce5a0c786853a03efd55f8bcaa2524f (commit)
via 749988985081e806a6fd6dc9efa0e890f7a4aeac (commit)
via 0801f61c681fab3d045844d42a03675c907f07c1 (commit)
via 5858689cd4e10898a6725ff03955031dc6074a3e (commit)
via c2dde6fd402344a8d8887c8fb8807f0edfbd11b3 (commit)
via a9f3e3fa9fa5712012d838e2b92b65cab8c8f253 (commit)
via 6391328c16946cddd2e05ab12b14a33b05e93178 (commit)
via fa5cdd14f6d003e19bff5209d5baec5d33b39462 (commit)
via a5a74a1128c51100e738284784bb379f226bf439 (commit)
via 4d3a17ab3b24b2eb937d65925169701eb5648db2 (commit)
via d0a99c3955fd54b78009c9b4e0de16e55f03c6a2 (commit)
via 11425496351bfe55d6967a37d3dd4df8be2d54e5 (commit)
via cc9bc1ebdc53ad1bfd35069570eeb778706de8b4 (commit)
via ba7087c86dc432b460b518bff5f07460c9548a3e (commit)
via d1961a07c10f425e03d9e0b7d77e51cf399e5eaa (commit)
via 51a4c8f634892f633fced404cb389f48406cde22 (commit)
via 6a5853eec7b9eee0ff219cc6e9df0786d37434bd (commit)
via 1a3e560bbc64b2a0ab8bd808c2f66088146ef60b (commit)
via 1a02fd13c7570d416a9e76678f0465ef42dbef35 (commit)
via d6c20712bc1b318dc952cb96f7185e8f0aeb6fbd (commit)
via fc679e773adad13a80006e721dbd1b217e43dec3 (commit)
via 9448f6b069fffc84772f2db5958f084e03abb38e (commit)
via ed6847cfe68a7d1b7fc3692aa0e6350efc0f97ba (commit)
via 9003c2a45c355db7a75d7a69f7eb84a5fdf8f4fe (commit)
via e611e17b537573972897eebc90f6d491bd4cb06e (commit)
via 81fbc2faa95c996f7798c470fc920305f99fb13e (commit)
via 78a782f7f925bfdd7da22d80fd69cf532709d0f4 (commit)
via 1347cbdd10449f65f782596f725e99393eaeb5b9 (commit)
via a70eb78982a99bd484d565bbbebb3de3cd757f38 (commit)
via e34136b42889036fa472977d52ea35e411c4781b (commit)
via fcede13af3a9ef9fc2420b6845cf62e9a6a6da3c (commit)
via 42fb0953bd03af75b52c4d5935a333e68ca2170a (commit)
via 523a3cb433fb3629dcc6fa4631575d1a1df9a284 (commit)
via d181f47561a42f1883067ad70ffe8c41a97d108e (commit)
via 9a266ef120c77acbdc5f4c4a1ac269c16973c71e (commit)
via 969f864ed4c398226db23208f6e2c9f7f7820f7d (commit)
via ea3c47248223889c3e6a41910c833921a1863fc1 (commit)
via 35e12d44978131a7d5b2ce0437998885ae2cce8e (commit)
via a382579520082151174f46b17d40a9c6dbe70a44 (commit)
via 4aa7fafe0993c5b7048f54c0c80144894a1bb6b2 (commit)
via 7b093f9ad01cbcbb366a8247a16ad5df3400b82f (commit)
via 2351a4e4ec9748c34eae06c0179f778e99e0ea4f (commit)
via 9d7f5a16813afcc7b466d8a1191302694da8b82d (commit)
via 7ae8e2fed0beefa0446e67b667dd3b4b013e4e83 (commit)
via f7f249158237b2619ca33ddd79912ae8d883b33c (commit)
via 5f6334bec5787d812fa77839f55020efb946dff8 (commit)
via 0c8ab7ddc99b8b90e91b219500d294a5494ff81e (commit)
via 7f036cc3c8c24cd7107dc4efcf05fc4c318f7481 (commit)
via bb1ebf839782436da2b52bab66bfc52298cdf657 (commit)
via 18ba897548210528cdead4148c79654d1e8d6803 (commit)
via 4a64311267198f93c54ac387184f7079dd13b0f4 (commit)
via 66994d51da5c274dd3d34e05235f7fb40c164c50 (commit)
via d620eb235e15520bba143fc8d18838f51fc7c837 (commit)
via 75c1e476fc78cbcae7b27d4415848827c85d93a9 (commit)
via 066edd63e204470b4c6cd7b6baa501c53e0ada9b (commit)
via 1f899363a5fa4e3c62fc18cce7ad92fc63bd95af (commit)
via 020c104f011e1b81ef501c1a5dcbde41a63a6baf (commit)
via e88465220ad940de0c354864c915c27efdee265b (commit)
via 028c814c0a875c788284d16389425172d768d733 (commit)
via dbd6b6a49d5ac3cd14b273f0e9cfed47a465df4e (commit)
via 1e1a24145a29f17e9c237089ad64a5561055f5ca (commit)
via f4637d4b612bc11836999418bc0e2cd23f534331 (commit)
via 0d97770652ce3620cf00d13a7e57a88dd6cb44e7 (commit)
via 177c2a303a62b91652467a0e04ab4556a3caf47a (commit)
via 8c943173fa41d952f2592b897ade584e33bd6b8f (commit)
via 77ed346a2630984c32552672612c7795a6f4f12a (commit)
via b8d8e2988d888831dcaee3159fef2cb7159caaa6 (commit)
via 0be7a99b0f532b63586169a63ac11f429fd88440 (commit)
via d99e1ebf1d26756c7a246f4c760ce2c6e9f325a1 (commit)
via b8fedc83507ff531fff0d3ac2436e8ba8518fde4 (commit)
via 685f79afd2b10da910e4e8a08cb7a7bad8f2342f (commit)
via 9c23280fa6515b37925c47df1c75f9aba4af80a6 (commit)
via 6135b51a3fcda1d6ed514f7fe370c5a159be9c21 (commit)
via d8cff9f05a2b7f9c2881053ee7bbc6009fb92145 (commit)
via 941b3e7091dfd884dc48ed91941ae08f6a52b600 (commit)
via 1dcc04ba75b42b9e802c133933d800b9473b9b19 (commit)
via 3da972c883440fa6d9518a24e18de466271035dd (commit)
via 160a02568cfb720128010424ffbeb6d96558f38a (commit)
via d2db62d588d3e79ce780ca8016b464f5140796e8 (commit)
via a58dbab3feff23e506d1c818673a24994e43f85a (commit)
via 69bb11bdb1f04306f006219a693eb22148f6098b (commit)
via 5b7e7c24818fc42c3937df6316934c1de4889558 (commit)
via 397572078a284ccbeec030bf6a7744ed9e6d02ea (commit)
via 40901580c3fed64bb4f5d3177eea389d1943baef (commit)
via a6498dc8e09fefdb57da57fe04f58143eced6f4a (commit)
via 332aa75eaa856c47443cc4ed478d69258978e5ad (commit)
via c7b7b3aa577ca6b3d799255f9ead296219cd0e1e (commit)
via 66c3c8e5de5de0a0ed3da46349a2d5ca4a055e22 (commit)
via 42f1d3b756146e090f5785bd169ead859bf5ef8c (commit)
via 95c22c6a0a7ebdf6647c1283f4ce48de6de72aa0 (commit)
via 370cb8dfecdec5b04677d3112c12d54849b57cab (commit)
via 6f1c1449710523b4c0b9641f5073459f639f8b02 (commit)
via 59eafa1876c313229e3c59716e1d206bb9462d9c (commit)
via 3223c3a8bab134ac670b0c98b562c2ea2f930f6f (commit)
via cc1b71c05390ea8091d407f44b8e432be4268859 (commit)
via 673bd42bd12b8380a8225cc1fa51b1e58c7120e1 (commit)
via a7dee64d991aefd5be002f16c15779749baadd76 (commit)
via f1c2afdde488ad70e28fd153b2bc41c826a65309 (commit)
via f1da7976bb60d4c14e1b919da96133fb846cf599 (commit)
via dc749e3d1fad3b3a35eb4c6558a0425635358ea2 (commit)
via 2de7ef307fbdeec713e96c268d5692a8f7750530 (commit)
via 5c51b409f6b21fc525b4b4924c749db15bd8d7e8 (commit)
via 63da9d7759cfc9248f32ae84c3386982ebcc962e (commit)
via 606d6d4009f62c711e9a9dfc5c1529ed395be6de (commit)
via 4d80ee3fb6015f0ba82dd0b6bdfadd437e725767 (commit)
via cf810a51f9f5a8e36b4dd0914204f745e65f5b5b (commit)
via 1dda901b47e06f07be308993bc9dc6d81898ae05 (commit)
via 89d7d7c6d563a8d2d2da4e16972d811e1e716594 (commit)
via 67e853964e310f2403bca7ae894e236d3483035c (commit)
via 068ebe339304d08fe954afca1f1065730aa66c23 (commit)
via 5462a024150517ae0c239d26e648e87a334057fe (commit)
via e5f4c8706a669412acc389be7db1ba89c37df1d9 (commit)
via e1a372151b30cd43e3dea800201ab77b2a9dceb5 (commit)
via dba8d1252e0643e84ae5d3ca61e2b4271e674b0c (commit)
via 6a6766e33dda148c38341952f82681e75c5491c2 (commit)
via b389c5f4c220881153dd272fd6c4c8d7ad49cb4e (commit)
via 1b118ca11c996178750be50d18cc08c10f7c3c1a (commit)
via eefdc7a9ca270208f9c8620d9563d26738752da4 (commit)
via ad4653798da40c764ea3a32df040a5954c17d64d (commit)
via 86a82700f16e246949167640f3667055784d527f (commit)
via 93968b078d3ba0133bd0b1501961ee887f8ab4c2 (commit)
via 49b0cfc661954e0a4a7bd88cdfe92986a3e60894 (commit)
via 43c34ea75cf682a3d4c0e7f4571c9914fb40b646 (commit)
via 8a0ba2fd7cad84dc158ef122a20d2e0fae539f3f (commit)
via eaeeaf96fc74a6f899a40226648fd5efc644695d (commit)
via 9cf915dc18b7da4bd76f568dc2f8eece6e1837a5 (commit)
via 691c5562ad7fe9df4b9c03286e1e2e74665711ec (commit)
via 0981189b99ef9599b4a16287188e20129e4df78c (commit)
via a1bda7e8a3c7cf87d95b97d546da491858af0821 (commit)
via 8a68a5f9a68b2fce26793b87565e300c5a101c75 (commit)
via ba375d4f466053e4aae8e83e7f118244b8dbfd4a (commit)
via 75768136db2286d854a14694024a7bef8afdd21c (commit)
via 8dd19f7a85d8ede42185b20c9e0dc7710b1cef75 (commit)
via 722e63fa42896925dfe5b3dfc8e5f28d1a9dc06c (commit)
via bdb4f9b9a55fd0d293aadf85b13f7408215c270d (commit)
via c94f96f7447b5b34688befacbe80420b527b5717 (commit)
via 523b78b28c9a8ccbcd24dee78ac1a8bf2780dfa7 (commit)
via 9dabd55d3e14d0221a811ffb4bcf4e9391c497b3 (commit)
via 8cee4d1bfeb4b44f1620bdd09180afaa2b864e69 (commit)
via 752716b429f8dc62e00036561ebe397f18bc0654 (commit)
via 63e7985306d48df606e27e65eae9be695e3c0406 (commit)
via 699dca193171359568731949a3228e0f8f0fa76c (commit)
via cec42b7ffb717679385508eed272d4cdf9aa7a15 (commit)
via 4e47fbe26eaf0eb82b551bfc5233c678e3eda248 (commit)
via d542bb5aea0405a16f88f285ac22d5c206dd0ec0 (commit)
via 4646320c12561521aac9c109c9d2d26b59888e2a (commit)
via f45fb8d00015e25c586633d1ded903b562869ebc (commit)
via 2cb5588600010c4e9ec0d6df406335b5a9b88790 (commit)
via 72013be6034d1f011c115fa5e91940fe0801c4b1 (commit)
via 6d1bccdbbf5ba6243e8ab5368f8ddc31b5d2f0dc (commit)
via f94e80a846488b1391d37a214d5488f40e5b8e86 (commit)
via 115e1fd41b05120f4d5240ce003775c62ca77ebc (commit)
via 635ebfe9cb2b9c9bbb1b94138c81fb4043400c60 (commit)
via 968647040f6a292d164ea095e79b73c9ae6cdb37 (commit)
via 84756ab85e5502a19da128ba098f8634667b6ea9 (commit)
via 2bcc611a5b6588b5f8ccf1679fec226b399374d6 (commit)
via 92db2198f80f1bb8e84f56bb26cbdec8fd339f4a (commit)
via ae4b47b85065bd385fea2e8ce5ede434e775bd8e (commit)
via bab9845a4b61d35f33f8bd03a70d5d6b9c0308b8 (commit)
via 0388e047d94ec33264a7373d8f5218a2541e9381 (commit)
via 55c331c6d2035d122f3a2bc24a22da9071c9a80c (commit)
via 9bb25827b02d806b66875922894a3f9b7641b80e (commit)
via 557138559d4b45ec9c48351bc624f61a949d1714 (commit)
via f27fa2d4275322be6b5fef25c5358b42a81c5e4d (commit)
via c7dc990a436d2965f8a4718e696c0d1a397d4f2f (commit)
via f745190450fcec476c8de4c37a793b6868062a4f (commit)
via 52350309dde15490d97e52282fefcc68525c5266 (commit)
via 61730bf74296d1e554d1881fc532185281551d76 (commit)
via a4462565e214dff4b861addeeea0f4dd0d6be29c (commit)
via b07aaa888e94a195d0c867a34ae5361963de4953 (commit)
via 7336314a1a99297e389eb694cc8fbe4652f5b739 (commit)
via e9c8b00e8ef32c2ffb5901a4b089ebf8b09d651b (commit)
via 65925c18b5d4aa5b5f3e4d4de405af11875c76ea (commit)
via bd87dc370c5f8608a6381af6619d81630056190c (commit)
via 93ae0fc068f81eaf26f2a224357578f41c637182 (commit)
via 89eb9f94545cd492cf596b0ec156d74f3144385d (commit)
via 2e50f235e6f3914ca3159046887e2fbdec05f62a (commit)
via 5defd8e1dbed0a95900fd15d9b7d65176b40b1e4 (commit)
via b8b80b38f040e0de79858a89c6610ac2d7872697 (commit)
via cfd88cc4239cf51fba6d06b42672fe8457fdb028 (commit)
via 46a04e47e42fd5b370ef94b3a6991e981a96b6e3 (commit)
via e9fcb48e4085fb20c2ef81c279e2f97fc2cbbbe6 (commit)
via 892cf4bb9e842c7eeea51d4428c176920af380a8 (commit)
via 2d51996df1817a53bc5dc718de84beb9fc3a009d (commit)
via 38289959048b21fd8f393eac7ce00f01a7e11717 (commit)
via a6293a3a7de93df42f41372e404beb2c512cc6c1 (commit)
via 113eb1253b73af8f08cb505963a74f50572a6c6b (commit)
via 11d731385f40db125aad0b15a99ab4c43010efea (commit)
via 66abf65709144e28a86b775e1a233c976802ddf1 (commit)
via 9034e8d8d4a3237f102cf85b696ac5d99e6edc03 (commit)
via 2e58c0922b51f1d3eb261f330faf01edd3cffff9 (commit)
via 9a6805493efd231e795b2a6ab3dec6728443e01f (commit)
via 7c3a5e43351c2b2b64a6cb4b27ef18d4276e91c4 (commit)
via 0303c71d6ed97feb671c6fec59ad07bcb57aa542 (commit)
via 0be1a19795c6577441a06b55e6a64945fde00119 (commit)
via 3d0e69e535739c122e75e8608965368ad3a285a5 (commit)
via 5a472271e4baaa59699a8679179f8b3e8cd312b5 (commit)
via 11d48486319a7f5497b4058c015858ca4c9fffde (commit)
via 020aa9b513bed8e5a31ac232670e76a22aea3ccd (commit)
via b92a8441e6b92dbfad6cf24928622e634c47022a (commit)
via 4a26b1a59502204a2da0e56643e712aade2d4148 (commit)
via 56ecb5720aa95e2367a0ec58887769c817d534ed (commit)
via 14afa33ae93d67ac60e40fb076938dc38577db26 (commit)
via e2e5411c72e06f7eb38952cc93c188e32e093783 (commit)
via 8c0b42d54abbfc41716066e12bf7fc2ddd069932 (commit)
via f5722661c233e5c6bab7bb07939d9cffebc6189d (commit)
via b75ef71af6dd9a578d555aa9c94bd2e5577fba9a (commit)
via 66bd09fa805b76e2c179fa718c7de17ac55e8cd9 (commit)
via fe284d709650dc93f0a6d20b93597a7100eefa1a (commit)
via d2eb30d1abc1533530455517af464ed013d9a038 (commit)
via 1b4bea7d1b6d2524af2cc85e7bf46bc07d758716 (commit)
via 51f60d18fb24a3acac43acda43a4f57e0c39cd9d (commit)
via 9936b0f26b29240c32733f42f2e68510b44e5d52 (commit)
via e66ad0972f1717cf144ccfc039afc4ed15601f39 (commit)
via 4ae79476683505a30b127ec037a4337c5491c4f6 (commit)
via e3a4b1b8af488e9af6ab3fdf47206e86c77ceea4 (commit)
via a0a2e5d1d5c9922af0822e7ebffcfd13eb93adc6 (commit)
via 94612babd24981b72c085189a6de053a8537a5ea (commit)
via d3e38918cbfb7e25f40bffb98af9763f84cbeb4b (commit)
via a289954060f4e505f9017103dac9250d1e9c1e64 (commit)
via 4654b5ca4ef34a806ad2421ad9338ec2b8828f45 (commit)
via bd82ff96ccc3c2d06a7bb6073202b4597c84d707 (commit)
via e5f4e9a673a86274d7d16abb744d62d3abafce98 (commit)
via be9dd9d9d756d277d64dd51c49d50c393c77ebb6 (commit)
via 8229a5560c9b338a2e28c079e7c6e73b9c5739fb (commit)
via 4d2ed3055faa4241e018f413b13705ca959e3ece (commit)
via 47df532668c107e909890e95b5b94532cd051747 (commit)
via e988a91a5b8d81345f94abcf54b7ec3502299e11 (commit)
via 9497eab797f3896b28444b267dfd3b84ab036185 (commit)
via b97c04c4a197f419eab45688b4156a65ccb6a44e (commit)
via 49cc5c3553f13b0451d2055511faa8d93ec717a0 (commit)
via 90dbae21abbb3add1c54895ca4924d401c977481 (commit)
via 9dbef02dc27ef443617e94f27a011d2106ae3244 (commit)
via 7b169abe5811031f4ec6fe919abc31204e9e9d87 (commit)
via 5eae4b4023ff8b74369c7967b3789e5db3d86516 (commit)
via 46314563ac365e29175ef2f418340a10f48eb053 (commit)
via 957e9cf45ce60fd2c6e0526f89277383eb554f55 (commit)
via 10271fb80eb6ac05dbdd96ba8d710dfce960ba91 (commit)
via e6c2f06a38df910976f59b1a4e380dc6291ca9f8 (commit)
via 2be23d9cef3e2f8a9d464b9f449666ac87ea5c96 (commit)
via 5a01a7b4a8ff04c6f202e42d7745f75ce36fc4db (commit)
via 900f58dcc2bf90ab609fff39abb513052f4bd473 (commit)
via b50a9e7f7f70269c7c421b5ba4440877acc4f6f3 (commit)
via c51da0e1762a211857c30d4dc3dcab8a4cd932a7 (commit)
via 4afb32a295995920e73bdd8980abb91516b66af2 (commit)
via 6eca8bea650cd98f01103a888508372ebb26f444 (commit)
via ca59c3c0884aaa32871c2970b8cf8cdff3214936 (commit)
via fb27f987c2e81797a6c31ac25ddfb729c29fa1c9 (commit)
via 4a3157df834f6bce64189376b70a4cab92adcfc6 (commit)
via 8fd157776766b24cf96a8eca4fde9882ea00c892 (commit)
via d401ed000a82562179634e85cc6a1ebec1c17f34 (commit)
via e9e2326ea21137817f88c5dd32db935b9a901a1f (commit)
via 875ed6c2092376cdc7169ad82ecbed3ae70d0969 (commit)
via 53101784b08344e047ad95b189ed3d0607ea2e90 (commit)
via 0dcb3f925a8a9672f7cd4b107f31f9874f3ec8e7 (commit)
via d114cce6c06801ac263de76c514d5159b978e04a (commit)
via 869366cf4bf6469b82ecf3ac822e44d1f0dfafbd (commit)
via 0934ed05485a48e35f7153a1492e5604e5172dc5 (commit)
via be75f8bf8883520d81cc0b8fe6922b76c917496f (commit)
via 609ed4b5e551192036c95dbf3c15f3de11798f43 (commit)
via 7c9cb2404cd2b1e4c7ed15fc2be76ba1246acedf (commit)
via 435443ea15e349404f58da2b7708e2c33072314a (commit)
via cd419fb279aae5741c7c36fc91c5d15d3f540344 (commit)
via 616356601606f35544a391786750d1364042ef9d (commit)
via cec69924b57c5aee313a060f62dfa478a7974ac4 (commit)
via 633d9d03d18d319113f27de48b705dbf154190f3 (commit)
via 22fca20385421e6461af663a97723c75c700515e (commit)
via b218fdae1be844efb2ae70cebcf7549c5893924c (commit)
via 9d5880914f5a28613ac75cc3342e06f81f4ff746 (commit)
via 6db0f12c5c99ea7afde41bb42a5fce3174fe1865 (commit)
via dfe93d8de5979fd5f07b82aea451d84f515a6292 (commit)
via 0176794c256d3999ea2256bfe80e2a5a97f700c6 (commit)
via 84c5709e4196be75a063f3431b8a5218f740582f (commit)
via b4b394ec9fc98af486044a9cfa17d49149092a7e (commit)
via c9e6027448eeef72a974dd558ddd8873c9599746 (commit)
via 56b578d26a5bf362dec6b86e3d304e9de57343ee (commit)
via 94cf448670d7a8506ad0592fc469b2a3d2022f66 (commit)
via 28f9b4dfddb4d8ac719ec6a7779ba0aa24908f7a (commit)
via c391ab716a9e7d338ffe7f011d6dc31e58589510 (commit)
via b7f236a375f1ca7412ec70eeaa3657dd2b5ae2c2 (commit)
via d7878e886adaf1898d3333ecf958fabe96c603a6 (commit)
via d895a42828fca26b94a7a092c67d8eb8047deea1 (commit)
via 2669a2f4048ad424d78ab79b36ef6c01e3a84f33 (commit)
via cfaea3ed7bd7ec12c7b31ebc41f1cb585a111061 (commit)
via 4a6978e1983fb26b1aaadd961166d0629e20c971 (commit)
via bfd9bbe7a30a89901612c2f69a6ddeb1a56adff7 (commit)
via 52fc5a8399654b51d197b672516af5d452a06d7d (commit)
via 76e9fb05f66d247564ffff32832c485bd0b49a72 (commit)
via ab2e2334c3694b343252b073e5b48cce740431bd (commit)
via 99825a89b2394636679d2a8dfd1f23e6e43a9c33 (commit)
via 1f1640e7a48b5f40d32793da0bd3bec6c610dbf9 (commit)
via be7c43fc78f85ca5755e593a15c0ce0d3e94a592 (commit)
via 8d11921df6790e28d6e63162740bd1ad38a42372 (commit)
via 7850dbb1101cbc89a580d9cc3d5363f0cb630e4e (commit)
via cb1fd9779913bff8c9659f63bc75e7212461ef7e (commit)
via 8b0a1371c5cb3926388c162e2e44cfca76f2653c (commit)
via c9b1bc5a4fb870e3f957b6b2b8a70e941de43c8d (commit)
via e22f7c54ce5ed757b511ff9e16f18feb5368a675 (commit)
via 72aa290176a3c27d3f9519a7257dc920da45f5f8 (commit)
via 35021da61ac4d9bf7e34dfbd0ef08adffc4f4b72 (commit)
via f18855f50a3b78c5125d1c5bd44f54c266710397 (commit)
via 696640928b7d333bf772a1ed674b7447bf58e7ba (commit)
via a25cf68604902c7e13e5cb7b91529827ef167f87 (commit)
via d65e72c0432ad90c5ad04e323d61c9ab305e8ed0 (commit)
via 0bdf4cbbe4491c5c93ca79b6f2a0bf78c60e23c3 (commit)
via d5dcdd72ba5b3c8f90b8529d14b1f4174821f7c2 (commit)
via a1ff1a311dc55a143b74e79b3b2a7f063b9fc310 (commit)
via b7d9b44ce6987141fce5b1221008deb129f3f23b (commit)
via b10496978f50a84fc5361a4d5bc07a52acae2ff0 (commit)
via b0c5274a221b90513e6d793f54e9701797252a89 (commit)
via b2f68d38e1727d4955dcdb3aaa1fa3bce0ca9e04 (commit)
via 0f90442452697e56f13433e94bb47ad77b44997f (commit)
via f0003ba5c3b5bb1b09e4f9d86f257b255f1a6005 (commit)
via 099562c5c4dd4290bad3b7b7e3a6a61cc7d783e8 (commit)
via 7586bc3225bd391f7dce3650ef8021b4e6be4d21 (commit)
via 60d816dd506849a836f49bb75d1e61eaa53ff08b (commit)
via 307a6aa73839936759360e863b96da7fecf9bc2e (commit)
via 1a5e7749be9d714f36b4880a31a74e84a73ab95f (commit)
via 24e03082d4dfd53b447d2b9d8f4dec659232f3f4 (commit)
via c75fdce017f9239a3de2411f6eda4398209c002d (commit)
via 76c2546a3ee4e1d17dc20effa45dc922fe93b4da (commit)
via 7fbcfd3e63a8272a2d8bc56cd10761e42d88f729 (commit)
via cc57f1c2f6d38d429553572942436ac2d26eae0b (commit)
via a3467be08207a53d27674ac36d583105df52e674 (commit)
via 46dea63c9db60ab9e50d89a8a866ff6fc82d89d3 (commit)
via 9bdea6891eabbdeccbed4dcbc30cc07d30a0e071 (commit)
via 62044e95340c4374e33c92fe453fc830e5398c31 (commit)
via fa1f481ca2b5e8fcd6411bcd17cf4758f309d0fa (commit)
via e7402fb4daceb9161f43ec108851fd382dc5842c (commit)
via dd1fb7b5d0edde7cab849b2d1ebcc3517c8a5f99 (commit)
via 49293651d6e84a9a428d44664e89c9ee98f51beb (commit)
via 18b243e6c248c486542b2e1785a1154cb08fc04b (commit)
via 055d869e77d318b0978b5bd24a956b5b18603682 (commit)
via dfa4972e5e24872f59f618d936e22681376c6707 (commit)
via 0059f5b42608c96e853b56173073c2f3d2195290 (commit)
via 82782a0b87e94de80e2ed0d3a774df6f858d9d9d (commit)
via b11e62955d307cbedd41416629fcb848e7d95de2 (commit)
via ffe5ec17280c9ea65e95e498f2c470fdfab96ea9 (commit)
via e0d24474bb0c4fc8c515e47676ce1702b4b5e1a3 (commit)
via 9e51832ed5702164200766706d5498b34b7a06e8 (commit)
via 8d1c44335c6cb4198e08232910fb43a3c9395696 (commit)
via 2828d49b8bfee2a4996013a9258a0f8b1df5414c (commit)
via 310310a33a5df596adaf95c45330a38e47e3dc4f (commit)
via ff9e1081221a395030cbb1e37646bdc414f87b4a (commit)
via d1d0ebfd9e4ecbace12e9249419d7a3afccd1edd (commit)
via 6f6a17a82ac5960b83ea4813f3eb14b03b7b08e8 (commit)
via 8e7e481531f597c23283753fb6998eff308ccaa1 (commit)
via 12a410abecf5497234aba043de6bd7bf6f8a9dbc (commit)
via 42ad7c2b37d4a10989ae01f40cf2c4fbf7d7f7a9 (commit)
via 8d518acb8aeffed854df487701f5f9a5e71723ad (commit)
via b8f80f133cbb018c74e54c052c38a7cdf6149b2d (commit)
via 925a5dcbf9aad3d596fadd577ac58f24489d6b51 (commit)
via 79228c6d7ad69e9c5e22141a4c532f527f89e653 (commit)
via c6b68a3693dc67a7b8fa63a1e35bd394c5fc323b (commit)
via c8ae5c33f1a6b0a9a87f5acac79711e24c3372c9 (commit)
via 2565e7937ae39bf8602568b3f947e65467d688b2 (commit)
via 4ad2cfc41cd61c7f9c03e17ccf657a02f14b09d5 (commit)
via 10d8135a9564b97ad18b47504c1e38cbe10c3f47 (commit)
via ffd1f7a9657d503bfb87100f9dd4d1df55dc3589 (commit)
via e06d4cf0145b894cb2e3a1c7d35067db43dbb117 (commit)
via 06edd417e613ef5a1b9437c64cd3b4b69f111057 (commit)
via a9331b4b471c178d9c24da9711cc1202754e92b4 (commit)
via 1a8fa9a2bd8aeb92cba513a3191e95941097aab3 (commit)
via d59edf42f6613fc42e6cfa5ad3ebb42deabbaba2 (commit)
via 0cdb1d38d075484d6cb17802b125e800cea76398 (commit)
via e34fd1e6536afb4acfc227e48702bf3bcff656b0 (commit)
via c5b35afb2c5ac18b2c73c675b28d66ec71518702 (commit)
via 67df9514fe21601e2d2522e0ac213c91d5a32352 (commit)
via 62b6ff23f4c56e134161c16da27fc142550bb675 (commit)
via 17e28f69287a0923bd5ef49a9b8d936ce64010c5 (commit)
via 46de4d3eac77ca82b5977cbe6a21c28715cafbfc (commit)
via 1bd8e460fd9b1b7c38ecace2cabb7e696889e06c (commit)
via 7b0141634351eb4bf91d5cbb39f17a074c492f46 (commit)
via 35c505f9dbdb0d246f68a13a4ba999fd926aa68d (commit)
via 365d369fe38f1c695a62b8120a91dd24d3b6c4b6 (commit)
via a882f346aae429f0edc2d924079ad9ad0fb2d4c7 (commit)
via 6097b2f7981ab8fa01b85675680b397903ed8ce5 (commit)
via c92078b44a4a684d346329bc3285c42be61e55b0 (commit)
via 0b7c5959ac25a1111eb5b4561957fe399cf35ae3 (commit)
via b702eb12916a63202407c167e61662e53c112142 (commit)
via 826b901fe8ac75e6b4156ad852b9d6a1cc7a2231 (commit)
via 80bd43e0a35cff91c0bc2b7bd91cb0ca8dcf96e5 (commit)
via d1bd9c4984ca4b543b4cd7dc14812fa89f7b86a4 (commit)
via 6112620078e6d31147195d9be1f04d2087f19780 (commit)
via a34a90c16b57532dbda071cccbc16f1782f14076 (commit)
via c6e631b41e14cf721e29f5f531e6e4fb4e113cb7 (commit)
via 0bfc4464a3c441e097bedb02e458cd38ae55b0b4 (commit)
via f2dcd95a40cc42123fff38a28b7b917aeb4f87fd (commit)
via 82f7882be2b78bf94f4c76632bcf4e954690e3df (commit)
via dd7af68a0fc91db625173cae6babbd6a1d452c8e (commit)
via 62e1b465d8e74219d25a18fab0d6f5dbff4b2b79 (commit)
via 4964a95ce2409a9789a2d76a2c975d998b650156 (commit)
via e9c787710dd7d2ff77c9b94c2146b7478e33b55b (commit)
via 65075dab617431a0da1d58cd1dc1d9ce40019e60 (commit)
via f0bdba8dd1f01486c6883d157c895c4c3fd78975 (commit)
via f16cab005bf73ba97122e40e63b376dd6135ac9f (commit)
via c91fe759df7626a8a05fa40deb4d2296a68f3660 (commit)
via 9f006d012c018990b7a1a48abbe348104f2a1f47 (commit)
via 3370e130bfeae739128cc49b15509b599fc1282f (commit)
via 911bc729c10fdb9780be1da28306f949009f2c46 (commit)
via 8f0213019daaa331645aad360d256e7646a7949e (commit)
via 9ec164276e2322da49034a8ea9fe9590ca0ca050 (commit)
via 64d4c7103ecf6f95d805f4d6454f891a6f423ab7 (commit)
via 72100c98a5dc325ccbe1571e04f4e61713fd9182 (commit)
via f7cebd3b71e88c67089b6991e2940e7621114228 (commit)
via 0f2eb5bdc3af5d518f171833eaa61650c22f080e (commit)
via 84ccc1092def598da01d592885c2a7aadc4064e1 (commit)
via f8c08be8390fa77a79e33230047e6fec94c037b3 (commit)
via f7c3a9dfecdf8120d00ad3649e6ef94e60d94563 (commit)
via c2d2b7d600bee90d6e14713d4a70f8297ed8c1c1 (commit)
via f414a1bc94d33cc2ba85ca3aea0570cd5b909ec0 (commit)
via 5704afac9b524c4646f35643471e96abf2721f38 (commit)
via 9105bb91378796903ff46d649315f3960e9d888b (commit)
via d221f181e5fddf7389976716e198f495a84870f2 (commit)
via fad78afe0833393d5e498469e743f2d69cbc3ff4 (commit)
via b0140cc21a982eb354b36ecacb68ec3d5e089b01 (commit)
via 0a4dd269c2beb9c06dd91f2cb3f4240d2f05f30e (commit)
via cbfdcf93b88023b0f9b7a3405aa11de02fc271df (commit)
via 6c3c8cf1190d8141f1bea6bc8223b3e9c67ca8be (commit)
via f28d38cbd37ea4add20f99d8fe314cab622af2b5 (commit)
via 476d666f86322b8701968a4814d9e0437368d3f6 (commit)
via f42636c1bf79e2bdf6b74f7c385a11ffceae4c9c (commit)
via 8dbdcfafac7af4baec72656791953a0f923a593d (commit)
via 3ac85f6dee38050d24a7808216f98ec9654891a8 (commit)
via a351a49bbe419d1b4a0b415d759923402ef3053d (commit)
via 7a63ae249319a2e7d5e53bbf3ab4bb0c483cda31 (commit)
via 708df25a7df731469edfe6f3894c2b45d8674eb5 (commit)
via c789a6e40d91daf9912d729c125594b65e71af2e (commit)
via e035eb414d5d5f04646e610e2e430935a12d5a27 (commit)
via 34211ec5fcc93be6f8dd726378c41ef8dc8a29a5 (commit)
via 92aeed256a2c552f7aa44cdc72837e8b7cb11d3d (commit)
via ee0336b0ac320037eec1083c1ab019144f820caa (commit)
via a355db734a2914e2676a00e51ead07e63a46f5f6 (commit)
via 53a88b1c32f68ef9486b172e76c95f2d80554e5f (commit)
via 25ed888b9ba8989e26f6998781d1d3411ad4d6cf (commit)
via 51cdfdaa0ec77e612f359216cc13440b8657c2d5 (commit)
via b859f3ec2ac15013b8ea4a276babc95729bc6622 (commit)
via 96e4e25ddbd8005a45213b615c1e9234f10969d0 (commit)
via 637d01073d2e00ecb023720eee5180a3cab7af4e (commit)
via fa3c62abfe51ba0b92787b2cbe1e5c1ef4deea1f (commit)
via 769781e04f90b73e2aa56ce485eaf90675ba9de3 (commit)
via 6b3a6add85d5b810fbded6c0438d718d90cec23f (commit)
via ab5aca41f91f79bdaaccca02a3b0260677253ba9 (commit)
via dcf3d819617c254781182249d692806a303ddb38 (commit)
via 97820b6b194685670240e24c1fc2a39fc1815706 (commit)
via 287f881fc8ab04fef79926dd2bcab533ca36e23c (commit)
via c08132c716d03b64744caa98ba173e24bec39739 (commit)
via b71b4d3da9582eb7e4844ad4e12b56e5cab5f6c9 (commit)
via 64a23b7ef2b00d2a5ce6905b61fc940cb02ab469 (commit)
via 1179d109ca31e8fef3e27ac775c907c5fe04aa1f (commit)
via 43ef2c729b25ef42b0aecdc350e433b2acd69d55 (commit)
via 4fa65c056ed3aac7b34cfe076d55d5d5e83d5543 (commit)
via 34f3f2952b0560d00538484e44f30d4c997add8f (commit)
via 2ca420ec4d3c07a7b0625d9e0b16e455646f3a49 (commit)
via 9fe2c16d5158d1e7fd0110d1b6b13af44986895a (commit)
via 0eade1b94da17acd0b406074b0909aff6edced66 (commit)
via c2a1a72ec6323025a5b13cb9ec9e190a7d74ff1d (commit)
via aaccc61d153961f15e13f895d44831c855a81a07 (commit)
via e7c95e889d9a072d31c5bc06eac16ee5ef4497ed (commit)
via 6d3de9eceb5243e91fe4d77050240a148bca012b (commit)
via e2f89b0a2730a94b1ebfca26a5b55fde3271080f (commit)
via 6df230b7a9de8ad00b70095571e7e6c32091ea4b (commit)
via 4d4f354ffa2aafd77f3490e6d0124fe20b70dd01 (commit)
via c70c786df1c93cd27a58b747d1287ae2458e49b8 (commit)
via 9e7e3a74abe172e37d2b28b46078a0d6fad4fbae (commit)
via dc8d4df490d949b7b90bfa8f4c534a0f8477cb0b (commit)
via 62cbbbe8a299280edb79e46f3eec479d013da974 (commit)
via 44ada90508a40f77a8feed86fb89b86788b8f7dc (commit)
via bb87994a4aa27f129116a592fa214d2d41a99f3f (commit)
via c0f99573fac0d8660757cc2c7add29da346c2aed (commit)
via 86733e547edcfe125539a3b134b11c24e9e95c84 (commit)
via b0fee322b993c9ecb12cdf4293e02abe8883f12f (commit)
via 4b9bfada8e5937014a665874c447d750d1739f39 (commit)
via 2037cfe3a92eeaa02a530f844d6d5c90c218db1c (commit)
via b6d411532edfb5749a352383811d4573f4c3afe3 (commit)
via d6aa5a336fa5205947585ec6f9e603af024fdbec (commit)
via d8572303d87996b7afa13cabb5817072de7b1e08 (commit)
via ffd90abfa369b5b7fdbd200f4972528e9c0dc4da (commit)
via 31de1fac692d23b61a81a024f2c720315f337b85 (commit)
via 9ae190eb3fdb74d7139d693d1d504fb9e1b284b4 (commit)
via 118b95b27b08d0176645ee01eb8ddf9cc9148bf8 (commit)
via 6f32ff31fa06f791cea023ccd7a5e1b446b126a4 (commit)
via 918ea3a7ce7fc0ccefad3a89ce30f37bddee874f (commit)
via 569d010875aaa6a6e2e43582addf6cc150241fe7 (commit)
via 264ba3fbfb24ce56542cdfe18fccbcdf3f972c3e (commit)
via 6a6c24ed1d5463b8ffd39fefb17659da1b4d8f6a (commit)
via 3398799bb0f7793eddaeb5deb1f282b34cd7d80d (commit)
via 07c5094f30ccc829f5c1175cb22c5da780463ff2 (commit)
via bfb653598229a7917461999bc482a9a5a950d320 (commit)
via a1d94ca21f8571b6b35eac1f2e659a93d00a13af (commit)
via 8d1e8a6f47f949cde43a7772dba0110e3f418c7b (commit)
via 92049ad32b5f4af6616c8cc24876c8bcd94aeaaa (commit)
via 6dbdea5e95e0a9839a631a83018461e0466a1dd6 (commit)
via dad97cf1ec7f027207c9f97a1d2bd67c99898822 (commit)
via 2f4a368196c6798ff39559818c5f3e5fb6f78564 (commit)
via 480dee5c2454b8c726ddf37ddac375e8210fced1 (commit)
via 27f057146cb60723634fd91e066cb1564a9f6442 (commit)
via bfd75c2bba2f4b14829053ab567f8d3f082839df (commit)
via 20939be5b8356ecd20a2e66ab49ef65ec1e320ce (commit)
via 35eca0bd71a81eb2f8f5f0303f2448fc373e4425 (commit)
via 7d66ef69e08283e030511a3c0ae5475afad6ab68 (commit)
via 93bebfa785525ded9b9cedca4937477f9b4a4f79 (commit)
via c8a4802591171e9aea14e705ad1a2f3ee4f6e8a3 (commit)
via 9e636e2fd7d53dd6590b2018fb6fff3fb004effb (commit)
via 33edcbccfaa6bbb02892639dac287d96bb7a85a0 (commit)
via 786c44b3b95b98d037a154ad5a8a15fd07caaf4b (commit)
via a75cf7be41d205c5dd1744a1aa9e415af135fe2a (commit)
via 57acf8eb3abaa8ef24b0da6fcf875c629726965b (commit)
via 593917d6eeb2a58e09bcb68f661c936f452d8ac4 (commit)
via a2e198b19b155ddfbab8244a2d6e8d2d66b4f57c (commit)
via 1ead49ee6dd6c0c0213e8db09efb81965940d0be (commit)
via fedc98e14ef3426d99828a4a20313e769d48b0ef (commit)
via 261ab308193ff84a2f4e5ce8e0970bf9ff13bc29 (commit)
via 8d64ecca480b5d5dac89e83a38762c3242ec1567 (commit)
via 16432732b7aa64d5bb053a1e1cd4c2ffe7bd0dbe (commit)
via b85392b80f3121bc616f00635b3f2e0602e0bba1 (commit)
via df923bf1e7c5b5d7766b63766f7a32006b070071 (commit)
via 6bda2761cb886c6bc659acbfe4588b78e7ffee79 (commit)
via 2bb884e215052cb59bc7666d6965df52d4301b83 (commit)
via 82e340c4b01fca0d21f532a4df5e01cecc6d2364 (commit)
via dd00cd131d64157584c79f7cc68e877fbcd1515e (commit)
via 6a8655684a9f041647cf62a9d6cfe9f7e2e290d4 (commit)
via 0b63239adb19d25f153a7ce6638d1f756cf2e6ac (commit)
via 83c04c0b5ebad6e0258e7a1bfb7cd1c015dc6fcd (commit)
via 80ff9ace88fffbd868728d5cdf87eb813851909d (commit)
via c3b70fb15fdcc52cd54bc94655b67c6245cfdcf7 (commit)
via a4c3c6d93cb1fec8eab334319015d0e2afb458b0 (commit)
via b2410570d152c32b38a7b122d56ffaea396c739a (commit)
via 8b4d8f26cc3daeec84f55dcc0502f6fd719127d2 (commit)
via bb5d5c86e0cdacd9ac204bdba3f40b303cab231f (commit)
via 46d6639cfa237e4081fdb6be260a5239632eae39 (commit)
via 0e0069370a906918e5d63f1ba8a8e7449a30b570 (commit)
via dfb5e883ef1b38bc979d7ca8656996b96ae8af8d (commit)
via 159fffd57211b0ec11676aa90ba71e23cea522bd (commit)
via 9d3c8b32079d2613c68f69641fd53e6431d25d25 (commit)
via 10f0a36ce0470175a1ea29b140ce107727fe1f74 (commit)
via cd8ca6634730cc3b6aaf925888a6960265de2e99 (commit)
via 92051350efd6b499afcaadb4346f3754d595f782 (commit)
via 07b8f41c3801977c15b5fee67639d1fdec10566b (commit)
via 06a07622f766b5b71f9642db98d6e35206fe12ae (commit)
via 5cbd6ed195c7ae8ed14503794137704af5ebd3b4 (commit)
via e5c32a1008483c173127cfe0f2e3565c52bd3fa0 (commit)
via efce3d8c64a3670ebd6e133bbc16b75fa4cf2729 (commit)
via a0ad86868c332e5c7c5cebb746f334bf7d790313 (commit)
via 83fe5b9ccfabd886c20c6bfe34fc31742bc835aa (commit)
via 2d4787568917e81191bb864dd47b6f94f66fb3b1 (commit)
via 3bcf06790bf9dc6a953f92cfd7fde394290553e9 (commit)
via 463fe256e2024670eba320203669bd9621615910 (commit)
via 4ecb3a29841d5dc56df79488891f7e1023f5559e (commit)
via 4a7cd96a2c0f2049b42dfa774514be6afc155d08 (commit)
via 1dd8c8e6fcdc0b2cc43faf54c7ad2b28c74e14a0 (commit)
via 8b49bf38224dd20176075e7a7858b3034e4c410c (commit)
via 26caf97420a70fda8cb570be0e9fe8c2a2dcc349 (commit)
via 5bfda994750fe272154607b7c7ae1cfd9a71167d (commit)
via 92562034a2ce74d383711f14d713fb2ddd1493d5 (commit)
via 059b86cfc247887484571c5c1eedd7fc880c647e (commit)
via 4852c738adad71ebb1732340bd64364ad0bf15cf (commit)
via e2ce47843ff8847f2228f248fbc6d3ae571c2687 (commit)
via a41e932cd70388361a76f989816ecc1cb72c37a4 (commit)
via 1bf615c15ab39b13e891d8a16941d6b4fe262f47 (commit)
via 52573f9803675927ea82cb82b948bdec7e6377f2 (commit)
via fc57604b68ba50396e19298b9620c1f8a210551f (commit)
via 52cbe440e7d8e52242a85570d8da4426f570eedb (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (ff76bd5055038b764a4a38c238e8d895fd714f92)
\
N -- N -- N (60b1b2a011b139fb78b798a97993e8b254b8ce63)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Summary of changes:
.gitignore | 11 +
.shipit | 10 +
Changes | 66 ++
MANIFEST | 177 +++++
MANIFEST.SKIP | 12 +
Makefile.PL | 89 ++-
README | 9 +-
bin/darcs-sd | 20 +
bin/git-sd | 52 ++
bin/sd | 33 +-
contrib/git-post-commit-close-ticket | 17 +
contrib/sdticket.vim | 103 +++
README => doc/testing | 2 +-
etc/sd.bash | 7 +
inc/Module/AutoInstall.pm | 768 -------------------
inc/Module/Install.pm | 364 ---------
inc/Module/Install/AutoInstall.pm | 61 --
inc/Module/Install/Base.pm | 72 --
inc/Module/Install/Can.pm | 82 --
inc/Module/Install/Fetch.pm | 93 ---
inc/Module/Install/Include.pm | 34 -
inc/Module/Install/Makefile.pm | 251 -------
inc/Module/Install/Metadata.pm | 487 ------------
inc/Module/Install/Win32.pm | 64 --
inc/Module/Install/WriteAll.pm | 40 -
lib/App/SD.pm | 68 ++-
lib/App/SD/CLI.pm | 72 ++
lib/App/SD/CLI/Command.pm | 43 +-
lib/App/SD/CLI/Command/Attachment/Content.pm | 9 +-
lib/App/SD/CLI/Command/Attachment/Create.pm | 9 +-
lib/App/SD/CLI/Command/Browser.pm | 67 ++
lib/App/SD/CLI/Command/Clone.pm | 48 ++
lib/App/SD/CLI/Command/Help.pm | 53 +-
lib/App/SD/CLI/Command/Help/About.pm | 21 +-
lib/App/SD/CLI/Command/Help/Aliases.pm | 75 ++
lib/App/SD/CLI/Command/Help/Attachments.pm | 33 +-
lib/App/SD/CLI/Command/Help/Authors.pm | 8 +-
lib/App/SD/CLI/Command/Help/Comments.pm | 44 +-
lib/App/SD/CLI/Command/Help/Config.pm | 100 +++
lib/App/SD/CLI/Command/Help/Copying.pm | 4 +-
lib/App/SD/CLI/Command/Help/Environment.pm | 39 +-
lib/App/SD/CLI/Command/Help/History.pm | 52 ++
lib/App/SD/CLI/Command/Help/Intro.pm | 65 ++
lib/App/SD/CLI/Command/Help/Search.pm | 82 ++-
lib/App/SD/CLI/Command/Help/Settings.pm | 44 ++
lib/App/SD/CLI/Command/Help/Sync.pm | 149 +++-
lib/App/SD/CLI/Command/Help/Tickets.pm | 82 ++-
.../SD/CLI/Command/Help/ticket_summary_format.pm | 45 ++
lib/App/SD/CLI/Command/Init.pm | 38 +
lib/App/SD/CLI/Command/Log.pm | 96 +++
lib/App/SD/CLI/Command/Publish.pm | 218 ++++++
lib/App/SD/CLI/Command/Pull.pm | 9 -
lib/App/SD/CLI/Command/Push.pm | 9 -
lib/App/SD/CLI/Command/Server.pm | 11 +-
lib/App/SD/CLI/Command/Shell.pm | 48 ++-
lib/App/SD/CLI/Command/Ticket/Attachment/Create.pm | 25 +-
lib/App/SD/CLI/Command/Ticket/Attachment/Search.pm | 7 +-
.../SD/CLI/Command/Ticket/{Show.pm => Basics.pm} | 6 +-
lib/App/SD/CLI/Command/Ticket/Comment.pm | 4 +-
lib/App/SD/CLI/Command/Ticket/Comment/Create.pm | 26 +-
lib/App/SD/CLI/Command/Ticket/Comment/Update.pm | 7 +-
lib/App/SD/CLI/Command/Ticket/Comments.pm | 37 +-
lib/App/SD/CLI/Command/Ticket/Create.pm | 123 ++--
lib/App/SD/CLI/Command/Ticket/Details.pm | 29 +-
lib/App/SD/CLI/Command/Ticket/Resolve.pm | 14 -
lib/App/SD/CLI/Command/Ticket/Review.pm | 186 +++++
lib/App/SD/CLI/Command/Ticket/Search.pm | 113 +++-
lib/App/SD/CLI/Command/Ticket/Show.pm | 178 +++++-
lib/App/SD/CLI/Command/Ticket/Update.pm | 142 +++--
lib/App/SD/CLI/Command/Version.pm | 15 +
lib/App/SD/CLI/Dispatcher.pm | 234 ++++++
lib/App/SD/CLI/Model/Attachment.pm | 4 +-
lib/App/SD/CLI/Model/Ticket.pm | 249 ++++++-
lib/App/SD/CLI/Model/TicketComment.pm | 4 +-
lib/App/SD/CLI/NewReplicaCommand.pm | 145 ++++
lib/App/SD/Collection/Attachment.pm | 10 +-
lib/App/SD/Collection/Comment.pm | 9 +-
lib/App/SD/Collection/Ticket.pm | 9 +-
lib/App/SD/Config.pm | 184 +++++
lib/App/SD/ForeignReplica.pm | 329 +++++++--
lib/App/SD/ForeignReplica/PullEncoder.pm | 187 +++++-
lib/App/SD/ForeignReplica/PushEncoder.pm | 61 ++-
lib/App/SD/Model/Attachment.pm | 9 +-
lib/App/SD/Model/Comment.pm | 23 +-
lib/App/SD/Model/Ticket.pm | 226 +++++--
lib/App/SD/Record.pm | 16 +-
lib/App/SD/Replica/debbugs.pm | 77 ++-
lib/App/SD/Replica/debbugs/PullEncoder.pm | 628 +++++++++++++++-
lib/App/SD/Replica/debbugs/PushEncoder.pm | 7 +-
lib/App/SD/Replica/gcode.pm | 147 ++++
lib/App/SD/Replica/gcode/PullEncoder.pm | 536 +++++++++++++
lib/App/SD/Replica/gcode/PushEncoder.pm | 195 +++++
lib/App/SD/Replica/github.pm | 119 +++
lib/App/SD/Replica/github/PullEncoder.pm | 248 ++++++
lib/App/SD/Replica/github/PushEncoder.pm | 152 ++++
lib/App/SD/Replica/hm.pm | 206 +++---
lib/App/SD/Replica/hm/PullEncoder.pm | 338 ++++-----
lib/App/SD/Replica/hm/PushEncoder.pm | 345 +++++++--
lib/App/SD/Replica/lighthouse.pm | 187 +++++
lib/App/SD/Replica/lighthouse/PullEncoder.pm | 411 ++++++++++
lib/App/SD/Replica/lighthouse/PushEncoder.pm | 202 +++++
lib/App/SD/Replica/redmine.pm | 72 ++
lib/App/SD/Replica/redmine/PullEncoder.pm | 226 ++++++
lib/App/SD/Replica/redmine/PushEncoder.pm | 148 ++++
lib/App/SD/Replica/rt.pm | 139 ++---
lib/App/SD/Replica/rt/PullEncoder.pm | 423 ++++++-----
lib/App/SD/Replica/rt/PushEncoder.pm | 68 +--
lib/App/SD/Replica/trac.pm | 126 ++++
lib/App/SD/Replica/trac/PullEncoder.pm | 366 +++++++++
lib/App/SD/Replica/trac/PushEncoder.pm | 114 +++
lib/App/SD/Server.pm | 29 +
lib/App/SD/Server/Dispatcher.pm | 133 ++++
lib/App/SD/Server/View.pm | 792 ++++++++++++++++++++
lib/App/SD/Test.pm | 137 +++-
lib/App/SD/Util.pm | 73 ++
share/web/static/css/main.css | 774 +++++++++++++++++++
share/web/static/images/gradient.png | Bin 0 -> 107 bytes
share/web/static/images/sd.png | Bin 0 -> 2074 bytes
t/01-create.t | 14 +-
t/02-create-with-editor.t | 89 ++-
t/03-update-ticket-with-editor.t | 183 ++++-
t/04-update-ticket-comment-with-editor.t | 18 +-
t/06-ticket-show.t | 120 +++
t/07-sort-group.t | 132 ++++
t/attachment-content.t | 10 +-
t/big-hm-rt.t | 2 +-
t/data/sd-ticket-create-verbose.tmpl | 23 +
t/data/sd-ticket-create.tmpl | 16 +
t/data/sd-ticket-update-all-props.tmpl | 18 +
t/data/sd-ticket-update-verbose-all-props.tmpl | 25 +
t/data/sd-ticket-update-verbose.tmpl | 23 +
t/data/sd-ticket-update.tmpl | 17 +
t/no-email.t | 51 ++
t/scripts/ticket-comment-update-editor.pl | 7 +-
t/scripts/ticket-create-editor.pl | 39 +-
t/scripts/ticket-update-editor.pl | 58 ++-
t/sd-attachments.t | 15 +-
t/sd-comments.t | 48 +-
t/sd-dispatcher.t | 217 ++++++
t/sd-gcode/basic.t | 77 ++
t/sd-github/basic.t | 68 ++
t/sd-hm/attachments.t | 71 ++
t/{sd-hm.t => sd-hm/basics.t} | 46 +-
t/sd-hm/comments.t | 72 ++
t/sd-hm/comments1.t | 66 ++
t/sd-hm/group.t | 140 ++++
t/sd-hm/push-reporter-not-pro.t | 128 ++++
t/sd-hm/push-reporter-pro.t | 144 ++++
t/sd-hm/tag.t | 110 +++
t/sd-hm/update.t | 69 ++
t/sd-lighthouse/basic.t | 68 ++
t/sd-lighthouse/real-push.t | 150 ++++
t/sd-log.t | 71 ++
t/sd-redmine/README | 34 +
t/sd-redmine/basic.t | 69 ++
t/sd-redmine/clone.t | 119 +++
t/sd-redmine/net_redmine_test.pl | 61 ++
t/sd-rt.t | 229 ------
t/sd-rt/basic.t | 339 +++++++++
t/sd-rt/bogus-rt-data.t | 103 +++
t/sd-rt/pull-owner.t | 167 ++++
t/sd-rt/pull-watchers.t | 523 +++++++++++++
t/sd-rt/race-condition.t | 133 ++++
t/sd-rt/rt-auto-open-conflict.t | 86 +++
t/sd-rt/sd-rt-hm-single.t | 127 ++++
t/{ => sd-rt}/sd-rt-hm.t | 38 +-
t/{sd-rt-hm.t => sd-rt/sd-rt-n-foreign-sync.t} | 200 ++---
t/sd-rt/sd-rt-permission.t | 182 +++++
t/sd-trac/basic.t | 244 ++++++
t/sd-trac/push-comment.t | 137 ++++
t/sd-trac/push-new-ticket-to-trac-then-pull.t | 107 +++
t/sd-trac/setup_trac.pl | 138 ++++
t/sd-usage.t | 162 ++++
t/sd-validation.t | 41 +-
t/server.t | 101 +++
tools/shipwright-package | 64 ++
tools/shipwright-package-minimal | 47 ++
{t => xt/release}/00-dependencies.t | 2 +-
xt/release/99-pod-coverage.t | 15 +
xt/release/99-pod.t | 5 +
180 files changed, 16294 insertions(+), 4178 deletions(-)
create mode 100644 .gitignore
create mode 100644 .shipit
create mode 100644 Changes
create mode 100644 MANIFEST
create mode 100644 MANIFEST.SKIP
create mode 100755 bin/darcs-sd
create mode 100755 bin/git-sd
create mode 100755 contrib/git-post-commit-close-ticket
create mode 100644 contrib/sdticket.vim
copy README => doc/testing (88%)
create mode 100644 etc/sd.bash
delete mode 100644 inc/Module/AutoInstall.pm
delete mode 100644 inc/Module/Install.pm
delete mode 100644 inc/Module/Install/AutoInstall.pm
delete mode 100644 inc/Module/Install/Base.pm
delete mode 100644 inc/Module/Install/Can.pm
delete mode 100644 inc/Module/Install/Fetch.pm
delete mode 100644 inc/Module/Install/Include.pm
delete mode 100644 inc/Module/Install/Makefile.pm
delete mode 100644 inc/Module/Install/Metadata.pm
delete mode 100644 inc/Module/Install/Win32.pm
delete mode 100644 inc/Module/Install/WriteAll.pm
create mode 100644 lib/App/SD/CLI.pm
create mode 100644 lib/App/SD/CLI/Command/Browser.pm
create mode 100644 lib/App/SD/CLI/Command/Clone.pm
create mode 100644 lib/App/SD/CLI/Command/Help/Aliases.pm
create mode 100644 lib/App/SD/CLI/Command/Help/Config.pm
create mode 100644 lib/App/SD/CLI/Command/Help/History.pm
create mode 100644 lib/App/SD/CLI/Command/Help/Intro.pm
create mode 100644 lib/App/SD/CLI/Command/Help/Settings.pm
create mode 100644 lib/App/SD/CLI/Command/Help/ticket_summary_format.pm
create mode 100644 lib/App/SD/CLI/Command/Init.pm
create mode 100644 lib/App/SD/CLI/Command/Log.pm
create mode 100644 lib/App/SD/CLI/Command/Publish.pm
delete mode 100644 lib/App/SD/CLI/Command/Pull.pm
delete mode 100644 lib/App/SD/CLI/Command/Push.pm
copy lib/App/SD/CLI/Command/Ticket/{Show.pm => Basics.pm} (65%)
delete mode 100644 lib/App/SD/CLI/Command/Ticket/Resolve.pm
create mode 100644 lib/App/SD/CLI/Command/Ticket/Review.pm
create mode 100644 lib/App/SD/CLI/Command/Version.pm
create mode 100644 lib/App/SD/CLI/Dispatcher.pm
create mode 100644 lib/App/SD/CLI/NewReplicaCommand.pm
create mode 100644 lib/App/SD/Config.pm
create mode 100644 lib/App/SD/Replica/gcode.pm
create mode 100644 lib/App/SD/Replica/gcode/PullEncoder.pm
create mode 100644 lib/App/SD/Replica/gcode/PushEncoder.pm
create mode 100644 lib/App/SD/Replica/github.pm
create mode 100644 lib/App/SD/Replica/github/PullEncoder.pm
create mode 100644 lib/App/SD/Replica/github/PushEncoder.pm
create mode 100644 lib/App/SD/Replica/lighthouse.pm
create mode 100644 lib/App/SD/Replica/lighthouse/PullEncoder.pm
create mode 100644 lib/App/SD/Replica/lighthouse/PushEncoder.pm
create mode 100644 lib/App/SD/Replica/redmine.pm
create mode 100644 lib/App/SD/Replica/redmine/PullEncoder.pm
create mode 100644 lib/App/SD/Replica/redmine/PushEncoder.pm
create mode 100644 lib/App/SD/Replica/trac.pm
create mode 100644 lib/App/SD/Replica/trac/PullEncoder.pm
create mode 100644 lib/App/SD/Replica/trac/PushEncoder.pm
create mode 100644 lib/App/SD/Server.pm
create mode 100644 lib/App/SD/Server/Dispatcher.pm
create mode 100644 lib/App/SD/Server/View.pm
create mode 100644 lib/App/SD/Util.pm
create mode 100644 share/web/static/css/main.css
create mode 100644 share/web/static/images/gradient.png
create mode 100644 share/web/static/images/sd.png
create mode 100644 t/06-ticket-show.t
create mode 100644 t/07-sort-group.t
create mode 100644 t/data/sd-ticket-create-verbose.tmpl
create mode 100644 t/data/sd-ticket-create.tmpl
create mode 100644 t/data/sd-ticket-update-all-props.tmpl
create mode 100644 t/data/sd-ticket-update-verbose-all-props.tmpl
create mode 100644 t/data/sd-ticket-update-verbose.tmpl
create mode 100644 t/data/sd-ticket-update.tmpl
create mode 100644 t/no-email.t
create mode 100644 t/sd-dispatcher.t
create mode 100644 t/sd-gcode/basic.t
create mode 100644 t/sd-github/basic.t
create mode 100644 t/sd-hm/attachments.t
rename t/{sd-hm.t => sd-hm/basics.t} (66%)
create mode 100644 t/sd-hm/comments.t
create mode 100644 t/sd-hm/comments1.t
create mode 100644 t/sd-hm/group.t
create mode 100644 t/sd-hm/push-reporter-not-pro.t
create mode 100644 t/sd-hm/push-reporter-pro.t
create mode 100644 t/sd-hm/tag.t
create mode 100644 t/sd-hm/update.t
create mode 100644 t/sd-lighthouse/basic.t
create mode 100644 t/sd-lighthouse/real-push.t
create mode 100644 t/sd-log.t
create mode 100644 t/sd-redmine/README
create mode 100644 t/sd-redmine/basic.t
create mode 100644 t/sd-redmine/clone.t
create mode 100755 t/sd-redmine/net_redmine_test.pl
delete mode 100644 t/sd-rt.t
create mode 100644 t/sd-rt/basic.t
create mode 100644 t/sd-rt/bogus-rt-data.t
create mode 100644 t/sd-rt/pull-owner.t
create mode 100644 t/sd-rt/pull-watchers.t
create mode 100644 t/sd-rt/race-condition.t
create mode 100644 t/sd-rt/rt-auto-open-conflict.t
create mode 100644 t/sd-rt/sd-rt-hm-single.t
copy t/{ => sd-rt}/sd-rt-hm.t (87%)
rename t/{sd-rt-hm.t => sd-rt/sd-rt-n-foreign-sync.t} (53%)
create mode 100644 t/sd-rt/sd-rt-permission.t
create mode 100644 t/sd-trac/basic.t
create mode 100644 t/sd-trac/push-comment.t
create mode 100644 t/sd-trac/push-new-ticket-to-trac-then-pull.t
create mode 100644 t/sd-trac/setup_trac.pl
create mode 100644 t/sd-usage.t
create mode 100644 t/server.t
create mode 100644 tools/shipwright-package
create mode 100644 tools/shipwright-package-minimal
rename {t => xt/release}/00-dependencies.t (97%)
create mode 100644 xt/release/99-pod-coverage.t
create mode 100644 xt/release/99-pod.t
- Log -----------------------------------------------------------------
commit f2f887c4a0330dd903d2f299af3dd40ef76d960e
Author: Christine Spang <spang at bestpractical.com>
Date: Wed Aug 26 18:22:28 2009 +0100
Wrap long lines in PullEncoder.pm
diff --git a/lib/App/SD/ForeignReplica/PullEncoder.pm b/lib/App/SD/ForeignReplica/PullEncoder.pm
index fefe3af..308ae4c 100644
--- a/lib/App/SD/ForeignReplica/PullEncoder.pm
+++ b/lib/App/SD/ForeignReplica/PullEncoder.pm
@@ -43,19 +43,22 @@ sub transcode_ticket {
my @changesets;
if ( my $ticket_last_modified = $self->ticket_last_modified($ticket) ) {
-
- $last_modified = $ticket_last_modified if ( !$last_modified || $ticket_last_modified > $last_modified );
+ $last_modified = $ticket_last_modified
+ if ( !$last_modified || $ticket_last_modified > $last_modified );
}
my $transactions = $self->find_matching_transactions(
ticket => $ticket,
- starting_transaction => $self->sync_source->app_handle->handle->last_changeset_from_source(
+ starting_transaction =>
+ $self->sync_source->app_handle->handle->last_changeset_from_source(
$self->sync_source->uuid_for_remote_id( $self->ticket_id($ticket) )
- ) || 1
+ ) || 1,
);
my $changesets;
- ( $last_modified, $changesets ) = $self->transcode_history( $ticket, $transactions, $last_modified );
+ ( $last_modified, $changesets ) = $self->transcode_history(
+ $ticket, $transactions, $last_modified );
+
return ( $last_modified, $changesets );
}
@@ -71,12 +74,15 @@ sub transcode_history {
# Walk transactions newest to oldest.
my $txn_counter = 0;
- my ($initial_state, $final_state) = $self->translate_ticket_state($ticket, $transactions);
+ my ($initial_state, $final_state)
+ = $self->translate_ticket_state($ticket, $transactions);
for my $txn ( sort { $b->{'serial'} <=> $a->{'serial'} } @$transactions ) {
- $last_modified = $txn->{timestamp} if ( !$last_modified || ( $txn->{timestamp} > $last_modified ) );
- $self->sync_source->log_debug( "$ticket_id Transcoding transaction " . ++$txn_counter . " of " . scalar @$transactions );
+ $last_modified = $txn->{timestamp}
+ if ( !$last_modified || ( $txn->{timestamp} > $last_modified ) );
+ $self->sync_source->log_debug( "$ticket_id Transcoding transaction "
+ . ++$txn_counter . " of " . scalar @$transactions );
my $changeset = $self->transcode_one_txn( $txn, $initial_state, $final_state );
next unless $changeset && $changeset->has_changes;
@@ -115,16 +121,17 @@ modified before that datetime
sub _only_pull_tickets_modified_after {
my $self = shift;
- # last modified date is in GMT and searches are in user-time XXX -check assumption
- # because of this, we really want to back that date down by one day to catch overlap
- # XXX TODO we are playing FAST AND LOOSE WITH DATE MATH
+ # last modified date is in GMT and searches are in user-time XXX -check
+ # assumption because of this, we really want to back that date down by one
+ # day to catch overlap
+ # XXX TODO we are playing FAST AND LOOSE WITH DATE
# XXX TODO THIS WILL HURT US SOME DAY
# At that time, Jesse will buy you a beer.
my $last_pull = $self->sync_source->upstream_last_modified_date();
return undef unless $last_pull;
my $before = App::SD::Util::string_to_datetime($last_pull);
- die "Failed to parse '" . $self->sync_source->upstream_last_modified_date() . "' as a timestamp"
- unless ($before);
+ die "Failed to parse '" . $self->sync_source->upstream_last_modified_date()
+ . "' as a timestamp" unless ($before);
# 26 hours ago deals with most any possible timezone/dst edge case
$before->subtract( hours => 26 );
@@ -133,8 +140,8 @@ sub _only_pull_tickets_modified_after {
}
sub new_comment_creation_change {
- my $self = shift;
- return Prophet::Change->new(
+ my $self = shift;
+ return Prophet::Change->new(
{
record_type => 'comment',
record_uuid => $self->sync_source->uuid_generator->create_str()
commit 5a9fdaef1630b31d67b3cbab16637e24ddb3ff1c
Author: Christine Spang <spang at bestpractical.com>
Date: Wed Aug 26 18:24:01 2009 +0100
Add debbugs deps to Makefile.PL
diff --git a/Makefile.PL b/Makefile.PL
index 75e5f87..58ea538 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -68,6 +68,11 @@ feature 'Lighthouse sync' => (
'Net::Lighthouse' => 0.01,
);
+feature 'Debbugs sync (experimental)' => (
+ -default => 0,
+ 'SOAP::Lite' => 0,
+);
+
install_script('bin/sd');
install_script('bin/git-sd');
install_script('bin/darcs-sd');
commit 1311d4ed8aaccfcebcebee31bb9e1bcbdbf12417
Author: Christine Spang <spang at bestpractical.com>
Date: Sun Sep 6 22:50:45 2009 -0400
add missing stubs in ForeignReplica.pm for methods that subclasses must implement
diff --git a/lib/App/SD/ForeignReplica/PullEncoder.pm b/lib/App/SD/ForeignReplica/PullEncoder.pm
index 308ae4c..a6b090e 100644
--- a/lib/App/SD/ForeignReplica/PullEncoder.pm
+++ b/lib/App/SD/ForeignReplica/PullEncoder.pm
@@ -34,7 +34,7 @@ sub run {
return [ sort { App::SD::Util::string_to_datetime($a->created) <=> App::SD::Util::string_to_datetime( $b->created) } @changesets];
}
-sub ticket_last_modified { undef}
+sub ticket_last_modified { undef }
sub transcode_ticket {
my $self = shift;
@@ -93,6 +93,13 @@ sub transcode_history {
return ( $last_modified, \@changesets );
}
+sub find_matching_tickets {
+ die 'find_matching_transactions must be implemented';
+}
+
+sub find_matching_transactions {
+ die 'find_matching_transactions must be implemented';
+}
sub translate_ticket_state {
die 'translate_ticket_state must be implemented';
commit 3f84da7dc72997a80a9428f0f716892dc7a2c12d
Author: Christine Spang <spang at bestpractical.com>
Date: Thu Aug 5 15:39:51 2010 -0400
remove trailing whitespace in ForeignReplica.pm
diff --git a/lib/App/SD/ForeignReplica.pm b/lib/App/SD/ForeignReplica.pm
index aa76108..21484f0 100644
--- a/lib/App/SD/ForeignReplica.pm
+++ b/lib/App/SD/ForeignReplica.pm
@@ -76,32 +76,32 @@ sub record_pushed_transactions {
my $earliest_valid_txn_date;
# walk through every transaction on the ticket, starting with the latest
-
+
for my $txn ( $self->get_txn_list_by_date($args{ticket}) ) {
-
+
# walk backwards through all transactions on the ticket we just updated
# Skip any transaction where the remote user isn't me, this might include any transaction
# RT created with a scrip on your behalf
-
+
next unless $txn->{creator} eq $self->foreign_username;
# get the completion time _after_ we do our next round trip to rt to try to make sure
# a bit of lag doesn't skew us to the wrong side of a 1s boundary
-
-
+
+
if (!$earliest_valid_txn_date){
my $change_window = time() - $args{start_time};
# skip any transaction created more than 5 seconds before the push started.
# I can't think of any reason that number shouldn't be 1, but clocks are fickle
- $earliest_valid_txn_date = $txn->{created} - ($change_window + 5);
- }
+ $earliest_valid_txn_date = $txn->{created} - ($change_window + 5);
+ }
last if $txn->{created} < $earliest_valid_txn_date;
# if the transaction id is older than the id of the last changeset
# we got from the original source of this changeset, we're done
last if $txn->{id} <= $self->app_handle->handle->last_changeset_from_source($args{changeset}->original_source_uuid);
-
+
# if the transaction from RT is more recent than the most recent
# transaction we got from the original source of the changeset
# then we should record that we sent that transaction upstream
@@ -113,11 +113,11 @@ sub record_pushed_transactions {
);
}
}
-
+
=head2 record_pushed_transaction $foreign_transaction_id, $changeset
-Record that this replica was the original source of $foreign_transaction_id
+Record that this replica was the original source of $foreign_transaction_id
(with changeset $changeset)
=cut
@@ -149,7 +149,7 @@ once we've done a pull from the remote replica, we can safely expire
all records of this type for the remote replica (they'll be
obsolete)
-We use this cache to avoid integrating changesets we've pushed to the
+We use this cache to avoid integrating changesets we've pushed to the
remote replica when doing a subsequent pull
=cut
@@ -226,7 +226,7 @@ sub remote_uri_path_for_id {
=head2 uuid_for_remote_id $id
-lookup the uuid for the remote record id. If we don't find it,
+lookup the uuid for the remote record id. If we don't find it,
construct it out of the remote url and the remote uri path for the record id;
=cut
commit 1cbe1ac3cf67225d1f64c2fd9d781bf641e30cd4
Author: Christine Spang <spang at bestpractical.com>
Date: Thu Aug 5 15:41:06 2010 -0400
cleanups, POD additions, interface additions
diff --git a/lib/App/SD/ForeignReplica/PullEncoder.pm b/lib/App/SD/ForeignReplica/PullEncoder.pm
index a6b090e..15b1762 100644
--- a/lib/App/SD/ForeignReplica/PullEncoder.pm
+++ b/lib/App/SD/ForeignReplica/PullEncoder.pm
@@ -36,6 +36,17 @@ sub run {
sub ticket_last_modified { undef }
+=head2 transcode_ticket $ticket, $last_modified
+
+Morph a ticket's history into changesets.
+
+XXX what is last_modified for? currently it is always passed in as undef
+and seems to do nothing
+
+Return ($last_modified, $changesets).
+
+=cut
+
sub transcode_ticket {
my $self = shift;
my $ticket = shift;
@@ -62,14 +73,21 @@ sub transcode_ticket {
return ( $last_modified, $changesets );
}
+=head2 transcode_history $ticket $transactions $last_modified
+
+Translates transactions from the foreign source for the given ticket and
+returns an updated last_modified date and a set of Prophet::ChangeSet objects
+that correspond to the transactions.
+
+=cut
sub transcode_history {
my $self = shift;
my $ticket = shift;
my $transactions = shift;
my $last_modified = shift;
- my $ticket_id = $self->ticket_id($ticket);
+ my $ticket_id = $self->ticket_id($ticket);
my @changesets;
# Walk transactions newest to oldest.
@@ -81,14 +99,17 @@ sub transcode_history {
for my $txn ( sort { $b->{'serial'} <=> $a->{'serial'} } @$transactions ) {
$last_modified = $txn->{timestamp}
if ( !$last_modified || ( $txn->{timestamp} > $last_modified ) );
+
$self->sync_source->log_debug( "$ticket_id Transcoding transaction "
. ++$txn_counter . " of " . scalar @$transactions );
- my $changeset = $self->transcode_one_txn( $txn, $initial_state, $final_state );
- next unless $changeset && $changeset->has_changes;
-
- # the changesets are older than the ones that came before, so they goes first
- unshift @changesets, $changeset;
+ my $changeset = $self->transcode_one_txn(
+ $txn, $initial_state, $final_state );
+ if ( $changeset && $changeset->has_changes ) {
+ # the new changeset is older than the ones that came before, so it
+ # goes first
+ unshift @changesets, $changeset;
+ }
}
return ( $last_modified, \@changesets );
}
@@ -105,6 +126,10 @@ sub translate_ticket_state {
die 'translate_ticket_state must be implemented';
}
+sub transcode_one_txn {
+ die 'transcode_one_txn must be implemented';
+}
+
sub warp_list_to_old_value {
my $self = shift;
my $current = shift;
commit 14dd37ebfabd3c973d83b119fdc05b7ee80f036a
Author: Christine Spang <spang at bestpractical.com>
Date: Fri Aug 6 15:22:24 2010 -0400
sorta working import
diff --git a/lib/App/SD/Replica/debbugs.pm b/lib/App/SD/Replica/debbugs.pm
index 115ffc2..8b7ca65 100644
--- a/lib/App/SD/Replica/debbugs.pm
+++ b/lib/App/SD/Replica/debbugs.pm
@@ -2,17 +2,15 @@ package App::SD::Replica::debbugs;
use Any::Moose;
extends qw/App::SD::ForeignReplica/;
-use Params::Validate qw(:all);
use Memoize;
-use Prophet::ChangeSet;
-
use constant scheme => 'debbugs';
+use constant pull_encoder => 'App::SD::Replica::debbugs::PullEncoder';
+use constant push_encoder => 'App::SD::Replica::debbugs::PushEncoder';
-# FIXME: what should this actually be?
-has debbugs => ( isa => 'Net::Debbugs', is => 'rw');
-has remote_url => ( isa => 'Str', is => 'rw');
-has debbugs_query => ( isa => 'Str', is => 'rw');
+has debbugs => ( isa => 'SOAP::Lite', is => 'rw' );
+has remote_url => ( isa => 'Str', is => 'rw');
+has query => ( isa => 'HashRef', is => 'rw');
=head2 BUILD
@@ -24,15 +22,56 @@ sub BUILD {
my $self = shift;
# require any specific libs needed by this foreign replica
+ require SOAP::Lite;
+
+ # parse the given url / query
+ my ($server, $query) = $self->{url} =~ m/^debbugs:(.*?)\|(.*)$/;
+ print "\n$server\n";
+ print $query . "\n";
+ ($server, $query) = $self->{url} =~ m/^debbugs:(.*?)\|(.*)$/
+ or die "Can't parse debbugs query. "
+ . "Expected debbugs:http://bugs.example.org|QUERY.\n";
+ # QUERY looks like: submitter=spang at mit.edu,owner=spang at mit.edu
+
+ # $self->remote_url( "$server/cgi-bin/soap.cgi" );
+ $self->remote_url( $server );
- # parse the given url
- # my ($foo, $bar, $baz) = $self->{url} =~ m/regex-here/
+ # XXX TODO make this more robust (quoted values etc)
+ my %query_hash = split /=|,/, $query;
+ # use Data::Dump qw(pp);
+ # pp %query_hash;
- # ...
+ # queries to support: all things that are passed to get_status, get_newest
+ $self->query( \%query_hash );
+
+ # debbugs sync does not require auth
+ $self->debbugs(SOAP::Lite->uri('Debbugs/SOAP')->proxy($self->remote_url));
}
sub record_pushed_transactions {}
+=head2 uuid
+
+Return the replica's UUID
+XXX cut-n-paste directly from RT sync, should move to ForeignReplica?
+
+=cut
+
+sub uuid {
+ my $self = shift;
+ return $self->uuid_for_url( join( '/', $self->remote_url, $self->query ) );
+
+}
+
+=head2 remote_uri_path_for_id
+
+=cut
+
+sub remote_uri_path_for_id {
+ my ($self, $id) = @_;
+ return "/cgi-bin/bugreport.cgi?bug=$id";
+}
+
__PACKAGE__->meta->make_immutable;
no Any::Moose;
1;
diff --git a/lib/App/SD/Replica/debbugs/PullEncoder.pm b/lib/App/SD/Replica/debbugs/PullEncoder.pm
index a523f4e..a65f2b6 100644
--- a/lib/App/SD/Replica/debbugs/PullEncoder.pm
+++ b/lib/App/SD/Replica/debbugs/PullEncoder.pm
@@ -1,87 +1,524 @@
package App::SD::Replica::debbugs::PullEncoder;
use Any::Moose;
+extends 'App::SD::ForeignReplica::PullEncoder';
use Params::Validate qw(:all);
use Memoize;
+use Mail::Address qw();
+
+use Prophet::ChangeSet;
+use Prophet::Change;
+
+use DateTime;
has sync_source => (
isa => 'App::SD::Replica::debbugs',
is => 'rw',
);
-our $DEBUG = $Prophet::Handle::DEBUG;
+my $DEBUG = 1;
+
+# methods used in RUN
+
+=head2 ticket_last_modified $ticket
+
+Given a ticket, returns when it was last modified.
+
+XXX what format should this be in?
+
+=cut
+
+# used in transcode_ticket, which is called from RUN
+sub ticket_last_modified {
+ my ($self, $ticket) = @_;
+
+ return $ticket->{last_modified};
+}
+
+=head2 ticket_id $ticket
+
+Given a ticket, returns its ID. In the case of Debbugs,
+this is the bug's bug number.
+
+=cut
+
+sub ticket_id {
+ my ($self, $ticket) = @_;
+
+ return $ticket->{id};
+}
+
+=head2 find_matching_tickets( query => QUERY )
+
+Looks up ticket numbers matching the query and returns an arrayref listing
+their statuses.
+
+This method is called from App::SD::ForeignReplica::PullEncoder's run method,
+and is the first method called there.
-sub run {
+=cut
+
+sub find_matching_tickets {
my $self = shift;
- my %args = validate( @_, {
- # mandatory args go here
- example => 1,
+ my %args = @_;
+
+ if ( $DEBUG ) {
+ print "* query is:\n";
+ use Data::Dump qw(pp);
+ pp $args{query};
+ }
+
+ # XXX TODO: sanity-check the query (don't try to send anything to debbugs
+ # that it doesn't understand)
+
+ # an arrayref of bug numbers
+ my $bug_numbers;
+
+ if ( $args{query}->{bugnumber} ) {
+ $bug_numbers = [ $args{query}->{bugnumber} ];
+ }
+ else {
+ $bug_numbers
+ = $self->sync_source->debbugs->get_bugs( %{ $args{query} } )->result();
+ }
+
+ if ( $DEBUG ) {
+ print "* matching bug numbers:\n";
+ pp $bug_numbers;
+ }
+
+ # we also need to get the bug statuses, because we'll need some more
+ # information in the ticket objects than just the bug numbers, for
+ # the API that SD gives us
+ my $bug_statuses = $self->sync_source->debbugs->get_status(
+ @{ $bug_numbers } )->result();
+
+ # it's OK to throw away the keys because the hashes for each bug
+ # still have the bug number in them (under the key 'id')
+ my @bug_statuses = values %{ $bug_statuses };
+
+ return wantarray ? @bug_statuses : \@bug_statuses;
+}
+
+=head2 find_matching_transactions { ticket => $id, starting_transaction => $num }
+
+Returns a reference to an array of all transactions (as hashes) on ticket $id
+after transaction $num.
+
+XXX this method assumes that the foreign source has GLOBAL SEQUENCE NUMBER.
+How do we work around this?
+
+=cut
+
+sub find_matching_transactions {
+ my $self = shift;
+ my %args = validate( @_, { ticket => 1, starting_transaction => 1 } );
+
+ if ( $DEBUG ) {
+ warn "* find_matching_transactions\n";
+ }
+
+ # get_machine_readable_bug_log guarantees returned transactions to
+ # be in order from oldest to newest
+ my @raw_txns
+ = @{ $self->sync_source->debbugs->get_machine_readable_bug_log(
+ $self->ticket_id( $args{ticket} ))->result() };
+
+ my @txns;
+ # XXX this is mostly copy-pasted from the trac sync
+ for my $txn ( @raw_txns ) {
+ my $txn_id = $txn->{log_entry_num};
+
+ # we need to use the datetime representation an awful
+ # lot, so might as well only create it once, here
+ $txn->{date} = DateTime->from_epoch( epoch => $txn->{time} );
+
+ # Skip things we know we've already pulled
+ next if $txn_id < ( $args{'starting_transaction'} || 0 );
+ # Skip things we've pushed
+ next if ($self->sync_source->foreign_transaction_originated_locally(
+ $txn_id, $self->ticket_id( $args{'ticket'} )));
+
+ # ok. it didn't originate locally. we might want to integrate it
+ # XXX what is the difference between timestamp and serial?
+ push @txns, { timestamp => $txn->{time},
+ serial => $txn_id,
+ object => $txn};
+ }
+ $self->sync_source->log_debug('Done looking at pulled txns');
+ return \@txns;
+
+}
+
+=head2 translate_ticket_state
+
+XXX wtf is this supposed to do?
+
+=cut
+
+sub translate_ticket_state {
+ my $self = shift;
+ my $ticket_object = shift;
+ my $transactions = shift;
+
+ if ( $DEBUG ) {
+ warn "* translate_ticket_state\n";
+ }
+
+ my $created = DateTime->from_epoch( epoch => $ticket_object->{date} );
+
+ my $ticket_data = {
+
+ $self->sync_source->uuid . '-id' => $self->ticket_id( $ticket_object ),
+
+ status => $self->_determine_bug_status( $ticket_object ),
+ created => ( $created->ymd . " " . $created->hms ),
+
+ owner => ( $ticket_object->{owner} || undef ),
+ reporter => ( $ticket_object->{originator} || undef ),
+ title => ( $ticket_object->{subject} || undef ),
+ tags => ( $ticket_object->{tags} || undef ),
+ package => ( $ticket_object->{package} || undef ),
+ severity => ( $ticket_object->{severity} || undef ),
+ };
+
+ # # delete undefined and empty fields
+ # delete $ticket_data->{$_}
+ # for grep !defined $ticket_data->{$_} || $ticket_data->{$_} eq '', keys %$ticket_data;
+
+ return ($ticket_object, $ticket_data);
+}
+
+=head2 transcode_one_txn $txn_wrapper, $ticket, $ticket_final
+
+Turn a single transaction into a Prophet ChangeSet. May
+return zero or one changesets (some transactions aren't
+worth creating changesets for).
+
+=cut
+
+# XXX mostly stolen from the trac replica
+sub transcode_one_txn {
+ my ( $self, $txn_wrapper, $ticket, $ticket_final ) = (@_);
+
+ if ( $DEBUG ) {
+ warn "* transcode_one_txn\n";
+ }
+
+ my $txn = $txn_wrapper->{object};
+
+ # for now we're not recording outgoing messages locally; most
+ # of them are boring (and one is always present before the actual
+ # incoming message that creates the bug, which is a slight
+ # complexity that we'd prefer to ignore for now.
+
+ # return if ( $txn->{type} eq 'outgoing-message' );
+
+ # XXX testing
+ if ( $DEBUG ) {
+ unless ( $txn->{type} eq 'create' ) {
+ warn "- skipping txn with type $txn->{type}\n";
+ return;
}
+ }
+
+ # my $ticket_uuid = $self->sync_source->uuid_for_remote_id(
+ # $ticket->{ $self->sync_source->uuid . '-id' } );
+ my $ticket_uuid = $self->sync_source->uuid_for_remote_id( $ticket->{id} );
+
+ my %transcode_dispatch = (
+ 'create' => \&_transcode_create_txn,
+ 'close' => \&_transcode_close_txn,
+ 'change' => \&_transcode_change_txn,
+ 'incoming-message' => \&_transcode_comment_txn,
);
- # TODO: code goes here
+ my $sub = $transcode_dispatch{ $txn->{type} };
+
+ if ( $sub ) {
+ warn "- dispatching to $txn->{type}\n";
+ return $sub->( $self, $txn, $ticket, $ticket_final, $ticket_uuid );
+ }
+ else {
+ die "Attempt to transcode unknown log entry type '$txn->{type}'.".
+ "Please update debbugs bridge for changed API!\n";
+ }
}
-our %PROP_MAP = (
- remote_prop => 'sd_prop',
- # ...
+=head2 database_settings
+
+Custom settings for this foreign replica.
+
+=cut
+
+sub database_settings {
+ my $self = shift;
+
+ my @resolutions = qw(fixed wontfix);
+
+ my @active_statuses = qw(open pending blocked);
+
+ return {
+ active_statuses => [@active_statuses],
+ statuses => [ @active_statuses, @resolutions ],
+ };
}
-=head2 translate_prop_names L<Prophet::ChangeSet>
+=head1 INTERNAL FUNCTIONS
+
+This stuff isn't required by the SD foreign replica API; they're merely used
+internally to this module and called by things that are implementing part of
+the interface.
=cut
-sub translate_prop_names {
- my $self = shift;
- my $changeset = shift;
+sub _determine_bug_status {
+ my ($self, $ticket_obj) = @_;
- # ...
+ if ( $ticket_obj->{archived} ) {
+ return 'archived';
+ }
+ elsif ( $ticket_obj->{fixed} ) {
+ return 'fixed';
+ }
+ elsif ( $ticket_obj->{blockedby} ) {
+ return 'blocked';
+ }
+ elsif ( $ticket_obj->{pending} eq 'pending-fixed' ) {
+ return 'pending';
+ }
+ else {
+ return 'open';
+ }
+}
+
+sub _transcode_create_txn {
+ my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
+
+ use Data::Dump qw(pp);
+ warn pp $txn;
+
+ my $changeset = $self->_create_changeset(
+ $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{submitter} ),
+ );
+
+ my $change = Prophet::Change->new(
+ { record_type => 'ticket',
+ record_uuid => $ticket_uuid,
+ change_type => 'add_file'
+ }
+ );
+
+ for my $prop ( qw(package severity version) ) {
+ $change->add_prop_change(
+ name => $prop,
+ old => '',
+ new => $txn->{pseudo_headers}->{$prop},
+ );
+ }
+
+ $change->add_prop_change(
+ name => 'subject',
+ old => '',
+ new => $txn->{title},
+ );
+
+ $change->add_prop_change(
+ name => 'reporter',
+ old => '',
+ new => $txn->{submitter},
+ );
+
+ $changeset->add_change( { change => $change } );
+
+ # creates basically always have comments too
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+
+ if ( $comment ) {
+ $changeset->add_change( { change => $comment } );
+ }
return $changeset;
}
-=head2 resolve_user_id_to_email ID
+sub _create_changeset {
+ my ($self, $txn, $ticket_uuid, $creator) = @_;
+
+ my $changeset = Prophet::ChangeSet->new(
+ { original_source_uuid => $ticket_uuid,
+ original_sequence_no => $txn->{id},
+ creator => $creator,
+ created => $txn->{date}->ymd . " " . $txn->{date}->hms
+ }
+ );
-This is only implemented in Hiveminder::PullEncoder; in RT::PullEncoder
-it's resolve_user_id_to. What's this for, actually?
+ return $changeset;
+}
+
+sub _transcode_comment_txn {
+ my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
+
+ my $changeset = $self->_create_changeset(
+ $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{from} ),
+ );
+
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+
+ if ( $comment ) {
+ $changeset->add_change( { change => $comment } );
+ }
+}
+
+=head2 _create_new_comment $txn, $ticket_uuid
+
+Given a transaction and a ticket UUID, creates a new comment based on the email
+body. May return undef if the message was blank.
=cut
-sub resolve_user_id_to_email {
- my $self = shift;
- my $id = shift;
- return undef unless ($id);
+sub _create_new_comment {
+ my ($self, $txn, $ticket_uuid) = @_;
- # ...
+ my $message = $txn->{body};
+ my $comment = $self->new_comment_creation_change();
+
+ if ( $message !~ /^\s*$/s ) {
+ $comment->add_prop_change(
+ name => 'created',
+ new => $txn->{date}->ymd . ' ' . $txn->{date}->hms,
+ );
+ $comment->add_prop_change(
+ name => 'creator',
+ new => $self->resolve_user_id_to_email( $txn->{from} ),
+ );
+ $comment->add_prop_change( name => 'content', new => $message );
+ $comment->add_prop_change(
+ name => 'content_type',
+ new => 'text/plain',
+ );
+ $comment->add_prop_change( name => 'ticket', new => $ticket_uuid );
- # returns email address mapping to user id
+ return $comment;
+ }
}
-memoize 'resolve_user_id_to_email';
+sub _transcode_close_txn {
+ my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
+
+ my $changeset = $self->_create_changeset(
+ $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{from} ),
+ );
+
+ my $change = Prophet::Change->new(
+ { record_type => 'ticket',
+ record_uuid => $ticket_uuid,
+ change_type => 'update_file'
+ }
+ );
+
+ $change->add_prop_change(
+ name => 'status',
+ # XXX how to determine the previous state of this bug?
+ old => 'unknown',
+ new => 'fixed',
+ );
+
+ # mails to nnnnnn-close@ always contain a comment too, but
+ # there's also the BTS close command -- this stuff should
+ # be abstracted away by the server-side code in the SOAP call
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+
+ if ( $comment ) {
+ $changeset->add_change( { change => $comment } );
+ }
+
+ return $changeset;
+}
+
+sub _transcode_change_txn {
+ my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
+
+ # changes from old bugs that don't record metadata in the log are ignored
+ # for now, because they're a pain to parse (and if you go back far enough,
+ # nothing at all is actually recorded)
+ if ( $txn->{command} ) {
+ my $changeset = Prophet::ChangeSet->new(
+ { original_source_uuid => $ticket_uuid,
+ original_sequence_no => $txn->{id},
+ creator => $self->resolve_user_id_to_email( $txn->{from} ),
+ created => $txn->{date}->ymd . " " . $txn->{date}->hms
+ }
+ );
+
+ my $change = Prophet::Change->new(
+ { record_type => 'ticket',
+ record_uuid => $ticket_uuid,
+ change_type => 'update_file'
+ }
+ );
+
+ for my $prop ( keys %{ $txn->{old_data} } ) {
+ $prop = lc $prop;
+ $change->add_prop_change(
+ # XXX are we doing any translation between debbugs and SD
+ # with %PROP_MAP?
+ name => $prop,
+ old => $txn->{old_data}->{$prop},
+ new => $txn->{new_data}->{$prop},
+ );
+ }
+
+ $changeset->add_change( { change => $change } )
+ if $change->has_prop_changes;
+
+ return $changeset->has_changes ? $changeset : undef;
+ }
+}
-=head2 find_matching_tickets QUERY
+# our %PROP_MAP = (
+# package => 'component',
+# originator => 'reporter',
+# # remote_prop => 'sd_prop',
+# );
+
+=head2 translate_prop_names L<Prophet::ChangeSet>
=cut
-sub find_matching_tickets {
- my $self = shift;
- my ($query) = validate_pos(@_, 1);
- return $self->sync_source->rt->search( type => 'ticket', query => $query );
+sub translate_prop_names {
+ my $self = shift;
+ my $changeset = shift;
+
+ # ...
+
+ return $changeset;
}
-=head2 find_matching_transactions TASK, START
+=head2 resolve_user_id_to_email ID
+
+Transform a remote user id to an email address. In the case of
+debbugs, we just parse the full address and return only the
+address part, for now.
=cut
-sub find_matching_transactions {
+sub resolve_user_id_to_email {
my $self = shift;
- my %args = validate( @_, { task => 1, starting_transaction => 1 } );
+ my $id = shift;
- # ...
+ # we'll throw away the name for now
+ my $email = Mail::Address->parse( $id );
+
+ return $email;
- return \@matched;
}
+memoize 'resolve_user_id_to_email';
+
__PACKAGE__->meta->make_immutable;
no Any::Moose;
+
1;
commit 4b923cb34c2578f837d995847897d38bd12607e3
Author: Christine Spang <spang at bestpractical.com>
Date: Fri Aug 6 15:46:59 2010 -0400
oh hey it kinda works
diff --git a/lib/App/SD/Replica/debbugs/PullEncoder.pm b/lib/App/SD/Replica/debbugs/PullEncoder.pm
index a65f2b6..2f5492e 100644
--- a/lib/App/SD/Replica/debbugs/PullEncoder.pm
+++ b/lib/App/SD/Replica/debbugs/PullEncoder.pm
@@ -330,6 +330,12 @@ sub _transcode_create_txn {
new => $txn->{submitter},
);
+ $change->add_prop_change(
+ name => 'status',
+ old => '',
+ new => 'open',
+ );
+
$changeset->add_change( { change => $change } );
# creates basically always have comments too
@@ -347,7 +353,7 @@ sub _create_changeset {
my $changeset = Prophet::ChangeSet->new(
{ original_source_uuid => $ticket_uuid,
- original_sequence_no => $txn->{id},
+ original_sequence_no => $txn->{log_entry_num},
creator => $creator,
created => $txn->{date}->ymd . " " . $txn->{date}->hms
}
commit 60b1b2a011b139fb78b798a97993e8b254b8ce63
Author: Christine Spang <spang at bestpractical.com>
Date: Sat Aug 7 00:14:39 2010 -0400
integrate changesets other than creates
diff --git a/lib/App/SD/Replica/debbugs/PullEncoder.pm b/lib/App/SD/Replica/debbugs/PullEncoder.pm
index 2f5492e..25021cb 100644
--- a/lib/App/SD/Replica/debbugs/PullEncoder.pm
+++ b/lib/App/SD/Replica/debbugs/PullEncoder.pm
@@ -22,9 +22,8 @@ my $DEBUG = 1;
=head2 ticket_last_modified $ticket
-Given a ticket, returns when it was last modified.
-
-XXX what format should this be in?
+Given a ticket, returns when it was last modified
+as a unix epoch.
=cut
@@ -37,7 +36,7 @@ sub ticket_last_modified {
=head2 ticket_id $ticket
-Given a ticket, returns its ID. In the case of Debbugs,
+Given a ticket, returns its ID from the foreign source. In the case of Debbugs,
this is the bug's bug number.
=cut
@@ -146,8 +145,8 @@ sub find_matching_transactions {
object => $txn};
}
$self->sync_source->log_debug('Done looking at pulled txns');
- return \@txns;
+ return \@txns;
}
=head2 translate_ticket_state
@@ -180,13 +179,13 @@ sub translate_ticket_state {
tags => ( $ticket_object->{tags} || undef ),
package => ( $ticket_object->{package} || undef ),
severity => ( $ticket_object->{severity} || undef ),
+ id => ( $ticket_object->{id} || undef ),
};
- # # delete undefined and empty fields
- # delete $ticket_data->{$_}
- # for grep !defined $ticket_data->{$_} || $ticket_data->{$_} eq '', keys %$ticket_data;
-
- return ($ticket_object, $ticket_data);
+ # $ticket will be updated as we walk backwards through log entries.
+ # Eventually, $ticket should be the beginning state of the ticket
+ # (just after create).
+ return ($ticket_data, $ticket_data);
}
=head2 transcode_one_txn $txn_wrapper, $ticket, $ticket_final
@@ -212,15 +211,15 @@ sub transcode_one_txn {
# incoming message that creates the bug, which is a slight
# complexity that we'd prefer to ignore for now.
- # return if ( $txn->{type} eq 'outgoing-message' );
+ return if ( $txn->{type} eq 'outgoing-message' );
# XXX testing
- if ( $DEBUG ) {
- unless ( $txn->{type} eq 'create' ) {
- warn "- skipping txn with type $txn->{type}\n";
- return;
- }
- }
+ # if ( $DEBUG ) {
+ # unless ( $txn->{type} eq 'create' ) {
+ # warn "- skipping txn with type $txn->{type}\n";
+ # return;
+ # }
+ # }
# my $ticket_uuid = $self->sync_source->uuid_for_remote_id(
# $ticket->{ $self->sync_source->uuid . '-id' } );
@@ -254,9 +253,9 @@ Custom settings for this foreign replica.
sub database_settings {
my $self = shift;
- my @resolutions = qw(fixed wontfix);
+ my @resolutions = qw(closed wontfix);
- my @active_statuses = qw(open pending blocked);
+ my @active_statuses = qw(open pending stalled);
return {
active_statuses => [@active_statuses],
@@ -279,10 +278,10 @@ sub _determine_bug_status {
return 'archived';
}
elsif ( $ticket_obj->{fixed} ) {
- return 'fixed';
+ return 'closed';
}
elsif ( $ticket_obj->{blockedby} ) {
- return 'blocked';
+ return 'stalled';
}
elsif ( $ticket_obj->{pending} eq 'pending-fixed' ) {
return 'pending';
@@ -295,8 +294,8 @@ sub _determine_bug_status {
sub _transcode_create_txn {
my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
- use Data::Dump qw(pp);
- warn pp $txn;
+ # use Data::Dump qw(pp);
+ # warn pp $txn;
my $changeset = $self->_create_changeset(
$txn, $ticket_uuid,
@@ -319,7 +318,7 @@ sub _transcode_create_txn {
}
$change->add_prop_change(
- name => 'subject',
+ name => 'summary',
old => '',
new => $txn->{title},
);
@@ -336,10 +335,17 @@ sub _transcode_create_txn {
new => 'open',
);
+ $change->add_prop_change(
+ name => 'debian-id',
+ old => '',
+ new => $ticket->{id},
+ );
+
$changeset->add_change( { change => $change } );
# creates basically always have comments too
- my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{submitter} ) );
if ( $comment ) {
$changeset->add_change( { change => $comment } );
@@ -365,15 +371,23 @@ sub _create_changeset {
sub _transcode_comment_txn {
my ($self, $txn, $ticket, $ticket_final, $ticket_uuid) = @_;
+ my %to_hash = map { $_ => 1 } @{ $txn->{to} };
+
+ # don't record control messages; their data should be recorded
+ # elsewhere
+ return if $to_hash{'control at bugs.debian.org'};
+
my $changeset = $self->_create_changeset(
$txn, $ticket_uuid,
$self->resolve_user_id_to_email( $txn->{from} ),
);
- my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{from} ) );
if ( $comment ) {
$changeset->add_change( { change => $comment } );
+ return $changeset;
}
}
@@ -385,7 +399,7 @@ body. May return undef if the message was blank.
=cut
sub _create_new_comment {
- my ($self, $txn, $ticket_uuid) = @_;
+ my ($self, $txn, $ticket_uuid, $creator) = @_;
my $message = $txn->{body};
my $comment = $self->new_comment_creation_change();
@@ -397,7 +411,7 @@ sub _create_new_comment {
);
$comment->add_prop_change(
name => 'creator',
- new => $self->resolve_user_id_to_email( $txn->{from} ),
+ new => $creator,
);
$comment->add_prop_change( name => 'content', new => $message );
$comment->add_prop_change(
@@ -427,15 +441,18 @@ sub _transcode_close_txn {
$change->add_prop_change(
name => 'status',
- # XXX how to determine the previous state of this bug?
+ # XXX how to determine the previous state of this bug? we
+ # don't really know it
old => 'unknown',
- new => 'fixed',
+ new => 'closed',
);
+ $ticket->{status} = 'closed';
# mails to nnnnnn-close@ always contain a comment too, but
# there's also the BTS close command -- this stuff should
# be abstracted away by the server-side code in the SOAP call
- my $comment = $self->_create_new_comment( $txn, $ticket_uuid );
+ my $comment = $self->_create_new_comment( $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{from} ) );
if ( $comment ) {
$changeset->add_change( { change => $comment } );
@@ -451,12 +468,9 @@ sub _transcode_change_txn {
# for now, because they're a pain to parse (and if you go back far enough,
# nothing at all is actually recorded)
if ( $txn->{command} ) {
- my $changeset = Prophet::ChangeSet->new(
- { original_source_uuid => $ticket_uuid,
- original_sequence_no => $txn->{id},
- creator => $self->resolve_user_id_to_email( $txn->{from} ),
- created => $txn->{date}->ymd . " " . $txn->{date}->hms
- }
+ my $changeset = $self->_create_changeset(
+ $txn, $ticket_uuid,
+ $self->resolve_user_id_to_email( $txn->{requester} ),
);
my $change = Prophet::Change->new(
@@ -466,16 +480,38 @@ sub _transcode_change_txn {
}
);
- for my $prop ( keys %{ $txn->{old_data} } ) {
- $prop = lc $prop;
- $change->add_prop_change(
- # XXX are we doing any translation between debbugs and SD
- # with %PROP_MAP?
- name => $prop,
- old => $txn->{old_data}->{$prop},
- new => $txn->{new_data}->{$prop},
- );
+ # it turns out we probably want to do different things
+ # for each available command
+ my %transcode_change_dispatch = (
+ 'tag' => \&_transcode_tag_change,
+ 'package' => \&_transcode_package_change,
+ 'submitter' => \&_transcode_submitter_change,
+ );
+
+ my $sub = $transcode_change_dispatch{ $txn->{command} };
+
+ if ( $sub ) {
+ warn "- dispatching to $txn->{command}\n";
+ $sub->( $self, $txn, $ticket, $ticket_final, $change);
}
+ else {
+ use Data::Dump qw(pp);
+ pp $txn;
+ die "Attempt to transcode unknown change command ".
+ "'$txn->{command}'. Please update debbugs bridge for ".
+ "changed API!\n";
+ }
+
+ # for my $prop ( keys %{ $txn->{old_data} } ) {
+ # $prop = lc $prop;
+ # $change->add_prop_change(
+ # # XXX are we doing any translation between debbugs and SD
+ # # with %PROP_MAP?
+ # name => $prop,
+ # old => $txn->{old_data}->{$prop},
+ # new => $txn->{new_data}->{$prop},
+ # );
+ # }
$changeset->add_change( { change => $change } )
if $change->has_prop_changes;
@@ -484,24 +520,98 @@ sub _transcode_change_txn {
}
}
+sub _transcode_tag_change {
+ my ($self, $txn, $ticket, $ticket_final, $change) = @_;
+
+ my %old_keywords = map { $_ => 1 }
+ split( / /, $txn->{old_data}->{keywords} );
+ my %new_keywords = map { $_ => 1 }
+ split( / /, $txn->{new_data}->{keywords} );
+
+ my (%additions, %subtractions);
+ for my $new_keyword ( keys %new_keywords ) {
+ $additions{ $new_keyword } = 1 unless $old_keywords{ $new_keyword };
+ }
+ for my $old_keyword ( keys %old_keywords ) {
+ $subtractions{ $old_keyword } = 1 unless $new_keywords{ $old_keyword };
+ }
+
+ # sometimes we need to do special things based on keywords, e.g.
+ # for 'pending', which affects status, not keywords
+ if ( $additions{pending} ) {
+ $change->add_prop_change(
+ name => 'status',
+ # XXX how to determine previous status?
+ old => 'unknown',
+ new => 'pending',
+ );
+ $ticket->{status} = 'pending';
+ delete $new_keywords{pending};
+ }
+ elsif ( $subtractions{pending} ) {
+ my $old_status = $ticket->{status};
+ $ticket->{status} = 'pending';
+ $change->add_prop_change(
+ name => 'status',
+ old => $old_status,
+ new => $self->_determine_bug_status( $ticket ),
+ );
+ delete $old_keywords{pending};
+ }
+
+ # pending can change at the same time as other keyword
+ # additions / subtractions, so add those too if they exist
+ if ( keys %old_keywords || keys %new_keywords ) {
+ $change->add_prop_change(
+ name => 'tags',
+ old => join( ' ', sort keys %old_keywords ),
+ new => join( ' ', sort keys %new_keywords ),
+ );
+ $ticket->{tags} = join( ' ', sort keys %new_keywords );
+ }
+}
+
+# this happens when a bug is reassigned to a different package
+sub _transcode_package_change {
+ my ($self, $txn, $ticket, $ticket_final, $change) = @_;
+
+ $change->add_prop_change(
+ name => 'package',
+ old => $txn->{old_data}->{package},
+ new => $txn->{new_data}->{package},
+ );
+ $ticket->{package} = $txn->{new_data}->{package};
+}
+
+sub _transcode_submitter_change {
+ my ($self, $txn, $ticket, $ticket_final, $change) = @_;
+
+ $change->add_prop_change(
+ name => 'reporter',
+ old => $txn->{old_data}->{originator},
+ new => $txn->{new_data}->{originator},
+ );
+ $ticket->{reporter} = $txn->{old_data}->{originator};
+}
+
# our %PROP_MAP = (
# package => 'component',
# originator => 'reporter',
# # remote_prop => 'sd_prop',
# );
-=head2 translate_prop_names L<Prophet::ChangeSet>
+# =head2 translate_prop_names L<Prophet::ChangeSet>
-=cut
+# =cut
-sub translate_prop_names {
- my $self = shift;
- my $changeset = shift;
+# sub translate_prop_names {
+# my $self = shift;
+# my $changeset = shift;
- # ...
+# # ...
- return $changeset;
-}
+# return $changeset;
+# }
=head2 resolve_user_id_to_email ID
@@ -515,11 +625,10 @@ sub resolve_user_id_to_email {
my $self = shift;
my $id = shift;
- # we'll throw away the name for now
- my $email = Mail::Address->parse( $id );
-
- return $email;
+ my @addrs = Mail::Address->parse( $id );
+ # we'll throw away the name for now
+ return $addrs[0]->address;
}
memoize 'resolve_user_id_to_email';
-----------------------------------------------------------------------
More information about the Bps-public-commit
mailing list