Handle and indicate duplicate repo ID:s (fixes #153)

This commit is contained in:
Jakob Borg committed 2014-04-27 21:53:27 +02:00
1 parent 89f5f3bf9a
commit dcd7d278aa
6 files changed
+41 -9

No files matched your search

+2 -2
View File
@@ -18,7 +18,7 @@ func init() {
bs, _ = ioutil.ReadAll(gr)
Assets["angular.min.js"] = bs
bs, _ = hex.DecodeString("1f8b080000096e8800ffd43b6d6fdbb6d6dffb2b38af9be4c691d3e1c1838bbae9b065dd90db6d2d9a655f027f902ddae62293be22ddc4c8fcdfefe18b2452a4642569d75e036d6cf2f0bcf1f0bc891a3ffb8be7840a342bd80dc7c50b248a2d1ea139a382d02d2e7f6ff22d97fff46ff46cfc64fc6c99b3599aa3a72fd022cd3900a574b9cdd3c2fc96404fa22d7ce1a22073114d9e3cf9901688efe85cac085da2d37245b266d936c77154cd452374351dc28a6a24912c152ccf71114717e5e8992872805d6ce1376114c54ff99c6d8097a72b21364374f704c14792dd14f8c34fa9c040f564528d2eb178fb0686a454f56881b9480ba17954c2002772526397ac50ac087200b8db4f1a930bb2f4c7d7bbf39f60348a9c51ca322c915c4d0348cea914d461cfcce3a26045601dc798be96733e25d031ce7db60abc612522353e1ea30bd830bae4688617acc068c658ce51ced8358c08810b97a2100a1850a8f13b92bd40d1af840b4c0111ec0e483807ab50bb86de154cb039cb9186403f6419a89b630e8062b7018b8b04be15f0cbec8236b9fdc842fe5b7a7b8169f666b6e116fab75bb16472cfdecb6dfe95ac8940f19b1f377c58a3a6dbf50c179dc8df03ba949e5390f3439a5f5804f40c2aa7507c6fccc670c2c8cde4c3f1bf4b8b14ce47fe1eff670b40b66e406308f4032b69a6545483f4c70f48ce5670647143f112f9cf24c748cf6afdf7d6bc45e017e5517ea0f4354d6739ce2c1a7a0ac11c83b38e6bbcd2383bb9fe95cd5b70aa9987a0bc90e33f6a8f69dbb71c46f5b88dce597ff98ebef3d9d123484e86174f5d2fb4dc928bf0e13367ca56dfe5f9630edca52ba8c4f6c356ac30048979aa1cefa523f24184ef52ce6f58917523b5a00ce24d3d12425e6aa88a07e0df2fb6f339c619cee2321cc80f59a0f82be5fded51a5dd38fa9a620154ae95278d86d275a6791cad4886a3e1c481f60388fcec1d3a753809d1aa67bb298582924b6fef0bff730ae7d297bc9da3028b6d41db24b99fc2ee66e9fc3a2bd806360ee8c1b6c2b65de3dd8ca54566b2847d8b3e7b092883e7195b6fd202c7e908cd9a624aa3610b9426bfa76b8cbe3a8598b8a5195e100a070f7dfb2d3200b32040534e89d1a07a69960c1d805a7fe8f87973f3d4b059feca2c6f5333808164902e283aea6b789f1c3a358e9a9a46f3aa4233b1f55865000bb08795547a9546d9e4542a95c0c6c4d1581ace98efc091ac619bb93c5a9cc7f5ba2c15699355f70cba7a29930885113890eb2d89863ad189c38c19e4a58ddbebeaef769a93403af33a9daf2c7c72dc33e8a6c02a75fa5e829e46e808613a8781cbf7e7d2f6180587a5d024b04b7d756271a6905f1904534f074d791cd99a8c5a8969efed91092f65374058a6c79090dec4c391032132988c25cc7195460fd1183d3f3939712149661c70f9b1b26e581fdc7b42219ba8b3f2c62cdb8a6ada9987ad4431c910a1a84dc1cac7cbc96495f2b7371452cf0d2ec40e960d43f0f253163e136f76ef8d8862d7824512bd22d9b412eeb754ac92757a1b9f8cd0bfd033bd130ae29cfeb81398ffc104e422c7810ac38392aa17d9d0e7d0a15c29ae9d3424847d683b60adc4f70882f67c8562dca65a4f29277d450800fabbe198d3d169839c8fc135307b811e6a1cc19071ba7560d377759c535dbef53ea2cda22f4c693f79d22cec2023155bee78f6a6c3b3e2a4e790c01b7587441368a24b7a0dc79b467630aabeaaa25f68271049ffe9d349d47cbdba04577faf4ea68960971b38bb6729c710028ef404686fc645113f1f5abe41ca63969fa2812c3921cb19a0bfff46f5e87996e34153163d0d763040f1a0e6523620dee1620e5e3e5d62a3be2334f86638084a6b546209d48cb61b7696431afbe9774566e1c7842ed847db1747b9110135761337e61db5253a352eae37aa1bdda620ebb4d805d1b509ed6adfddcd4fbe051021db440f285b37d494af55f84ffa61753674331720154080a70f9020aaa3a4498c4300160f93a66e5524996392c74025ec7464461e703a2a515f38c5866456fa4f800bc41db3c064ad53d7022560283997e389ccc972acc84a1d822642f1a8b496738aa442a286b347583630db9719b78262796c9a648f50f4cdb089b1c355443f116e64074b6a55ebf95c8af4bfa054767d5f7d9a12e43e4a5b4396c6dbb5e5bbd82f565dbe93eca533df191ed499ed167d95c9c6d03fac31c398529ae94b75f9f6ef3bf6db52f96713a1e1043ae354bb287fe283db209971395586663d696861d3407cc00507dc21fe3ea57a720271f7cf76da3df659f54feea31dd9a509f364837470e38a5ce69c504cfd7f3804e28c08ab2fdbd25389a3afcb27277dfb65aacf390c6635e9077c9864f0c952a3cfe600256f376ad713dd393607d4310c1fea421409dfe4046a9d91942cdd58c5cd2d3054eaf53611e0c1e2e124502a6d18b77b1a400534f1ef8bb7bf275c3d9a228b5dec30311ca1bb154e33b0ad17e82e3a832a1e4cedf80fc8df22d066ba018e745379fc176734da3b34439b31903dd8415b69a5daa7adaa765ab56e67b8ade3cb57ec26ead4835915f9bdadd6878501cb94567ce8fc9468b745014a342b9e269058639ac577fb5179267c56240990ebf52dd842507c07ec02e70bdd5a6ab832c793f9f2d68c25d5d30cb03bd564d298aae1e42f462898228a1a1b5e2ae341a7cfd56b9a659e5a0feaf3cee61c48663b9aae81e6be874ec387d6556a13e6e38a0c050316b85bea1045efc986ead185053dfc68a2a981f261bafd3359905c60bb85dc16a368697f5fd506689b9add4157f4db4ea2826cf261b52854eb52c659a27a5bf0e7a5dba6ce315d8a154c1c1db5b48214dc15993649b9e33d647f84fc4d1df8fb7120d6fcc3aebe61c23268761ab06e8c2b7f324219a37884c8e4be32f63a04860a0aa9dd83aa7d5bc8df3d30fc5644a49cbe18bad9ee59ab3e601dd66a353a146c6999265f75fd7ec7339272712db1dfcf359cbbf1a6fccc0a9c5ef7a894f42303c0d472eeb4c49b2d5fc57e0c6c714809678588ad67950ff51b9ff9c030b1c245c9625be2635719adfeb7b7fb95f1ff60a35bac083f789009242d4d17fc0083a68ddd019b9c78164f7bd66496f05774da6e9d0199d5a3009970f7dc0afde8c0df8bb6da08277f10f5a0ba79afece06ecc739c16afcb27159d09917d59cde1f3cae55aef073a46cfa78aadae10a2968c15135198c14501556896ef7c4b86f36373d911a60fda89aaa26d8f1eb616ae9256f85f06ee3c9de3785eb9c351b3ec9573c36147a50a785af3fef79018dc2fef372beabc9f43ce275b944a71e049f65d858085a4cc45bc67ef5e321258eb10bd2a4fd6d4bf71f3805ac4c46649e7e354019e920f6a37a0d407e4ff1f57109918754aa2afc86ed8c7488c1c9ebdc4c850f11223b9ca83aac2e7d5d49f73edc872cabe2955e79e6a2f4e68184b28d90993Line truncated
bs, _ = hex.DecodeString("1f8b080000096e8800ffd43b6d73db36d2dff32b50352da958a69cce33cfdc44713aad9b767c699b4c5cf78b471f2812925853000f84626b5cfdf75bbc90040890a2eda4c96926b1042cf61dbb8b25387df657996784a305a33725662f10675b3c4109253c235b5cfd2ef26d29fea9dfe8d9f4c9f4d92aa78b38474f5fa0659c97001493d5368f99fe2d809e045bf8527296253c983d79f22166a8dc9184af33b242a7d58a6843d36d8ec3a09e0b26e86a3e8615f54824586234cf310b838b6af48cb31c60975bf89d5182c2a765420be0e5e99af3628cee9e20f808b205c31f7e8a3906aa27b37a7485f9db373024a46a46192e79ccb8e2510a039c8849855db042b0245802c0dd7ed69a5c662b777cb33bff094683c01a2534c502c9d5dc83e49c08412df6f43c668c32cfba1263f25accb99440c73877d962b8a01522393e9da20b301859956881979461b4a0342f514ee9358c708e994d9173090c28e4f85d96be40c1af59c9310144601d903001af905643ef18e534a1395210e88734057597b80440be2bc0e3028e6f39fcd256502eb79f18c87f8b6f2f3049df2c8ad240ff76cb5754d8ecbd30f3afd926e3287cf363518e1bd464bb5960d68bfc3da08bc93901393fc4f9854140cda06a0a85f7c6ac1dc78f5c4f3e1cffbb98c5b03ff2f7f83f5b003275031a43a01f584952a9a20664387e4072b6862d8b5b8a17c87fce728cd4acd2ff60cd1b047e9111e507425e937891e3d4a0a1a610cc51d8ebb8c12b9cb397eb5f69d28153ce3c04e58518ff51454cd3bfc5306ac64d74d6facb77e49dcb8e1a4162d2bf786e47a1d536bbf06f3ebda74cf55d9e3f66c35dda820a6c3f6cf91a4392486219782f2d910f227c1797e50d65693f52034a232e9a111ff24a43753e80f87eb14d128c539c86553a109f6c89c2af64f43747a576c3e06b823950b9969134188bd019e761b0ce521c8c6716b49b40c4676fd169d2898f5633db4fc997946c7a7b57f89f63d897aee4dd1c31ccb78c7449723f85dd2de2e43a65b400c3013d302b98ed1aef163466a9ae12f61dfa1c24a0489e677453c40c87f1042dda620aa7a14b1447bfc71b8cbe3a859cb825295e6604361efaf65ba401165e80b69c02a346f5522f195b008dfed0f1f3b6f1e4b05efe4a2fef5233808164502e483af2abdf4e169d0647434da17955a399997aac2b8025f8c35a28bd2ea34c72b2948ac0306130158e332d7710483660e6526cadb20c9b7569cce336abf61eb4f552151112237020d61b128d55a113fa19d3c82b1f37d735dfcd32278272e6759cac0d7c62dc71e8b6c0b274fa5e809e06e8086192c0c0e5fb73e17b9440c0926822b0d2509d189c49e4571ac1dcd1415b1e4bb636a346613ad83ca2e025f406088bf2180ad29b703cb120780a93a18039aecbe8319aa2e7272727366496ea005c7d8caa1bd67b6d9f11a8269aaabc354bb7bc9eb6e6c19428cc529411d4a56019e3c564b48ecbb737044acf0233be8365631fbcf854079f9933bb774638db75601144afb2745e0bf75bccd7d126be0d4f26e85fe899b2848438273fee382effa01c6a9163cf09c38112aae7e9d8e5d0a25c2bae9b34148443685b609dc4f7089276b24621ee52ada39493a12278005d6b58ee7474da22e762b01dcc5ca0865a5bd0e79cf639b01dbb7af6a93abe0ddea2ed439f9fd27ef6a47db0838a946f4b2bb2b7039e91279d8004d1a83f25ea44135c926bd8de2430939145c1450d6681330e6c6099753b315f705a1440d98b59b613b80a2f8188cc1e3272be595d81cbbf5727f388d34b20c0cee2124372395213609745c959f87c3cb3e5d0cb4fd1481c66a17e1aa1bfff46cde8799ae3515b16350d1e3642e1a8e152b436de619640fe8857581be6088dbe198fbcd26a951802b5f37841cf7228903fbdbd457d7f9c9125fd041697b86f62464445fcb1cc6ed92ec8c04afdf4f5be0cba2ab40657a9fca01f5dc1b24dcc765e745d3ab58d6b3bcb27b730a4f62ed13dca569d40992424fe9361582d83160907a900025294d777c4865324a63e008387595bb732052638cb43a0e28f96e228e18996f284b1b44e49825911f801ce9330f5025d6ecf6d0f1480be5385188f443199634956e81034e14ba495b79c13241412b4b214c2a2f3dabd4c472d148a6dd3267b84826fc66d8c3d9128f8292bb5ec7584f6a8f53c1122fd2f28955edf579ffaec741fa56da0bc2cbbb5e546f02f565d6e901ca43337181ed49919165d95898ed63fac31cd98549a6ea8f5c5f6ef7bec6da8fcb389d00a02bd79aa5b943ff1413308666c4ea5a3198f483ad8d4101f302b01b78fbf4fa99e3c83bcfb6737ed0176968d9ffb6847b497fc3c99203ddcd82257252d9c02ffdf9f02719a71a3a1dcd10c0a83afab473e431b7db2413bf65635f1077c98a4f79158ab416801456f0b69f548b5bcf506b51cc385bae02c2a8b3c8343da44481617c6a9ec1618aaf47a1b718860e178e639e315b4349b31400534f1ef8bb7bf47a57ca6962d77a1c5c47882eed6384ec1b75ea0bbe08c1260851fff01f55b00da8c0be04875c3a77f9594047b8ba6cf1823d13c1e759d0965dfb753d5568fd96e6977b5aacb35bd097af5a057056e53aef329a7c73385171fda3f15da2d63a044bde269048535266978b79f547bc265459000b95edf822f78c5b7c02e70be543db15628b322992b6fc358543f8601bf93dd3185a91e8efea21901574441cbe095321eb4fb6cbdc669eaa8f5a03eef4cce8164ba23f10668ee07e8d4bf696da5b6613eaec87060c01cf74beda3e83c9291cd45bfa0879fa9b43550dd02307f46cb2ce7d8ec7d77e52852f9df578d039aae66b6fe25fdae9d2821db7c181d10d973157936934d39f8f3d2eeafe798acf81a268e8e3a7a5812ee2a9bb749d9e303647f84fc6d1db8f638906bfee150df726191347b1d5875f4653c99a094123c41d9ecbe320eda049a0af2a9dd816a629b2fde3d30fdd644849cae18ea2981e3ad6a83f578abd1e890b09567ea7ad58efb3d0f77aac58dc46e235a736ee79beab36038be1e705252cf3a0053c7be531217db721dba39b023204525653c341eb23e346e7ce60d43f91ab38ac5aec2c73c6574c6dfc1e157e4ff831d7abececa831b3983a2a51d821fe0d0a4651df0c999e3f164e099cc10fe8accbbbdd323b37c86210aee81a650cf3c5c5b749d8d70f447269fb0b72fc41db44692e398bdae1eb1f41644e62d3b8bcf2b9b6b650f748c9ecf255b7d29442e994a26023f834b06a7d034dfb99e0cfbc7e4b2274d1ff413798a3623badf5b4a59b4c2ff2271e77182c3a40e8793f6b157cc8dc73d2755c0d359f7bf87c2e07e75bf5ed1d4fd25d47ca2452915079164df7710309054b5887369c029463c6b2da257d5ce9abb57851e7016d1b959d0f938a70047c907b5eb51ea03eaff8f2b88288c7a2551777b0bfa310a238b67a730d2549cc248ac72a0Line truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
Assets["app.js"] = bs
@@ -63,7 +63,7 @@ func init() {
bs, _ = ioutil.ReadAll(gr)
Assets["favicon.png"] = bs
bs, _ = hex.DecodeString("1f8b080000096e8800ffec5c5173dbb6b27ecfaf403873d364ae29d94ed2db7124cd2476da66da269938b93d673a7d804848440d022c00da51539fdf7e76019222294a96642971a77db04512e002f876b1fb015c7270ffeccde9fb7fbf7d49129b8ad1bd01fe1041e57418301910390d69960d033393914db89c065887d178748f9041ca2c255142b5617618e476127e13cc0b126bb390fd9ef3cb61f0aff0c3f3f054a519b57c2c584022252d9370d7ab9743164f59ed3e4953360c2e39bbca94b6b5aa573cb6c93066973c62a13b39205c72cba9084d44051b1ef50e1704c5cc449a67962b5993b5508de636517aa186e0f2826826000228b6516e098f5052a2d964184ce8259ef632870cde60b9156c54e135e8fb0b952c7fdf58296baca6593f32a65f9df5522e7b7025289ab433c14cc298f59d71e7c4ce32e8af651f2ddeec4a0819ab78463eb94342321ac7d0763856d6aaf484fcdf61f6f159513681f185139a72313b21c1f74c5c32cb234a5eb39c0507a4ba70409e6b00f680182a4d6898e6132fe2fa9efb498e0e48720c7f8fe1ef09fc3d85bfafab2edcba9942c415e3d3c49e90c787878de6696f6c65d51a8211c62c529aa29e4f88549235eae7e27f93a755fd94ea2997a155d90939ea3d6569a36ecf894b955426a311eb1e5355dcba958279876012319386c523eb268bd52334d6c55254dbf2d209d8c5f2d24a72bc527267692539ae4637563a66da63b2009f6b8c580d074dd0a9e053c03b8229c374130aa1a6aa85f809397cd6b4d1da15d772f8746eaa9932dcab13660328f6b28575a6d5543363aa4692c2588e8fe6420a55975381cb046ccc2e11541d8563aa2bb1306f59d825db1984e17f30b0a2e3f27229345242d00cd00e2fb941a757c98bb9c9049d35616edeb3d6ed5c62cf5aa0736343a9c2712e04b3b521c065e73e42741fbee9d68d601f224fe5b276c2b150d145052b60ea5c30789772fa54606b0fd5d1bc604ca38ba956b98cb115a541a5d3f1c3e3c75f1f90e32787f8efe8d1b3a6216a1af3dcc0ccaf19446933a003f2a4ad63d00d5caee9a1352e98adb21753f0f82d3720d8047a7b38f7038de11d1dce2fd74dde0df2d9cd589500833f8e84a217dd6640eef314c31d9576defd41dfa90c426edfc7dc7b03e7e75114989e0613617a189c97c1e6d46a01114c50638641d95e1197ee872179af3282861d86fe9aa497556d7a8925fe079d407918b309cd058461688db97a7cea9c6c11780631af8460a7280c5f176518b200f4661be158531907a3014fa76509ba8a80181d61cc0bf12c3c3afec64555e2a37ef0f83828e6b73b1e91f37988c546aa16c739cc745944497f5261823103feca41b96393920c268b37da72d450e0c84f247874015428e6f69c590bad99878fa0eff5614dc52c4b900590ea08d4037ca0e81829ef1cf47d770ae0fa809c0beb7d68d42b640996be3e6af05bae8d05555c1d1025c58c0029b992844f886411b82daa67cfc83b662cd5965c512da1d952db857818140702721fe44ff8f49544182b7c40f05c758dce88308d41275569b31c86c90471ffc3a2d95acd8eba21dab3ab35481e374b1c5f0a46e5285e3316b31826c0e35185d872b1383d1a2d43a56cf43e61c48f37f7048124d4903163e014e825785bd00bcc424b680451865a16f7e6e645d21c212fba635555098322e07ed514dd1bf4b3461f6fee3406e3da9cd9c08ec176ebe63cb7e3baf1165d5fcb6e819c42f5646ebb951ad455d37cbb86130946f5847f0c3a54d5bcd038ad9d14870b06cfa6b900f704f6d932e786e196f2f0c677ccd107a5672ef89187e8d3d0d33f9a4be834f2afd7b0f1d229dedac68b3e72666e63e1b9a81c29c6f95cbab0113b23d02c63d4a215640aa213c15fd312e0d626ed4b2de7dde4c4c1e8d32794d43be39a4588f2f575d30f2fef5ec54e167ab1b4276d28aaa01e1007e530a8a9fbd559a7e02523ca61b693aea960e9dc85af230e994505cbabb3e578b83bdb8ade629cb8c64cb492fc0fefd360a2da7c51b5db8c3d52690a8c7ef3f17bb7e3a724f4f4140f1f16883c2ad139771dad2e6f89d4a0df6d295b1ad077428da9f0d3c3e33be1b0f8de099c5390cdb632a654c54cfc5220f56b6fea3af92d768cfc49a8b8a233f33a4fc74c5f5ffbfe1e902537bd985977d3984b8ab3f5c55eccf34715ed0bc444a53bc15060173784d0ddb31b04776cb61fe4dc0d0070bb831bd60e791cc6402f611111ef0278094c6e43dcf196fd1aee6ebce5369162408bbdc0f642035dbc738eeb10b68cc9888b395f7b0902067dbab23b1bdae6a09f8b05beb050b35d6b2fbcb7b650eba6c0752c691c3b28d7825160e42c417c1ec735feb86fde5b67adafc1fe6b7cd50df50e1156ecdea64cb5895af274f496314d4a494fb7a0b212ee3d9d4c91cd2a588369270bd5bc03528bb25fd3943d2c1a59c14e3e0baf750601968c9b923b7156f810622b6f8e80c0c4d06b20e3646c4b21dc88ef20b7f59b7f1e07cf6be74094f814ccf69608ed98229c15319c686ad95de1062046c2c211746b7e29e0eaa1e631ea7339ce30e2a7cc6a1e5d5fc3d95e2ced43b60f58f26c2fa0a8dcee06951d5b979bae974c9bf996f0ed50dc76dd8d80fd3fdb9b7bba834411a1af86fbd7e38a0bc4e07dc28d2306b7e70516443978f6cd0a1eb0d464cfbe0c3738cdb5864846de3dff89e4968b2258ee6616265b4d42333396a53df8a9afd8b0877bf1e02502a76f3fd411200f8f0e895954fd56405073616e834594e56f99c607e4ad752f9c4aa00b9a8a93a3ebebffc141dc0587dea00bb80cb154ec06ca1dd0862f400df600c12d28c217a601c5d3c3c2b461accfa554b98cd89b1fc8fd21c9252c34b944bf7cd3462b2d6e2486e9cb855d80edd045179b282db7e4f6268ff0216ab06a94c1e88d7bc2bf5503319553186af50c76490393c94d2dfcc35ebe387b59d1c897d8e92ac9ce163b5d9e717d863d2e7fec37bafacd47b978e9a5d64a9bee740586653f02937af8a827989cda848cc8e15dcc5b78ad2c8fd8adf215ea9c16068e7cb6367ed4714a85806000577bef79ca201cc0646327c1f727697a021eecfafa0434ec6a914f9f269a33198b99df27c39b1cd48ec4ee3f5761234b7656e60d0147fae687cf9b74d0b0d02a03a7ca97c2cb2f5c22e17a6954655e46710a9d6471918948121ec74c861fcd7a7954592b890a7d35f28162e5dd50656df1815d2beea81dfa14911a30e0e2c04f375b701b8585efc654ee933e806322956bc37a557e734f32db0f46e77986d96ba44fbe553a4fbd5fae3bcea54d944098b4de9881d6a6dc26f9b817a9b41f519126fdaad1be66a074834fba7e04bb37b004f21736687783d6aef8050f46672aca71e3d0ad30f63d406e4c8ec37b9163dad85edb02e5814e81889dba38d06c6b1eebbad2d5dc130b66af94bef01e8aa42a066e574e0c34691e430f7d1d37af2bbfe0Line truncated
bs, _ = hex.DecodeString("1f8b080000096e8800ffec5c6173db3693fe9e5f8170e6d264ce946c27e9bde3489a49ecf4ada76d928993ebdd74fa012221113508b00068474d7dbffd76019222294a96642971a7fd608b248005f060b1fb005c70f0f0ecede987ff7df79a243615a30703fc2182cae930603220721ad22c1b066626239b70390d300fa3f1e801218394594aa2846ac3ec30c8ed24fc57304f48accd42f67bceaf86c1ff841f5f86a72acda8e563c102122969998452e7af872c9eb25a394953360cae38bbce94b6b5acd73cb6c93066573c62a1bb39205c72cba9084d44051b1ef50e1704c5cc449a67962b5993b5908de636517a2187e0f2926826000248b6516e098f5052a2d964184ce815def632870c16b0dc0a36aaf01af4fd834a962f3756ca1aab69d68f8ce95777bd94cb1e3c098a2aed4c309330667d63dc3db1b30cda6bd9278b855d0a216315cfc86777494846e318ea0ec7ca5a959e90ff3acc3ebd28d226d0bf7042532e662724f89e892b667944c91b96b3e080540f0ec84b0dc01e1043a5090dd37ce245dc3c703fc9d101498ee1ef29fc3d83bfe7f0f76dd5843b575388b8667c9ad813f2f4f0b0513ded8dadac6a4330c298454a531ce7132295648dfcb9f8cfe479953fa57aca65685576428e7acf59dac8db73e2522595c968c4bafb5425b78a5250ef10542266d2b07864dd64b17a84caba988ac3b63c75027ab13cb5921caf94dc995a498eabde8d958e99f6982cc0e72a2356c34513742af814f08e60ca30dd8442a8a96a217e420e5f3475b4f6c4d51c3e9fab6aa60cf7c309b30106f6aa8575a6d5543363aa4a9242598e8fe6428aa12ea7029709e8985d22a8ba0ac754576261deb2b04bb65308c3ff60a045c7e5e35268a484a019a01d5e718346af92177393093a6bc2dc2cb356712eb1652dd0b9b1a154e1381782d95a17e0b1331f219a0f5f75ab20e887c853b9ac9e702c547459c10a983a130cd6a59c3e15d8da4375344f18d3e872aa552e63ac456918d2e9f8f1f1d36f0fc8f1b343fc77f4e4455311358d796e60e6d714a2d4191803f2ac3dc63036f0b8360ead7ec16c95bd9882c56f9901c126d0dac3b91d6874efe870feb8aef2ae932f6ec7aa0418ec712414bdec5603f290a7e8eea8b4f3e60ffa6ec8c0e5f6bdcf7d3070761e4581ea695011a687c145e96c4ead16e0c10435661894f5157ee96118920f2a23a8d861e89f497a55e5a65798e27fd0089497319bd05c801b86da98cbc7a7cec8168e6710f34a08368a42f77591862e0b406fd6118e359571301af0745aa6a0a90888d111fabc10efc2a3e37f39af4abcd70f9e1e07c5fc76d723723177b1584955e33887992e0b2fe96f2a4cd067c05fd929776d5292c164f14a5bf61a121cf989048f2e810ac5dc5e306ba136f3f809b4bddeada9986509b200525dc1f0001f281a46ca9283be6f4e015c1f90736ebd0f95fa015982a5cf8f23f81dd7c6c2505c1f1025c58c0029b996844f886411982daa672fc87b662cd5965c532da1da72b40bf1d0290e04e421c89ff0e9b944182b7c40f07ce81a8d11611ac39854a9cd74e82613c4fd0f8b6a6b393bf286a8cf2ed72079da4c717c291895bd78c358cc6298004f471562cbc5e2f468d40c99b2d1878411dfdfdc1304925043c68c8151a057606d615c60165a4223f032d4b2b837572f92e60879d11cabaa4ce81401f7eba6e8dea09f35da787ba3d119d7e6cc067a0cba5b57e7b91ed795b768fa5a7a0be414b22773ddad86415d37d5b7ab3b9160544ff8a7a063a89a0f1ab7b59be27241e1d93417609e403f5beadc50dc521e167ccf1c7d507ae69c1f798c360d2dfd93b9844e25ff760d1d2f8de29d75bc682367e62e1a9e8bca90a29fcfa5731bb15302cd32462d6a41a6c03b11fc352d016e6dd27ed432de4d4e1c8c3e7f4649bd33ae598428dfdc34ed705b4c61775ca17379054e34aed459d031c355e718a185b5274e8622cf09292a2aee5754d342a122410b9d5ddae136e2157708881bb16150d3aaf3b34ec14b80cbc1a890ae1967e9dc53ac230e094c85fef9d9723c5cc9b63e6dd14f5cca265a49fe87379d600f6cbea841dbf43d52690a0b87cdfbefad9b9ff9d0d253bc7c5c20f2a444e7c235b47abc2552837eb7a66ca940ff166a4c859f851edf098735fe4ee09c826cb69532a52a66e29702a95f7b53d7c8efb061e44f42c5359d9937793a66fae6c6b7f7802c29f46a665da13197148dc2abbda8e78f2ada1788894a7782a1c0266e08a12bb31b0477acb61fe5dc0c0070bb831b9628791cc6c06261ad12ef027809847143dcb1c87e157737d6721b4f31a0c596637b3d8326de19c7757861c664c4c59c16be0601833e5dd99c0d7573d0cfc5022d59c8d9ceb5177a5d5b0f7633ed3a96348e1d946bc128d0739620be8ce31a4ddd37bdae93e337a0ff355aecba7a8f7831366f5342dc442d793e7ac79826a5a4e75b306609654f275324cd0a967adac9c261de017746d96f68ca1e1795ac60275f84d73a85004dc6bdcf9d182b7cd7b1953547406062e835907132b6a510aec7f790dbfa3d468f83e7b573204a7c0a667b4784764c11ce0a1f4e34b5ecbe70031023617d0a636b7e29e0eae1c8a3d7e7729ca1c74f99d53cbab981bbbd68dac76c1fb0e4d95e4051b9dd0d2a3bd62e375daf9836f39de7bba1b8edba1b01fb6fb637f3740f8922425f75f7afc7151788c187841b470ceece0b2c8872f0ec9b153c62a9c95e7c1d6e709a6b0d9e8cbc7ff913c92d1785b3dccd2c4cb69a8466662c4b7bf0535fb1610bf762c14b044edf7dac23401e1f1d12b338f45b0141cda5b90b165196bf631adfc3b7d6bd702b812e682a4e8e6e6efe033b711f0c7a832ee032c452b11b2877401bbe0235d8030477a0085f9906142f0b0ad586bebe9452e532626f7f200f872497b0d0e492d5de202cdb68a545416298be5ad805d80e5d34b189d2724b6e6ff208dfd506ab7a198cdeba4082ad2a285ea154af7a97543099dc56c33fece5abb39715957c8d9dae92ec6cb1d3e519d717d8e3f2d77ea3abdf7c638c8f5e6badb4e98e8a6098f62330a9c74f7a82c9a94dc8881cdec7f08837caf288dd292ca2ce69a1e3c8676bfdc7314ea910e00ce069ef034f19b803986cec24f8fe244d4fc082dddc9cc008bb5ce4f3e789e64cc662e6f7c9b09083da91d8fd87446ca4c94ecbbc22604fdffef065631b1a1a5a05fa546159f8f8958b575c2f5aab0cff286ea1912c2e021e49c2e398c9f093592f5c2b6bc56aa1ad463e50acbc1b43595b7c60d38a12b54b1f895203064c1cd8e9660d6ea3b0b0dd18317ed207704ca4726d58af0aa3ee4966fbc1e822cf30488ef4c9774ae7a9b7cb75c3b9b48a120893d62b3350db94db241ff72295f6232ad2a45f55dad70c06dde09bae1f41ef0d2c81fc830deadda0b66b7ec983d1998a72dc38742b8c7d77901b9363f75ee5189db6d7ba60f0604c81889d3a3fLine truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
Assets["index.html"] = bs
+12 -7
View File
@@ -25,6 +25,7 @@ type RepositoryConfiguration struct {
Directory string `xml:"directory,attr"`
Nodes []NodeConfiguration `xml:"node"`
ReadOnly bool `xml:"ro,attr"`
Invalid string `xml:"-"` // Set at runtime when there is an error, not saved
nodeIDs []string
}
@@ -171,17 +172,21 @@ func readConfigXML(rd io.Reader, myID string) (Configuration, error) {
cfg.Options.ListenAddress = uniqueStrings(cfg.Options.ListenAddress)
// Check for missing or duplicate repository ID:s
var seenRepos = map[string]bool{}
var seenRepos = map[string]*RepositoryConfiguration{}
for i := range cfg.Repositories {
if cfg.Repositories[i].ID == "" {
cfg.Repositories[i].ID = "default"
repo := &cfg.Repositories[i]
if repo.ID == "" {
repo.ID = "default"
}
id := cfg.Repositories[i].ID
if seenRepos[id] {
panic("duplicate repository ID " + id)
if seen, ok := seenRepos[repo.ID]; ok {
seen.Invalid = "duplicate repository ID"
repo.Invalid = "duplicate repository ID"
warnf("Multiple repositories with ID %q; disabling", repo.ID)
} else {
seenRepos[repo.ID] = repo
}
seenRepos[id] = true
}
// Upgrade to v2 configuration if appropriate
+7
View File
@@ -84,6 +84,13 @@ func restGetModel(m *Model, w http.ResponseWriter, r *http.Request) {
var repo = qs.Get("repo")
var res = make(map[string]interface{})
for _, cr := range cfg.Repositories {
if cr.ID == repo {
res["invalid"] = cr.Invalid
break
}
}
globalFiles, globalDeleted, globalBytes := m.GlobalSize(repo)
res["globalFiles"], res["globalDeleted"], res["globalBytes"] = globalFiles, globalDeleted, globalBytes
+11
View File
@@ -222,6 +222,9 @@ func main() {
m := NewModel(cfg.Options.MaxChangeKbps * 1000)
for _, repo := range cfg.Repositories {
if repo.Invalid != "" {
continue
}
dir := expandTilde(repo.Directory)
m.AddRepo(repo.ID, dir, repo.Nodes)
}
@@ -260,6 +263,10 @@ func main() {
m.LoadIndexes(confDir)
for _, repo := range cfg.Repositories {
if repo.Invalid != "" {
continue
}
dir := expandTilde(repo.Directory)
// Safety check. If the cached index contains files but the repository
@@ -295,6 +302,10 @@ func main() {
go listenConnect(myID, m, tlsCfg)
for _, repo := range cfg.Repositories {
if repo.Invalid != "" {
continue
}
// Routine to pull blocks from other nodes to synchronize the local
// repository. Does not run when we are in read only (publish only) mode.
if repo.ReadOnly {
+8
View File
@@ -121,6 +121,10 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
return 'Unknown';
}
if ($scope.model[repo].invalid !== '') {
return 'Stopped';
}
var state = '' + $scope.model[repo].state;
state = state[0].toUpperCase() + state.substr(1);
@@ -136,6 +140,10 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
return 'text-info';
}
if ($scope.model[repo].invalid !== '') {
return 'text-warning';
}
var state = '' + $scope.model[repo].state;
if (state == 'idle') {
return 'text-success';
+1
View File
@@ -134,6 +134,7 @@
<ul class="list-unstyled" ng-repeat="repo in repos">
<li>
<span class="text-monospace">{{repo.Directory}}</span>
<span ng-if="repo.Invalid" class="label label-danger">Invalid: {{repo.Invalid}}</span>
<ul class="list-no-bullet">
<li>
<div class="li-column" title="Repository ID">