Archived
Stop repository if the directory disappears (fixes #154)
This commit is contained in:
1 parent
482795bab0
commit
f39e105101
8 files changed
+78
-10
No files matched your search
+2
-2
@@ -18,7 +18,7 @@ func init() {
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["angular.min.js"] = bs
|
||||
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffd41bdb72db36f63d5f81aa69492532e574767676a2389dd64d3bdeb44d26aefbe2d1034542126b0ae082506c8dab7fdf830b49800029da8e3759cdb4b1808373c7b900d0f4d95f659e118e168c5e9798bd449c6df1042594f08c6c71f5bdc8b7a5f84f7d47cfa64fa6cf56395dc4397afa122de3bc04a098acb679ccf47701f424d8c21f256759c283d993271f6386ca1d49f83a232b7452ad883634dde6380ceab960822ee7e3995cb065f9220634272860b894786ab84830ca689e631606e7d5e829673960586ee17b46090a9f96092d80c3a76bce8b31ba7d82e02370170c7ffc29e602f9f1ac1e5d61feee2d0c09599b51413c665c712e45044ec4a4c22e582158122c01e0763f6b4d2eb3953bbed99dfd24240bac5142532c905cce3d48ce8810d4624fcf63c628f3ac2b31266fc49c4b09348f73972d860b5a2192e3d3293a073392558916784919460b4af312e5945ec108e798d9143997c080428edf66e94b14fc9a951c134004d6010913f0156935f49e514e139a2305817e48535077894b00e4bb02fc30e0f886c3376d05e588fb8981fcb7f8e61c93f4eda2280df4efb67c4585cd3e0833ff9a6d328ec2b73f16e5b8414db69b0566bdc83f00ba989c1190f3639c9f1b04d40caaa6507867ccda71fcc8f5e4fdf1bf8f590cfb23ff80ffb305205337a03104fa819524952a6a4086e30724a76bd8c8b8a57881fce72cc748cd2afd0fd6bc41e01719677e20e40d8917394e0d1a6a0ac11c85bd8e1bbcc2397bb9fe95261d38e5cc7d509e8bf11f551c35fd5b0ca366dc4467adbf784fdebbeca8112426fd8be776145a6db373ffe6d37bca54dfc5d94336dc852da8c0f6c396af31a48e249681f7c212f920c2f771595e5396f62335a034e2a219f121af3454e70388efe7db24c138c56958a503f1c99628fc4a467f73546a370cbe269803952b194983b1089d711e06eb2cc5c1786641bb09447cf6169d269df86835b3fd947c49c9a6b77785ff39867de94adecd11c37ccb4897247753d8ed224eae52460b301cd003b382d9aef06e416396eada61dfa1cf41028ae4794a3745cc70184fd0a22da6701aba4471f47bbcc1e8ab13c8895b92e2654660e3a16fbf451a60e10568cb29306a54aff492b105d0e80f1dbd681b4f0eebe5aff5f22e3503184806e582a423fff4dbc9a2d3e068a82934af6b3433538f7505b0047f580ba5d76594494e9652111826aceab3e72898963b88261bb07529f6575986cde234e6719b5f7b23dacaa92a098911d810eb0db1c6aada09fddc69e495a39beb9abfcd5a27829ae64d9cac0d7c62dcf16aafd4b288fa5ec09f043080490203171fce84175202a14be28ac05e431563b027915f6a047347116da12c01bddc1a75ea604389fa97d06ba02eaa65a84fafc3f1c482e0294c8602e6a8aeaac7688a5e1c1f1fdb9059aae371f5318a7058eff5828c4071d114e9ad59bae5f5b4350f46456196a28ca02e2dcb902f26a3755cbebb2650891698f11d2c1bfbe0c5a7ea8e66ceecde19e16cd7814510bdccd2792ddc6f315f479bf8263c9ea07fa167ca1212e28cfcb8e3b8fc8372284d8e3c0d87032554cfd3b1cba145b9565c3769a80f87d0b6c03a89ef11e4f0648d42dca55a4729c74345f000bad6b0dce9f9498b9c8bc1763073811a6aed439f73da6d613b8a1ddaacaaa51bbc4fdb8da09fdc7ef6a4ddec4195cab7a515eddbf1cfc89d4e6882b8d49f2675f2092ec815ec71129809caa2e0a206db40df03bb5866e24ecce79c160550f66296070f5cc59840c4680f1939dfacaec0e5bf97c7f388d30b20c04ec134906b9eab09b0cba2e42c7c319ed972e8e52768241a5ca8a946e8efbf51337a96e678d496454d839b8d50386ab814c71def314b2093c42bac0df31c8dbe198fbcd26a951802b5737b414f73289a1fdfdea2e63fcac8923e82c525eeeb981151257f2ab35bb60b32b0523f7dbd2f83aeaaadc1552a3fe84757b06c13b39d175d974e6de3dacef2e81686fcde25ba47d9eacc50660a89ff781856cba045c2412a80803ce5f51db1e11489a90fc0e061d6d6adcc8309cef210a8f8a3a5682f3cd152761d4bab7312cc8ae80f709eaca917e8127c6e7ba000f4751a623c1265658e2559a143d0842f9b56de7246905048d04a55088b33daee653a6aa1506c9b3659c84cdf8cdb187b2251f053566ad9eb08ed51eb592244fa7f502abdbaab3e753f7517a56da0c62cbbb5e546f02f565d6e901ca43337181ed49919165d958953aeffb1c634635269fa90ad2fb67fdf636f43e59f4d845610e8cd53dda2fc890f9a413063732a1dcdb836e96053437cc4ac04dc3efe1e533d790679f7cf6eda03ec2c0f83eea21d71e4e4e7c904e9e1c616b92a69a115fca73f05e234e3c62173c70151187c5d5d030d3dfc9387b6636f55137fc487497aafc95a87861650f4ae90568fd431b8dea09663b850e79c456591673c0c2642b2b830bab21b60a8d2eb4dc4218285e399a7d12b68e91ccb002950c7bfcfdffd1e95f2b22d5bee428b93f104ddae719c8283bd44b7c12925c00f3ffa038ab800541a17c0963a269ffe555212ec2dc23e8b8cc4a9f2a8ab319407c29dfab60e9fedb3eeae33ec724daf83c3cad04b03f7b4aef30ed4e3a3c29f0feda40aed9631d0a45ef13482121b9334bcdd4faadde1b2224880706f6ec02bbc3ab0c0ce71be544764ada066c53457de86b1a8bea4010f9487650a533d1cfd4533024e898296d52b65dc6b1fda7a8dd3d451eb417dde9a9c03c97447e20dd0dc0fd0a97ffbda4a6dc37c5a91a175c01cf74beda3e85cd8c8b346bfa0876f5cda1aa8de08985fa36596736c1e8a77652b52f9df578d039aae665e0c48fa5d3b5142b6f930ce42e411acc8b8993ca3837f5ed907ef39262bbe8689e7cf3b4eb324dc65366f93b2c707c8fe00f9db3a70ed7120eb7c8ea0dff26391437bbd589df2cba0324129257882b2d95d051db4133415e4d3bd03d504385fd0bb6736ae8908395d31d4cd81e3b26a97f5b8ac71ee21612bf7d4e5ab1dfc7b6e7daac58dc4eee1b4e6dc4e3ad567c1707c35a07152f71f80a963f329898b6db90edd44d81195a292321e1af7b0f70d1e5fc2aea17c8d59c567571d64761e9d917870201695c0c1537bbececa83bb3983f2a51d8cefe1d5a4652270cc99e3f664609f66087f49e6dd2eea9159de6b88227ca029d43d886b8bae7e09477f64f226befd70eea035921cc7ec4d75edd25b1a99aff12c3e2f6dae953dd0117a31976c1d4c2672dd547212f8b95c32684fd37ce7ba336c2293d59eac7dd059647b6dc676bfcb94b28685ff8b3c9ec7090e933a304edafdb0981b8f7b5a58c0d3d9067c803ae16e6d805ed1b401259480e2ec522a0ec2c9beaf2f309054a589f3b8c0a94d3c6b2da297d5f69abbef8aeed19ae82c2de87c9aa6c051f241ed7a947a8f76e0d30a224aa45e49d443e0827e8a12c9e2d9Line truncated
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffd41bdb72db36f63d5f81aa69492532e574767676a2389dd64d3bdeb44d26aefbe2d1034542126b0ae082506c8dab7fdf830b49800029da8e3759cdb4b1808373c7b900d0f4d95f659e118e168c5e9798bd449c6df1042594f08c6c71f5bdc8b7a5f84f7d47cfa64fa6cf56395dc4397afa122de3bc04a098acb679ccf47701f424d8c21f256759c283d993271f6386ca1d49f83a232b7452ad883634dde6380ceab960822ee7e3995cb065f9220634272860b894786ab84830ca689e631606e7d5e829673960586ee17b46090a9f96092d80c3a76bce8b31ba7d82e02370170c7ffc29e602f9f1ac1e5d61feee2d0c09599b51413c665c712e45044ec4a4c22e582158122c01e0763f6b4d2eb3953bbed99dfd24240bac5142532c905cce3d48ce8810d4624fcf63c628f3ac2b31266fc49c4b09348f73972d860b5a2192e3d3293a073392558916784919460b4af312e5945ec108e798d9143997c080428edf66e94b14fc9a951c134004d6010913f0156935f49e514e139a2305817e48535077894b00e4bb02fc30e0f886c3376d05e588fb8981fcb7f8e61c93f4eda2280df4efb67c4585cd3e0833ff9a6d328ec2b73f16e5b8414db69b0566bdc83f00ba989c1190f3639c9f1b04d40caaa6507867ccda71fcc8f5e4fdf1bf8f590cfb23ff80ffb305205337a03104fa819524952a6a4086e30724a76bd8c8b8a57881fce72cc748cd2afd0fd6bc41e01719677e20e40d8917394e0d1a6a0ac11c85bd8e1bbcc2397bb9fe95261d38e5cc7d509e8bf11f551c35fd5b0ca366dc4467adbf784fdebbeca8112426fd8be776145a6db373ffe6d37bca54dfc5d94336dc852da8c0f6c396af31a48e249681f7c212f920c2f771595e5396f62335a034e2a219f121af3454e70388efe7db24c138c56958a503f1c99628fc4a467f73546a370cbe269803952b194983b1089d711e06eb2cc5c1786641bb09447cf6169d269df86835b3fd947c49c9a6b77785ff39867de94adecd11c37ccb4897247753d8ed224eae52460b301cd003b382d9aef06e416396eada61dfa1cf41028ae4794a3745cc70184fd0a22da6701aba4471f47bbcc1e8ab13c8895b92e2654660e3a16fbf451a60e10568cb29306a54aff492b105d0e80f1dbd681b4f0eebe5aff5f22e3503184806e582a423fff4dbc9a2d3e068a82934af6b3433538f7505b0047f580ba5d76594494e9652111826aceab3e72898963b88261bb07529f6575986cde234e6719b5f7b23dacaa92a098911d810eb0db1c6aada09fddc69e495a39beb9abfcd5a27829ae64d9cac0d7c62dcf16aafd4b288fa5ec09f043080490203171fce84175202a14be28ac05e431563b027915f6a047347116da12c01bddc1a75ea604389fa97d06ba02eaa65a84fafc3f1c482e0294c8602e6a8aeaac7688a5e1c1f1fdb9059aae371f5318a7058eff5828c4071d114e9ad59bae5f5b4350f46456196a28ca02e2dcb902f26a3755cbebb2650891698f11d2c1bfbe0c5a7ea8e66ceecde19e16cd7814510bdccd2792ddc6f315f479bf8263c9ea07fa167ca1212e28cfcb8e3b8fc8372284d8e3c0d87032554cfd3b1cba145b9565c3769a80f87d0b6c03a89ef11e4f0648d42dca55a4729c74345f000bad6b0dce9f9498b9c8bc1763073811a6aed439f73da6d613b8a1ddaacaaa51bbc4fdb8da09fdc7ef6a4ddec4195cab7a515eddbf1cfc89d4e6882b8d49f2675f2092ec815ec71129809caa2e0a206db40df03bb5866e24ecce79c160550f66296070f5cc59840c4680f1939dfacaec0e5bf97c7f388d30b20c04ec134906b9eab09b0cba2e42c7c319ed972e8e52768241a5ca8a946e8efbf51337a96e678d496454d839b8d50386ab814c71def314b2093c42bac0df31c8dbe198fbcd26a951802b5737b414f73289a1fdfdea2e63fcac8923e82c525ee543497ec9359dd325d908191fac9eb6d1974156d0dae52b9413fba82659b98edbce8ba546adbd6f695473730a4f72ed13dca564786325148fcc7c3b05a062d120e520104a429afeb88fda6484c7d00060fb3b66e651a4c70968740c51f2c4577e10996b2e9585a8d936056047f80f3244dbd4057e073db0305a0afd110e391a82a732cc90a1d82267cc9b4f296338284428256a642581cd1762fd3410b8562dbb4c94262fa66dcc6d81388829fb252cb5e07688f5acf1221d2ff8352e9d55df5a9dba9bb286d032566d9ad2d37807fb1ea7283e4209db9c1f0a0ceccb0e8aa4c1c72fd8f35a619934ad3676c7db1fdfb1e7b1b2aff6c22b482406f9eea16e54f7cd00c82199b53e968c6ad49079b1ae2236625e0f6f1f798eac933c8bb7f76d31e606779167417ed8813273f4f26480f37b6c855450b9de03ffd2910a71937ce983bce87c2e0ebea1668e8d99f3cb31d7bab9af8233e4cd27b4bd63a33b480a27785b47aa44ec1f506b51cc3853ae72c2a8b3ce361301192c585d194dd0043955e6f220e112c1ccf3c7d5e414be7540648813afe7dfeeef7a894776dd972175a9c8c27e8768de3141cec25ba0d4e29017ef8d11f50c405a0d2b800b6d429f9f4af9292606f11f65964240e95475d7da13c0feed4b775f66c1f75771d61976b7a1d1c56865e1ab887759d57a01e1f15fe7c68275568b78c8126f58aa71194d898a4e1ed7e52ed0e97154102847b73035ee1d58105768ef3a53a216b05352ba6b9f2368c45f51d0d78a03c2b5398eae1e82f9a11704a14b4ac5e29e35efbd0d66b9ca68e5a0feaf3d6e41c48a63b126f80e67e804efddbd7566a1be6d38a0cad03e6b85f6a1f45e7be461e35fa053d7ce1d2d640f544c0fc1a2db39c63f34cbc2b5b91caffbe6a1cd07435f35e40d2efda8912b2cd877114224f6045c6cde4111dfcf3ca3e77cf3159f1354c3c7fde719825e12eb3799b943d3e40f607c8dfd6816b8f0359e77304fd961f8b1cdaebc5ea905f0695094a29c11394cdee2ae8a09da0a9209fee1da826c0f982de3db3714d44c8e98aa12e0e1c9755bbacc7658d730f095bb9a72e5fede0df73e9532d6e2476cfa635e776d2a93e0b86e3ab018d93bafe004c1d9b4f495c6ccb75e826c28ea8149594f1d0b886bd6ff0f812760de56bcc2a3ebbea20b3f3e88cc48303b1a8040e1edaf375561edccd19942fed607c0faf262d138163ce1cb72703fb3443f84b32ef76518fccf25a4314e1034da1ae415c5b74f54b38fa239317f1ed777307ad91e438666faa5b97ded2c87c8c67f1796973adec818ed08bb964eb603291eba69293c0cfe592417b9ae63bd79d611399acf664ed83ce22db6b33b6fb5da694352cfc5fe4f13c4e7098d48171d2ee87c5dc78dcd3c2029ece36e003d409776b03f48aa60d28a1041467975271104ef67d7d8181a42a4d9cb7054e6de2596b11bdacb6d7dc7d56748fd644676941e7d334058e920f6ad7a3d47bb4039f56105122f54aa2de0117f453944816cf4e89Line 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("1f8b080000096e8800ffec5c6f73db36937f9f4f8170e6d264ce946c27e93de3c89a49ecf4a9a76d928993ebdd74fa022221113508b00068474d7d9ffd7601fe17255bb294b8d3beb04512c002f861b1fb03b8e0e8e1e9db930ffffbee35496c2ac60f46f8430495b3e380c980c85948b3ec38307319d984cb598079188dc70f0819a5cc521225541b668f83dc4ec37f057542626d16b2df737e791cfc4ff8f16578a2d28c5a3e112c20919296492875f6fa98c533d6282769ca8e834bceae32a56d23eb158f6d721cb34b1eb1d0ddec112eb9e5548426a2821d1f0cf61704c5cc449a67962bd990b5908de636517a2187e0f2826826000248b6516e098f5052a2d9f43898d24bbc1d640e192c60b9156c5ce1351afa07952c5f6ea2943556d36c181933acee0629970378121455dab9602661ccfac6b87b62e719b4d7b24f160bbb1442262a9e93cfee92908cc631d41d4e94b52a3d22ffb59f7d7a51a44da17fe194a65ccc8f48f03d1397ccf28892372c67c11ea91eec91971a80dd23864a131aa6f9d48bb87ee07e92833d921cc2df53f87b067fcfe1efdbaa0977aea61071c5f82cb147e4e9fe7eab7a3a985859d5866084318b94a638ce47442ac95af973f19fc9f32a7f4af58ccbd0aaec881c0c9eb3b49577e0c4a54a2a93d188f5f7a94aee14a5a0de21a844cca461f1d8bac962f51895753115876d79ea14f462796a25395e29b937b5921c57bd9b281d33ed315980cf5546ac868b36e854f019e01dc19461ba0d855033d541fc88ecbf68eb68e389ab397c5eab6aa60cf7c309b30106f6b28375a6d54c3363aa4a9242590e0f6a21c550975381cb0474cc2e11545d8513aa2bb1306f59d827db2984e17f30d0a2c3f27129345242d00cd00e2fb941a357c98bb9c9049db7616e97b955712eb1651dd0b9b1a154e1241782d94617e0b1331f219a0f5f75a720e887c853b9ac9e7022547451c10a983a130cd6a59c3e15d8da437550274c687431d32a9731d6a2340ce96cf2f8f0e9b77be4f0d93efe3b78f2a2ad889ac63c3730f31b0a51ea0c8c0179d61d63181b78dc18874ebf60b6ca414cc1e277cc80605368ed7e6d075add3bd8af1f3755de75f2c5cd589500833d8e84a217fd6a401ef214dd1d95b66efe68e8860c5ceed0fbdc072367e75114a89e061561fa38382f9dcd89d5023c98a0c61c07657d855f7a1886e483ca082a7618fa67925e56b9e925a6f81f3402e565cca63417e086a136e6f2f19933b285e319c5bc12828da2d07d5da4a1cb02d0db7584134d651c8c473c9d9529682a026274843e2fc4bbf0e0f05fceab12eff583a7874131bfddf5989cd72e162ba96a9ce430d365e125fd4d8509fa0cf82b3be5ae4d4a32982c5e69cb5e4382233f91e0d10550a198db73662dd4661e3f81b637bb3513f32c411640aa2b181ee00345c348597234f4cd29801b0272cead0fa1523f204bb0f4f97104bfe3da58188aab3da2a4981320255792f029912c02b345f5fc0579cf8ca5da922baa25545b8e76211e3ac581803c04f9533e3b930863850f08ae87aed51811a6318c4995da4e876e3241dcffb0a8b691b3276f88faec728d92a7ed14c7978271d98b378cc52c8609f0745c21b65c2c4e8f56cd90291b7f4818f1fdcd3d4120093564c21818057a09d616c60566a12534022f432d8b07b57a913447c88be658556542a708b85fb5450f46c3acd5c69b1b8dceb83167d6d063d0dda63ad77adc54dea2e9b7d25b20a7903da975b71a0675d556dfbeee4482513de59f829ea16a3f68dd366e8acb058567b35c807902fdeca8734b714b7958f03d73f441e9b9737ee431da34b4f44f6a09bd4afeed2d74bc348a77d6f1a28d9c99bb68782e2a438a7e3e97ce6dc44e0934cb18b5a8059902ef44f0d77404b8b549f751c778b7397130fefc19250d4eb96611a27c7dddb6c35d3185dd7185cee42538d1b8526741270c579d138416d69e38198a3c47a4a8a8b85f514d07858a042d74766987bb8857dc21206ec48e8386569d9df60a5e025c0e4685f4cd384b6b4f711b7148602af4cf4e97e3e14a76f569837ee25236d14af23fbce9047b60f3450ddaa4ef914a535838acdf7f6fddfccc87969ee0e5e3029127253ae7aea1d5e30d911a0dfb35654305fab750132afc2cf4f84e39acf1b702e70c64b38d9429553113bf1448fd3a98b9467e870d237f122aaee8dcbcc9d309d3d7d7bebd7b6449a15773eb0a4db8a468145eed443d7f54d1ae404c54ba150c0536714d085d99ed20b865b5fd286b3300c06d0f6e58a2e47118038b85b54abc0de02510c63571c722bb55dced58cb4d3cc588165b8eddf50c9a78671c6fc30b3326232e6a5af81a048c86746573d6d4cdd130170bb464216737d74ee875633dd8cfb49b58d2387650de0a46819eb304f1651c3768eaaee975931cbf01fd6fd062d7d57bc48bb179eb12e2366ac9f3f13bc63429253ddf80314b287b329d216956b0d4d34e160ef316b833ca7e4353f6b8a864053bf922bcd629046832ee7d6ec558e1bb8e8dac3902021343df02192763530ae17a7c0fb9addf63f438785e5b0351e25330db3b22b4658a705af870a2a965f7851b801809eb53185bf34b01d700471ebd3e97930c3d7ecaace6d1f535dced44d33e66bb8025cf76028acaed7650d9b276b9e97ac9b4a9779eef86e2a6eb6e04ecbfd9ceccd33d248a087dd5ddbf1e575c20061f126e1c31b83b2fb020cac1b36b56f088a5267bf175b8c149ae357832f2fee54f24b75c14ce723bb330d968129ab9b12c1dc04f73c5862ddc89052f113879f7b18900797cb04fcce2d06f04043517e62e584459fe8e697c0fdf59f7c2ad04baa0a9383ab8befe0fecc47d30e82dba80cb104bc576a0dc026df80ad4600710dc81227c651a50bc2c28541bfafa524a95cb88bdfd813c3c26b984852697acf10661d9462b2d0a12c3f4e5c22ec066e8a2894d94961b727b9347f8ae3658d5cb60fcd605126c5441f10aa57ad5bba482e9f4a61afe612f5f9dbdaca8e46bec74956467839d2ecfb8bec01e97bff61b5dc3f61b637cf45a6ba54d7f5404c3b41f81493d7e32104cce6c42c664ff3e8647bc519647ec4e61114d4e0b1d473edbe83f8e714a850067004f071f78cac01dc0646347c1f747697a0416ecfafa0846d8e5229f3f4f3567321673bf4f86851cd48ec4ee3e24622d4d765ae615017bfaf6872f1bdbd0d2d02ad0a70acbc2c7af5cbce2eda2b5caf08fe2161ac9e222e091243c8e990c3f99db856b659d582db4d5c8078a95776b281b8b0f6c5a51a271e923511ac08089033bddaec16d1416b61b23c68f86008e8954ae0d1b5461d403c9ec30189fe71906c99121f94ee93cf576b969389756510261d26665066a9b719be49341a4d26144459a0cab4a879ac1a01b7cd3f523e8bd8125907fb046bd6bd476c52f78303e55518e1b876e85b1eb0e726372ecdeab1ca3d3765a170c1e8c2910b113e707Line truncated
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffec5c5173dbb6b27ecfaf403873d364ae29d94ed2db7164cd2476da7ada269938b93d673a7d804848440d022c00da515d9fdf7e76019222294a96642971a77d484c12c002f876b1fb015c6af0f0f4edc9877fbf7b4d129b8ae18301fe2182cac971c06440e424a459761c98a98c6cc2e524c03a8cc6c307840c5266298912aa0db3c7416ec7e137c1ac20b1360bd9ef39bf3c0efe157e7c199ea834a3968f040b48a4a465125a9dbd3e66f184d5da499ab2e3e092b3ab4c695bab7ac5639b1cc7ec92472c74377b844b6e3915a189a860c707bdfd3941313391e699e54ad664cd55a3b94d949eab21b8bc209a0980008a6d945bc223949468363e0ec6f4126f7b9943061b586e051b56780dfafe4125cbb71b29658dd534eb47c6f4abbb5eca650f9e044597762a984918b37e30ee9ed86906e3b5ec93c5c6ae8490918aa7e4da5d1292d13886bec391b256a547e4fff6b34f2f8ab231cc2f1cd3948be91109be67e292591e51f286e52cd823d5833df25203b07bc4506942c3341f7b11370fdc9fe4608f2487f0ef29fc7b06ff9ec3bfafab21dcb99b42c415e393c41e91a7fbfb8dee696f6465d51b8211c62c529aa29e8f88549235eae7e27f93e755fd94ea0997a155d91139e83d6769a36ecf894b955426a311eb9e5355dc6a4ac1bc4330899849c3e2a1758bc5ea211aeb7c29aa6d71e918ec62716925395e2ab9b3b4921c57b31b291d33ed319983cf7546ac868b26e854f009e01dc19261ba09855013d542fc88ecbf68da68ed89eb397c3e33d54c19eed509ab01147bd9c23ad36aa29931552749612c8707332185aacba5c0650236661708aaaec211d5955858b72cec92ed0cc2f03f1858d161f9b8141a29216806688797dca0d3abe4c5dc64824e9b3037dbacd49c4b1c590b746e6c285538ca8560b6360578ecdc4788eec377dd6a08f621f2542eea271c09155d54b002a6ce05837729974f05b6f6501dcc0a4634ba986895cb187b511a543a193d3e7cfaf51e397cb68fff1d3c79d134444d639e1b58f93583286d0674409eb5750cba81c7353db4e605ab55f6620a1ebfe506041bc368f7677ea031bd83fdd9e3bac9bb49beb81dab1260f0c79150f4a2db0cc8439e62b8a3d2ce863fe83b9541c8edfb98fb60e0fc3c8a02d3d360224c1f07e765b039b15a400413d498e3a0ecaf884b0fc3907c501941c30e43ff4cd2cbaa36bdc412ff079d407919b331cd058461e88db97a7ce29c6c11780631af84e0a0284c5f176518b200f4661fe148531907c3014f276509ba8a80181d61cc0bf12e3c38fcc64555e2a37ef0f43028d6b7bb1e92f35988c54eaa1e4739ac745944497f5361823103fe959372d72625192c166fb4e5aca1c0919f48f0e802a850cced39b3167a338f9fc0d8ebd39a886996200b20d515a807f840313052b61cf4fd700ae0fa809c0beb7de8d42b640196be3e6af05bae8d05555ced1125c5940029b992848f896411b82daaa72fc87b662cd5965c512da1db52db857898140702f210e48ff9e44c228c153e2078a6bac6604498c6a093aab4590ed36482b8ffc3a2db5acd8eba21dab3ab35489e364b1c5f0a86e52cde3016b31816c0d36185d862b1b83c1a3d43a56cf82161c4cf37f7048124d4901163e014e825785bd00bac424b680451865a16f766e645d21c212f86635555098322e07ed514dd1bf4b3c6186f1f3406e3da9a59c38ec176ebe63cb3e3baf116435fc96e819c42f56466bb951ad455d37cbba6130946f5987f0a3a54d57cd0b8addd14977306cf26b900f704f6d932e786e196f2b0e17be6e883d25317fcc863f469e8e99fcc24741af9d72bd878e914ef6ce3c518393377b1f05c548e14e37c2e5dd8889d116896316ad10a3205d189e05fd312e0f626ed472de7dde4c4c1f0fa1a25f54eb96611a27c73d3f4c36d3185df4955ccc42faee9d9e9af3d2e2f219cc695610b3a62b8ff1c21c8b00bc565717ddddd68498f2d402a3e3437ef85736f835fd1888038e51d0735033b3bed14bc00c31cfc0be95a7c96ce82c62ae290cb548a383b5d8c876bd936ad0de689bbda442bc9fff05e145c83cde78d6993b9472a4d610fb1fefcbda3f34e00467a82978f0b449e94e89cbb81568f37446ad0efb6940d0de83ba14654f805e9f11d73d8ee6f05ce09c8661b19536bad4ddc20bfc581913f091557746adee4e988e99b1b3fde3db2a0d1aba9758d465c52f40faf76629e3faa685720262add0a860287b82684aecd7610dcb2d97e94333700c06d0f6ed8ade4711803a1856d4bbc0de02570c73571c726bb35dced78cb4d22c58016a78fedad0dba78e71c57a188199311173386f81a040cfa74e970d6b4cd413f17730c65ae66bbd64e98766d6bd84dbaeb58d2387650ae04a3c0c85982f8328e6b8c75d74cbbce93df80fdd718b29bea3da2c838bc75b97113b5e4f9f01d639a94929e6f409e25b43d194f903f2bd8f569270bd5bc051a8db2dfd0943d2e3a59c24e3e0baf750601968cc7a05b7156f8da63236f8e80c0c2d02b20e3646c4a21dc8cef21b7f5c78d1e07cf6b674094f814ccf68e086d99229c16319c686ad97de1062046c25615746b7e29e0eaa1e6fd8e729461c44f99d53cbab981bb9d58dac76c17b0e4d94e4051b9dd0e2a5bb62eb75c2f9936b343e8bba1b8e9be1b01fb7fb633f7740f8922425f4df7afc715e788c187841b470ceece0b2c8872f0ec9a153c62a9c95e7c196e70926b0d918cbc7ff913c92d1745b0dcce2a4c365a84666a2c4b7bf0a7be63c311eec48397089cbcfb5847803c3ed827665ef51b0141cd85b90b165196bf631a5fc9b7f6bd702b812e682a8e0e6e6efe0727711f1c7a832ee036c452b11d28b7401bbe0035d8010477a0085f980614ef0d0ad386b9be9452e532626f7f200f8f492e61a3c925abbd425874d04a8b86c4307d39770ab019bae86213a5e586dcdee411beb60d96cd3218be7539051b7550bc43a9defa2ee8603cbead877fd8cb17672f4b3af912275d25d9d9e0a4cb33aecf70c6e5affd4157bff9f2181fbdd65a69d39d20c1b0ec4760528f9ff40493139b9021d9bf8f99126f94e511bb5386449dd3c2c491cfd6e68f3a4ea910100ce069ef034f198403586cec28f8fe284d8fc083dddc1c81865d2d727d3dd69cc9584cfd39193672503b12bbfbec88b52cd9599937049ce9db1f3e6f9a43c342ab9c9f2a430b1fbf72a98bab256e959920c52d0c92c545ee2349781c33197e32ab656e65adb42df4d5c8078a9d774395b5cd070ead6851bbf449293560c0c5819f6ef6e00e0a0bdf8dc9e3477d00c7442ad786f5aa8cea9e64b61f0ccff30cf3e5489f7cab749e7abf5c779c0bbb28813069bd3303bd4db84df2512f52693fa2224dfa55a77dcd40e906df74fd08766f600be41facd1ef1abd5df10b1e0c4f5594e3c1a1db61ec7a82dc981ca7f72ac744b59df605ca039d02113b7171a0d9d72cLine truncated
|
||||
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["index.html"] = bs
|
||||
|
||||
@@ -285,3 +285,13 @@ func ensureNodePresent(nodes []NodeConfiguration, myID string) []NodeConfigurati
|
||||
|
||||
return nodes
|
||||
}
|
||||
|
||||
func invalidateRepo(repoID string, err error) {
|
||||
for i := range cfg.Repositories {
|
||||
repo := &cfg.Repositories[i]
|
||||
if repo.ID == repoID {
|
||||
repo.Invalid = err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -559,7 +559,7 @@ func (m *Model) ScanRepos() {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Model) ScanRepo(repo string) {
|
||||
func (m *Model) ScanRepo(repo string) error {
|
||||
sup := &suppressor{threshold: int64(cfg.Options.MaxChangeKbps)}
|
||||
m.rmut.RLock()
|
||||
w := &scanner.Walker{
|
||||
@@ -572,9 +572,13 @@ func (m *Model) ScanRepo(repo string) {
|
||||
}
|
||||
m.rmut.RUnlock()
|
||||
m.setState(repo, RepoScanning)
|
||||
fs, _ := w.Walk()
|
||||
fs, _, err := w.Walk()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.ReplaceLocal(repo, fs)
|
||||
m.setState(repo, RepoIdle)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Model) SaveIndexes(dir string) {
|
||||
|
||||
+10
-2
@@ -173,7 +173,11 @@ func (p *puller) run() {
|
||||
if debugPull {
|
||||
dlog.Printf("%q: time for rescan", p.repo)
|
||||
}
|
||||
p.model.ScanRepo(p.repo)
|
||||
err := p.model.ScanRepo(p.repo)
|
||||
if err != nil {
|
||||
invalidateRepo(p.repo, err)
|
||||
return
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
@@ -190,7 +194,11 @@ func (p *puller) runRO() {
|
||||
if debugPull {
|
||||
dlog.Printf("%q: time for rescan", p.repo)
|
||||
}
|
||||
p.model.ScanRepo(p.repo)
|
||||
err := p.model.ScanRepo(p.repo)
|
||||
if err != nil {
|
||||
invalidateRepo(p.repo, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -142,7 +142,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
|
||||
}
|
||||
|
||||
if ($scope.model[repo].invalid !== '') {
|
||||
return 'text-warning';
|
||||
return 'text-danger';
|
||||
}
|
||||
|
||||
var state = '' + $scope.model[repo].state;
|
||||
|
||||
+1
-1
@@ -134,7 +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>
|
||||
<span ng-if="model[repo.ID].invalid" class="label label-danger">{{model[repo.ID].invalid}}</span>
|
||||
<ul class="list-no-bullet">
|
||||
<li>
|
||||
<div class="li-column" title="Repository ID">
|
||||
|
||||
+19
-1
@@ -2,6 +2,7 @@ package scanner
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
@@ -51,12 +52,18 @@ type CurrentFiler interface {
|
||||
|
||||
// Walk returns the list of files found in the local repository by scanning the
|
||||
// file system. Files are blockwise hashed.
|
||||
func (w *Walker) Walk() (files []File, ignore map[string][]string) {
|
||||
func (w *Walker) Walk() (files []File, ignore map[string][]string, err error) {
|
||||
w.lazyInit()
|
||||
|
||||
if debug {
|
||||
dlog.Println("Walk", w.Dir, w.BlockSize, w.IgnoreFile)
|
||||
}
|
||||
|
||||
err = checkDir(w.Dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
t0 := time.Now()
|
||||
|
||||
ignore = make(map[string][]string)
|
||||
@@ -70,6 +77,8 @@ func (w *Walker) Walk() (files []File, ignore map[string][]string) {
|
||||
d := t1.Sub(t0).Seconds()
|
||||
dlog.Printf("Walk in %.02f ms, %.0f files/s", d*1000, float64(len(files))/d)
|
||||
}
|
||||
|
||||
err = checkDir(w.Dir)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -272,3 +281,12 @@ func (w *Walker) ignoreFile(patterns map[string][]string, file string) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func checkDir(dir string) error {
|
||||
if info, err := os.Stat(dir); err != nil {
|
||||
return err
|
||||
} else if !info.IsDir() {
|
||||
return errors.New(dir + ": not a directory")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
+29
-1
@@ -27,7 +27,11 @@ func TestWalk(t *testing.T) {
|
||||
BlockSize: 128 * 1024,
|
||||
IgnoreFile: ".stignore",
|
||||
}
|
||||
files, ignores := w.Walk()
|
||||
files, ignores, err := w.Walk()
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if l1, l2 := len(files), len(testdata); l1 != l2 {
|
||||
t.Fatalf("Incorrect number of walked files %d != %d", l1, l2)
|
||||
@@ -54,6 +58,30 @@ func TestWalk(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWalkError(t *testing.T) {
|
||||
w := Walker{
|
||||
Dir: "testdata-missing",
|
||||
BlockSize: 128 * 1024,
|
||||
IgnoreFile: ".stignore",
|
||||
}
|
||||
_, _, err := w.Walk()
|
||||
|
||||
if err == nil {
|
||||
t.Error("no error from missing directory")
|
||||
}
|
||||
|
||||
w = Walker{
|
||||
Dir: "testdata/bar",
|
||||
BlockSize: 128 * 1024,
|
||||
IgnoreFile: ".stignore",
|
||||
}
|
||||
_, _, err = w.Walk()
|
||||
|
||||
if err == nil {
|
||||
t.Error("no error from non-directory")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIgnore(t *testing.T) {
|
||||
var patterns = map[string][]string{
|
||||
"": {"t2"},
|
||||
|
||||
Reference in new issue
Block a user