Compare commits
7344 Commits
v3.2.2
...
release/v1.8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11f6ed4f83 | ||
|
|
e94a84248d | ||
|
|
cf7a5b3d91 | ||
|
|
5d1a8d23b0 | ||
|
|
dbd0a2e6dc | ||
|
|
7697a282d6 | ||
|
|
76e8eec3d9 | ||
|
|
10effb396a | ||
|
|
5e97b2d00e | ||
|
|
873acd884d | ||
|
|
dc73b2748d | ||
|
|
31ad8b7026 | ||
|
|
d07edc5336 | ||
|
|
63cb160cb1 | ||
|
|
8d5c3d3d0b | ||
|
|
706d85b87d | ||
|
|
75e491c03e | ||
|
|
608f46e59c | ||
|
|
895764e7f5 | ||
|
|
21983965d0 | ||
|
|
e069a75817 | ||
|
|
ebb8fa610c | ||
|
|
c8fc7fce4a | ||
|
|
57b226e284 | ||
|
|
5f20841bc3 | ||
|
|
40dc7342cf | ||
|
|
6d2f0e555e | ||
|
|
476ca67cd4 | ||
|
|
96eb99ea55 | ||
|
|
83560bf9d0 | ||
|
|
6b29a6b6f2 | ||
|
|
74eee64b57 | ||
|
|
d21dabab4e | ||
|
|
34ba1c8957 | ||
|
|
98d82a7dd9 | ||
|
|
ee163a8af1 | ||
|
|
ed96b84b2e | ||
|
|
7284829962 | ||
|
|
21fb791747 | ||
|
|
8b3aad940e | ||
|
|
81adf6ad86 | ||
|
|
e6cd4f3276 | ||
|
|
30226b4793 | ||
|
|
aecd9231ba | ||
|
|
26c1550643 | ||
|
|
5f6b118007 | ||
|
|
b1cb52e477 | ||
|
|
799f5e05c9 | ||
|
|
497f37bffd | ||
|
|
d7aa553f1b | ||
|
|
ba12463175 | ||
|
|
0acaa6bd00 | ||
|
|
66a3353c31 | ||
|
|
5236d8a936 | ||
|
|
5876e37ed4 | ||
|
|
3c21a0ee80 | ||
|
|
f43783f003 | ||
|
|
b9c5a3acc3 | ||
|
|
c363ef5da0 | ||
|
|
e8ca2da08f | ||
|
|
f64b8eb009 | ||
|
|
40f41dc694 | ||
|
|
a63b9fbc70 | ||
|
|
4b87aa367c | ||
|
|
72f4cdf868 | ||
|
|
5be1b7df3f | ||
|
|
95e12be30f | ||
|
|
245089b9c9 | ||
|
|
2551660f49 | ||
|
|
3b28de7d8e | ||
|
|
3725eefb7f | ||
|
|
73ce02400c | ||
|
|
197cbd674d | ||
|
|
4a0f7c1eb4 | ||
|
|
e54f7a708c | ||
|
|
63f6764dce | ||
|
|
0bf7ed55be | ||
|
|
93e8174e4e | ||
|
|
c5ec66a8a3 | ||
|
|
b6fb082b78 | ||
|
|
3ce195115b | ||
|
|
00619a04f7 | ||
|
|
16815306ad | ||
|
|
3934d9cd2f | ||
|
|
6a6656ae44 | ||
|
|
ca46385637 | ||
|
|
c151682fae | ||
|
|
82fbc82b63 | ||
|
|
d78bb1d564 | ||
|
|
cd8cdbd9d2 | ||
|
|
1155f1b02d | ||
|
|
4a6b011b15 | ||
|
|
b3ad5eb414 | ||
|
|
379289639e | ||
|
|
faf446b372 | ||
|
|
e558f83407 | ||
|
|
4f74bad783 | ||
|
|
c55bdca562 | ||
|
|
583968f274 | ||
|
|
7780ea8890 | ||
|
|
d7542bfde3 | ||
|
|
91775c1125 | ||
|
|
202a8f6ed9 | ||
|
|
b2e9894988 | ||
|
|
663874e8be | ||
|
|
50631b5ac3 | ||
|
|
7c205607b5 | ||
|
|
f9627ede3c | ||
|
|
4334fe754e | ||
|
|
2315019fef | ||
|
|
e0eb6514d2 | ||
|
|
dbab98c8e0 | ||
|
|
e836b8869b | ||
|
|
f5cf9a8355 | ||
|
|
8fffb06168 | ||
|
|
8211e01d9e | ||
|
|
f7ffb190c6 | ||
|
|
96f1720d69 | ||
|
|
5c69e31c22 | ||
|
|
062de8e86f | ||
|
|
bd4be434ff | ||
|
|
489419c330 | ||
|
|
e777c6bdc6 | ||
|
|
9d3732dfd5 | ||
|
|
9fd8b2621f | ||
|
|
f2de5dc8c8 | ||
|
|
01bd1fcd33 | ||
|
|
020075e12f | ||
|
|
ad86b843e1 | ||
|
|
608781f880 | ||
|
|
6460cff222 | ||
|
|
f80caa5a8c | ||
|
|
b257e0456b | ||
|
|
4512634604 | ||
|
|
f066bd2b3f | ||
|
|
19862699cd | ||
|
|
141c58f5a6 | ||
|
|
8e202e28ad | ||
|
|
a5604b1611 | ||
|
|
b28e527a2b | ||
|
|
afdc0ca41d | ||
|
|
c01fb4d09e | ||
|
|
8e266c3193 | ||
|
|
4a2e92bcd1 | ||
|
|
4b7237b63e | ||
|
|
1cf3fc3bc5 | ||
|
|
c812ba7f87 | ||
|
|
48c101affe | ||
|
|
525f03306f | ||
|
|
25b6496f48 | ||
|
|
7548037a64 | ||
|
|
b1ffe7e47b | ||
|
|
a1214978b3 | ||
|
|
6cc11eccac | ||
|
|
b03d780ccb | ||
|
|
1142632f1a | ||
|
|
7afe81f28e | ||
|
|
594f591691 | ||
|
|
795f6e04ad | ||
|
|
d8d24a5619 | ||
|
|
28fcbf33dc | ||
|
|
15ecc08475 | ||
|
|
05143768d0 | ||
|
|
035c82aec4 | ||
|
|
4a2fbbeb10 | ||
|
|
134e55510e | ||
|
|
df30010dbd | ||
|
|
3b61ff1895 | ||
|
|
994b1be9d1 | ||
|
|
477ef46251 | ||
|
|
0751153613 | ||
|
|
eaf9ded182 | ||
|
|
eea1155afe | ||
|
|
d26d249748 | ||
|
|
2982413f8d | ||
|
|
fc14344acb | ||
|
|
41fbaaba78 | ||
|
|
ba0749b7db | ||
|
|
987a521e2f | ||
|
|
830ae61456 | ||
|
|
094263db4d | ||
|
|
ff2be17e3f | ||
|
|
f5fa22a499 | ||
|
|
538a26d56f | ||
|
|
b79820f610 | ||
|
|
44114b38e6 | ||
|
|
64ce159a6e | ||
|
|
ae3a913122 | ||
|
|
22770c324d | ||
|
|
a380cfd8e0 | ||
|
|
11e316654e | ||
|
|
8d3bb86e20 | ||
|
|
5e7dee0db5 | ||
|
|
0b72c00fad | ||
|
|
8c8ac1a162 | ||
|
|
e456fc0110 | ||
|
|
ec540294a1 | ||
|
|
7ae59567a2 | ||
|
|
18d0662bdd | ||
|
|
7a72aa623e | ||
|
|
f2256d9881 | ||
|
|
23414ac2a1 | ||
|
|
7f38e2d0de | ||
|
|
2a03e96bce | ||
|
|
296814e887 | ||
|
|
fc038caa69 | ||
|
|
48a9025346 | ||
|
|
7884353a04 | ||
|
|
baffea1ddb | ||
|
|
9eb00fed13 | ||
|
|
353282e658 | ||
|
|
d0cb5aa9f9 | ||
|
|
c71c28eab8 | ||
|
|
9d8178b3ac | ||
|
|
c0adb5ea8b | ||
|
|
820e28c904 | ||
|
|
9e8cc3b18d | ||
|
|
681345dc99 | ||
|
|
3a33742e38 | ||
|
|
d252d4eb8c | ||
|
|
8c865f3ce8 | ||
|
|
11a9ce6a2b | ||
|
|
c3d8fb73dc | ||
|
|
db58dbabfc | ||
|
|
ba91214633 | ||
|
|
7fb09f035a | ||
|
|
2e85e70e38 | ||
|
|
f60b1d8fe2 | ||
|
|
4c5b585a6f | ||
|
|
6606d650fa | ||
|
|
f51e7ed18e | ||
|
|
01bbf5ea69 | ||
|
|
2d213b64d1 | ||
|
|
06a1739553 | ||
|
|
9dfdf80af0 | ||
|
|
cc48c12d8f | ||
|
|
44d6a904d3 | ||
|
|
da1edbfb79 | ||
|
|
0c840a924a | ||
|
|
ad059fdbbc | ||
|
|
0c721fe016 | ||
|
|
f286a5abb4 | ||
|
|
3b7f41f9f7 | ||
|
|
4a747aef7b | ||
|
|
acaf5c96fe | ||
|
|
c20034be31 | ||
|
|
2ec9bf9048 | ||
|
|
1772893505 | ||
|
|
9de871a0f8 | ||
|
|
bf4badad1d | ||
|
|
680a57ce92 | ||
|
|
5390791224 | ||
|
|
5bd594c858 | ||
|
|
024871ade6 | ||
|
|
f21ae12abb | ||
|
|
24a36e84cc | ||
|
|
01c10a951b | ||
|
|
634cbaad2b | ||
|
|
746cf22d8a | ||
|
|
13c0f7dfff | ||
|
|
2902b3a68c | ||
|
|
f81c6cc2a9 | ||
|
|
ecefa9e724 | ||
|
|
3d91bb2f2d | ||
|
|
67567eff0e | ||
|
|
12ee544411 | ||
|
|
af22df8314 | ||
|
|
f9d4bd53e6 | ||
|
|
1219d46b02 | ||
|
|
3a7306945c | ||
|
|
98feb0ef4d | ||
|
|
bbad9b6178 | ||
|
|
0823791d17 | ||
|
|
ca00ca8ee4 | ||
|
|
0f295ababa | ||
|
|
80098bd752 | ||
|
|
57a69ef277 | ||
|
|
6dc2f401c9 | ||
|
|
7933a950d0 | ||
|
|
fada6968a8 | ||
|
|
8b5f6ced22 | ||
|
|
a967cf9e99 | ||
|
|
16678f5255 | ||
|
|
c62c0b669a | ||
|
|
2569363204 | ||
|
|
002e898bcf | ||
|
|
036964b4a7 | ||
|
|
8917d66571 | ||
|
|
bc748f205a | ||
|
|
573650877c | ||
|
|
3568d426fe | ||
|
|
7461c5a75f | ||
|
|
56415fa2fc | ||
|
|
bf47f70c3b | ||
|
|
5f4a40c4a3 | ||
|
|
182a6d6885 | ||
|
|
34a1c4c514 | ||
|
|
7e8242ddb1 | ||
|
|
2d8520d039 | ||
|
|
84076211b3 | ||
|
|
b8a81cb1b8 | ||
|
|
a757920f4e | ||
|
|
8510ac2687 | ||
|
|
ac766fe3de | ||
|
|
8656a3c62d | ||
|
|
d663930023 | ||
|
|
6b0c2e9e35 | ||
|
|
892bfd0b19 | ||
|
|
9a137faaaf | ||
|
|
62da3bee1a | ||
|
|
d6c229cdbe | ||
|
|
4aa2f4f45f | ||
|
|
44371b96f5 | ||
|
|
cd83c2ca05 | ||
|
|
ec31ee1c1c | ||
|
|
88aa70bab9 | ||
|
|
386e5312a4 | ||
|
|
3b364029f7 | ||
|
|
331c9120e8 | ||
|
|
1b90692844 | ||
|
|
b9f87376a2 | ||
|
|
904188ce9c | ||
|
|
0b510725c9 | ||
|
|
6ad834e236 | ||
|
|
7d434376f1 | ||
|
|
075649572d | ||
|
|
6a949af8ca | ||
|
|
4de2bd06da | ||
|
|
2d9456137e | ||
|
|
832bf218ec | ||
|
|
e1fcd6b742 | ||
|
|
8a92544a3e | ||
|
|
b80d6490f3 | ||
|
|
f631702299 | ||
|
|
dbb4aeead9 | ||
|
|
b0fbefc76b | ||
|
|
71c832e043 | ||
|
|
fba1f14779 | ||
|
|
1bb22b2b47 | ||
|
|
f54e0d2f16 | ||
|
|
6f194b83c6 | ||
|
|
6822a8993b | ||
|
|
c212c98463 | ||
|
|
905e63f5b5 | ||
|
|
ac0d5517f4 | ||
|
|
65b6ebf243 | ||
|
|
af45648e26 | ||
|
|
41f19e1a38 | ||
|
|
47ca1060dd | ||
|
|
b0478f1c42 | ||
|
|
ec9331510c | ||
|
|
7d65ddf5e1 | ||
|
|
07802a2bc5 | ||
|
|
9edc829c17 | ||
|
|
82e08a3364 | ||
|
|
477a80f658 | ||
|
|
5ac6da3c41 | ||
|
|
734834a676 | ||
|
|
c2dcb35148 | ||
|
|
19e651c0dd | ||
|
|
5d384c943f | ||
|
|
44759fd66c | ||
|
|
ca3b9aa6a3 | ||
|
|
1ac8f6fb83 | ||
|
|
270fa6d63b | ||
|
|
5a081c7a80 | ||
|
|
bd75965296 | ||
|
|
6868378673 | ||
|
|
656456441c | ||
|
|
5c44f751a3 | ||
|
|
beab2df122 | ||
|
|
e5228b8369 | ||
|
|
9e9d1b8f95 | ||
|
|
2b36bdd490 | ||
|
|
bf7a11254d | ||
|
|
f59bfe893a | ||
|
|
abb364f442 | ||
|
|
6630a33ec1 | ||
|
|
915278f237 | ||
|
|
31aa00fa4b | ||
|
|
dd13327382 | ||
|
|
0b84b5ee49 | ||
|
|
530c2b8ad8 | ||
|
|
c04fc677b5 | ||
|
|
8d2c24f7f9 | ||
|
|
ea518681d9 | ||
|
|
d3dc07f282 | ||
|
|
dd006db5a7 | ||
|
|
c42bde719e | ||
|
|
97dafdc057 | ||
|
|
0236856924 | ||
|
|
cbc14df16a | ||
|
|
6311e4ce6a | ||
|
|
9e901039e7 | ||
|
|
405414d14e | ||
|
|
fd1e8563f8 | ||
|
|
5a1ea37f57 | ||
|
|
9f476b8d1e | ||
|
|
0de57fd57c | ||
|
|
9863591dca | ||
|
|
121da08730 | ||
|
|
76060613ef | ||
|
|
74b9a13f84 | ||
|
|
7c3722b366 | ||
|
|
f5be13efb6 | ||
|
|
8764f1512d | ||
|
|
4c52858c39 | ||
|
|
63bd1b9203 | ||
|
|
b46c279587 | ||
|
|
64995bae0f | ||
|
|
2c7661a524 | ||
|
|
945804f800 | ||
|
|
8bb0a6f425 | ||
|
|
2058c362a8 | ||
|
|
6e20b504b1 | ||
|
|
21357a4ae0 | ||
|
|
a82ba73346 | ||
|
|
4a685f8b87 | ||
|
|
58bdff53cd | ||
|
|
b0b35493ec | ||
|
|
ba2c02b75d | ||
|
|
4586ae390f | ||
|
|
f0db86b663 | ||
|
|
9f544e9356 | ||
|
|
a06ae0bdc7 | ||
|
|
b77c3eb5bd | ||
|
|
9a33798b30 | ||
|
|
330bf8d3b3 | ||
|
|
4a02a783c4 | ||
|
|
7cb1d8296d | ||
|
|
8dc09edb04 | ||
|
|
9d0dee88d2 | ||
|
|
b65e37ed72 | ||
|
|
c64963553a | ||
|
|
7fd34c0517 | ||
|
|
2a660a1de1 | ||
|
|
fe55ab2a68 | ||
|
|
e726e4b828 | ||
|
|
8730ee0e45 | ||
|
|
94c3963da0 | ||
|
|
b3b7598ec6 | ||
|
|
49ea6e0deb | ||
|
|
ebef3eff23 | ||
|
|
0bd802e3e1 | ||
|
|
f0374ad1ad | ||
|
|
af6bce3ad5 | ||
|
|
6db7dbd333 | ||
|
|
b1f3685015 | ||
|
|
58c4559d3b | ||
|
|
ba75319157 | ||
|
|
ccea91652f | ||
|
|
6e114f6791 | ||
|
|
15d6cf179d | ||
|
|
9681c83734 | ||
|
|
64680b72bd | ||
|
|
205a533645 | ||
|
|
284b0e12cb | ||
|
|
8a64e67456 | ||
|
|
1b3404eaca | ||
|
|
928417ae39 | ||
|
|
7e5abe2dc4 | ||
|
|
7c0c965532 | ||
|
|
da5a0b8382 | ||
|
|
4b4453cb92 | ||
|
|
8b864a328e | ||
|
|
fdec258c8d | ||
|
|
a0ecc5f24e | ||
|
|
20c54f88b2 | ||
|
|
2d707fe5e6 | ||
|
|
ce4885f761 | ||
|
|
9441bfaccc | ||
|
|
bc42b3ab6c | ||
|
|
552014a068 | ||
|
|
06ef5b68d4 | ||
|
|
c761625c69 | ||
|
|
f80b4f46ae | ||
|
|
c8a9384a70 | ||
|
|
0787056e07 | ||
|
|
a7ee4a6e95 | ||
|
|
fdb417643d | ||
|
|
5c13ba8d2e | ||
|
|
2dc805c0c6 | ||
|
|
d5d847e5c4 | ||
|
|
f17524bd0c | ||
|
|
eabbddcd98 | ||
|
|
0222623be9 | ||
|
|
08bf443016 | ||
|
|
294904321c | ||
|
|
e09fe48773 | ||
|
|
c03a9b3e42 | ||
|
|
3a1ed82529 | ||
|
|
ce9a5173fe | ||
|
|
5e022a98e6 | ||
|
|
d9b0b7f56e | ||
|
|
499d132124 | ||
|
|
7e587e097c | ||
|
|
fd37fb01fd | ||
|
|
3379141d81 | ||
|
|
49d9900b1f | ||
|
|
6467934d29 | ||
|
|
5af7f8bd72 | ||
|
|
0dcf31ae49 | ||
|
|
cef0f12c51 | ||
|
|
8ef177f8c5 | ||
|
|
499bff43d9 | ||
|
|
3a95e2d0ea | ||
|
|
e08c7e521b | ||
|
|
4651ba06c1 | ||
|
|
d9b51a781c | ||
|
|
241ee793b7 | ||
|
|
e033d217e9 | ||
|
|
89eea64e10 | ||
|
|
7278372388 | ||
|
|
e110943562 | ||
|
|
b97af15de6 | ||
|
|
4c1f1f9646 | ||
|
|
b3000ae623 | ||
|
|
d487a76ee2 | ||
|
|
7dd31eb8fb | ||
|
|
2852c3576a | ||
|
|
c5d098c32e | ||
|
|
599adde1bc | ||
|
|
de8f98192b | ||
|
|
c2f72b1346 | ||
|
|
e8b197d6f6 | ||
|
|
8f8ff5a295 | ||
|
|
078c404c3b | ||
|
|
92fb89f6e1 | ||
|
|
0fd56a71e4 | ||
|
|
18391c1410 | ||
|
|
7096085f2b | ||
|
|
57a8440db3 | ||
|
|
54259e2f88 | ||
|
|
225c48982b | ||
|
|
fa165621ed | ||
|
|
4b84928874 | ||
|
|
7d9a191a3c | ||
|
|
00533d3870 | ||
|
|
584844eada | ||
|
|
6c90dd1f4a | ||
|
|
c8b4c7af65 | ||
|
|
794049e824 | ||
|
|
7edb930240 | ||
|
|
6eff62ae09 | ||
|
|
22ad514297 | ||
|
|
b686bd0c94 | ||
|
|
10370651fc | ||
|
|
e5daa2698f | ||
|
|
d0f614a25b | ||
|
|
98ea1a5143 | ||
|
|
a3e084716e | ||
|
|
220ee6ae42 | ||
|
|
e61c6cd3db | ||
|
|
0ba57949e4 | ||
|
|
5fc0a12627 | ||
|
|
617a2433a3 | ||
|
|
aefeb8c465 | ||
|
|
db30d6d791 | ||
|
|
735b12eaf0 | ||
|
|
1ceae07560 | ||
|
|
d4e6278764 | ||
|
|
70a80e31cf | ||
|
|
7694c99ab3 | ||
|
|
abf6e0d90b | ||
|
|
8b4c4bd08f | ||
|
|
b8451190d8 | ||
|
|
a2ee2a3c67 | ||
|
|
fb14458010 | ||
|
|
48badd59e9 | ||
|
|
8a9e44d181 | ||
|
|
2b7c366f64 | ||
|
|
99c09dfbfa | ||
|
|
2af57c7820 | ||
|
|
f887085ee0 | ||
|
|
e500b82c2c | ||
|
|
e7822473e9 | ||
|
|
aeb5655c25 | ||
|
|
5f938c0c78 | ||
|
|
554581f848 | ||
|
|
890a0c3cee | ||
|
|
c258ae8ada | ||
|
|
ffd5fb8139 | ||
|
|
7e5eec430d | ||
|
|
70ad46133f | ||
|
|
317ddb7283 | ||
|
|
efa4e6bc6f | ||
|
|
159c2ffb0e | ||
|
|
25c49cf930 | ||
|
|
2ce72d4e00 | ||
|
|
6759237eda | ||
|
|
f38fce916e | ||
|
|
9458880c06 | ||
|
|
43f9233914 | ||
|
|
9b2fcadeef | ||
|
|
c2748ea7fe | ||
|
|
5a4648cdd6 | ||
|
|
583b1b8429 | ||
|
|
2313121354 | ||
|
|
22274464f4 | ||
|
|
dea3d849e1 | ||
|
|
cabdf84f1f | ||
|
|
971dccda16 | ||
|
|
a908b29a74 | ||
|
|
616b8f42f9 | ||
|
|
47e4efe0c5 | ||
|
|
fef0410b92 | ||
|
|
8db3bdc683 | ||
|
|
ea619b39b2 | ||
|
|
dd62ca7ba9 | ||
|
|
7bb4d610e5 | ||
|
|
eb0c848f5b | ||
|
|
637c5fe1eb | ||
|
|
1e34413238 | ||
|
|
e4b8103ac7 | ||
|
|
97da83d008 | ||
|
|
486e989a39 | ||
|
|
e79e9248fd | ||
|
|
c37d1a9e99 | ||
|
|
384ef124e7 | ||
|
|
35ae14050e | ||
|
|
1972383216 | ||
|
|
25def0a808 | ||
|
|
cc63985876 | ||
|
|
8683c72483 | ||
|
|
4cdab02273 | ||
|
|
34695f460a | ||
|
|
4090204944 | ||
|
|
970c690681 | ||
|
|
0cd8cecdf8 | ||
|
|
c42b366f0e | ||
|
|
c0b2c8a5d6 | ||
|
|
1ecf92ade2 | ||
|
|
f44d066876 | ||
|
|
fb3954f9a5 | ||
|
|
6df46c50b1 | ||
|
|
378af8ea88 | ||
|
|
c6daee6da6 | ||
|
|
94cd7bb25b | ||
|
|
d7ca839c67 | ||
|
|
513db27377 | ||
|
|
2b8dc17db7 | ||
|
|
2e2eacf62a | ||
|
|
dba955be7c | ||
|
|
b8d048fa0d | ||
|
|
ab5b245182 | ||
|
|
fc0001caa1 | ||
|
|
81702e6ec9 | ||
|
|
6780661192 | ||
|
|
e6d54d511d | ||
|
|
31d5488059 | ||
|
|
39735723f5 | ||
|
|
b3393b5ca7 | ||
|
|
79b4d4729c | ||
|
|
4092b32bad | ||
|
|
36e7cb9755 | ||
|
|
dab02b80fd | ||
|
|
07af31d004 | ||
|
|
364c029246 | ||
|
|
043ab2cd59 | ||
|
|
8b113cd8b6 | ||
|
|
91b164c778 | ||
|
|
552d8d3a4e | ||
|
|
d6b97c8557 | ||
|
|
4befec242a | ||
|
|
756eafaaf6 | ||
|
|
acb6f8a518 | ||
|
|
f6eb669b51 | ||
|
|
3e76e7826e | ||
|
|
661fd901bd | ||
|
|
2a6d3ba058 | ||
|
|
f98040ad50 | ||
|
|
126ba796dc | ||
|
|
10a2a904d7 | ||
|
|
ea20adaa84 | ||
|
|
7dd93b2441 | ||
|
|
e91a2cf2ea | ||
|
|
8e3e59fdb8 | ||
|
|
b5b39a56ad | ||
|
|
08ed515b62 | ||
|
|
c64c595acc | ||
|
|
f1ad4bb3d5 | ||
|
|
8ee9922fe6 | ||
|
|
e47df0b301 | ||
|
|
387a4b09c1 | ||
|
|
15ebe4b853 | ||
|
|
be48397945 | ||
|
|
6e03390aa8 | ||
|
|
eea76a5241 | ||
|
|
e9dbfc70b7 | ||
|
|
1dee960b45 | ||
|
|
c43399cad8 | ||
|
|
d293a2b9d6 | ||
|
|
e6a03813d4 | ||
|
|
fab7937c62 | ||
|
|
fa4663e61e | ||
|
|
bf55276189 | ||
|
|
13e8a0fe56 | ||
|
|
303d7f7e9c | ||
|
|
3c6cc56143 | ||
|
|
bd1bf2a072 | ||
|
|
a5cc3a9baf | ||
|
|
061b1aa2d4 | ||
|
|
668a477c69 | ||
|
|
e48df3ee47 | ||
|
|
a4ee5627ed | ||
|
|
01fd05a5cb | ||
|
|
83d1173634 | ||
|
|
aad5cccec8 | ||
|
|
9500d394ec | ||
|
|
b9ae16d15e | ||
|
|
fcea86877f | ||
|
|
a938ddf704 | ||
|
|
080428b2bf | ||
|
|
179123de35 | ||
|
|
74d65b5b5b | ||
|
|
34831afaa7 | ||
|
|
51c3b4b4bf | ||
|
|
56d931aeac | ||
|
|
4ae5a54c1f | ||
|
|
b63e2e0ded | ||
|
|
0a24f5cac8 | ||
|
|
194a11eb11 | ||
|
|
912953e82a | ||
|
|
127f477056 | ||
|
|
0dac1ff677 | ||
|
|
f766e9713b | ||
|
|
3c39b6351c | ||
|
|
33bc2ebdfa | ||
|
|
6ca8fbd2f9 | ||
|
|
05dcfcfc33 | ||
|
|
b82c14b3d2 | ||
|
|
6c1a31ffaa | ||
|
|
fa93857117 | ||
|
|
a6cdda115d | ||
|
|
b1ad5734c6 | ||
|
|
1b2aff02a2 | ||
|
|
50ce19eff7 | ||
|
|
8273479b41 | ||
|
|
b30f6b4099 | ||
|
|
f24ba27d79 | ||
|
|
8f86c43b90 | ||
|
|
bc06ab4a31 | ||
|
|
92466129ec | ||
|
|
0449330dbc | ||
|
|
ca112f0a04 | ||
|
|
03e558c29b | ||
|
|
e6777f7b9d | ||
|
|
df0eb7372c | ||
|
|
7781e8cef2 | ||
|
|
52c2cb15db | ||
|
|
a4fa6bbc89 | ||
|
|
6e68b61479 | ||
|
|
ce7c64c7e1 | ||
|
|
3422077a89 | ||
|
|
7fbdd4f2ac | ||
|
|
3ad5399a31 | ||
|
|
69a855f3d4 | ||
|
|
4a7de87071 | ||
|
|
5dfe8b4340 | ||
|
|
8da45ae2b3 | ||
|
|
0e04a2091a | ||
|
|
578cf52ce5 | ||
|
|
0e464995ce | ||
|
|
152c6af97e | ||
|
|
00bd6277a8 | ||
|
|
3b51c4f3fb | ||
|
|
32145b6de8 | ||
|
|
67a8688538 | ||
|
|
b1bc08e268 | ||
|
|
ed3589f429 | ||
|
|
5ae8408725 | ||
|
|
a42900c17f | ||
|
|
0df7cab4fb | ||
|
|
59b10e66f7 | ||
|
|
c7a6ee5c0b | ||
|
|
7cb1c1cf20 | ||
|
|
9c0a374f3f | ||
|
|
9ea327f1f7 | ||
|
|
6e64f9db8e | ||
|
|
9c354a539a | ||
|
|
c40f5d2d4c | ||
|
|
819f50ccd5 | ||
|
|
ced08d18a4 | ||
|
|
d57233680b | ||
|
|
b11ddd8d4c | ||
|
|
e277b3e0e4 | ||
|
|
895e538836 | ||
|
|
a74426d631 | ||
|
|
412583a3f2 | ||
|
|
c1224124ea | ||
|
|
5927599e43 | ||
|
|
adf3f004b6 | ||
|
|
ac968c3c6f | ||
|
|
be4ec0cbba | ||
|
|
a847d16f5b | ||
|
|
8d1ad55598 | ||
|
|
f847884d16 | ||
|
|
1b9b894731 | ||
|
|
7a30208e05 | ||
|
|
630f234223 | ||
|
|
32f25598b3 | ||
|
|
4bf0cae1f5 | ||
|
|
d0fef4395f | ||
|
|
344dc07239 | ||
|
|
ba358ecbf5 | ||
|
|
ae9dd239fb | ||
|
|
ec43e5619b | ||
|
|
bed623600d | ||
|
|
5fa403c874 | ||
|
|
0bb1c84208 | ||
|
|
b174817b6a | ||
|
|
cc9fa062e6 | ||
|
|
0c59edaafa | ||
|
|
1e2da5d396 | ||
|
|
492ec97a46 | ||
|
|
d1337299e2 | ||
|
|
9ca8aaecb4 | ||
|
|
91373901f6 | ||
|
|
fe78154895 | ||
|
|
1bff02de55 | ||
|
|
7be5935c55 | ||
|
|
ef6813abc9 | ||
|
|
55d9ddf24a | ||
|
|
ca474af3c6 | ||
|
|
8e103d3e76 | ||
|
|
a7c5e58635 | ||
|
|
ca8c7bb2b5 | ||
|
|
aa27cbf229 | ||
|
|
6813640d2f | ||
|
|
e95417ea2c | ||
|
|
659bc727bd | ||
|
|
e6b51200ab | ||
|
|
a7f90905df | ||
|
|
8afd500c48 | ||
|
|
8b21cdba78 | ||
|
|
3e950ef112 | ||
|
|
c55caeaf0c | ||
|
|
d84490a0df | ||
|
|
c2ec38f9b7 | ||
|
|
61f4ad2fc5 | ||
|
|
c9687c036d | ||
|
|
3e445cce06 | ||
|
|
80169460ec | ||
|
|
efd202f40f | ||
|
|
ab55ca7ebd | ||
|
|
1675fc4301 | ||
|
|
61b40520ba | ||
|
|
f1d6a1fffc | ||
|
|
28c1c90230 | ||
|
|
2a60e72fcd | ||
|
|
cfb76cd99e | ||
|
|
7c943b1cad | ||
|
|
5bc8782d33 | ||
|
|
e07d3ad0fc | ||
|
|
f035dcd4f2 | ||
|
|
54fedd4070 | ||
|
|
07063e3e11 | ||
|
|
69e2ab1611 | ||
|
|
4eae810d63 | ||
|
|
4a8ee0b5cc | ||
|
|
b46066f17c | ||
|
|
95f0f62ea4 | ||
|
|
74f9f98f78 | ||
|
|
2e3475f02c | ||
|
|
df77ad31d5 | ||
|
|
c3bbf43970 | ||
|
|
fc53f95f23 | ||
|
|
823318bfbe | ||
|
|
5676f60cba | ||
|
|
3fed13b0ee | ||
|
|
51ba3df5ff | ||
|
|
4b654ad17f | ||
|
|
5d1a6382b6 | ||
|
|
c71ee33057 | ||
|
|
9d4c1ddfa1 | ||
|
|
280ebcbf7c | ||
|
|
100a538622 | ||
|
|
1c7f951534 | ||
|
|
a4dfe4b9b1 | ||
|
|
5f52178421 | ||
|
|
83e72f17f6 | ||
|
|
9c6801c8d4 | ||
|
|
bbf9abde49 | ||
|
|
cbee921c28 | ||
|
|
69796ddd64 | ||
|
|
3089833167 | ||
|
|
f4b7b424c1 | ||
|
|
547f95417d | ||
|
|
e8a17e4558 | ||
|
|
4ee52b7161 | ||
|
|
e87c540a87 | ||
|
|
a711d41f54 | ||
|
|
91ff87c0e5 | ||
|
|
a9ffbeb679 | ||
|
|
801843b011 | ||
|
|
b8c2420ae2 | ||
|
|
aaf6be3ee6 | ||
|
|
8bb9b67a29 | ||
|
|
3e6d9b355e | ||
|
|
3f0d9beece | ||
|
|
a747a5d05f | ||
|
|
212fef0866 | ||
|
|
e2721b6190 | ||
|
|
0b3ea42847 | ||
|
|
46d19c4676 | ||
|
|
9ae7664df7 | ||
|
|
ac110d1b73 | ||
|
|
cd29888906 | ||
|
|
d84da8fe65 | ||
|
|
a93f13849c | ||
|
|
467ff4d343 | ||
|
|
3f2f5752cb | ||
|
|
8c6b2324a7 | ||
|
|
69bfd81b1c | ||
|
|
6e39f3d422 | ||
|
|
90ad73ae21 | ||
|
|
85414d8b75 | ||
|
|
3aafa0400e | ||
|
|
23ba5c870f | ||
|
|
c919b07a53 | ||
|
|
a7aaacb633 | ||
|
|
a75f251195 | ||
|
|
adba2ad609 | ||
|
|
6efdcaed86 | ||
|
|
2b8c0bb5e2 | ||
|
|
406031d3cc | ||
|
|
908e8942cc | ||
|
|
0ba165e2ea | ||
|
|
0ea18698af | ||
|
|
7b773bd49f | ||
|
|
37359aee68 | ||
|
|
da898d4066 | ||
|
|
508092a248 | ||
|
|
3da0d437e9 | ||
|
|
e3b77f92c1 | ||
|
|
2bb73fe12c | ||
|
|
af57d6ab8a | ||
|
|
f54626df0b | ||
|
|
9033eaeec1 | ||
|
|
ef0bc57ae7 | ||
|
|
47f59589c5 | ||
|
|
048468560f | ||
|
|
8786c15221 | ||
|
|
512678a5a3 | ||
|
|
ed51aa9c92 | ||
|
|
d41084c54a | ||
|
|
b5f61f1d15 | ||
|
|
3fbba2553a | ||
|
|
c9c5d164d5 | ||
|
|
a89d6253e0 | ||
|
|
e5fd43c231 | ||
|
|
83d956ce6b | ||
|
|
fa3ceb610d | ||
|
|
25b1a8099b | ||
|
|
1a6c97be9c | ||
|
|
2fcd9b69b7 | ||
|
|
1aee261aae | ||
|
|
6400d8a3cb | ||
|
|
0b718535b6 | ||
|
|
b9be49cd96 | ||
|
|
809babb562 | ||
|
|
1bcabb8b1e | ||
|
|
d62bc3362b | ||
|
|
1f877f8c87 | ||
|
|
fb1daad13d | ||
|
|
da466b0505 | ||
|
|
85b7fd1e61 | ||
|
|
7893e5939a | ||
|
|
9a1772b0fa | ||
|
|
a5f63fc4d1 | ||
|
|
b8c1dc55b4 | ||
|
|
28fb255d91 | ||
|
|
0549762fd0 | ||
|
|
39f2aa7c12 | ||
|
|
7707ad7a0a | ||
|
|
728cc27284 | ||
|
|
af05212bf8 | ||
|
|
35c3510335 | ||
|
|
15f6ec9632 | ||
|
|
832ca509d3 | ||
|
|
2139c152cb | ||
|
|
f86f56e19c | ||
|
|
9aa8fdc5d7 | ||
|
|
dc789ad7db | ||
|
|
5c95f7c7ce | ||
|
|
fd274ffcd9 | ||
|
|
0be2b34cec | ||
|
|
b6604505e7 | ||
|
|
5095dfaed6 | ||
|
|
2986e942ee | ||
|
|
2eabf18c9b | ||
|
|
2a9799493a | ||
|
|
8ebd15e6a6 | ||
|
|
69e82c1761 | ||
|
|
3b35c6e47c | ||
|
|
062111de3b | ||
|
|
e225b5c512 | ||
|
|
81241b9380 | ||
|
|
3623f12a28 | ||
|
|
11da1e6146 | ||
|
|
cdb9478774 | ||
|
|
b908ac9fab | ||
|
|
ea2a938e8a | ||
|
|
48797e7199 | ||
|
|
4ba9745cee | ||
|
|
b299d7bceb | ||
|
|
60d95a0b85 | ||
|
|
71a8fe3e7c | ||
|
|
4ec8551490 | ||
|
|
a2f0c57584 | ||
|
|
416ded5f3e | ||
|
|
2c4b54dccc | ||
|
|
6f31911497 | ||
|
|
45f3d4a719 | ||
|
|
dd3d78ffed | ||
|
|
b3a3024f03 | ||
|
|
d97bb9516c | ||
|
|
ee878e3951 | ||
|
|
31067c0a89 | ||
|
|
08c9617caa | ||
|
|
75982127c8 | ||
|
|
b2bf1c9422 | ||
|
|
74e05e60ca | ||
|
|
d94472e89b | ||
|
|
2690542adb | ||
|
|
3f3383dc0a | ||
|
|
d7fd9bf7bb | ||
|
|
6bdc556b7f | ||
|
|
dc0ef38950 | ||
|
|
1ef98a6eaa | ||
|
|
d7cf7393d4 | ||
|
|
edc78b9633 | ||
|
|
000b2d33a9 | ||
|
|
8dca5ad526 | ||
|
|
81b4d38f01 | ||
|
|
c7a4317231 | ||
|
|
01835a4206 | ||
|
|
951309f76a | ||
|
|
f933bcdfee | ||
|
|
44754774f1 | ||
|
|
917b9641ec | ||
|
|
1b7cd3d0b0 | ||
|
|
0857e289d5 | ||
|
|
b574af27b8 | ||
|
|
0fa07ccf99 | ||
|
|
2aabfc1afa | ||
|
|
8f4d11af0b | ||
|
|
8176345c0e | ||
|
|
ecfc401eaa | ||
|
|
4ceb92f311 | ||
|
|
80d1998981 | ||
|
|
d79829fc47 | ||
|
|
24941a1046 | ||
|
|
188fe6c301 | ||
|
|
e45331d6d2 | ||
|
|
d3dce01cf7 | ||
|
|
099372d76c | ||
|
|
1546458f7d | ||
|
|
e74055878f | ||
|
|
2c34ef5d97 | ||
|
|
f6828e0b66 | ||
|
|
c14870c5ac | ||
|
|
bc8400747a | ||
|
|
ff3971b830 | ||
|
|
aafb0ea1c6 | ||
|
|
20acbdfe03 | ||
|
|
91b3615219 | ||
|
|
253a2d636b | ||
|
|
8c7e632a3d | ||
|
|
e5f7f7dbc7 | ||
|
|
54c73bdaf0 | ||
|
|
4dc43b37be | ||
|
|
87ebaa97ee | ||
|
|
6be7387ffb | ||
|
|
15d0ac7ed4 | ||
|
|
14ff2f840e | ||
|
|
4607e1ac3d | ||
|
|
2431fc71da | ||
|
|
0e0036106f | ||
|
|
af62ec5cc0 | ||
|
|
2efdb0907c | ||
|
|
32deee9e52 | ||
|
|
abff697f31 | ||
|
|
60424b7bad | ||
|
|
ce791454cb | ||
|
|
382e7276b8 | ||
|
|
95f2e2b57b | ||
|
|
238a997ec0 | ||
|
|
14f16d6c2e | ||
|
|
02ecc03d6d | ||
|
|
16b34448d4 | ||
|
|
139ebf806e | ||
|
|
b11b3a7a7c | ||
|
|
bb8014885f | ||
|
|
ea01decb6b | ||
|
|
773530c917 | ||
|
|
9ae445c28f | ||
|
|
0b718e0d7b | ||
|
|
eec2179e73 | ||
|
|
73370b8cf7 | ||
|
|
e6b0a2db62 | ||
|
|
3a6f3c8c11 | ||
|
|
04889b7ae5 | ||
|
|
c6a881e71b | ||
|
|
8685b315a2 | ||
|
|
501fb228e6 | ||
|
|
7467ff3d94 | ||
|
|
1fdf560678 | ||
|
|
795dcc8ecf | ||
|
|
5f4cff6159 | ||
|
|
1e1ece8f3d | ||
|
|
c58e1e437b | ||
|
|
0ca359cdb4 | ||
|
|
b66d6b3449 | ||
|
|
9495429982 | ||
|
|
954e69f66d | ||
|
|
5ffdf9388b | ||
|
|
9ec7f6b954 | ||
|
|
a98add1974 | ||
|
|
1a97030017 | ||
|
|
85d14cc229 | ||
|
|
1928920a08 | ||
|
|
181b3a8f09 | ||
|
|
fff022ef8a | ||
|
|
3e578b5d29 | ||
|
|
ca4a84a2d6 | ||
|
|
ff64f188fd | ||
|
|
6f62d4f180 | ||
|
|
fb8535e305 | ||
|
|
7ea4bfc561 | ||
|
|
5a62eb30df | ||
|
|
8d5f58d834 | ||
|
|
e3028d124f | ||
|
|
fc36567ee1 | ||
|
|
76106ab080 | ||
|
|
fd8d6405c8 | ||
|
|
c3f2b8803f | ||
|
|
5424f75a63 | ||
|
|
fb2f8dcf3c | ||
|
|
320c9817bc | ||
|
|
bae26421aa | ||
|
|
48b19a5d14 | ||
|
|
725835b5b1 | ||
|
|
3506717e9c | ||
|
|
cf8c2e5951 | ||
|
|
f6013d5098 | ||
|
|
bac6d05e78 | ||
|
|
1d82e775cc | ||
|
|
7cc96de6cf | ||
|
|
a0ea370c8c | ||
|
|
f86af9c280 | ||
|
|
66d3c541a0 | ||
|
|
071ca771fd | ||
|
|
9add96a872 | ||
|
|
9f7c4d92c9 | ||
|
|
b84e165ab4 | ||
|
|
5ba4ba3957 | ||
|
|
804bc0aa2f | ||
|
|
775d487557 | ||
|
|
bec69f702b | ||
|
|
1946ce2954 | ||
|
|
f321980a32 | ||
|
|
38a9cda4bb | ||
|
|
8ee45eb614 | ||
|
|
30c81a126c | ||
|
|
daf70d3a4e | ||
|
|
1610296f54 | ||
|
|
7000b41851 | ||
|
|
ed4935e696 | ||
|
|
5512ed3699 | ||
|
|
6b6c414bc3 | ||
|
|
3e06490d38 | ||
|
|
d877bf7e15 | ||
|
|
45d1fc03cb | ||
|
|
36ea53332d | ||
|
|
1c5cbc390b | ||
|
|
a8beef890d | ||
|
|
ab5cc6f3a9 | ||
|
|
4c6e170ceb | ||
|
|
15c6bb500b | ||
|
|
321cc2a3d0 | ||
|
|
cb87f29b76 | ||
|
|
9350ba7947 | ||
|
|
04b7fd87b9 | ||
|
|
2dc6f15eca | ||
|
|
e64aa18dc9 | ||
|
|
05abd03011 | ||
|
|
4ebdcbc5df | ||
|
|
43fc430c07 | ||
|
|
47422c2635 | ||
|
|
59e70c5ee9 | ||
|
|
c28bf94252 | ||
|
|
88aef6eea9 | ||
|
|
86bf3704ea | ||
|
|
3da0e3c404 | ||
|
|
1324d62cd3 | ||
|
|
9e5d0a09eb | ||
|
|
4163cdf3ea | ||
|
|
7b2b900e13 | ||
|
|
a2a49c93c7 | ||
|
|
c0d41b1b77 | ||
|
|
ad33730dca | ||
|
|
575c109a02 | ||
|
|
0e26db8bcd | ||
|
|
b333e7129d | ||
|
|
f0aee3c467 | ||
|
|
de8a091767 | ||
|
|
1a83581121 | ||
|
|
d71f510c62 | ||
|
|
dc4afef07f | ||
|
|
4009c245a3 | ||
|
|
9fc418a652 | ||
|
|
9a5e628a7e | ||
|
|
69ea5e4385 | ||
|
|
171914e9a7 | ||
|
|
19d5192e8c | ||
|
|
7ea7c57406 | ||
|
|
b730498f02 | ||
|
|
78b54b49fa | ||
|
|
990709da8f | ||
|
|
595da53d3c | ||
|
|
f44c31f869 | ||
|
|
8606d9f5bc | ||
|
|
2cd3622ddc | ||
|
|
535445c32e | ||
|
|
769ab1e424 | ||
|
|
521945a2d2 | ||
|
|
fc265b036f | ||
|
|
d2d0aea8a1 | ||
|
|
2d1c5c3756 | ||
|
|
19bf4ddf80 | ||
|
|
845ba9d153 | ||
|
|
e7cea92535 | ||
|
|
04b3e8cbdc | ||
|
|
d27d720f05 | ||
|
|
2f5c1ba1db | ||
|
|
7b104f0cd0 | ||
|
|
7b297808ce | ||
|
|
6f751409b4 | ||
|
|
58893384e8 | ||
|
|
fb2c176491 | ||
|
|
3a9c698821 | ||
|
|
ae30315a62 | ||
|
|
96c268c0fc | ||
|
|
e59fe7c8d9 | ||
|
|
02bc92a5c9 | ||
|
|
b29c358315 | ||
|
|
9303fc2015 | ||
|
|
4b48a45bac | ||
|
|
869d73a25c | ||
|
|
b104ab3ca1 | ||
|
|
4c9d9c221a | ||
|
|
e87c063c90 | ||
|
|
fbdc00f464 | ||
|
|
2cb4649acf | ||
|
|
6eaeb01ecf | ||
|
|
58771acacb | ||
|
|
011f128c89 | ||
|
|
9720f90905 | ||
|
|
be825aaa88 | ||
|
|
ffd0062438 | ||
|
|
a2648281a0 | ||
|
|
a89592d4ab | ||
|
|
283e87d814 | ||
|
|
b16c84de7b | ||
|
|
17655cdf1b | ||
|
|
77f8bad2fb | ||
|
|
e9e2a9cdcc | ||
|
|
e08b3a592e | ||
|
|
b62ce2e246 | ||
|
|
10171b7e2f | ||
|
|
f9a5cc4d8e | ||
|
|
b3fd94c13d | ||
|
|
d09704e903 | ||
|
|
ca4f5c37e6 | ||
|
|
5911f98392 | ||
|
|
aef30071c9 | ||
|
|
7af81973cb | ||
|
|
46c7fe371d | ||
|
|
28b81899d0 | ||
|
|
3968c1149e | ||
|
|
e189b06baa | ||
|
|
7fd2d8e392 | ||
|
|
bac6ac033a | ||
|
|
c55a027da3 | ||
|
|
36a94da8da | ||
|
|
bcd7f42529 | ||
|
|
b627f1131b | ||
|
|
9e842c8a72 | ||
|
|
97fe773491 | ||
|
|
a0c397df08 | ||
|
|
9e87fe8c06 | ||
|
|
07b4e47a56 | ||
|
|
82a7b0292e | ||
|
|
d644e88107 | ||
|
|
00d08473b8 | ||
|
|
1ce3572409 | ||
|
|
05ab747054 | ||
|
|
ca306985d3 | ||
|
|
b0d5bb909b | ||
|
|
a880b17296 | ||
|
|
e722bdbb03 | ||
|
|
095fb9f2e3 | ||
|
|
695b10bedd | ||
|
|
cc0c4a30a7 | ||
|
|
a68bf746a4 | ||
|
|
e2bb7933e8 | ||
|
|
bec09378f9 | ||
|
|
d29aa76777 | ||
|
|
6b9073b3a4 | ||
|
|
18bf6be398 | ||
|
|
6da5ed2594 | ||
|
|
ccdb94992d | ||
|
|
a8325dd1cb | ||
|
|
7a2a3fbafc | ||
|
|
f7088292bb | ||
|
|
2b52f77e1b | ||
|
|
079273e2ff | ||
|
|
eb0f166f50 | ||
|
|
51a18f7e54 | ||
|
|
e5b8b4b5ec | ||
|
|
9aed18073d | ||
|
|
ffc0bff46e | ||
|
|
be1330ec89 | ||
|
|
d8dff304c0 | ||
|
|
65861900cd | ||
|
|
45c264f681 | ||
|
|
88a3bb6d42 | ||
|
|
b5fba4cd42 | ||
|
|
6070c9a5b8 | ||
|
|
84feb016f5 | ||
|
|
e7295f27a9 | ||
|
|
f737d37804 | ||
|
|
3ee8be3849 | ||
|
|
923c0105f4 | ||
|
|
674cfb7cac | ||
|
|
f2b841d0ec | ||
|
|
d663cef2a5 | ||
|
|
f48680888c | ||
|
|
cb868b7851 | ||
|
|
44053532bb | ||
|
|
18bb0f8f13 | ||
|
|
9d8260b3d6 | ||
|
|
6a6439c5c2 | ||
|
|
87f67fd392 | ||
|
|
835b890329 | ||
|
|
4002328179 | ||
|
|
e78786ef39 | ||
|
|
70b6c07590 | ||
|
|
52d93f7c31 | ||
|
|
6032682fc1 | ||
|
|
8ef1711055 | ||
|
|
2d31986236 | ||
|
|
bf78c95d80 | ||
|
|
15b8720c5d | ||
|
|
8ac1501ad7 | ||
|
|
a192f3052e | ||
|
|
ce7ae17b81 | ||
|
|
30fb81c71e | ||
|
|
9f8349af06 | ||
|
|
5057c6b43f | ||
|
|
daf08aeacd | ||
|
|
d996da6bab | ||
|
|
22a7a7ec9b | ||
|
|
de9e36e90e | ||
|
|
732d31f750 | ||
|
|
274241c044 | ||
|
|
c4a8d4ce45 | ||
|
|
a22037713e | ||
|
|
50b7ba1b70 | ||
|
|
289cd1ceb7 | ||
|
|
7944ff7e71 | ||
|
|
bccbbcf12e | ||
|
|
b05a17249b | ||
|
|
8cd987af0c | ||
|
|
ae9cc8f972 | ||
|
|
c64924682e | ||
|
|
edce41ae65 | ||
|
|
d2736e268b | ||
|
|
3850bad4c0 | ||
|
|
3d3faa2624 | ||
|
|
2f8c65c885 | ||
|
|
08cf7d90ef | ||
|
|
4c9341f689 | ||
|
|
fabf3f2fc2 | ||
|
|
f5155b9913 | ||
|
|
cc7b8e3379 | ||
|
|
a995ad90e1 | ||
|
|
156aa42ba0 | ||
|
|
515cdaa85d | ||
|
|
529482135c | ||
|
|
e67b4055f9 | ||
|
|
7cf17e376b | ||
|
|
456648adac | ||
|
|
7b28154e8b | ||
|
|
5332052019 | ||
|
|
1123313240 | ||
|
|
7e59587173 | ||
|
|
0e384c6376 | ||
|
|
9a0e2a8b07 | ||
|
|
6abfa48c0e | ||
|
|
eb2b4df0ed | ||
|
|
befa7445d2 | ||
|
|
bde0409433 | ||
|
|
1687aa59e6 | ||
|
|
f94c1b3943 | ||
|
|
b6d2243ac0 | ||
|
|
c06cc740de | ||
|
|
d3c5911ffc | ||
|
|
00bfa1d055 | ||
|
|
0b77dbc11c | ||
|
|
e693fda325 | ||
|
|
859b9ad7ea | ||
|
|
9f033bf2b5 | ||
|
|
2ad633344e | ||
|
|
e3f88719ab | ||
|
|
f27a6461e3 | ||
|
|
4b5197beb4 | ||
|
|
3b525d5696 | ||
|
|
b82519cadc | ||
|
|
956354885a | ||
|
|
03ec35ed79 | ||
|
|
f2e20c81b6 | ||
|
|
c082c3bce3 | ||
|
|
58a7de2aea | ||
|
|
682ac11958 | ||
|
|
defc97afc2 | ||
|
|
d1efe2078a | ||
|
|
41d6afe0e7 | ||
|
|
eb6cbedcc0 | ||
|
|
23ffdf42c8 | ||
|
|
b8e45b1e19 | ||
|
|
5b30964e54 | ||
|
|
d5d28721e2 | ||
|
|
f8967fc638 | ||
|
|
ef78309b65 | ||
|
|
aecfc56156 | ||
|
|
596308f213 | ||
|
|
68179dc676 | ||
|
|
5e4427e4e7 | ||
|
|
311c83ad17 | ||
|
|
7ec6cddd27 | ||
|
|
1ed7f18815 | ||
|
|
54907dfbd1 | ||
|
|
469ab99e9a | ||
|
|
c7fb6e3087 | ||
|
|
f1d8dda5b4 | ||
|
|
3b89ee5501 | ||
|
|
e2968b4c98 | ||
|
|
03eb47b216 | ||
|
|
2738effddf | ||
|
|
0332b8fb18 | ||
|
|
f4445510ae | ||
|
|
c0a7899416 | ||
|
|
3c1b1ca78e | ||
|
|
5dc37b187c | ||
|
|
e59adcde65 | ||
|
|
993b86628b | ||
|
|
ab62da283a | ||
|
|
7bab3d2fb1 | ||
|
|
6d99840d1f | ||
|
|
a0964775ab | ||
|
|
3163abedd6 | ||
|
|
b0971ae37c | ||
|
|
4947cfb7b0 | ||
|
|
ef5364950b | ||
|
|
d44aa831f3 | ||
|
|
f9db60e3bd | ||
|
|
8cd616e977 | ||
|
|
b3d5ba6f90 | ||
|
|
35cc5b0402 | ||
|
|
674422b642 | ||
|
|
d8d38ed059 | ||
|
|
57edc3155f | ||
|
|
9a8805d785 | ||
|
|
13e59c8b7a | ||
|
|
91f3d77ceb | ||
|
|
82e8486f13 | ||
|
|
474dfcc798 | ||
|
|
d517b56682 | ||
|
|
86ee41ec03 | ||
|
|
4cf90aa865 | ||
|
|
013db70fce | ||
|
|
033ad9a79f | ||
|
|
67b0d2175d | ||
|
|
b9452c48ac | ||
|
|
899c900e59 | ||
|
|
dab2b354c7 | ||
|
|
cbc6bbfbeb | ||
|
|
551f3cbe42 | ||
|
|
4035ab05fa | ||
|
|
c80d147fa9 | ||
|
|
d39b88ae88 | ||
|
|
d99f4ab003 | ||
|
|
6ad4990a65 | ||
|
|
0c69b768b9 | ||
|
|
b7ebaf6d20 | ||
|
|
6a58e3f9fc | ||
|
|
1028ef2def | ||
|
|
8b58772659 | ||
|
|
621efaa340 | ||
|
|
8ee08fe8bc | ||
|
|
0e76f38e4d | ||
|
|
cc2b1fea9a | ||
|
|
238bb80cdd | ||
|
|
0d4c63fd70 | ||
|
|
fb5c6b6444 | ||
|
|
f148a4a1ed | ||
|
|
4d85c1d3c8 | ||
|
|
7091db8192 | ||
|
|
716ac1214f | ||
|
|
061c501d54 | ||
|
|
16c55e1a5b | ||
|
|
d23a3e96f1 | ||
|
|
40c545ddbc | ||
|
|
183da4c2c1 | ||
|
|
42d781a709 | ||
|
|
2cb6c51158 | ||
|
|
dbb7715b0b | ||
|
|
ea78a6db57 | ||
|
|
0f6dc411df | ||
|
|
10b54df2b2 | ||
|
|
420fc8efc2 | ||
|
|
1f7aab6e19 | ||
|
|
fd09d1ffb8 | ||
|
|
e00df9fb8e | ||
|
|
e4f96c60cd | ||
|
|
7e6c198f21 | ||
|
|
c3b6383b3a | ||
|
|
876bafb7ef | ||
|
|
061f65ff29 | ||
|
|
6ee65757c7 | ||
|
|
1cb01817c9 | ||
|
|
b23cf16981 | ||
|
|
b33ce46a48 | ||
|
|
dac0f14f34 | ||
|
|
7c3e605698 | ||
|
|
222e7c3f06 | ||
|
|
3138417c63 | ||
|
|
074f6c1b49 | ||
|
|
d22a8dc022 | ||
|
|
a30cc637c6 | ||
|
|
a6f337046f | ||
|
|
bd23e36bec | ||
|
|
a8832e1227 | ||
|
|
fb6348976e | ||
|
|
72fc829b05 | ||
|
|
84498301ca | ||
|
|
44bd5ff466 | ||
|
|
e735d8cb25 | ||
|
|
afa85f9b55 | ||
|
|
f4d12f8d97 | ||
|
|
e9728bf3b4 | ||
|
|
f94e6fd7a5 | ||
|
|
134958fd9f | ||
|
|
4725f91543 | ||
|
|
f26f4a7e01 | ||
|
|
4287d100b3 | ||
|
|
5481be0ac5 | ||
|
|
47f40ccd5e | ||
|
|
5abd1d2a68 | ||
|
|
1ebf257bed | ||
|
|
dd026a4ebb | ||
|
|
524cca3a1e | ||
|
|
0a9fd454da | ||
|
|
e22be08ab6 | ||
|
|
ba2e0240c6 | ||
|
|
61f5c22503 | ||
|
|
62d0a4d882 | ||
|
|
ddb75191ec | ||
|
|
6e2e7b325f | ||
|
|
cdc4600725 | ||
|
|
ff9daa3e9b | ||
|
|
80a4643359 | ||
|
|
9bdce5d21b | ||
|
|
be523152a8 | ||
|
|
d91fe5254d | ||
|
|
57de1ff991 | ||
|
|
76b8c3c68f | ||
|
|
6a49ada260 | ||
|
|
1febbf0da9 | ||
|
|
bd6f24b4ab | ||
|
|
1621069f83 | ||
|
|
091f3669ba | ||
|
|
93f726352c | ||
|
|
dcb009aa86 | ||
|
|
08b124dd47 | ||
|
|
e6bb8e7a4d | ||
|
|
240609432b | ||
|
|
8798cf4e3b | ||
|
|
95637e046f | ||
|
|
2e08f230ca | ||
|
|
3ee7248970 | ||
|
|
9500ad1e92 | ||
|
|
1f04c00e2f | ||
|
|
529f9d03ce | ||
|
|
f70758dec9 | ||
|
|
eecaba2031 | ||
|
|
d94e2a1c22 | ||
|
|
8a9cc86bf6 | ||
|
|
122a66f6e0 | ||
|
|
85e99b6a6b | ||
|
|
25acd6c822 | ||
|
|
266ebf8200 | ||
|
|
3217102516 | ||
|
|
c7ade55d39 | ||
|
|
1ccaddcfbb | ||
|
|
de9915023d | ||
|
|
6f84569629 | ||
|
|
c22f443f58 | ||
|
|
dc6dad87d4 | ||
|
|
e9595a962b | ||
|
|
1b6a962e70 | ||
|
|
e6a97b6675 | ||
|
|
e22549747c | ||
|
|
605038dca9 | ||
|
|
d545e32b56 | ||
|
|
b0b24a2dbb | ||
|
|
82fc50f4ee | ||
|
|
513375c429 | ||
|
|
6e98812ecf | ||
|
|
638509b217 | ||
|
|
9ddbbd9d5a | ||
|
|
1da17db717 | ||
|
|
5866eb2321 | ||
|
|
762f1d7237 | ||
|
|
ddb7f59ef4 | ||
|
|
4d01ecaef3 | ||
|
|
6a107e57f6 | ||
|
|
bc84110989 | ||
|
|
eca05b09aa | ||
|
|
3ab580c8d6 | ||
|
|
e86a0bf3fe | ||
|
|
3af5b67ed0 | ||
|
|
178bd498b9 | ||
|
|
219ca5cadb | ||
|
|
796be03e9b | ||
|
|
b0f04e7593 | ||
|
|
6eeadb2082 | ||
|
|
03900303a9 | ||
|
|
9ba7898911 | ||
|
|
81d1e54a49 | ||
|
|
e4990ba205 | ||
|
|
a257f88a09 | ||
|
|
0e9e48bd5c | ||
|
|
619b9b5547 | ||
|
|
bc8d72666c | ||
|
|
7131c7d40d | ||
|
|
985a39590b | ||
|
|
2112eb8741 | ||
|
|
d4c9399576 | ||
|
|
222244836f | ||
|
|
847272a70d | ||
|
|
30afce1523 | ||
|
|
2a184f5924 | ||
|
|
ccd3577970 | ||
|
|
af4a094e5d | ||
|
|
f4190f8df8 | ||
|
|
33647aa43b | ||
|
|
9e865cee67 | ||
|
|
c1b0c9e7c4 | ||
|
|
a75d5c72bb | ||
|
|
c7f4f07765 | ||
|
|
f3833b7ce4 | ||
|
|
c25303b11c | ||
|
|
4ccb0fe338 | ||
|
|
1ec4dc6c1d | ||
|
|
32ca299650 | ||
|
|
f42dbdbae5 | ||
|
|
8863e74f2a | ||
|
|
e89bb7ef6a | ||
|
|
514006a2e5 | ||
|
|
a4cd4616c6 | ||
|
|
dff26e25ca | ||
|
|
c2346e4469 | ||
|
|
0cef8ce192 | ||
|
|
ebac051e72 | ||
|
|
92123fe82a | ||
|
|
ffab139c91 | ||
|
|
6b62f042c6 | ||
|
|
68674649df | ||
|
|
67e1c29dc5 | ||
|
|
43253202e9 | ||
|
|
aa962deec0 | ||
|
|
e1266a19c8 | ||
|
|
fcca037576 | ||
|
|
a79af9cf6f | ||
|
|
4b2c8ca533 | ||
|
|
b3cfa5a77e | ||
|
|
a04718a2a6 | ||
|
|
46cc45f049 | ||
|
|
a8717e5e3a | ||
|
|
1ad902d529 | ||
|
|
bae9cbce9c | ||
|
|
fbaa52a3a8 | ||
|
|
26e49b8e3d | ||
|
|
cc84ca40d7 | ||
|
|
339d7de409 | ||
|
|
dd55534b82 | ||
|
|
6b6f16cfae | ||
|
|
fa28de820e | ||
|
|
0b0d85c90d | ||
|
|
086eb62691 | ||
|
|
fa6d7c7b99 | ||
|
|
2ef8b8bcbe | ||
|
|
2db424c3f1 | ||
|
|
ccff57103a | ||
|
|
28f4de205f | ||
|
|
9a75a5d59b | ||
|
|
ca68a75b5b | ||
|
|
b4b0280e33 | ||
|
|
1be2b4a262 | ||
|
|
1eedd983ea | ||
|
|
0d80af649a | ||
|
|
66bc0ac251 | ||
|
|
1fbfccb4fc | ||
|
|
fa1cbc2896 | ||
|
|
6718ea6ff1 | ||
|
|
6f380a22a4 | ||
|
|
80b430d7c0 | ||
|
|
7a0297819d | ||
|
|
8b6236d67b | ||
|
|
acecedc410 | ||
|
|
4eed85db56 | ||
|
|
a1ed239bf2 | ||
|
|
23645fe05f | ||
|
|
4cb9394a97 | ||
|
|
d155d0e665 | ||
|
|
566e8ecce0 | ||
|
|
6c6533fb31 | ||
|
|
b0f7457d9e | ||
|
|
52e11b24bf | ||
|
|
911ca02153 | ||
|
|
d766d0c4e0 | ||
|
|
b496e3e1cc | ||
|
|
cbe50587ba | ||
|
|
ad24a3134d | ||
|
|
0f9e20b3d7 | ||
|
|
e5d80b7090 | ||
|
|
1739e84ac0 | ||
|
|
be3319b3d5 | ||
|
|
a89692d158 | ||
|
|
633de01cf7 | ||
|
|
35b473d8d3 | ||
|
|
3e89e89670 | ||
|
|
9ef83a98e5 | ||
|
|
fb1ed5de94 | ||
|
|
377cd1ae38 | ||
|
|
005900baea | ||
|
|
4c2b1be3a4 | ||
|
|
8c3a2e817b | ||
|
|
9bdbfbf6f3 | ||
|
|
3fecf94086 | ||
|
|
5ccecb44ad | ||
|
|
69dfe43ffc | ||
|
|
eab4579e17 | ||
|
|
01d7189c2d | ||
|
|
250f1236dc | ||
|
|
fd85e25f5f | ||
|
|
4b8fef143e | ||
|
|
95c408ffa5 | ||
|
|
4f9a28e1f5 | ||
|
|
7c417bbb0d | ||
|
|
5f4210a9b0 | ||
|
|
a569d3dedc | ||
|
|
32238e0ac9 | ||
|
|
caa61a2b99 | ||
|
|
b689bb6180 | ||
|
|
79f7839633 | ||
|
|
04ec79579c | ||
|
|
5de94a67cf | ||
|
|
edc817a1dc | ||
|
|
3e6fed368b | ||
|
|
491f0ebc58 | ||
|
|
15d3872281 | ||
|
|
019c90ab8f | ||
|
|
edb95faba2 | ||
|
|
d23b36c598 | ||
|
|
8e61823ec4 | ||
|
|
ced50e0ec1 | ||
|
|
e41da3845d | ||
|
|
0f2c98adcd | ||
|
|
ae08e6c5be | ||
|
|
d9d8fad230 | ||
|
|
f61a1d210c | ||
|
|
da230a2872 | ||
|
|
174255e74e | ||
|
|
233bbcfa94 | ||
|
|
874f9be3e6 | ||
|
|
0fd9289810 | ||
|
|
a915a09e4f | ||
|
|
64b7068846 | ||
|
|
8aadf79f80 | ||
|
|
fd6e91077a | ||
|
|
9413b48a0b | ||
|
|
be4f6a754c | ||
|
|
1a5fe4326f | ||
|
|
faf4b503b2 | ||
|
|
7455604f0c | ||
|
|
2c6a0fdca8 | ||
|
|
5c29b0a5fe | ||
|
|
fd8e8a421a | ||
|
|
951c909a67 | ||
|
|
53e6c947f1 | ||
|
|
100ec93a65 | ||
|
|
2c3a229a3c | ||
|
|
e7653a67a1 | ||
|
|
5707ad3bb7 | ||
|
|
4c13a8458b | ||
|
|
e08d1fcc15 | ||
|
|
9df090e551 | ||
|
|
f3486360d2 | ||
|
|
9e9e1e0e52 | ||
|
|
aec826b023 | ||
|
|
934dd41fa6 | ||
|
|
7907786040 | ||
|
|
951fb572a7 | ||
|
|
722bcefbbf | ||
|
|
c76ee5688b | ||
|
|
fc29a405e8 | ||
|
|
29f3a6e492 | ||
|
|
2282e24028 | ||
|
|
f960e19c59 | ||
|
|
921d90fd8b | ||
|
|
be29d5f7ad | ||
|
|
e90bbcaa52 | ||
|
|
27798c3efc | ||
|
|
54381f438b | ||
|
|
d05150a331 | ||
|
|
a3262636b8 | ||
|
|
9ff371a147 | ||
|
|
34df9deff1 | ||
|
|
fa8d40faca | ||
|
|
a4ca54425f | ||
|
|
4c54139afc | ||
|
|
7e0654bd9e | ||
|
|
f29458bd3a | ||
|
|
539d9f4c30 | ||
|
|
66e8262530 | ||
|
|
31411a9462 | ||
|
|
a804f0e052 | ||
|
|
1193627014 | ||
|
|
9a505fafda | ||
|
|
d74d8ecc2e | ||
|
|
27c2dcf60e | ||
|
|
49df677c47 | ||
|
|
a9cc538ab5 | ||
|
|
60d7e56c69 | ||
|
|
04c4028aea | ||
|
|
fd45a032a7 | ||
|
|
aff11bc65e | ||
|
|
a27863b6d1 | ||
|
|
5f37944dff | ||
|
|
7e12aac61c | ||
|
|
1d032f5220 | ||
|
|
41cc110e62 | ||
|
|
8f171210b9 | ||
|
|
48898e5d0b | ||
|
|
dde0052ca2 | ||
|
|
3702dac0d5 | ||
|
|
f33e6ae09e | ||
|
|
047a67a90b | ||
|
|
0b177574c9 | ||
|
|
32f289ae3b | ||
|
|
98c5a1e006 | ||
|
|
dd758ad8dc | ||
|
|
c4ccf16c43 | ||
|
|
6a3c03762a | ||
|
|
f011d6d4d7 | ||
|
|
b639fa1648 | ||
|
|
7d61834dc9 | ||
|
|
a739991b36 | ||
|
|
858324c21a | ||
|
|
2c3efd72ce | ||
|
|
2b05b104ef | ||
|
|
89845f6728 | ||
|
|
ceb3544697 | ||
|
|
93a1de4842 | ||
|
|
da89afda58 | ||
|
|
8f1d62ad3b | ||
|
|
c016d48735 | ||
|
|
5e9bcb6301 | ||
|
|
89cd4dd424 | ||
|
|
4c57db7924 | ||
|
|
f1adaef458 | ||
|
|
5651cc7413 | ||
|
|
e58237ee3f | ||
|
|
e14ea9979b | ||
|
|
b1d7348a20 | ||
|
|
30787e48f2 | ||
|
|
2ef33b5338 | ||
|
|
a52cd59727 | ||
|
|
2fd039864b | ||
|
|
310866525b | ||
|
|
dde9a8648e | ||
|
|
f189ccd2d6 | ||
|
|
f99489d5c5 | ||
|
|
fea902adc8 | ||
|
|
678fec3f6a | ||
|
|
eae9154811 | ||
|
|
3c0705ecf3 | ||
|
|
12cb6cd3c9 | ||
|
|
b36849dc1f | ||
|
|
8fd43f215c | ||
|
|
789188f13c | ||
|
|
935b40fd8e | ||
|
|
2b410e44b2 | ||
|
|
05e3726415 | ||
|
|
783b1967e2 | ||
|
|
23f0728879 | ||
|
|
33f3165296 | ||
|
|
3f9016430f | ||
|
|
1f4d84b7b2 | ||
|
|
858197b453 | ||
|
|
6b13dafe61 | ||
|
|
d389ed25a5 | ||
|
|
32fc44aa83 | ||
|
|
9d8fba62b3 | ||
|
|
79daf31058 | ||
|
|
a037cd81ff | ||
|
|
80707c4736 | ||
|
|
5db8cf3bd1 | ||
|
|
49d397a9ee | ||
|
|
441986a473 | ||
|
|
735676267e | ||
|
|
4c0e567062 | ||
|
|
b4e8a7c4d1 | ||
|
|
2559a34b97 | ||
|
|
f64c232953 | ||
|
|
3ffedeab03 | ||
|
|
bf187304dc | ||
|
|
f2afed3098 | ||
|
|
09cb999145 | ||
|
|
f6450b8f92 | ||
|
|
c259c436d7 | ||
|
|
cc6b3f60c6 | ||
|
|
228247511a | ||
|
|
75b5be236a | ||
|
|
32f1c41f28 | ||
|
|
2852cca99e | ||
|
|
902a749fd9 | ||
|
|
826c606952 | ||
|
|
d71fad2ab7 | ||
|
|
0a5dc640a1 | ||
|
|
6db387a21e | ||
|
|
63504bf132 | ||
|
|
754482bf5d | ||
|
|
75f166b6b9 | ||
|
|
165cf33771 | ||
|
|
4d2ea7dc41 | ||
|
|
255adc40ae | ||
|
|
4df1a24096 | ||
|
|
6e452c4da7 | ||
|
|
b7812be33a | ||
|
|
90f9bb12c6 | ||
|
|
6233e88f7f | ||
|
|
d7570895cc | ||
|
|
1a906f800d | ||
|
|
6678593b3c | ||
|
|
e2ec4b7c23 | ||
|
|
8fc64741d9 | ||
|
|
ce9b86082c | ||
|
|
a3868ef536 | ||
|
|
b7d597e40c | ||
|
|
2bcd9471c9 | ||
|
|
d1e4af66c1 | ||
|
|
01322af2e8 | ||
|
|
13f0e1255a | ||
|
|
792cde7081 | ||
|
|
033aaf4b38 | ||
|
|
2691673588 | ||
|
|
0d560f3441 | ||
|
|
8fcda0442e | ||
|
|
bf48c8ebdd | ||
|
|
31b5e9177f | ||
|
|
5b0cbf3788 | ||
|
|
57cabb3ad3 | ||
|
|
274149dd14 | ||
|
|
5e92b82ac6 | ||
|
|
96152c38b1 | ||
|
|
0168b7073d | ||
|
|
889409ba31 | ||
|
|
e8c63e21af | ||
|
|
b38b61bbc1 | ||
|
|
635273cea6 | ||
|
|
b5d2780b22 | ||
|
|
00733b4468 | ||
|
|
884c60480d | ||
|
|
ad70af1248 | ||
|
|
91f27bf9bd | ||
|
|
cc5484de10 | ||
|
|
9fbdd7d787 | ||
|
|
e0a63a20e0 | ||
|
|
96b4780727 | ||
|
|
f2fcd9dcd8 | ||
|
|
446a41d595 | ||
|
|
65b6301ea2 | ||
|
|
23d0735f90 | ||
|
|
d3efca3982 | ||
|
|
61716bd8f7 | ||
|
|
6d613fb28e | ||
|
|
a5444fb3db | ||
|
|
e9b1b908ee | ||
|
|
4a3f40460b | ||
|
|
73836ce8c4 | ||
|
|
b1b8c5e9f4 | ||
|
|
662b8bc2a2 | ||
|
|
afe1f1c4af | ||
|
|
9ddc35e343 | ||
|
|
ff7424179e | ||
|
|
65cf6cc848 | ||
|
|
a70073e768 | ||
|
|
815715e5a2 | ||
|
|
4bc7240eee | ||
|
|
971e3a35c1 | ||
|
|
f38842320e | ||
|
|
952cb8046f | ||
|
|
30a831698e | ||
|
|
d9a8eff2de | ||
|
|
295f560a12 | ||
|
|
0cf89a83c1 | ||
|
|
f6b58964d7 | ||
|
|
6ec07a6bd7 | ||
|
|
cbdd5f787c | ||
|
|
ca9169fbe9 | ||
|
|
ae922afa2d | ||
|
|
703d18e50d | ||
|
|
ed31dff5ab | ||
|
|
858126bca1 | ||
|
|
9f9289fc68 | ||
|
|
1a09afc729 | ||
|
|
e7ae13deef | ||
|
|
023cad4461 | ||
|
|
3e74b5cf51 | ||
|
|
817a405118 | ||
|
|
a97d6bf24b | ||
|
|
009a073990 | ||
|
|
2ec5dc1661 | ||
|
|
b900c04316 | ||
|
|
036ce3f813 | ||
|
|
62f600cf1c | ||
|
|
976c2a05fa | ||
|
|
4e5ee2b67a | ||
|
|
5ca6867aaf | ||
|
|
04c6c31f8e | ||
|
|
abb19eff39 | ||
|
|
31e8436a1c | ||
|
|
a977ab7889 | ||
|
|
336e311a7c | ||
|
|
5554165a0c | ||
|
|
bfb44f8854 | ||
|
|
0f5b399e35 | ||
|
|
24859fe5b6 | ||
|
|
642f844735 | ||
|
|
474d636794 | ||
|
|
367ff327ed | ||
|
|
2525195749 | ||
|
|
b93568cce4 | ||
|
|
e0c6ab2d44 | ||
|
|
c85ff532e9 | ||
|
|
e67ece26f0 | ||
|
|
12dbdaac76 | ||
|
|
bafd778c25 | ||
|
|
97f7f88bed | ||
|
|
3b51da9dae | ||
|
|
7e6ff69c00 | ||
|
|
3611a3e552 | ||
|
|
39348cd27e | ||
|
|
9c66d1d9ea | ||
|
|
0c332f0480 | ||
|
|
03912ce014 | ||
|
|
cb74f1b84d | ||
|
|
ff96bda138 | ||
|
|
19d889daa2 | ||
|
|
ff2464c87d | ||
|
|
98ae013e90 | ||
|
|
7b907ed348 | ||
|
|
de39d09caa | ||
|
|
bdc90aeaee | ||
|
|
cc2071c3fd | ||
|
|
1e40c2e579 | ||
|
|
b0308d86dc | ||
|
|
cf02cd7ba0 | ||
|
|
85a7396525 | ||
|
|
be5323a05f | ||
|
|
80cea8747f | ||
|
|
977dcf96e0 | ||
|
|
281a0389c1 | ||
|
|
6362462da8 | ||
|
|
25d6e2a660 | ||
|
|
0161e46b5a | ||
|
|
8906b2891b | ||
|
|
fd6034aaf2 | ||
|
|
5db5e16ab6 | ||
|
|
dc2b28ed76 | ||
|
|
c746875fcf | ||
|
|
8917f47347 | ||
|
|
407fbfa6ce | ||
|
|
c4b5b121a5 | ||
|
|
03d6bab643 | ||
|
|
bc299b8317 | ||
|
|
91417e9715 | ||
|
|
e214728725 | ||
|
|
9e627af9a4 | ||
|
|
5ca3046da6 | ||
|
|
2cf80f4b18 | ||
|
|
397474ecb1 | ||
|
|
251fb935ff | ||
|
|
ddb63a7897 | ||
|
|
524885dd65 | ||
|
|
fd76f090a2 | ||
|
|
d98a86d2a2 | ||
|
|
377acb9757 | ||
|
|
ab79069dc7 | ||
|
|
51d0becb42 | ||
|
|
a85c5ab9ff | ||
|
|
2bb8b3a562 | ||
|
|
79494047b0 | ||
|
|
c864ccf9b1 | ||
|
|
930d1759ae | ||
|
|
9a0b0da1fe | ||
|
|
2e17dda8bb | ||
|
|
935caa7f95 | ||
|
|
98460a8d9d | ||
|
|
36f02c0c32 | ||
|
|
a503947fba | ||
|
|
0f3923c4d7 | ||
|
|
b6206e4788 | ||
|
|
75f1afd1fd | ||
|
|
700b6b524b | ||
|
|
a5f28a4544 | ||
|
|
1773e88643 | ||
|
|
59f5bbab0d | ||
|
|
3edb0c5894 | ||
|
|
bb5f694fc5 | ||
|
|
0d1e001b9c | ||
|
|
98548c83d3 | ||
|
|
87efc8c6d4 | ||
|
|
3792867955 | ||
|
|
0144817971 | ||
|
|
3ebbdfaa75 | ||
|
|
950f2e2074 | ||
|
|
2368bbb672 | ||
|
|
66c803fae2 | ||
|
|
0308d44a16 | ||
|
|
00324cea10 | ||
|
|
9a8ca3e877 | ||
|
|
1562e9ab70 | ||
|
|
e31c02d4bf | ||
|
|
61b08b5c01 | ||
|
|
cebe3a6b2f | ||
|
|
91d64656a4 | ||
|
|
18f46fd7cf | ||
|
|
fca7ddc6ea | ||
|
|
431b26f6d7 | ||
|
|
6853bf323a | ||
|
|
e3c2963222 | ||
|
|
e4a0a04829 | ||
|
|
8371f94d06 | ||
|
|
b7da5a6cb7 | ||
|
|
c58708d3ee | ||
|
|
3012971e92 | ||
|
|
eb1075dd4c | ||
|
|
fcc7cdab11 | ||
|
|
5b8fe1e181 | ||
|
|
4bea219128 | ||
|
|
52627032bc | ||
|
|
f0db3da713 | ||
|
|
42072783c9 | ||
|
|
bb14c97d40 | ||
|
|
fa2a513c62 | ||
|
|
a2d365c81f | ||
|
|
f995bcc87a | ||
|
|
2eeae84cbd | ||
|
|
f42ec6120e | ||
|
|
941281ae12 | ||
|
|
c764a542c0 | ||
|
|
cf91cfb993 | ||
|
|
237270ef50 | ||
|
|
d409d3ab57 | ||
|
|
21290d4e80 | ||
|
|
22295944df | ||
|
|
be6edaddcb | ||
|
|
54f0293f0a | ||
|
|
edbb9eefd6 | ||
|
|
5c0bee9b20 | ||
|
|
d9db188274 | ||
|
|
e0df611cbc | ||
|
|
5acfc7c4bc | ||
|
|
cf6699fb4f | ||
|
|
cbeeaa1b11 | ||
|
|
410af6971b | ||
|
|
a78a0266c4 | ||
|
|
d800305b34 | ||
|
|
0cee52e0d3 | ||
|
|
e7493e953f | ||
|
|
2d1efcc270 | ||
|
|
b746757209 | ||
|
|
93c25c9a35 | ||
|
|
5d6b71fdbb | ||
|
|
21fd3da6f5 | ||
|
|
37a34c1a28 | ||
|
|
f6e5ce65b2 | ||
|
|
e5c56fe30d | ||
|
|
88112a5324 | ||
|
|
095e1f5155 | ||
|
|
6a39250579 | ||
|
|
fac7a6fecf | ||
|
|
e6781d5488 | ||
|
|
a90ffffb1a | ||
|
|
18952c40f8 | ||
|
|
4b284f814c | ||
|
|
4fa691c4dd | ||
|
|
912b340d0d | ||
|
|
caed86fc6e | ||
|
|
e4a33ed4d0 | ||
|
|
cb362513f0 | ||
|
|
aa6e949b3d | ||
|
|
b674460748 | ||
|
|
a0d0de7233 | ||
|
|
129b0d6a4b | ||
|
|
08f7fded3c | ||
|
|
d0298ea2fb | ||
|
|
6a451a2b59 | ||
|
|
ae9b02b079 | ||
|
|
fe94032f74 | ||
|
|
d330a23ce1 | ||
|
|
d349f059af | ||
|
|
bbbd08edc1 | ||
|
|
1b1b85439e | ||
|
|
14fe9010ae | ||
|
|
9224405155 | ||
|
|
c05bd1789c | ||
|
|
16732fbfde | ||
|
|
9a9f8fa25b | ||
|
|
f73e734411 | ||
|
|
888dee3b5f | ||
|
|
bd8fe49076 | ||
|
|
dbabc35e71 | ||
|
|
15f5d8e794 | ||
|
|
5586445207 | ||
|
|
9182a35f18 | ||
|
|
e1586898b2 | ||
|
|
97ee88975a | ||
|
|
f00a4c8078 | ||
|
|
a9de85d31d | ||
|
|
608cd54a68 | ||
|
|
430cc4f42a | ||
|
|
8bcb643a03 | ||
|
|
2aad4a5f97 | ||
|
|
b57b0c6e40 | ||
|
|
1c3bd436cc | ||
|
|
5ecb369dac | ||
|
|
71d16f69ff | ||
|
|
0693fbfc00 | ||
|
|
7a81cd16c5 | ||
|
|
ebbcf6fe12 | ||
|
|
3cf0e513e6 | ||
|
|
925b252927 | ||
|
|
1476bf909e | ||
|
|
f1d2f16b54 | ||
|
|
447c9b428f | ||
|
|
ca1c3f1926 | ||
|
|
43c5469f81 | ||
|
|
efbb895ebe | ||
|
|
03d79983ee | ||
|
|
17f403fbcd | ||
|
|
780cb692d6 | ||
|
|
42032fdecf | ||
|
|
a06c3ad2c0 | ||
|
|
09fe4a2ae9 | ||
|
|
021904e4e6 | ||
|
|
ec0ae5d50c | ||
|
|
7d8f9d1c46 | ||
|
|
8746fb3385 | ||
|
|
79ec33fd60 | ||
|
|
1ccdf19fae | ||
|
|
be5738243c | ||
|
|
08aae4952b | ||
|
|
f0efb615c5 | ||
|
|
608bbedee1 | ||
|
|
0475e7351f | ||
|
|
bdcc1a23e0 | ||
|
|
8a98a25d8e | ||
|
|
c99e7e1a62 | ||
|
|
3803f257fb | ||
|
|
1e3548b7e7 | ||
|
|
64214a9426 | ||
|
|
e2b2fd6e78 | ||
|
|
ccc15b9e1a | ||
|
|
74cde12677 | ||
|
|
f5476bdbb1 | ||
|
|
656efdc1c7 | ||
|
|
dbcd452758 | ||
|
|
05f0c4bbf5 | ||
|
|
5463640fe6 | ||
|
|
4e716fb0fa | ||
|
|
d87596aec4 | ||
|
|
1d65291342 | ||
|
|
d4fcba6796 | ||
|
|
374f1ba41f | ||
|
|
60db7ed5ac | ||
|
|
c1c4609e4e | ||
|
|
626bcf0547 | ||
|
|
aaf9adfbe8 | ||
|
|
b40496533b | ||
|
|
d2b2881306 | ||
|
|
5d40db629c | ||
|
|
af9998b8a7 | ||
|
|
7ed00b6e8d | ||
|
|
288226e13c | ||
|
|
fa41ddd3eb | ||
|
|
848293671b | ||
|
|
2215840363 | ||
|
|
0376029241 | ||
|
|
7b64b2ddab | ||
|
|
d76d67de23 | ||
|
|
0afab87631 | ||
|
|
c1d5983d3e | ||
|
|
d2165a5890 | ||
|
|
28a5bc313a | ||
|
|
6bdfadf4a9 | ||
|
|
ef13bbaf7d | ||
|
|
341b3a0349 | ||
|
|
2f7dc28b22 | ||
|
|
f3bf409082 | ||
|
|
0380ce269f | ||
|
|
cfdc62e7fa | ||
|
|
9cb08a3cf5 | ||
|
|
19bc2b10ae | ||
|
|
db6777d369 | ||
|
|
d21d5fd736 | ||
|
|
22f7aa6e9c | ||
|
|
e83c8afc56 | ||
|
|
c2eef171ff | ||
|
|
4b286f282a | ||
|
|
cf80e19157 | ||
|
|
a201977590 | ||
|
|
8947b711aa | ||
|
|
c0f99e8229 | ||
|
|
9084bdd863 | ||
|
|
136e6beb0f | ||
|
|
50918084bb | ||
|
|
e4134debd1 | ||
|
|
32faec00e6 | ||
|
|
d4e38cf129 | ||
|
|
522f194983 | ||
|
|
a5ac4c64fc | ||
|
|
ab462fb95f | ||
|
|
a30797425f | ||
|
|
5bd22a2f4a | ||
|
|
35548a9d4e | ||
|
|
95574a3640 | ||
|
|
831ff41754 | ||
|
|
bf24099114 | ||
|
|
80f900ebae | ||
|
|
19b3c45ca7 | ||
|
|
cd1821a7e2 | ||
|
|
e8e56da9ac | ||
|
|
ddb0287bf6 | ||
|
|
c4a3d5148d | ||
|
|
fc4f7e82f9 | ||
|
|
8894f856de | ||
|
|
f552b0a207 | ||
|
|
d7af8f96d7 | ||
|
|
946f3078d3 | ||
|
|
d4a7040c7f | ||
|
|
9ad3a07989 | ||
|
|
44827698e2 | ||
|
|
f1412142e0 | ||
|
|
c0ea3963be | ||
|
|
0602a44b27 | ||
|
|
817710dd47 | ||
|
|
12e71e5706 | ||
|
|
76057105ca | ||
|
|
f1ab906c51 | ||
|
|
8de8e11487 | ||
|
|
832477b1bc | ||
|
|
490d3771f7 | ||
|
|
d077fd084a | ||
|
|
0e6b9ea786 | ||
|
|
4f3880ff15 | ||
|
|
d181113b82 | ||
|
|
ec3a696e2d | ||
|
|
1f7837d6d6 | ||
|
|
29c6f32a3b | ||
|
|
83b6d03231 | ||
|
|
d6748284bd | ||
|
|
01d957677f | ||
|
|
fd941db246 | ||
|
|
fe5ff8e4b2 | ||
|
|
70ae6d197b | ||
|
|
ffde33bdfa | ||
|
|
5f234ce2a5 | ||
|
|
c5f8b96dda | ||
|
|
04fdeb9d8d | ||
|
|
d4b752def9 | ||
|
|
c2c27891c9 | ||
|
|
b8f70a27a5 | ||
|
|
6076c95dd1 | ||
|
|
dbe6d2ff8e | ||
|
|
252adc912d | ||
|
|
be48b32e63 | ||
|
|
847527fd6d | ||
|
|
669dad71f8 | ||
|
|
140967f002 | ||
|
|
4c12e2a4b9 | ||
|
|
7fd14bf7bd | ||
|
|
46320f9630 | ||
|
|
0642cb330c | ||
|
|
134f3e6e09 | ||
|
|
43c94d0a6c | ||
|
|
a31f64d639 | ||
|
|
9d2b830275 | ||
|
|
837d346090 | ||
|
|
be55460b63 | ||
|
|
9c645b54dc | ||
|
|
cf47532ebc | ||
|
|
4cfde304df | ||
|
|
7a9a5c8a69 | ||
|
|
3a91ac51a9 | ||
|
|
d67b278a0d | ||
|
|
23aba523b5 | ||
|
|
7eb8daffa3 | ||
|
|
55ae78208e | ||
|
|
1ec6b1a258 | ||
|
|
dc8248f8a4 | ||
|
|
5cc275b1de | ||
|
|
091f063706 | ||
|
|
05157808de | ||
|
|
9b4f6c1c32 | ||
|
|
076f940f1f | ||
|
|
d76f34ef51 | ||
|
|
3f67676059 | ||
|
|
8a0be5e9f0 | ||
|
|
442145dbd3 | ||
|
|
a36a8f4d72 | ||
|
|
42835c7f82 | ||
|
|
cf0f451c37 | ||
|
|
3576e1ee73 | ||
|
|
55f2059f71 | ||
|
|
284c0160c3 | ||
|
|
2f13d31ff0 | ||
|
|
b6dd6210ea | ||
|
|
40f4377717 | ||
|
|
a6751cec04 | ||
|
|
1da7dd3da9 | ||
|
|
13973348df | ||
|
|
e6b4448ba3 | ||
|
|
e4031b822a | ||
|
|
c5887b0f28 | ||
|
|
a195c3fabe | ||
|
|
181c8d9c99 | ||
|
|
d2329e1c26 | ||
|
|
23a7527e04 | ||
|
|
45a324b437 | ||
|
|
02a881aa32 | ||
|
|
ed096186a7 | ||
|
|
5fbab97373 | ||
|
|
78544f827b | ||
|
|
b13232f524 | ||
|
|
ceae143e78 | ||
|
|
94130da63a | ||
|
|
71d35dae8c | ||
|
|
76969a5671 | ||
|
|
7ab4ddad1c | ||
|
|
438e1a7d46 | ||
|
|
e388db311b | ||
|
|
f35b20b042 | ||
|
|
027591a3a5 | ||
|
|
e86d935175 | ||
|
|
bf647ce143 | ||
|
|
17c5e12e6e | ||
|
|
c73b7a65f5 | ||
|
|
e921dcf503 | ||
|
|
7c3dc51655 | ||
|
|
5fd19a45b7 | ||
|
|
f82ea42679 | ||
|
|
5972aa9af3 | ||
|
|
8a421b1fd7 | ||
|
|
49fa03bf42 | ||
|
|
d0960b8035 | ||
|
|
d4035d1cb1 | ||
|
|
a90a215662 | ||
|
|
de81f68d4d | ||
|
|
b6da658553 | ||
|
|
3898625ff1 | ||
|
|
3e0525b47d | ||
|
|
68bdaf0a6b | ||
|
|
400b6fd61c | ||
|
|
e2de16065a | ||
|
|
bf6f61cc69 | ||
|
|
73d05a51e3 | ||
|
|
d7d094bd8a | ||
|
|
2db0ffe69e | ||
|
|
ea8c8cdaf3 | ||
|
|
79ab69fe30 | ||
|
|
081485ecfd | ||
|
|
10644d6dd7 | ||
|
|
0a02fb3c4f | ||
|
|
2eb15f4a61 | ||
|
|
77ab60df83 | ||
|
|
f94869d2d1 | ||
|
|
d078aa30d6 | ||
|
|
7765593018 | ||
|
|
78535fb08e | ||
|
|
cc31a21192 | ||
|
|
aa591317e7 | ||
|
|
5348e8b71a | ||
|
|
27d30f1a61 | ||
|
|
31c717f579 | ||
|
|
abf3fbf0b1 | ||
|
|
bb76285762 | ||
|
|
a2412492da | ||
|
|
bb5a6b7a07 | ||
|
|
25663b5816 | ||
|
|
4faf097fb9 | ||
|
|
e08421017c | ||
|
|
d1b5498cc0 | ||
|
|
067ae5d96e | ||
|
|
abdc47e482 | ||
|
|
e7c3be5f2f | ||
|
|
da1b6164fe | ||
|
|
691fbdf1d3 | ||
|
|
2831267db1 | ||
|
|
0934d1b1ea | ||
|
|
a6832c234d | ||
|
|
8c2381103a | ||
|
|
2a80e5a81e | ||
|
|
634ac9c5af | ||
|
|
8555e888d8 | ||
|
|
8093b3372e | ||
|
|
75f0b0c51c | ||
|
|
833f8b94c2 | ||
|
|
8bc431952f | ||
|
|
521d429b58 | ||
|
|
3461003a0f | ||
|
|
2009f4cbda | ||
|
|
bcee9b76dd | ||
|
|
fda4476061 | ||
|
|
44d4863ecf | ||
|
|
8b87be63c5 | ||
|
|
907b6f943c | ||
|
|
a8048c19f3 | ||
|
|
74ed6dc3ad | ||
|
|
991a4d64f3 | ||
|
|
1257d43e14 | ||
|
|
f9a3aa8737 | ||
|
|
f8c2903484 | ||
|
|
369972b116 | ||
|
|
7e401b9e39 | ||
|
|
1610b9f547 | ||
|
|
74bbec3bf9 | ||
|
|
fcf02e4961 | ||
|
|
3c4d5e1ed5 | ||
|
|
d2bb8ef503 | ||
|
|
d0ad7921f8 | ||
|
|
8c2c7b802f | ||
|
|
d1006150fb | ||
|
|
6dd096b7f0 | ||
|
|
64375d875b | ||
|
|
dce03c19cb | ||
|
|
302fa42980 | ||
|
|
88f45ce38c | ||
|
|
769f77900a | ||
|
|
240d0e84f0 | ||
|
|
a6f5efa0bb | ||
|
|
4a1f36c3cc | ||
|
|
27fcf8d30a | ||
|
|
87ad4961f6 | ||
|
|
64b167138f | ||
|
|
69b86378ce | ||
|
|
e698654902 | ||
|
|
b7eae783b5 | ||
|
|
327b1b7985 | ||
|
|
769e0a3ea6 | ||
|
|
cbf2a967c5 | ||
|
|
0af9a24087 | ||
|
|
63f0bb1761 | ||
|
|
e5620f07a4 | ||
|
|
742f2c0301 | ||
|
|
ecfa284662 | ||
|
|
7209917fd7 | ||
|
|
b316b2e740 | ||
|
|
f91b8c5f53 | ||
|
|
97170916a3 | ||
|
|
9f575986d8 | ||
|
|
19570f2d43 | ||
|
|
973282dae2 | ||
|
|
862948ab88 | ||
|
|
4b23e6a694 | ||
|
|
f4feeecc3a | ||
|
|
8fa88e584a | ||
|
|
56614b2cbe | ||
|
|
51d578ff33 | ||
|
|
6072b03291 | ||
|
|
8422ab542c | ||
|
|
03b45284e1 | ||
|
|
f2931468ec | ||
|
|
84b7d29d34 | ||
|
|
72bfabfada | ||
|
|
1a7fc53c98 | ||
|
|
61306fa737 | ||
|
|
79d527195d | ||
|
|
9d1bc9aac8 | ||
|
|
2d17d6bc16 | ||
|
|
6efa80a471 | ||
|
|
eb9ce39bb7 | ||
|
|
a5e07da8be | ||
|
|
c5f0d4b1a0 | ||
|
|
bdad3b259a | ||
|
|
1207bda94b | ||
|
|
dc3ff9f2ab | ||
|
|
467202d0a6 | ||
|
|
b354cf362e | ||
|
|
09dabe2ff2 | ||
|
|
980dd0bf51 | ||
|
|
70900bd167 | ||
|
|
51021585a7 | ||
|
|
4b0974ec10 | ||
|
|
7be02d9020 | ||
|
|
3c7116382f | ||
|
|
545ba2e2e6 | ||
|
|
f59672a18d | ||
|
|
341a3b571b | ||
|
|
727675dd46 | ||
|
|
05837a8d0f | ||
|
|
0c301f7b5c | ||
|
|
b7e1bccc50 | ||
|
|
aea1b2b02e | ||
|
|
787fda53ef | ||
|
|
a09a3dcabb | ||
|
|
dc50c78f48 | ||
|
|
1f07792881 | ||
|
|
96c201273e | ||
|
|
9ccc3698d5 | ||
|
|
6e5fffbd3f | ||
|
|
de8b73dd92 | ||
|
|
bf85c82087 | ||
|
|
c0904f1942 | ||
|
|
b75450ad36 | ||
|
|
527c2dd665 | ||
|
|
fa60cf0ea4 | ||
|
|
cb18941e63 | ||
|
|
6510e57758 | ||
|
|
6069abe5fd | ||
|
|
d0490c187c | ||
|
|
aae960b31f | ||
|
|
42904cb98a | ||
|
|
37eec6c9b7 | ||
|
|
937b4b5aa1 | ||
|
|
b992858883 | ||
|
|
2d1a1fce93 | ||
|
|
6f4ba6884c | ||
|
|
ac51caa517 | ||
|
|
799d0c2030 | ||
|
|
22e1bd31c6 | ||
|
|
35d9378e4e | ||
|
|
c22f9114c7 | ||
|
|
331316894e | ||
|
|
f686a32eac | ||
|
|
c463b1b8cb | ||
|
|
9fae9f0dc2 | ||
|
|
8f1c311b90 | ||
|
|
edfa76d3f5 | ||
|
|
a0f5471e21 | ||
|
|
ba85f68ea8 | ||
|
|
7802699f52 | ||
|
|
ba134bd27a | ||
|
|
59f736d54c | ||
|
|
98b0688921 | ||
|
|
6388761129 | ||
|
|
71dee6b7c0 | ||
|
|
71634452e1 | ||
|
|
2342df183b | ||
|
|
2e7ccecfe6 | ||
|
|
4b7594d9fa | ||
|
|
d4924d45d6 | ||
|
|
8de8ec027d | ||
|
|
9847b38518 | ||
|
|
fa3abc22c0 | ||
|
|
c1e92eeb72 | ||
|
|
a345a03d99 | ||
|
|
f27d87d93b | ||
|
|
d0932ef147 | ||
|
|
8a4161c723 | ||
|
|
25b5ffb6af | ||
|
|
f2ff0ee846 | ||
|
|
6aacf4d2f0 | ||
|
|
7b67347104 | ||
|
|
b0c6217c4d | ||
|
|
eaa7b3c3f5 | ||
|
|
770e8310bd | ||
|
|
1e6dd98d51 | ||
|
|
a822bba3e1 | ||
|
|
ec1fe1183d | ||
|
|
dfb547099d | ||
|
|
a12da66dfb | ||
|
|
b33078fa33 | ||
|
|
c21e2c4151 | ||
|
|
0e1392501d | ||
|
|
e0ecd9fd93 | ||
|
|
65b1875d2b | ||
|
|
11df7ebfc5 | ||
|
|
47a7529d96 | ||
|
|
0c5c34d7dd | ||
|
|
4c89a9c33c | ||
|
|
df7fa4e995 | ||
|
|
d5d21b67d2 | ||
|
|
c46eb3f5b3 | ||
|
|
f8d94cb440 | ||
|
|
2197d298cb | ||
|
|
ce21ed6c34 | ||
|
|
618407c018 | ||
|
|
111c95ecaf | ||
|
|
235eb4c3d2 | ||
|
|
380e32e129 | ||
|
|
952587dbae | ||
|
|
1d30457a94 | ||
|
|
6ade13e86e | ||
|
|
608a60fb94 | ||
|
|
8559d6f267 | ||
|
|
7c46667e71 | ||
|
|
44428fdc38 | ||
|
|
0d6e88baef | ||
|
|
b11843b8dc | ||
|
|
578a8e258e | ||
|
|
15c3d14d55 | ||
|
|
8aeeed0a23 | ||
|
|
c6b6a61bf1 | ||
|
|
1831ee2d1d | ||
|
|
b4c794058a | ||
|
|
d771e978a1 | ||
|
|
73710c00a8 | ||
|
|
1d1c01875d | ||
|
|
f0a989c1d0 | ||
|
|
abcd39f7d5 | ||
|
|
cbcb4361d5 | ||
|
|
7b5b5178e1 | ||
|
|
bab737bf02 | ||
|
|
401a8db0ed | ||
|
|
39d0db52de | ||
|
|
04b9a7e7a2 | ||
|
|
08b9af9ad8 | ||
|
|
026ad4aee7 | ||
|
|
83ed234472 | ||
|
|
1b5b297c39 | ||
|
|
2b63f32b8a | ||
|
|
cd0ce9f3d8 | ||
|
|
70134323d1 | ||
|
|
8a28130540 | ||
|
|
e52b24ad5d | ||
|
|
947d2ee21b | ||
|
|
d07c955e2a | ||
|
|
edae0f134c | ||
|
|
db29855d2d | ||
|
|
e6cb9a7397 | ||
|
|
dc14d0c046 | ||
|
|
0118b275b6 | ||
|
|
c8f300b2cd | ||
|
|
db6a4e9fbf | ||
|
|
b21bf80dd4 | ||
|
|
0f05470cb8 | ||
|
|
d7ed78a919 | ||
|
|
e8e0539b45 | ||
|
|
e6cfccdd40 | ||
|
|
71bb6df75a | ||
|
|
bea9d55da6 | ||
|
|
d93429af8b | ||
|
|
7e09f80ee3 | ||
|
|
baf60bf603 | ||
|
|
4ff0db0246 | ||
|
|
79bd7648b0 | ||
|
|
b78d3f5865 | ||
|
|
5ab85372da | ||
|
|
1ae6ccb5f1 | ||
|
|
0a6d9295df | ||
|
|
6598745f07 | ||
|
|
590a79ff8a | ||
|
|
2343feadd4 | ||
|
|
bb3ed784bc | ||
|
|
31950cb262 | ||
|
|
2932042a6d | ||
|
|
646e02b521 | ||
|
|
bf0edcbdea | ||
|
|
4bd5730e02 | ||
|
|
a3fb627350 | ||
|
|
6dc6926abe | ||
|
|
6519718706 | ||
|
|
1e9730a779 | ||
|
|
e929ca2c41 | ||
|
|
ccad2cce32 | ||
|
|
349ecc6919 | ||
|
|
b6a95a8cb3 | ||
|
|
4680c349dd | ||
|
|
684d55e130 | ||
|
|
60e3e5b4e1 | ||
|
|
e93d394620 | ||
|
|
6dd2c3b2db | ||
|
|
42ec5ce740 | ||
|
|
dad806d3ea | ||
|
|
57dc9efaae | ||
|
|
f364522468 | ||
|
|
abf6c3a8e3 | ||
|
|
16cdbe1956 | ||
|
|
36a4663393 | ||
|
|
fd53028139 | ||
|
|
b9b22b4a0b | ||
|
|
8704f48e66 | ||
|
|
bad1bc6518 | ||
|
|
a5aae1c145 | ||
|
|
9963d61233 | ||
|
|
d7dea676fd | ||
|
|
4b0abdae9e | ||
|
|
972ce6b791 | ||
|
|
65d0426b91 | ||
|
|
8def53ffcc | ||
|
|
27d66855eb | ||
|
|
1d0f811399 | ||
|
|
fd3f16695e | ||
|
|
b3abc2775f | ||
|
|
91d6c715ea | ||
|
|
caac5fb99d | ||
|
|
c2044e5b39 | ||
|
|
9fc609ce17 | ||
|
|
7b6cc9244d | ||
|
|
9628d4fb44 | ||
|
|
3d2138812c | ||
|
|
575dc69e3b | ||
|
|
86aa8e413a | ||
|
|
9948f0daaa | ||
|
|
f215d78157 | ||
|
|
bf8d90c5cc | ||
|
|
21846d16e5 | ||
|
|
25b5722155 | ||
|
|
d0bef011ad | ||
|
|
ec87a75c00 | ||
|
|
e6da2cf2cb | ||
|
|
a4ece1f223 | ||
|
|
5efdccd1d8 | ||
|
|
7a92519bd7 | ||
|
|
9a984c0d49 | ||
|
|
fe3908d099 | ||
|
|
e23a9d22e5 | ||
|
|
93d527a0a4 | ||
|
|
8347a55cc2 | ||
|
|
bc59b8abc9 | ||
|
|
9aaf2a6d9a | ||
|
|
3ac72255fa | ||
|
|
c664ffd1db | ||
|
|
94da472717 | ||
|
|
5b998a6680 | ||
|
|
4cb21115dc | ||
|
|
d647d02c2f | ||
|
|
638dd24cec | ||
|
|
3228544c31 | ||
|
|
0b9cf10340 | ||
|
|
7bf7042013 | ||
|
|
ce8c9ef580 | ||
|
|
6cde041080 | ||
|
|
2bb1601d7c | ||
|
|
066f515a47 | ||
|
|
0a76d260fa | ||
|
|
65549863bc | ||
|
|
574e49c854 | ||
|
|
21b7d30174 | ||
|
|
e9c6053b86 | ||
|
|
177a4c7385 | ||
|
|
0accc935a3 | ||
|
|
5d4333eb0d | ||
|
|
32f8a38f6c | ||
|
|
3ae7955d15 | ||
|
|
755ed84740 | ||
|
|
5b17661c5d | ||
|
|
3e6f363471 | ||
|
|
2255a9af6a | ||
|
|
26ae2ff86d | ||
|
|
d39266228c | ||
|
|
7c5de1e393 | ||
|
|
a321ffbcce | ||
|
|
3c87c57d96 | ||
|
|
b47051e59b | ||
|
|
900a21008c | ||
|
|
c0ca6644ad | ||
|
|
081c2a9395 | ||
|
|
76604d8f90 | ||
|
|
33a2ac3830 | ||
|
|
faabc76fd6 | ||
|
|
bd5ea3e222 | ||
|
|
229ec927b9 | ||
|
|
304bbd3f25 | ||
|
|
2e565bc1c4 | ||
|
|
6a28909f40 | ||
|
|
d8e11a8eaa | ||
|
|
ece19f4a5e | ||
|
|
21e8deed89 | ||
|
|
450969c158 | ||
|
|
ba2e75a0ab | ||
|
|
fd090dc29b | ||
|
|
4c03974326 | ||
|
|
cb0b91cdc9 | ||
|
|
fd13b71fb2 | ||
|
|
cd7e661870 | ||
|
|
cc8c57458f | ||
|
|
b6b616b336 | ||
|
|
289f819f78 | ||
|
|
1c3044b873 | ||
|
|
ff0d1bd602 | ||
|
|
2ccdcda072 | ||
|
|
0a66c2a2d9 | ||
|
|
e512411863 | ||
|
|
03b6880089 | ||
|
|
8ba0ac976f | ||
|
|
1cfbfb3812 | ||
|
|
f0cfb1cb03 | ||
|
|
0581210a76 | ||
|
|
46ecb0a14d | ||
|
|
8aa960f129 | ||
|
|
3fba29c571 | ||
|
|
0a61d54a9c | ||
|
|
dd9d0f3732 | ||
|
|
170f2e98cc | ||
|
|
6e644726d0 | ||
|
|
4dd1eb57bd | ||
|
|
5301a5db3a | ||
|
|
ad3d6b7fff | ||
|
|
6ed7f269f1 | ||
|
|
fb3bb69ec6 | ||
|
|
3917ed45de | ||
|
|
3a3782bb7f | ||
|
|
cb1602840c | ||
|
|
c25063d834 | ||
|
|
2a449bd4b1 | ||
|
|
b2cce12980 | ||
|
|
f0df8e8dfa | ||
|
|
18dc4f1023 | ||
|
|
1d9576d5ea | ||
|
|
659bc2814c | ||
|
|
bd13c81684 | ||
|
|
7b75d93f3d | ||
|
|
fc3ed8a1de | ||
|
|
cf045b029c | ||
|
|
91953ae9b4 | ||
|
|
39b3fcad1d | ||
|
|
4faf9c213e | ||
|
|
d884312223 | ||
|
|
0834e492c0 | ||
|
|
871c964ef7 | ||
|
|
7596e41027 | ||
|
|
56a8cf523b | ||
|
|
d9ffe99972 | ||
|
|
07a0753420 | ||
|
|
6cf66117e7 | ||
|
|
a285c07d5e | ||
|
|
cd339263d9 | ||
|
|
592a4ec4d3 | ||
|
|
81f227eace | ||
|
|
5054020c1f | ||
|
|
904deb7d6a | ||
|
|
739f07c98e | ||
|
|
bd76e156bb | ||
|
|
3ef022b071 | ||
|
|
3dedc027ac | ||
|
|
54e6ed3431 | ||
|
|
b339858500 | ||
|
|
0baaa7728a | ||
|
|
30a37311f8 | ||
|
|
555d8b16cb | ||
|
|
900f233b3c | ||
|
|
ade6d4a20f | ||
|
|
9bf28a2799 | ||
|
|
a8c6698de8 | ||
|
|
e2aa991e10 | ||
|
|
5fc370e332 | ||
|
|
f07362b90f | ||
|
|
786cc5bbc8 | ||
|
|
ddee4c8b58 | ||
|
|
a1c5f02444 | ||
|
|
96c9fef35f | ||
|
|
52cc3fd36a | ||
|
|
b12f2a5916 | ||
|
|
b0ddced2b5 | ||
|
|
a4454f5d0f | ||
|
|
4247304f5a | ||
|
|
1c0a4e166f | ||
|
|
63ca42d17f | ||
|
|
c040f2fbb1 | ||
|
|
94b2747375 | ||
|
|
31da225309 | ||
|
|
24d7bae2b2 | ||
|
|
1b238fe4d5 | ||
|
|
c6c840faf7 | ||
|
|
7ea943d501 | ||
|
|
b5bfab9855 | ||
|
|
3a10a0c1ca | ||
|
|
7dcc3bc3d7 | ||
|
|
145648a233 | ||
|
|
90fb64b217 | ||
|
|
5cd093aa46 | ||
|
|
f91cbf0fed | ||
|
|
475ddd8d89 | ||
|
|
c511f1c6c3 | ||
|
|
a6c487f6ca | ||
|
|
45c4539c61 | ||
|
|
01c5233b53 | ||
|
|
f6d53ecbc1 | ||
|
|
1ceb56fc7f | ||
|
|
85b8b7f4e1 | ||
|
|
8b0576b377 | ||
|
|
8857d701fb | ||
|
|
e06e0f9bb9 | ||
|
|
4e4c0c2cd3 | ||
|
|
dad9dbacf7 | ||
|
|
5ea257be87 | ||
|
|
b4671c9aab | ||
|
|
5667d4daae | ||
|
|
e74868a850 | ||
|
|
95d4cd9292 | ||
|
|
2bb188ae79 | ||
|
|
4235fff9ee | ||
|
|
d417aedcfa | ||
|
|
b00d82d679 | ||
|
|
86c32f2706 | ||
|
|
030ba2894f | ||
|
|
f81711f40d | ||
|
|
a5d0b4de5b | ||
|
|
70fb1cf9d1 | ||
|
|
d874a9bf6b | ||
|
|
11c9160cd3 | ||
|
|
864d1b1f9f | ||
|
|
c8c748aea6 | ||
|
|
01a7674b5c | ||
|
|
b7bf9dfd28 | ||
|
|
aadd7dcdc3 | ||
|
|
b3828e38a5 | ||
|
|
05fd9d3f09 | ||
|
|
7612b5ec40 | ||
|
|
64196d4036 | ||
|
|
f14232d2e9 | ||
|
|
60c82a8780 | ||
|
|
f6a11e0de1 | ||
|
|
f388661bda | ||
|
|
0b62aeb495 | ||
|
|
80eea77953 | ||
|
|
d944bdec47 | ||
|
|
5d430c9e68 | ||
|
|
ee963f67c1 | ||
|
|
9c434ccc50 | ||
|
|
28bee28102 | ||
|
|
f430d26f7e | ||
|
|
3f18111cbe | ||
|
|
4c6c16f358 | ||
|
|
77f9c7e571 | ||
|
|
e378648c79 | ||
|
|
d1b14fef56 | ||
|
|
30be1f4826 | ||
|
|
145ab5c89a | ||
|
|
b7263f31a5 | ||
|
|
6f3097f9e6 | ||
|
|
3e13e16b3f | ||
|
|
a6d683f498 | ||
|
|
ceb920802a | ||
|
|
6bf9910975 | ||
|
|
1b962bac0b | ||
|
|
562f9b6eae | ||
|
|
86fb1a0cb1 | ||
|
|
be5607e510 | ||
|
|
5a6f7edde9 | ||
|
|
ef5fc3c959 | ||
|
|
92c48dabe3 | ||
|
|
530f6c1da4 | ||
|
|
6e4252dad4 | ||
|
|
55a4d46f5d | ||
|
|
fe8bfa54de | ||
|
|
d318f612a9 | ||
|
|
1cb5b0e2f6 | ||
|
|
27f99a16a6 | ||
|
|
9f437eb1ab | ||
|
|
92f39da802 | ||
|
|
f36544f98d | ||
|
|
a0e54c0512 | ||
|
|
bd898a10f8 | ||
|
|
953c099428 | ||
|
|
1f44b01e2a | ||
|
|
91b589f2f0 | ||
|
|
789dacdfbe | ||
|
|
984fa8d83b | ||
|
|
ab12596143 | ||
|
|
6111e09a97 | ||
|
|
c808e8c138 | ||
|
|
b58b634e0e | ||
|
|
c524078d2b | ||
|
|
b32776d533 | ||
|
|
3dd14ee522 | ||
|
|
ec054ba582 | ||
|
|
7a870080d6 | ||
|
|
eb25d1f252 | ||
|
|
5b5af7daee | ||
|
|
212a04a45e | ||
|
|
648c6fdd60 | ||
|
|
f960b776f0 | ||
|
|
e05a5ca36c | ||
|
|
ba4d255635 | ||
|
|
cda6baf02c | ||
|
|
a46efe240d | ||
|
|
fd6be0d17e | ||
|
|
747f86aa23 | ||
|
|
03902bb53d | ||
|
|
6a20711afd | ||
|
|
ccdbd8bf48 | ||
|
|
38c209e85b | ||
|
|
1aaa3a303d | ||
|
|
75ddcddd06 | ||
|
|
8e66e09cd8 | ||
|
|
4fdca026c7 | ||
|
|
13c3edde05 | ||
|
|
f01d927efb | ||
|
|
a2514904cb | ||
|
|
a4fa889ced | ||
|
|
ff54e4d929 | ||
|
|
587d870f1e | ||
|
|
fc55182a4c | ||
|
|
8dc49dc114 | ||
|
|
4a5faecd8f | ||
|
|
f8b4699a14 | ||
|
|
1ebb35b988 | ||
|
|
78f86abba4 | ||
|
|
90402a6328 | ||
|
|
998e7452b8 | ||
|
|
17f9ab4ff8 | ||
|
|
33df11e823 | ||
|
|
5a8cb2dac1 | ||
|
|
0d41394d6e | ||
|
|
55e804e078 | ||
|
|
a90b25226a | ||
|
|
87b593f93e | ||
|
|
137dcbf93d | ||
|
|
1adde07a3f | ||
|
|
42a744d9e6 | ||
|
|
2d68bd1ef9 | ||
|
|
8ea63f8c50 | ||
|
|
a79eb48de3 | ||
|
|
507ce134fa | ||
|
|
bc7e92a2b5 | ||
|
|
e4fe69365f | ||
|
|
980282a06f | ||
|
|
d8de2beb5b | ||
|
|
060d10a4cb | ||
|
|
af03d00780 | ||
|
|
5c54243014 | ||
|
|
d59a48a255 | ||
|
|
f3321d920d | ||
|
|
6bcff7828f | ||
|
|
2cb5ec5983 | ||
|
|
e54dec7ce5 | ||
|
|
93f1eabe30 | ||
|
|
2bec8a4f1e | ||
|
|
1b59e6f910 | ||
|
|
9d66497abc | ||
|
|
7e15ff9486 | ||
|
|
12445fe2ed | ||
|
|
491407ddf8 | ||
|
|
6da55159a2 | ||
|
|
c50d59874d | ||
|
|
b3d9ca4ccd | ||
|
|
4efaf8e882 | ||
|
|
178556142a | ||
|
|
7c1fbed057 | ||
|
|
bc902b8f74 | ||
|
|
8ee14db51e | ||
|
|
5d35578811 | ||
|
|
d09fca3ca9 | ||
|
|
dadd35b636 | ||
|
|
c2afdf2192 | ||
|
|
152e715999 | ||
|
|
99c2ae7b35 | ||
|
|
cd9b926af7 | ||
|
|
9ac46fb983 | ||
|
|
8516dfcb6c | ||
|
|
c1ecb6c60a | ||
|
|
43297148b2 | ||
|
|
c0c1a4b01b | ||
|
|
47a3243ff1 | ||
|
|
22e14a0a67 | ||
|
|
48a0b5b026 | ||
|
|
16eb2eb6a3 | ||
|
|
e6ec1ca1f8 | ||
|
|
6f90835f95 | ||
|
|
643142acab | ||
|
|
7c31f235da | ||
|
|
4f40019130 | ||
|
|
780cc2d110 | ||
|
|
2a13f682e0 | ||
|
|
28cf0e6aaa | ||
|
|
92fb30c526 | ||
|
|
9f44c26789 | ||
|
|
3738b6399e | ||
|
|
62b0dc4853 | ||
|
|
429c92c0ce | ||
|
|
579e5e4fee | ||
|
|
ba27d71abe | ||
|
|
7115e3a4d5 | ||
|
|
0114fdcba4 | ||
|
|
dad5c15520 | ||
|
|
6e171c5225 | ||
|
|
f0b5c3b90a | ||
|
|
c30b856d14 | ||
|
|
13c106af77 | ||
|
|
ce1e4348da | ||
|
|
13a8823bd3 | ||
|
|
bbca2916f7 | ||
|
|
37305a59ca | ||
|
|
bb359a74f1 | ||
|
|
6b98d58906 | ||
|
|
8dca9f95fa | ||
|
|
f50e568fd1 | ||
|
|
f8a48ffaad | ||
|
|
67fb0fe6a5 | ||
|
|
0b273ac4d5 | ||
|
|
84b56c3c53 | ||
|
|
06602a84ff | ||
|
|
b710f6bd65 | ||
|
|
95bd19c509 | ||
|
|
7c5710d31f | ||
|
|
7f7216be6e | ||
|
|
ec332cf903 | ||
|
|
2c5411b00c | ||
|
|
a00c932bbc | ||
|
|
6f9a95f830 | ||
|
|
8bf57be9ba | ||
|
|
b1504ed99a | ||
|
|
9349def72e | ||
|
|
6cda35a75f | ||
|
|
2625193a48 | ||
|
|
f3c3258921 | ||
|
|
4042d1f0c3 | ||
|
|
4a46613916 | ||
|
|
6c8fcb3af2 | ||
|
|
61e27dedf7 | ||
|
|
94392a7af3 | ||
|
|
cc647ba9d5 | ||
|
|
5e89485cec | ||
|
|
8637e67e6f | ||
|
|
4a19fd6441 | ||
|
|
54e0ada9d5 | ||
|
|
cd89f6c502 | ||
|
|
660e7a178a | ||
|
|
15845cb287 | ||
|
|
d0a0239bac | ||
|
|
7e7613cdec | ||
|
|
a5b88c4d0c | ||
|
|
dccb0c15b9 | ||
|
|
3f7f4852ef | ||
|
|
0f33b04c87 | ||
|
|
fd3b9ca3aa | ||
|
|
f1a5a4277d | ||
|
|
f59d2dd034 | ||
|
|
5be881756b | ||
|
|
4296427214 | ||
|
|
7551141dbe | ||
|
|
5544a7037b | ||
|
|
dbed39ba05 | ||
|
|
aa1fc30b89 | ||
|
|
fa12c282f6 | ||
|
|
25b23c4bc9 | ||
|
|
7eafe3213f | ||
|
|
2cb04db526 | ||
|
|
96f92e6105 | ||
|
|
a47aef5460 | ||
|
|
1dd003bd4c | ||
|
|
70fbcd2f27 | ||
|
|
5850308a37 | ||
|
|
53c573ed02 | ||
|
|
10b47eddd2 | ||
|
|
5a9709fa9d | ||
|
|
7e9b42c87d | ||
|
|
b6c14f8b21 | ||
|
|
5077408d78 | ||
|
|
0885784f13 | ||
|
|
3380c946e1 | ||
|
|
d625e41c6c | ||
|
|
eb1bfe0e59 | ||
|
|
042d350762 | ||
|
|
0f26f3678a | ||
|
|
6a81632e36 | ||
|
|
b756806ee9 | ||
|
|
81e6f82caf | ||
|
|
29f76f3936 | ||
|
|
ea192147ea | ||
|
|
99812a80fd | ||
|
|
8ad92bb8a4 | ||
|
|
b85927e488 | ||
|
|
87b408a2e5 | ||
|
|
fc68fb951c | ||
|
|
5448d29b2e | ||
|
|
bb51eb5188 | ||
|
|
89f71b44f7 | ||
|
|
c5d4a9e046 | ||
|
|
edd786446c | ||
|
|
b0b88d9bc5 | ||
|
|
15b0cbe318 | ||
|
|
9f0c571238 | ||
|
|
f70343660d | ||
|
|
c8b45ecc27 | ||
|
|
9e8a8867ea | ||
|
|
2c82fc3edb | ||
|
|
bbe866122d | ||
|
|
87954dbfeb | ||
|
|
699c71d319 | ||
|
|
21f25799b4 | ||
|
|
90af997fec | ||
|
|
b73318bc62 | ||
|
|
e5bf4281b5 | ||
|
|
0c2b9bbb2b | ||
|
|
99385db0c4 | ||
|
|
90dd0657b5 | ||
|
|
ec92565f23 | ||
|
|
2772791fda | ||
|
|
08c976f811 | ||
|
|
72dd299ca0 | ||
|
|
30fda0f1ae | ||
|
|
ab9c5fb5e7 | ||
|
|
28dc5bb566 | ||
|
|
cf6d321991 | ||
|
|
50422f1fc2 | ||
|
|
db3d393576 | ||
|
|
2f105f3979 | ||
|
|
ee28fd9255 | ||
|
|
13d492e92a | ||
|
|
e7fd65f0cf | ||
|
|
2eeb0ec9b0 | ||
|
|
b1133c9934 | ||
|
|
991ce42c48 | ||
|
|
10dc330640 | ||
|
|
dfab54d5a2 | ||
|
|
3e22ae3412 | ||
|
|
55b4e77a5e | ||
|
|
ad7ea88923 | ||
|
|
f2884d8e31 | ||
|
|
36a63dd059 | ||
|
|
03ba257ad2 | ||
|
|
fe60ca408b | ||
|
|
0402c803c6 | ||
|
|
29ccf047d8 | ||
|
|
8aa0a76702 | ||
|
|
2d76de2574 | ||
|
|
4d8b905541 | ||
|
|
452aefd025 | ||
|
|
899e799459 | ||
|
|
2295fafb34 | ||
|
|
a562228c5e | ||
|
|
e74630ae3b | ||
|
|
1f2e173a74 | ||
|
|
46e96c008c | ||
|
|
256cd6374a | ||
|
|
57a47bbc05 | ||
|
|
024fcc836b | ||
|
|
250be011c7 | ||
|
|
4e822c1911 | ||
|
|
26d52ceb48 | ||
|
|
d90acacd86 | ||
|
|
69f5308761 | ||
|
|
4b5e09e4d6 | ||
|
|
4f78abe7dc | ||
|
|
e63b2881b1 | ||
|
|
745167d57a | ||
|
|
d7bdc1de8d | ||
|
|
c912494609 | ||
|
|
69dae1ec1c | ||
|
|
cf85e9eb7b | ||
|
|
599716bb1b | ||
|
|
ae88d76032 | ||
|
|
9266f28822 | ||
|
|
6488ee12be | ||
|
|
c2fb01a257 | ||
|
|
5761342f32 | ||
|
|
57af7432fc | ||
|
|
1c7dcdd6b9 | ||
|
|
25b3836418 | ||
|
|
5aa2bf86f4 | ||
|
|
b0eb47cb1c | ||
|
|
e7a4f96fb6 | ||
|
|
60110adc06 | ||
|
|
5ff2dfb23e | ||
|
|
eac32419fc | ||
|
|
e3d3d424b2 | ||
|
|
971e2c3bd6 | ||
|
|
c083d76567 | ||
|
|
52322ef624 | ||
|
|
a4ea3bd015 | ||
|
|
3d93532c87 | ||
|
|
fff615d5fc | ||
|
|
f1b8d52eb3 | ||
|
|
7ca5f8f119 | ||
|
|
194a742fb9 | ||
|
|
160956dd31 | ||
|
|
089bacd54e | ||
|
|
d950bf68e3 | ||
|
|
7796c9e122 | ||
|
|
528ec9bffd | ||
|
|
32ec4734f9 | ||
|
|
6a98e7d914 | ||
|
|
a752f09055 | ||
|
|
846bf2ca9f | ||
|
|
f4ab50501e | ||
|
|
de10387f41 | ||
|
|
1faaaeb3d9 | ||
|
|
12cb84b97f | ||
|
|
fdcca9292e | ||
|
|
a1f717f65a | ||
|
|
70a281a39b | ||
|
|
9fcf66f0e0 | ||
|
|
98b152030d | ||
|
|
467d7dacb6 | ||
|
|
d62ab49978 | ||
|
|
e30c701386 | ||
|
|
401bf944ef | ||
|
|
326c982660 | ||
|
|
4b25bdfbc4 | ||
|
|
528682a294 | ||
|
|
6aa00f7bcf | ||
|
|
f485fcde96 | ||
|
|
6f6b37f148 | ||
|
|
99c3a9390f | ||
|
|
f0df46c88a | ||
|
|
e84ac64964 | ||
|
|
3a30c06345 | ||
|
|
a10ca2c5f6 | ||
|
|
927d9f092b | ||
|
|
7938506e07 | ||
|
|
6f7276278d | ||
|
|
743d22669a | ||
|
|
84841c8c4b | ||
|
|
274a2ca528 | ||
|
|
d4aaef90e6 | ||
|
|
6efb1e5626 | ||
|
|
73b4acbb63 | ||
|
|
8a248696e9 | ||
|
|
8b35c194ec | ||
|
|
ac05f88641 | ||
|
|
4bbb878d20 | ||
|
|
2ce60ff314 | ||
|
|
17a4d8a5e5 | ||
|
|
04592c385b | ||
|
|
bc00da1721 | ||
|
|
76a0e43e88 | ||
|
|
24caccccdd | ||
|
|
26342b0c24 | ||
|
|
a4eaddff81 | ||
|
|
c041273dd3 | ||
|
|
fb970b9d87 | ||
|
|
0240f520ab | ||
|
|
3d105733a9 | ||
|
|
8df3ba96f3 | ||
|
|
d35a1c30f4 | ||
|
|
e9ae926e04 | ||
|
|
28c03f1147 | ||
|
|
84d9aff8a2 | ||
|
|
12d30255a7 | ||
|
|
7826eae452 | ||
|
|
8a2347592d | ||
|
|
bcd4adb3a0 | ||
|
|
bf5faf76eb | ||
|
|
f473895c41 | ||
|
|
fbf43c31e5 | ||
|
|
3c0c7a9f83 | ||
|
|
13216c5c20 | ||
|
|
6be9a2c1db | ||
|
|
d8612f7704 | ||
|
|
0a78d99a4d | ||
|
|
3df8eb60e3 | ||
|
|
0325bec283 | ||
|
|
dfad51fe9e | ||
|
|
7049cb9d97 | ||
|
|
78b8b63774 | ||
|
|
ba314a7a36 | ||
|
|
39356f4238 | ||
|
|
b3c05026df | ||
|
|
ce36fd7a49 | ||
|
|
69e00f9948 | ||
|
|
3257df0da3 | ||
|
|
0f2869069b | ||
|
|
a27c6f4b75 | ||
|
|
d27ca649c7 | ||
|
|
d9900e4dbc | ||
|
|
e75a1444af | ||
|
|
b35157f4ff | ||
|
|
762ab056a2 | ||
|
|
78481f0e42 | ||
|
|
746c7fd4e7 | ||
|
|
7f26ae0b45 | ||
|
|
b5948f2e71 | ||
|
|
79a1bfd963 | ||
|
|
ac53bb593d | ||
|
|
dd36c431ec | ||
|
|
b1d41cfa60 | ||
|
|
9dda9ef07c | ||
|
|
9a43fcb61c | ||
|
|
5ec8ef0230 | ||
|
|
d3db1b2591 | ||
|
|
3decc0b3d6 | ||
|
|
98b58fa050 | ||
|
|
5e11341232 | ||
|
|
90e93b1f3a | ||
|
|
e6f927f61a | ||
|
|
60ae8ac3d2 | ||
|
|
004fb30ebe | ||
|
|
3fb4f7f498 | ||
|
|
9e09e48502 | ||
|
|
c79774e8d4 | ||
|
|
d6b09c35f7 | ||
|
|
0048980da5 | ||
|
|
d169d00be6 | ||
|
|
ff731ea07d | ||
|
|
9a5a27ea8d | ||
|
|
94d7b62922 | ||
|
|
2df42e369e | ||
|
|
1f5bb08c25 | ||
|
|
01ff65a93e | ||
|
|
8540043c45 | ||
|
|
f57adf3637 | ||
|
|
a75fa58e1c | ||
|
|
6ccb2d36cf | ||
|
|
414e5f09c7 | ||
|
|
a04596659b | ||
|
|
149d62a648 | ||
|
|
db3905c0a3 | ||
|
|
3253e3c5aa | ||
|
|
c9321550e0 | ||
|
|
ac390d28b8 | ||
|
|
561e5f9ccb | ||
|
|
9df5c39bca | ||
|
|
9976fc6782 | ||
|
|
8966f5635d | ||
|
|
85d7afeba0 | ||
|
|
63e21c146a | ||
|
|
9bd9ad4205 | ||
|
|
dd6faf7f9b | ||
|
|
db4da7beec | ||
|
|
b4f47a7623 | ||
|
|
af8eccc02e | ||
|
|
820be19cf5 | ||
|
|
d733efc1cc | ||
|
|
985a0f3450 | ||
|
|
322515a50b | ||
|
|
13e1fa6789 | ||
|
|
c6277cce51 | ||
|
|
6530375dbf | ||
|
|
449a6e490b | ||
|
|
ebea20b4e7 | ||
|
|
f76d821bda | ||
|
|
263304b6b7 | ||
|
|
73e98c91c3 | ||
|
|
2bf8494332 | ||
|
|
df2bdf7ea3 | ||
|
|
514382e2eb | ||
|
|
cb1eadc276 | ||
|
|
1314ba219e | ||
|
|
5267dce210 | ||
|
|
97c48da49f | ||
|
|
1e74ee51ff | ||
|
|
067edcdb90 | ||
|
|
792c13cf0a | ||
|
|
3bd7d3b1c5 | ||
|
|
af847ef94e | ||
|
|
bfed3ea7d3 | ||
|
|
b44e4d7cb0 | ||
|
|
eed9966ad6 | ||
|
|
affa3c2dbf | ||
|
|
6775ac7334 | ||
|
|
2c626371b0 | ||
|
|
3cacec9163 | ||
|
|
ad513a20e9 | ||
|
|
72a8fa3bc8 | ||
|
|
0c9a616326 | ||
|
|
0e9bc2d410 | ||
|
|
0ea0c5ec4f | ||
|
|
58f0c68151 | ||
|
|
12b5a76b0d | ||
|
|
a4452864ea | ||
|
|
d57be01485 | ||
|
|
d8738f5bfd | ||
|
|
9cf7f3e46f | ||
|
|
14aba3489e | ||
|
|
13bd16af92 | ||
|
|
922a6f13a3 | ||
|
|
9c91e27933 | ||
|
|
c2ca103d30 | ||
|
|
c18f67ac6a | ||
|
|
a5b0400be7 | ||
|
|
045f14fbd0 | ||
|
|
05d8664f15 | ||
|
|
52fdecf97b | ||
|
|
9c0f84cee8 | ||
|
|
414eb22ef9 | ||
|
|
1d3ec27cb7 | ||
|
|
a0cd59bd0e | ||
|
|
a2f13eae55 | ||
|
|
2a931937a8 | ||
|
|
dfd6f8f7ab | ||
|
|
275464e7fb | ||
|
|
e2d370f0da | ||
|
|
4cb8bf1b75 | ||
|
|
5335e671be | ||
|
|
2d2d85bba4 | ||
|
|
9df6ce48c5 | ||
|
|
4d5911dbcf | ||
|
|
d57a2b908a | ||
|
|
2f228ddf31 | ||
|
|
1ca171dbe9 | ||
|
|
f6759a731a | ||
|
|
dfbda48afc | ||
|
|
260723e2cc | ||
|
|
1cbc5b49e3 | ||
|
|
f3358f5927 | ||
|
|
f946040fa9 | ||
|
|
434614506e | ||
|
|
7f2733fa1b | ||
|
|
edb7967dc7 | ||
|
|
c9901bbba5 | ||
|
|
4d930f3598 | ||
|
|
13e71acadf | ||
|
|
37ac743da7 | ||
|
|
c47a6c1510 | ||
|
|
94f9ff1ac9 | ||
|
|
97429a25ab | ||
|
|
9e89584cb4 | ||
|
|
ea80274229 | ||
|
|
42a556a082 | ||
|
|
a71a5bfeb4 | ||
|
|
6cee434b04 | ||
|
|
9d44cd79ee | ||
|
|
548440b48f | ||
|
|
8055a0bdac | ||
|
|
83c74878df | ||
|
|
d320915ad2 | ||
|
|
8e160edbd5 | ||
|
|
c0eaae200e | ||
|
|
79ae163296 | ||
|
|
7a91d7e776 | ||
|
|
6465adfe5c | ||
|
|
db14949209 | ||
|
|
ab4bc653ab | ||
|
|
ab4eacd15f | ||
|
|
7845075bd2 | ||
|
|
129638117f | ||
|
|
4438b7793b | ||
|
|
baaf6046a1 | ||
|
|
5418c2c5e4 | ||
|
|
c27038e392 | ||
|
|
51f15880d1 | ||
|
|
d324500959 | ||
|
|
3d218861e2 | ||
|
|
e721c5cf86 | ||
|
|
e3570ae45d | ||
|
|
2f27ee2232 | ||
|
|
c65bd65254 | ||
|
|
72ce06eab8 | ||
|
|
912f7b51e9 | ||
|
|
90fab0be6b | ||
|
|
c9516c4c60 | ||
|
|
6e74dd4388 | ||
|
|
d160c7e565 | ||
|
|
8ac04a3f29 | ||
|
|
b91b35b565 | ||
|
|
ac78bae7b5 | ||
|
|
926e75d721 | ||
|
|
d5a3021a7d | ||
|
|
d8a994ef24 | ||
|
|
7140dbac95 | ||
|
|
acf094fb07 | ||
|
|
7e0baf4136 | ||
|
|
a703f7d7b4 | ||
|
|
a9981d8099 | ||
|
|
5649556a33 | ||
|
|
834d92a47b | ||
|
|
e2f95c2845 | ||
|
|
5609585ec1 | ||
|
|
b7f3d94cd0 | ||
|
|
f6c98465c7 | ||
|
|
aa12135b97 | ||
|
|
f38d5e57dd | ||
|
|
341da3cea7 | ||
|
|
7162095635 | ||
|
|
0b54035d7a | ||
|
|
dbd4697001 | ||
|
|
2408df3f35 | ||
|
|
a1b28fc33c | ||
|
|
a467184e13 | ||
|
|
658bfc2704 | ||
|
|
736a46dff9 | ||
|
|
0f1b26ed1e | ||
|
|
60896c66af | ||
|
|
eb009923f4 | ||
|
|
338af89d56 | ||
|
|
2fdf8fc938 | ||
|
|
89d6b18dad | ||
|
|
b97780ba51 | ||
|
|
ccc94dd11c | ||
|
|
d5ca913b2f | ||
|
|
dab74f21b7 | ||
|
|
9eef2e706c | ||
|
|
12403bdfb0 | ||
|
|
3af1d3c581 | ||
|
|
24829f314b | ||
|
|
779b71eda4 | ||
|
|
9cf4fe043b | ||
|
|
2765b5c7cf | ||
|
|
632c27802c | ||
|
|
dc89c51f3e | ||
|
|
bb595666ac | ||
|
|
e9b9e6eb53 | ||
|
|
58e004f7da | ||
|
|
fd92d91da3 | ||
|
|
d8631b616e | ||
|
|
aa5e837c65 | ||
|
|
4f6c3e8bb2 | ||
|
|
a1d97e8f5c | ||
|
|
daa43cfb6e | ||
|
|
9adfe453d5 | ||
|
|
29cd8ac270 | ||
|
|
d710b5e791 | ||
|
|
c47866b34a | ||
|
|
15d37b7a95 | ||
|
|
15394f613f | ||
|
|
3650bd8528 | ||
|
|
de3be370f7 | ||
|
|
364874937e | ||
|
|
10e4887b2b | ||
|
|
643acdd32d | ||
|
|
8662990746 | ||
|
|
25845ea1a5 | ||
|
|
d3ca5accfd | ||
|
|
8ab5399e83 | ||
|
|
ec478b4b06 | ||
|
|
1feecd6beb | ||
|
|
a3e8c32a30 | ||
|
|
779bb890fa | ||
|
|
1fa4fe706a | ||
|
|
f4bc9263d9 | ||
|
|
600d8edaca | ||
|
|
ce3708b3ea | ||
|
|
23bc9a2911 | ||
|
|
47adc0e8f7 | ||
|
|
5258ee3740 | ||
|
|
59745c62b4 | ||
|
|
0ad5f51059 | ||
|
|
6b3e47b103 | ||
|
|
297e772c20 | ||
|
|
8bf3032b16 | ||
|
|
e40d94bb4f | ||
|
|
7ffe845c61 | ||
|
|
af8e323248 | ||
|
|
b09ddc72d2 | ||
|
|
a881f776d0 | ||
|
|
40f9d4f920 | ||
|
|
dd7608a36e | ||
|
|
662482d366 | ||
|
|
08ff1b7d4b | ||
|
|
3808638df1 | ||
|
|
ee53204e02 | ||
|
|
f15a2f9b25 | ||
|
|
3b102a71a2 | ||
|
|
133397ee0d | ||
|
|
e2b4a24cb6 | ||
|
|
d37cf09ccd | ||
|
|
2cfe6f8c60 | ||
|
|
16270ee9a4 | ||
|
|
1dfead1eef | ||
|
|
894946c319 | ||
|
|
45db167f7a | ||
|
|
10fbb1aa2f | ||
|
|
bc0eee48d5 | ||
|
|
fa5a1cb54f | ||
|
|
e797a225b6 | ||
|
|
6d5c986d4f | ||
|
|
45659d0fd2 | ||
|
|
acfc942ad7 | ||
|
|
db150f2e42 | ||
|
|
9fe9cd8b5c | ||
|
|
f8182ac521 | ||
|
|
4e96a4a62b | ||
|
|
90e9e3c89d | ||
|
|
d4583ebd4b | ||
|
|
b024de7bf5 | ||
|
|
4a0d2edc3d | ||
|
|
8e40f86d2c | ||
|
|
2bfb8bb5fd | ||
|
|
137a49e834 | ||
|
|
a3bdede2ce | ||
|
|
ddf9fa06c7 | ||
|
|
d91004ee71 | ||
|
|
739d5aa1d3 | ||
|
|
04be8c0de5 | ||
|
|
c3ff476ed6 | ||
|
|
fb1708e1af | ||
|
|
a47baa1b7a | ||
|
|
995487e822 | ||
|
|
5e97693e0e | ||
|
|
452bc385fe | ||
|
|
71bb7f6053 | ||
|
|
0255e6a703 | ||
|
|
5a27aea8e0 | ||
|
|
0e4ae27caa | ||
|
|
1c74612b3c | ||
|
|
d3ba246693 | ||
|
|
a93af59b36 | ||
|
|
0d41827f23 | ||
|
|
32efc3ec0a | ||
|
|
d33ed36fb4 | ||
|
|
9d67528c82 | ||
|
|
66d2ba1b4e | ||
|
|
84749736a8 | ||
|
|
857b340498 | ||
|
|
3e0a27157c | ||
|
|
3abad75a1b | ||
|
|
d568019306 | ||
|
|
b3e0efc0c3 | ||
|
|
caa4ca46c0 | ||
|
|
5d192c2ebf | ||
|
|
29c3e9f428 | ||
|
|
532f9fdd99 | ||
|
|
4848620594 | ||
|
|
bead46363b | ||
|
|
57c10aae33 | ||
|
|
0e0cd9100b | ||
|
|
90780a0d90 | ||
|
|
fdad234445 | ||
|
|
bba1847a8e | ||
|
|
a9d68a6884 | ||
|
|
9cf95e4e37 | ||
|
|
8c4588c4c9 | ||
|
|
e35791b2b2 | ||
|
|
5eafe2b17e | ||
|
|
1c1246fcb9 | ||
|
|
8436d69eaf | ||
|
|
20403f75fb | ||
|
|
295de51b99 | ||
|
|
6e03f61617 | ||
|
|
055c1ea02d | ||
|
|
abc5abce30 | ||
|
|
112a7cab31 | ||
|
|
ee814bf8d6 | ||
|
|
a4a23c0268 | ||
|
|
cd89d387b6 | ||
|
|
beefc53e59 | ||
|
|
1becf01cfa | ||
|
|
9fbf54ee6b | ||
|
|
12c8953381 | ||
|
|
b7b30cd85e | ||
|
|
81e5722bcc | ||
|
|
303d091ea9 | ||
|
|
c11c3b6c11 | ||
|
|
566163ab82 | ||
|
|
e2dde6eb0a | ||
|
|
b900150b1d | ||
|
|
4deb876343 | ||
|
|
0617720c0c | ||
|
|
9b8ad01bc0 | ||
|
|
96dee1c354 | ||
|
|
674c5c37be | ||
|
|
5deb726f3f | ||
|
|
1ab8a60d73 | ||
|
|
8eb0577791 | ||
|
|
85335c5f56 | ||
|
|
93f40995b3 | ||
|
|
646e90d833 | ||
|
|
d943429672 | ||
|
|
3a9fd81f59 | ||
|
|
edc414c584 | ||
|
|
a849ac0164 | ||
|
|
b31c7fe074 | ||
|
|
2665728ee7 | ||
|
|
f65dedc3be | ||
|
|
b921161666 | ||
|
|
2cc1ee3fc0 | ||
|
|
ab0ba4bbae | ||
|
|
86f841dd71 | ||
|
|
e3075865e4 | ||
|
|
3509f1f610 | ||
|
|
7ca1821725 | ||
|
|
ee5d6fb025 | ||
|
|
1372cab35a | ||
|
|
e33ddac9bf | ||
|
|
71b9537393 | ||
|
|
b33abc6280 | ||
|
|
9032bd097b | ||
|
|
38efa72146 | ||
|
|
4ae7e64e2a | ||
|
|
863ff19e1f | ||
|
|
eb14fbf95f | ||
|
|
a3eab8185d | ||
|
|
f36c82c3b3 | ||
|
|
1105a3139f | ||
|
|
fb99d50fa1 | ||
|
|
b8d0367a6c | ||
|
|
7ef9a05588 | ||
|
|
c631a4a9b9 | ||
|
|
dccfadf7b8 | ||
|
|
d1675c2701 | ||
|
|
29b07693dd | ||
|
|
f75b5f4287 | ||
|
|
40413c5c6c | ||
|
|
a72f57374d | ||
|
|
98306a5d8a | ||
|
|
cb92af4a6c | ||
|
|
ae2c6d42fd | ||
|
|
ab89be33a9 | ||
|
|
a1a4f1103c | ||
|
|
653e1506ad | ||
|
|
41fdaabcf7 | ||
|
|
8e09e03127 | ||
|
|
688fc515f8 | ||
|
|
53a63de9dc | ||
|
|
f610bfa8a2 | ||
|
|
fc4a4d38d1 | ||
|
|
939d96813c | ||
|
|
f43cc90841 | ||
|
|
a2ef9a2b64 | ||
|
|
c199703e2a | ||
|
|
db719abff2 | ||
|
|
91bab801aa | ||
|
|
17c4400b12 | ||
|
|
efa0e7b27a | ||
|
|
cd966787f3 | ||
|
|
e2f0587ca3 | ||
|
|
9620f48ed0 | ||
|
|
4db0e1d340 | ||
|
|
8a93113192 | ||
|
|
86bce4a2ae | ||
|
|
21d7b5acaf | ||
|
|
bcf6aed452 | ||
|
|
4331d1d2a0 | ||
|
|
62edc5c59a | ||
|
|
cc8c67ff29 | ||
|
|
697b0e2aba | ||
|
|
03427fb005 | ||
|
|
7655337a1f | ||
|
|
bf11ad19ea | ||
|
|
e0f0f72a36 | ||
|
|
ca35ddd078 | ||
|
|
f4309bbb05 | ||
|
|
6dc407c7d9 | ||
|
|
81ed5c4bee | ||
|
|
73474c043b | ||
|
|
0d5dc8a064 | ||
|
|
0cb7396840 | ||
|
|
4ea75dfcbe | ||
|
|
cc22c8a1ae | ||
|
|
2481fe2f56 | ||
|
|
2087156119 | ||
|
|
3870a7a3c8 | ||
|
|
19c234db39 | ||
|
|
8fe5d887ae | ||
|
|
4e6d048ba1 | ||
|
|
0df39b33eb | ||
|
|
7392b6a755 | ||
|
|
cb8134da52 | ||
|
|
590637246b | ||
|
|
053d1424b2 | ||
|
|
4993ab1a76 | ||
|
|
a62290de52 | ||
|
|
8d58e06ad8 | ||
|
|
b8fbf6559d | ||
|
|
44637f03cc | ||
|
|
7bab3d682f | ||
|
|
34f01aab5e | ||
|
|
240fe07287 | ||
|
|
93f03707a7 | ||
|
|
85af36332b | ||
|
|
13fe733037 | ||
|
|
4c896bb620 | ||
|
|
157d868254 | ||
|
|
e16042010e | ||
|
|
227dcc3cb9 | ||
|
|
e914969e4c | ||
|
|
a49af93faf | ||
|
|
76d4af891f | ||
|
|
0721095944 | ||
|
|
c62a6b7a12 | ||
|
|
cadf03db68 | ||
|
|
5ff6eedf5e | ||
|
|
53eb37d529 | ||
|
|
3bcdb3855c | ||
|
|
f00fef0cd0 | ||
|
|
2d3ecbe5b2 | ||
|
|
09c981846b | ||
|
|
037a01c4e4 | ||
|
|
1d95844d55 | ||
|
|
1c9dd11ba7 | ||
|
|
1e7e092992 | ||
|
|
33a99d587a | ||
|
|
9cd16c5b12 | ||
|
|
6673dcb038 | ||
|
|
71142929cc | ||
|
|
d7b924f17d | ||
|
|
b117befc2b | ||
|
|
7786cb76f3 | ||
|
|
eb918c2368 | ||
|
|
8ecbf0f16d | ||
|
|
b13caa23d9 | ||
|
|
fd79fad2ec | ||
|
|
19423957b1 | ||
|
|
3362b3a44f | ||
|
|
50264200f0 | ||
|
|
7436ce6403 | ||
|
|
91789930bc | ||
|
|
ea375c0dcc | ||
|
|
7509fa2c33 | ||
|
|
acdb4d8bdd | ||
|
|
95f9c85bcc | ||
|
|
79dcd7ee6e | ||
|
|
ed001d70e4 | ||
|
|
42a8c15ad0 | ||
|
|
9a27e5ccdc | ||
|
|
71123c816d | ||
|
|
168c69273f | ||
|
|
4df378b892 | ||
|
|
351dfc95a9 | ||
|
|
837155577a | ||
|
|
7e88420bc6 | ||
|
|
5911fc3512 | ||
|
|
4108c12092 | ||
|
|
e444a67d59 | ||
|
|
0cce4439ce | ||
|
|
59c965a5ec | ||
|
|
76bdbcc969 | ||
|
|
477b4d3b50 | ||
|
|
4d31eb2c0d | ||
|
|
d0b0d24f22 | ||
|
|
5d95ffe3eb | ||
|
|
98da7241a0 | ||
|
|
bc17f2f759 | ||
|
|
40f3142264 | ||
|
|
b21160a13a | ||
|
|
5b2afd8ec8 | ||
|
|
7a3eccc709 | ||
|
|
2a8d71367d | ||
|
|
3d5d61778a | ||
|
|
ddcc8d998c | ||
|
|
99e9bbef6c | ||
|
|
0e96a46020 | ||
|
|
df5ed64cca | ||
|
|
2a0bb1fa90 | ||
|
|
c6083c335e | ||
|
|
2e9c4ddedb | ||
|
|
fa8bf0f1d7 | ||
|
|
9a2e43bff2 | ||
|
|
bd5dc626e8 | ||
|
|
626dc1f0bd | ||
|
|
1b0ef0ec0b | ||
|
|
e4a092fb5a | ||
|
|
b886fb4bf0 | ||
|
|
fa5e372f75 | ||
|
|
356f1438a6 | ||
|
|
a19aaa439d | ||
|
|
0d469f261e | ||
|
|
c3440c4dd3 | ||
|
|
718d3ae258 | ||
|
|
b8d48bdb62 | ||
|
|
15d62bba82 | ||
|
|
eb6c634475 | ||
|
|
eec06fb3df | ||
|
|
df05134494 | ||
|
|
9bd3ebe207 | ||
|
|
a576224d0e | ||
|
|
989f30eb41 | ||
|
|
06d293a84e | ||
|
|
120cd4e471 | ||
|
|
1cbd4c01fb | ||
|
|
2528c482e9 | ||
|
|
b1a53f6d8e | ||
|
|
fde9c69679 | ||
|
|
3df5dcc1dc | ||
|
|
14080dd61d | ||
|
|
da2585c11e | ||
|
|
dd8a06a397 | ||
|
|
4e0c697aaf | ||
|
|
3ffbb54337 | ||
|
|
67cfb6735b | ||
|
|
b7508b06fa | ||
|
|
2a0db47935 | ||
|
|
dce2a9e7e1 | ||
|
|
abb02889f2 | ||
|
|
e2ca53029e | ||
|
|
b5f6206a65 | ||
|
|
3de9c11ea7 | ||
|
|
ae54d878c0 | ||
|
|
89244b74c6 | ||
|
|
ca8ce793d1 | ||
|
|
978dc00305 | ||
|
|
bf26808fb3 | ||
|
|
404867f206 | ||
|
|
f0ee33267c | ||
|
|
f3eaa4c592 | ||
|
|
f41360d864 | ||
|
|
e82ee40e9e | ||
|
|
1ee7c33e93 | ||
|
|
e538ff2770 | ||
|
|
76d4b9288b | ||
|
|
05ba8622f0 | ||
|
|
4795fa01d8 | ||
|
|
942fd6be53 | ||
|
|
56dd430a10 | ||
|
|
e0bae9547a | ||
|
|
bfe6027266 | ||
|
|
4d9499c2d3 | ||
|
|
98e989d52c | ||
|
|
5742f9fe69 | ||
|
|
1802d52362 | ||
|
|
cab2911f23 | ||
|
|
81133d45a1 | ||
|
|
a51acf1751 | ||
|
|
edbb67cb3f | ||
|
|
c5e249c0be | ||
|
|
37a372f6f5 | ||
|
|
f122d0856e | ||
|
|
4a6016f5af | ||
|
|
cc8f5add6e | ||
|
|
ec2423ad7c | ||
|
|
c4bab163cb | ||
|
|
0068b8106b | ||
|
|
2580e7b57e | ||
|
|
3d3498bda1 | ||
|
|
29375059e1 | ||
|
|
85449b2f11 | ||
|
|
b83cb36049 | ||
|
|
73d9eebf01 | ||
|
|
b73241ceb1 | ||
|
|
e350d74c8a | ||
|
|
149e540322 | ||
|
|
314664892c | ||
|
|
a9a386a1e5 | ||
|
|
3eae4ecde7 | ||
|
|
ec98deeb8c | ||
|
|
61fdd8c571 | ||
|
|
4813665d0a | ||
|
|
640dce12a8 | ||
|
|
99b958db43 | ||
|
|
22b0dfbb35 | ||
|
|
4a64ae4abf | ||
|
|
926e91820a | ||
|
|
91ae2ad28b | ||
|
|
db30ea03d8 | ||
|
|
0be8b1b1a1 | ||
|
|
d45302a6ba | ||
|
|
834d38a8fb | ||
|
|
5572884c6b | ||
|
|
3460ec1039 | ||
|
|
53bf23d965 | ||
|
|
573305f3d3 | ||
|
|
7ccce4d110 | ||
|
|
9ed60d96a9 | ||
|
|
b6d2b96259 | ||
|
|
e5fe367b82 | ||
|
|
19e8ce0354 | ||
|
|
f907a5c98b | ||
|
|
da607c611d | ||
|
|
3d54f6c0a4 | ||
|
|
2093586241 | ||
|
|
117afe7620 | ||
|
|
d3a5ff7b6b | ||
|
|
dcb391d341 | ||
|
|
830d000667 | ||
|
|
5a14c3cf98 | ||
|
|
e57b2dffa4 | ||
|
|
ca96e04e5f | ||
|
|
9950f5a5bd | ||
|
|
1d7a1b6034 | ||
|
|
a59b1fcc21 | ||
|
|
c5a9be9115 | ||
|
|
f86afb04a2 | ||
|
|
5d1f5f32d0 | ||
|
|
e42fcb033d | ||
|
|
392f3ee210 | ||
|
|
c50a3503e6 | ||
|
|
aaa3f1b2b9 | ||
|
|
2b10fdc4dc | ||
|
|
2f28a0310b | ||
|
|
253513cedd | ||
|
|
eb30cbab81 | ||
|
|
144663a3cf | ||
|
|
ba92f4687e | ||
|
|
968edb3e44 | ||
|
|
3ca544912f | ||
|
|
7f9598141b | ||
|
|
56c66ee486 | ||
|
|
21ad4bf0fe | ||
|
|
0128036514 | ||
|
|
ec8d41765d | ||
|
|
ffbeda077c | ||
|
|
880849a283 | ||
|
|
b2fb7e3fd2 | ||
|
|
737da1a374 | ||
|
|
f63a468dfc | ||
|
|
efaf60ba5a | ||
|
|
e6b2a01e5d | ||
|
|
52c8f69163 | ||
|
|
b80e848d02 | ||
|
|
f12832c61e | ||
|
|
dcc740fd26 | ||
|
|
8966750fd4 | ||
|
|
3623b0927e | ||
|
|
d37da1f392 | ||
|
|
cefc50b278 | ||
|
|
b4877b1e06 | ||
|
|
eea2e05da6 | ||
|
|
2b1e955f91 | ||
|
|
63cdee84d1 | ||
|
|
6a6a7512c2 | ||
|
|
6b30b20765 | ||
|
|
126228d146 | ||
|
|
74dfe439c2 | ||
|
|
1d4a5b1825 | ||
|
|
987dcc5372 | ||
|
|
9b6c835715 | ||
|
|
902b578465 | ||
|
|
3d14e73fd8 | ||
|
|
9bcc3c1ea3 | ||
|
|
6a66e5fc98 | ||
|
|
c0b0ce7b1a | ||
|
|
dc0c0dc06b | ||
|
|
2158e6fc43 | ||
|
|
ee686f6231 | ||
|
|
481be9b5c9 | ||
|
|
9330c943cd | ||
|
|
915bf1d2e3 | ||
|
|
f455125d4d | ||
|
|
df339ad8b0 | ||
|
|
2c653141a8 | ||
|
|
fc56f42dc3 | ||
|
|
0bd4d15e47 | ||
|
|
e04c97b9fa | ||
|
|
f04d773f4f | ||
|
|
4325b01a58 | ||
|
|
052519a7d7 | ||
|
|
e347736c9e | ||
|
|
56006da34b | ||
|
|
efea642d6c | ||
|
|
81d7359fdd | ||
|
|
9a0902523b | ||
|
|
d2808e38fe | ||
|
|
7a9777ae36 | ||
|
|
62533560ce | ||
|
|
dc7e74ebb1 | ||
|
|
9a27e1b90c | ||
|
|
ff5f14431e | ||
|
|
ab9411be2a | ||
|
|
114e6790f8 | ||
|
|
ec5f881384 | ||
|
|
9ab96172fc | ||
|
|
e06558e208 | ||
|
|
54fd4cc5fb | ||
|
|
3deddabfd8 | ||
|
|
0cbf56855a | ||
|
|
917d334ebd | ||
|
|
bb1fbe4e70 | ||
|
|
cceb3364bb | ||
|
|
d370effca5 | ||
|
|
29ed7872f8 | ||
|
|
5dc3dd1704 | ||
|
|
134d8e7681 | ||
|
|
c9b65f0fdc | ||
|
|
951037c0ae | ||
|
|
7046df6028 | ||
|
|
1db3ae6601 | ||
|
|
612d0d6d25 | ||
|
|
18de67380c | ||
|
|
1a901433e2 | ||
|
|
e030109b5a | ||
|
|
35d49d3b34 | ||
|
|
ca5678da32 | ||
|
|
4d3138cd10 | ||
|
|
942284648e | ||
|
|
4f03b81ec7 | ||
|
|
b4970b3cc3 | ||
|
|
85c58eba90 | ||
|
|
84a43b38cf | ||
|
|
7c80eba77f | ||
|
|
9c12ed3b6e | ||
|
|
7b1c10ea7e | ||
|
|
679af4ddea | ||
|
|
f8ae161c74 | ||
|
|
1d57f0d64f | ||
|
|
1559bd58e7 | ||
|
|
6a664e88c7 | ||
|
|
0f438ef0b3 | ||
|
|
a6c7716742 | ||
|
|
1c3754bcec | ||
|
|
ee645af107 | ||
|
|
3e7695ae91 | ||
|
|
2268d28189 | ||
|
|
eee6e4206a | ||
|
|
1bfebdcdf6 | ||
|
|
588a0db218 | ||
|
|
d1e28ac013 | ||
|
|
523dc8b613 | ||
|
|
923c45d721 | ||
|
|
10427b2178 | ||
|
|
020fb43b77 | ||
|
|
675cd997d8 | ||
|
|
908f2924ce | ||
|
|
f28173bf50 | ||
|
|
7835c2212c | ||
|
|
3b62a0fe0e | ||
|
|
2db785b3ed | ||
|
|
647688bd06 | ||
|
|
0d4498429c | ||
|
|
3ec650b0ef | ||
|
|
18c841050b | ||
|
|
b55499d039 | ||
|
|
58436b5ea5 | ||
|
|
d85a1d478e | ||
|
|
676d774d88 | ||
|
|
e7aabf70dc | ||
|
|
6f929dcd9e | ||
|
|
54ca0b2f09 | ||
|
|
2bd64621fc | ||
|
|
05b419b219 | ||
|
|
b163d79a2e | ||
|
|
f255b1e86d | ||
|
|
9372eedf2e | ||
|
|
14a8a46bec | ||
|
|
7679aa1a21 | ||
|
|
9a8aeef478 | ||
|
|
603c7389b8 | ||
|
|
00eb2b221f | ||
|
|
1b5e1bebc2 | ||
|
|
3a81fdf092 | ||
|
|
6f0a41b8b2 | ||
|
|
25ec20d525 | ||
|
|
8e262f3ec4 | ||
|
|
2cee0f84c0 | ||
|
|
94b2816446 | ||
|
|
8411b50f5d | ||
|
|
8a87bee434 | ||
|
|
1dfa693a5c | ||
|
|
d5b92b61d7 | ||
|
|
a374751eb8 | ||
|
|
0af035c37e | ||
|
|
bc82157216 | ||
|
|
8eb4c3121a | ||
|
|
75aab86a8d | ||
|
|
92535c9df0 | ||
|
|
50058b3c6d | ||
|
|
b0226a1d05 | ||
|
|
67ced4aaca | ||
|
|
04806b614e | ||
|
|
cb100c7781 | ||
|
|
5cad124704 | ||
|
|
fad31ca302 | ||
|
|
6b8bef3cf6 | ||
|
|
940898a3ff | ||
|
|
75fe134072 | ||
|
|
16feb5b655 | ||
|
|
659bd29bc5 | ||
|
|
91c9069c4d | ||
|
|
b992deae92 | ||
|
|
c7eaf96b37 | ||
|
|
4323a89c03 | ||
|
|
b90b0c1191 | ||
|
|
f1aa4c0524 | ||
|
|
102b675f96 | ||
|
|
073da3c49d | ||
|
|
0fe6fe663e | ||
|
|
7d72c8333e | ||
|
|
706b0f72e2 | ||
|
|
1f4beb530c | ||
|
|
89bf56a6ac | ||
|
|
31b375782b | ||
|
|
0252629956 | ||
|
|
4f0e31e96d | ||
|
|
f5689ee3a5 | ||
|
|
a020cf803b | ||
|
|
630ebbe6c2 | ||
|
|
b9f5def5dc | ||
|
|
87c3c8172a | ||
|
|
022820103d | ||
|
|
d5fab7f1b9 | ||
|
|
c3ba5590c9 | ||
|
|
379629d28a | ||
|
|
8b92f9cca6 | ||
|
|
78a4e71245 | ||
|
|
63e6e31271 | ||
|
|
2be5837cb0 | ||
|
|
71d8ff247d | ||
|
|
0fbb8c8826 | ||
|
|
e0aab4a7f6 | ||
|
|
db7ac8bc1d | ||
|
|
c6ce6bd4c2 | ||
|
|
b5fdf0947b | ||
|
|
35a65736fa | ||
|
|
04af4b24fd | ||
|
|
a301c7ed26 | ||
|
|
f7c7837fc8 | ||
|
|
02289479ef | ||
|
|
eac91a74d8 | ||
|
|
f17b746a01 | ||
|
|
d3f67d341f | ||
|
|
0f4f81f1fb | ||
|
|
d0c17adfea | ||
|
|
87c05c386f | ||
|
|
8fc8848ce2 | ||
|
|
1f1abb17e2 | ||
|
|
fc7959d3bc | ||
|
|
4dc6285715 | ||
|
|
9825760817 | ||
|
|
9573f9afe9 | ||
|
|
6599869f28 | ||
|
|
932dbccb67 | ||
|
|
5edc2f6d6c | ||
|
|
4dd731cb53 | ||
|
|
a749e6adcf | ||
|
|
b854d3ba40 | ||
|
|
6a6e43f964 | ||
|
|
ae0fadeb0e | ||
|
|
2717ada14c | ||
|
|
e1c04f043b | ||
|
|
a42514613f | ||
|
|
9acf02ad7f | ||
|
|
5c6df9f31b | ||
|
|
533c6a8e08 | ||
|
|
bfed40eec4 | ||
|
|
575300cd57 | ||
|
|
9cba6ff84b | ||
|
|
570ddefc32 | ||
|
|
5676fa5b5d | ||
|
|
fc427432ed | ||
|
|
d7f390a3b0 | ||
|
|
2671c86ba7 | ||
|
|
f1c2276c8d | ||
|
|
2020bafee1 | ||
|
|
bc2f546023 | ||
|
|
ef6d12844c | ||
|
|
a443fcf33a | ||
|
|
b5e6af9587 | ||
|
|
01dc8f8a4f | ||
|
|
aff49b1c9e | ||
|
|
b1941f1da1 | ||
|
|
19c3745488 | ||
|
|
ea6c6bc20a | ||
|
|
db00aa7653 | ||
|
|
215920772a | ||
|
|
6fe868a4d5 | ||
|
|
02d3b66265 | ||
|
|
fe8495e4a5 | ||
|
|
280fde9b7c | ||
|
|
79fb24a397 | ||
|
|
4465c58f4b | ||
|
|
5981f1edcd | ||
|
|
ad5e0b833c | ||
|
|
e5310cdbc1 | ||
|
|
e34d0063c3 | ||
|
|
3e7d8db7a2 | ||
|
|
655b69cb1f | ||
|
|
fcb1f4ec07 | ||
|
|
3cad8d9492 | ||
|
|
e63e0b3105 | ||
|
|
d86c785410 | ||
|
|
b05c7b3faa | ||
|
|
5c39d3fa7d | ||
|
|
c60d8bc069 | ||
|
|
87d64acc9f | ||
|
|
c8aa9c6cb1 | ||
|
|
ecd59deb27 | ||
|
|
e0a099ec11 | ||
|
|
5af872955b | ||
|
|
e00268895c | ||
|
|
4a05c4a759 | ||
|
|
a205acf829 | ||
|
|
d5ad4e1141 | ||
|
|
2dde2a8ad3 | ||
|
|
6dfee30bf0 | ||
|
|
21e13cb51e | ||
|
|
986447335d | ||
|
|
84c727ae66 | ||
|
|
ee1256cf74 | ||
|
|
dfc16d0879 | ||
|
|
a8fd615adc | ||
|
|
c98dad1cf3 | ||
|
|
0d5e57e4ae | ||
|
|
1c35380c2c | ||
|
|
bb7ddb45ff | ||
|
|
939d2054d8 | ||
|
|
3544dafb64 | ||
|
|
fefce965f9 | ||
|
|
14a1101139 | ||
|
|
5a2093b053 | ||
|
|
2f23cf98ea | ||
|
|
4f8b209956 | ||
|
|
043ded0896 | ||
|
|
e07675b480 | ||
|
|
4c30caad1c | ||
|
|
216f0477b5 | ||
|
|
befed9c20c | ||
|
|
e787e73e2f | ||
|
|
f8c09dc1ff | ||
|
|
42a38dfca3 | ||
|
|
91220a2501 | ||
|
|
700ac8dea7 | ||
|
|
69b1d65c9b | ||
|
|
7acbcf9ddd | ||
|
|
2340bb1ed2 | ||
|
|
d9c5b3bcee | ||
|
|
86d3c5cbb3 | ||
|
|
acf428863c | ||
|
|
3fb1b6a608 | ||
|
|
562e47f31c | ||
|
|
9d36fc6986 | ||
|
|
923873db85 | ||
|
|
373731f5e8 | ||
|
|
e75fd2f783 | ||
|
|
a517cfdf7b | ||
|
|
2729eb998c | ||
|
|
b003b18788 | ||
|
|
6a1907d994 | ||
|
|
e303d74ab6 | ||
|
|
e4ecbcdf4a | ||
|
|
f5c7f22cc8 | ||
|
|
2bc3e83e1c | ||
|
|
d600530c20 | ||
|
|
2d1bb0cf49 | ||
|
|
5f1183cecf | ||
|
|
b0bf4cc1cb | ||
|
|
98108e379d | ||
|
|
83e747bfda | ||
|
|
e5ed5904c6 | ||
|
|
1fa5b6711b | ||
|
|
8e0a69f86a | ||
|
|
e2d6b0116e | ||
|
|
cd37fccdfb | ||
|
|
6969c20afd | ||
|
|
f4e54aafa5 | ||
|
|
d185f601d3 | ||
|
|
aff773f1b9 | ||
|
|
10de16beb0 | ||
|
|
ed5a61153f | ||
|
|
47df562ced | ||
|
|
c7ac237b57 | ||
|
|
be89802bd8 | ||
|
|
247017d9ff | ||
|
|
362d64df04 | ||
|
|
373ef5d15e | ||
|
|
121a81a2c5 | ||
|
|
0617448282 | ||
|
|
fa728d8dff | ||
|
|
26ac016b9f | ||
|
|
cbd6276200 | ||
|
|
52ec80fa18 | ||
|
|
c8d92fad30 | ||
|
|
c3061c61a7 | ||
|
|
e4d4662074 | ||
|
|
9899ea71e8 | ||
|
|
b954a22ce2 | ||
|
|
964d0262ff | ||
|
|
b75d0378cb | ||
|
|
357c002c03 | ||
|
|
f432f1f41c | ||
|
|
6f6f38e7c3 | ||
|
|
49e120a67c | ||
|
|
af324a6165 | ||
|
|
7b0ae27549 | ||
|
|
31e7b0f588 | ||
|
|
03ea29eb36 | ||
|
|
32c12d553c | ||
|
|
cc83043edc | ||
|
|
3d9b98fae4 | ||
|
|
36405d0faa | ||
|
|
5020576e80 | ||
|
|
56eb252098 | ||
|
|
fbb3486c95 | ||
|
|
7b92dc3d9d | ||
|
|
645d4d0c5b | ||
|
|
232c22208c | ||
|
|
0806725ca5 | ||
|
|
d504ee0417 | ||
|
|
ae1650824c | ||
|
|
c38754d432 | ||
|
|
85f34ba538 | ||
|
|
00767a0522 | ||
|
|
4dbc322859 | ||
|
|
edc99bc8a4 | ||
|
|
80701d45bb | ||
|
|
aa67de910a | ||
|
|
24658fcbdd | ||
|
|
705224353b | ||
|
|
079a2d68db | ||
|
|
119dec51f2 | ||
|
|
46dce2d653 | ||
|
|
d48cde6ec8 | ||
|
|
3b0c2cb480 | ||
|
|
d464d3b0c3 | ||
|
|
b80aef0fa6 | ||
|
|
1c2dbd7183 | ||
|
|
e885d34aa6 | ||
|
|
0f07a5cb84 | ||
|
|
7cb4aa8d82 | ||
|
|
aa9c36514f | ||
|
|
2d1db4bf05 | ||
|
|
07fe846c9f | ||
|
|
d023e81a8f | ||
|
|
36a69e8aa5 | ||
|
|
6a5c87afdd | ||
|
|
38eb000d13 | ||
|
|
7ec991326d | ||
|
|
e5b105e513 | ||
|
|
8481adb255 | ||
|
|
b1f0f85789 | ||
|
|
a7ee654646 | ||
|
|
b6131793da | ||
|
|
1fd5f8edf8 | ||
|
|
2a2a8cd619 | ||
|
|
5c5ccddb02 | ||
|
|
c0a899b151 | ||
|
|
768c78d143 | ||
|
|
83dc2468f5 | ||
|
|
842770d7fb | ||
|
|
5da306c0e5 | ||
|
|
d951824ff9 | ||
|
|
953bb06857 | ||
|
|
6ea28f2a47 | ||
|
|
1abfe4e05f | ||
|
|
37e0cee877 | ||
|
|
65e73c4ac6 | ||
|
|
2ac8e11f46 | ||
|
|
ebf1bd4f51 | ||
|
|
8c046073a8 | ||
|
|
63fecac537 | ||
|
|
670ade9a61 | ||
|
|
398569f6f8 | ||
|
|
dde9ace91b | ||
|
|
8af094967f | ||
|
|
f1adbca0f1 | ||
|
|
90a6553c37 | ||
|
|
50dbc2732b | ||
|
|
7714e792a4 | ||
|
|
67f07e21f5 | ||
|
|
b983772ca0 | ||
|
|
17c2d1fc7c | ||
|
|
6c7a93a3ac | ||
|
|
c5629fe75a | ||
|
|
d1c5a5ed68 | ||
|
|
ee3e0c3c49 | ||
|
|
1ca257ad9f | ||
|
|
cb381078ff | ||
|
|
c6b039c6f9 | ||
|
|
d01f688257 | ||
|
|
9b9e5f0290 | ||
|
|
302938e646 | ||
|
|
8d73832bdf | ||
|
|
a3683ca5d6 | ||
|
|
9ef063cbb0 | ||
|
|
ea454c21f7 | ||
|
|
384fbeca80 | ||
|
|
63799b3c18 | ||
|
|
5ddcd8420b | ||
|
|
65843b803b | ||
|
|
55ddf225bb | ||
|
|
2f08e9f048 | ||
|
|
8e92d4352f | ||
|
|
f509c59ac1 | ||
|
|
a541ca16b6 | ||
|
|
125d314465 | ||
|
|
c7a4369db9 | ||
|
|
a00194e665 | ||
|
|
f2de4d5c04 | ||
|
|
d07033a0f0 | ||
|
|
c75cd33f2f | ||
|
|
11ce720f9f | ||
|
|
bb3b90fcd6 | ||
|
|
46bee50e45 | ||
|
|
4cfa2ca40d | ||
|
|
a7686e8749 | ||
|
|
ff35a37769 | ||
|
|
70e0153b93 | ||
|
|
e44852ff79 | ||
|
|
23f42d92c9 | ||
|
|
aceff032f6 | ||
|
|
fc2d0e5470 | ||
|
|
ce386cfb61 | ||
|
|
b900863d60 | ||
|
|
c08600c59b | ||
|
|
4217c2333c | ||
|
|
2881456421 | ||
|
|
1cb03135b7 | ||
|
|
2f2bf20aae | ||
|
|
b3a45693c3 | ||
|
|
27f7abdd77 | ||
|
|
4d75db4811 | ||
|
|
45c2b4bd76 | ||
|
|
4330c1f0d8 | ||
|
|
a329bbc215 | ||
|
|
f808df5a7b | ||
|
|
be90ea583a | ||
|
|
c256fc4438 | ||
|
|
e2bea06313 | ||
|
|
260301bf2e | ||
|
|
90f5b8edaf | ||
|
|
e6917b6be8 | ||
|
|
3a32cbee44 | ||
|
|
a104248792 | ||
|
|
94cc097b64 | ||
|
|
87152f89ba | ||
|
|
44aab7af87 | ||
|
|
0b97290c07 | ||
|
|
5f25553b0d | ||
|
|
50cd67cd4b | ||
|
|
461f715ae4 | ||
|
|
6821527c95 | ||
|
|
4275b3720a | ||
|
|
aa65761d81 | ||
|
|
d7c3c79c00 | ||
|
|
062adbed8a | ||
|
|
9b01a3501b | ||
|
|
9b42f53aa8 | ||
|
|
ac616c07de | ||
|
|
d720c92d99 | ||
|
|
78b717f202 | ||
|
|
371572cf5f | ||
|
|
f114f78743 | ||
|
|
6c2536b89c | ||
|
|
a5b09b30d0 | ||
|
|
390027496c | ||
|
|
b846f195c1 | ||
|
|
87f5ca8e1f | ||
|
|
a35911486f | ||
|
|
90528b2610 | ||
|
|
bd1d7d1509 | ||
|
|
1453e91f41 | ||
|
|
2b393f5b03 | ||
|
|
a5e1ada474 | ||
|
|
de6850b429 | ||
|
|
24d7a86a8d | ||
|
|
feed2b61ee | ||
|
|
03b85b73af | ||
|
|
54b52de6ee | ||
|
|
47ac579f09 | ||
|
|
928d9fc1d4 | ||
|
|
4c7b6414eb | ||
|
|
2e8ffc2ffb | ||
|
|
2493454587 | ||
|
|
4f682d6e42 | ||
|
|
bfa8ef68a6 | ||
|
|
81b8427438 | ||
|
|
6fdc881bd4 | ||
|
|
c20ae8edc5 | ||
|
|
6235bd1fe9 | ||
|
|
71fd10dd37 | ||
|
|
b1696665bd | ||
|
|
d17f102339 | ||
|
|
862477e3a1 | ||
|
|
4095ef2820 | ||
|
|
398bb772d8 | ||
|
|
f0067e8f78 | ||
|
|
407385db7e | ||
|
|
9371fbe71a | ||
|
|
feb3cfa067 | ||
|
|
0510f712e7 | ||
|
|
d339ad2fed | ||
|
|
54b8172a24 | ||
|
|
875f917771 | ||
|
|
6712aa21fa | ||
|
|
bb8e763ede | ||
|
|
727a621376 | ||
|
|
6aca572887 | ||
|
|
2578a94e55 | ||
|
|
21d1d2905d | ||
|
|
55ccb00a47 | ||
|
|
6d3e5a36a1 | ||
|
|
b5549d4c7f | ||
|
|
f7ae31c677 | ||
|
|
77ade6855d | ||
|
|
a8a2992758 | ||
|
|
7803f10f77 | ||
|
|
51473f7bfe | ||
|
|
331e58fcd6 | ||
|
|
7bb5cb444c | ||
|
|
2e30b421b4 | ||
|
|
c8bb475abb | ||
|
|
ce8864c69a | ||
|
|
1d52793faf | ||
|
|
c7d5e1f182 | ||
|
|
0d38794c7f | ||
|
|
e633425f27 | ||
|
|
b35d7eee31 | ||
|
|
a52324a5f9 | ||
|
|
4ce003dc15 | ||
|
|
a24141ec9c | ||
|
|
30b428bf0e | ||
|
|
e4d6b5d488 | ||
|
|
13a74c3a0c | ||
|
|
cec38f2a8c | ||
|
|
c16e954bc1 | ||
|
|
24bdbc4920 | ||
|
|
8be0bb177b | ||
|
|
a463ac178e | ||
|
|
4137426c88 | ||
|
|
599e904020 | ||
|
|
e892cdb1b4 | ||
|
|
d07c081920 | ||
|
|
2cc9bc8969 | ||
|
|
0efe80d60d | ||
|
|
817b48ed1e | ||
|
|
e2e40ba8c4 | ||
|
|
e680faf0d8 | ||
|
|
1fb53067f4 | ||
|
|
0ec7d1539b | ||
|
|
7666e2256b | ||
|
|
133b19d0c5 | ||
|
|
38e11b4f68 | ||
|
|
f8a4ab25fd | ||
|
|
7d84d4a8f0 | ||
|
|
ab0247b4dc | ||
|
|
1cb46ede1a | ||
|
|
9e6bd31d76 | ||
|
|
d7d72b9e3c | ||
|
|
631c85ba4f | ||
|
|
e43341f4c5 | ||
|
|
a01867cc1a | ||
|
|
33f33e055a | ||
|
|
52933932d2 | ||
|
|
ab2d0b3b44 | ||
|
|
009d716a02 | ||
|
|
b4c0b7b98b | ||
|
|
b410207dc1 | ||
|
|
e67659bf8e | ||
|
|
cafde1287e | ||
|
|
d1a82a82b4 | ||
|
|
f57235085a | ||
|
|
911e631b5a | ||
|
|
c3c638e596 | ||
|
|
6ed85a8945 | ||
|
|
496a65ed29 | ||
|
|
34f6cbfc2a | ||
|
|
89c2bd4a0d | ||
|
|
17f3e840ec | ||
|
|
f183c855d1 | ||
|
|
1ce4543a94 | ||
|
|
64985c7faa | ||
|
|
9c0c16bb5a | ||
|
|
e5146155a0 | ||
|
|
59a475163f | ||
|
|
c0ebde7591 | ||
|
|
cbc7b7132f | ||
|
|
887bc1b594 | ||
|
|
2aea247208 | ||
|
|
884bc4ffd8 | ||
|
|
2cef9ef5e2 | ||
|
|
2edb82c420 | ||
|
|
4cc198179c | ||
|
|
b2bd6c4c5a | ||
|
|
75aff60c90 | ||
|
|
09a1b2a1f5 | ||
|
|
922f3f3062 | ||
|
|
17de3ab0a3 | ||
|
|
471431e87c | ||
|
|
8f2a184e04 | ||
|
|
16f74b62b9 | ||
|
|
4564d13496 | ||
|
|
48f12d4ead | ||
|
|
a79586cc54 | ||
|
|
8a3ee795d2 | ||
|
|
7372042441 | ||
|
|
590c464c56 | ||
|
|
68b9d78386 | ||
|
|
4b43ffc96c | ||
|
|
56a8d573b0 | ||
|
|
aede5cdb04 | ||
|
|
fc63422caf | ||
|
|
43a87b0caf | ||
|
|
dea3a8c6a4 | ||
|
|
d015d951bd | ||
|
|
e3bdfd51ff | ||
|
|
9db4acc62e | ||
|
|
e6862e9cec | ||
|
|
b7ff12c98a | ||
|
|
3d0583df0f | ||
|
|
45adb9b7a3 | ||
|
|
492d2dc112 | ||
|
|
b1f08d3218 | ||
|
|
d922b7e504 | ||
|
|
9ba0d8b87a | ||
|
|
02877f1a69 | ||
|
|
9d414d4dd9 | ||
|
|
952c480f4f | ||
|
|
0acf209e2a | ||
|
|
39a3b768bc | ||
|
|
9f12ab0e88 | ||
|
|
34795770c3 | ||
|
|
81d01aa308 | ||
|
|
77dcef0cab | ||
|
|
44c32a8a53 | ||
|
|
2c507667bf | ||
|
|
0705f55ce0 | ||
|
|
6d2f25b9f5 | ||
|
|
74bd6b939c | ||
|
|
b9527cd1bf | ||
|
|
cf90312b8f | ||
|
|
4081f86654 | ||
|
|
3e4cdccf6b | ||
|
|
ce4dcf1e83 | ||
|
|
e50982f5ec | ||
|
|
487fc8ca39 | ||
|
|
9311a9858a | ||
|
|
e6792796cc | ||
|
|
96c1ce9606 | ||
|
|
eebcbf9d34 | ||
|
|
6a89eeedf3 | ||
|
|
e7f015db8c | ||
|
|
04458d49a0 | ||
|
|
8e8d535e23 | ||
|
|
cbb78b6a63 | ||
|
|
9a4132cb09 | ||
|
|
d496d0cc4d | ||
|
|
1490e862cc | ||
|
|
cc0d963f75 | ||
|
|
03011e31fe | ||
|
|
7241598c19 | ||
|
|
137e4139ed | ||
|
|
c5be40decb | ||
|
|
b92bb77b54 | ||
|
|
e6b3eb115a | ||
|
|
27244174df | ||
|
|
009d692c7d | ||
|
|
bdd92dc7d1 | ||
|
|
4cd892c99f | ||
|
|
c44e1c7ca9 | ||
|
|
eea9302d8f | ||
|
|
b983912fce | ||
|
|
42a2c5ca54 | ||
|
|
3ff708b749 | ||
|
|
4bfc71c73f | ||
|
|
c541938a3d | ||
|
|
eedac73229 | ||
|
|
869113704b | ||
|
|
2cc050e21e | ||
|
|
4917d29c12 | ||
|
|
2bb1fb8f44 | ||
|
|
43bfee0d48 | ||
|
|
fac4e27882 | ||
|
|
72377c721c | ||
|
|
f83519b452 | ||
|
|
ba47306a69 | ||
|
|
678700b74d | ||
|
|
167265d533 | ||
|
|
eda9211fa4 | ||
|
|
7d8121b077 | ||
|
|
589618c8a5 | ||
|
|
53bcf373c1 | ||
|
|
31f6069dbe | ||
|
|
2f38215f5c | ||
|
|
686dd59916 | ||
|
|
6f8e388b55 | ||
|
|
436ef5b50a | ||
|
|
d384ce7dbc | ||
|
|
514ce712b0 | ||
|
|
fa298a2c30 | ||
|
|
2b1442f3df | ||
|
|
2e7b38db9f | ||
|
|
68cacf9c63 | ||
|
|
c0883a51a0 | ||
|
|
b838e94980 | ||
|
|
752b527152 | ||
|
|
1ba837a055 | ||
|
|
54b58e988d | ||
|
|
70d44e9565 | ||
|
|
bab811c530 | ||
|
|
57651060ce | ||
|
|
007a42a8ff | ||
|
|
333ab1b2b4 | ||
|
|
d86c4841fa | ||
|
|
74511b1d54 | ||
|
|
fcd6b45192 | ||
|
|
4ab60bbfba | ||
|
|
c0b56f3057 | ||
|
|
3dcc0a4b5f | ||
|
|
91ab2538c3 | ||
|
|
9cf334fca9 | ||
|
|
e69f09f50e | ||
|
|
6272986192 | ||
|
|
52dd09fb76 | ||
|
|
900796ec52 | ||
|
|
dc4aab9925 | ||
|
|
3426ae42b3 | ||
|
|
ac95f6d50f | ||
|
|
04e596f984 | ||
|
|
86dbda0b42 | ||
|
|
4447a20f87 | ||
|
|
30beb59fd8 | ||
|
|
a6596f2231 | ||
|
|
a5f9077e5a | ||
|
|
548b95f7b5 | ||
|
|
d6cdd49c16 | ||
|
|
42a72b62fc | ||
|
|
03011ed307 | ||
|
|
bebbd08920 | ||
|
|
ff051e2106 | ||
|
|
71b9a87fe1 | ||
|
|
4cbbaefd82 | ||
|
|
ccf17a6ecb | ||
|
|
41ce633920 | ||
|
|
2b1e67e085 | ||
|
|
cbce2ec9cf | ||
|
|
ec774d48c5 | ||
|
|
663c28beb6 | ||
|
|
f62ffeb481 | ||
|
|
92783bf6ef | ||
|
|
09def4a0b5 | ||
|
|
81adbe17ca | ||
|
|
2724dbd450 | ||
|
|
562ad02a6d | ||
|
|
e94ca36335 | ||
|
|
ced212f8fa | ||
|
|
35be8741c4 | ||
|
|
b8e9c60040 | ||
|
|
02bc16d392 | ||
|
|
eb0f0710f0 | ||
|
|
a2a9e151f8 | ||
|
|
b9dc2147b4 | ||
|
|
b60fd3aaad | ||
|
|
3be3b8faa7 | ||
|
|
5cf3732339 | ||
|
|
5dd3dd71a0 | ||
|
|
ffd17924fd | ||
|
|
9af8a6c6a3 | ||
|
|
1269ce0538 | ||
|
|
c6531c4882 | ||
|
|
1564b77cf5 | ||
|
|
1492c905bb | ||
|
|
4fca548ed1 | ||
|
|
c47afdff58 | ||
|
|
c76ee1cf83 | ||
|
|
08f7547acf | ||
|
|
d82d9bc153 | ||
|
|
bfef8f0edd | ||
|
|
73698d292a | ||
|
|
6eecbf17cd | ||
|
|
b36134194c | ||
|
|
27fe9cfcba | ||
|
|
66d7adc3a8 | ||
|
|
5c63e1015d | ||
|
|
f3aab5dbe3 | ||
|
|
c08baee085 | ||
|
|
7a7c096fd0 | ||
|
|
f92bdf875b | ||
|
|
182003aa41 | ||
|
|
5de0b0c5ce | ||
|
|
0647645948 | ||
|
|
e378b3152c | ||
|
|
673a76d638 | ||
|
|
67983e57f2 | ||
|
|
5300a63d0f | ||
|
|
2c4fb6e646 | ||
|
|
8363c9dd0f | ||
|
|
3db0e7553e | ||
|
|
80e640f082 | ||
|
|
51aef347ee | ||
|
|
65a06731db | ||
|
|
6a0fec77ea | ||
|
|
5a4f314cf7 | ||
|
|
e57594dc31 | ||
|
|
f78046fc3b | ||
|
|
3a3e1b90e7 | ||
|
|
b579800e50 | ||
|
|
072c67e457 | ||
|
|
81e6173356 | ||
|
|
423b1c69be | ||
|
|
7b59d40f08 | ||
|
|
1988c0993d | ||
|
|
639e34e362 | ||
|
|
7e5063a93d | ||
|
|
9512eec034 | ||
|
|
f26f8d5afa | ||
|
|
9fb2d49b93 | ||
|
|
e0036ebb0c | ||
|
|
93ff2e31e8 | ||
|
|
698b9e2acc | ||
|
|
d76f11c6f1 | ||
|
|
27dbb60965 | ||
|
|
44ea3d9065 | ||
|
|
99b774e741 | ||
|
|
f2b851388b | ||
|
|
ab730a91f0 | ||
|
|
5a5f072177 | ||
|
|
e1a4f99eaa | ||
|
|
c5c5aac7a5 | ||
|
|
aae74c793a | ||
|
|
5169a0e025 | ||
|
|
ab896ecf25 | ||
|
|
f1ba0c859f | ||
|
|
f7219b0cf0 | ||
|
|
8061447f0e | ||
|
|
5f594d8774 | ||
|
|
211596f407 | ||
|
|
9c67a19332 | ||
|
|
caf7618ea6 | ||
|
|
6f81c05dde | ||
|
|
ab6b288141 | ||
|
|
750d82b8e2 | ||
|
|
27c3c5415f | ||
|
|
484175f702 | ||
|
|
2bb982dada | ||
|
|
ade343f6dc | ||
|
|
5c3cac3bc0 | ||
|
|
529b6f04aa | ||
|
|
a8377d8ded | ||
|
|
d4c04a65c7 | ||
|
|
75cbb32b1e | ||
|
|
20a8d651f3 | ||
|
|
3a977fc0ae | ||
|
|
b6f8b486c7 | ||
|
|
62e436e6b7 | ||
|
|
e312634286 | ||
|
|
7fe68d3db7 | ||
|
|
7cf0564587 | ||
|
|
1cb57b1a44 | ||
|
|
8f0f845b14 | ||
|
|
ea9cf5ec8c | ||
|
|
96a71aaed8 | ||
|
|
e9c599b48a | ||
|
|
e6cf83b8c0 | ||
|
|
deee2d5fa8 | ||
|
|
4aecaf7488 | ||
|
|
82f7a01ded | ||
|
|
49aeb87e44 | ||
|
|
104d914b39 | ||
|
|
8e815abeb0 | ||
|
|
8fa2056e14 | ||
|
|
e7f4d23412 | ||
|
|
466facc009 | ||
|
|
33894591a6 | ||
|
|
35c83f6026 | ||
|
|
fc6db829b2 | ||
|
|
69025f1510 | ||
|
|
d61962a18a | ||
|
|
588f3215c6 | ||
|
|
471b8a18ab | ||
|
|
c226e92284 | ||
|
|
80b23854bc | ||
|
|
86abd34eb8 | ||
|
|
7dbb98b2a3 | ||
|
|
25dd6f8fa0 | ||
|
|
37ab32b613 | ||
|
|
fd07de5751 | ||
|
|
27491031ba | ||
|
|
8238c28c31 | ||
|
|
08cd20bad9 | ||
|
|
96a95e9dfd | ||
|
|
f745b08163 | ||
|
|
d0e34c57cc | ||
|
|
2bfe2ddb6d | ||
|
|
b72e75e522 | ||
|
|
b668fc7aad | ||
|
|
48bb639371 | ||
|
|
0720d3988f | ||
|
|
7ba9d1171c | ||
|
|
6b70a0c0d9 | ||
|
|
98674b2a21 | ||
|
|
4aafeace23 | ||
|
|
34102f7889 | ||
|
|
da6fd93f0d | ||
|
|
406efbf3f5 | ||
|
|
6abbea4f3d | ||
|
|
5d5d774e03 | ||
|
|
41cc43208e | ||
|
|
127eb439d7 | ||
|
|
4b9fb43a70 | ||
|
|
5e763baa12 | ||
|
|
18c0697329 | ||
|
|
e3d73d9b24 | ||
|
|
6c84223f43 | ||
|
|
b447d18dca | ||
|
|
63a73b43b4 | ||
|
|
3db80f2c55 | ||
|
|
a6a2f59d1d | ||
|
|
d446be9f5f | ||
|
|
8d17ff8ce7 | ||
|
|
b0b11fd7b1 | ||
|
|
f44204e944 | ||
|
|
473e265727 | ||
|
|
3a6ba39a61 | ||
|
|
0d90a16d9f | ||
|
|
fab038b175 | ||
|
|
e3dece1371 | ||
|
|
d5de48df89 | ||
|
|
8896c82d34 | ||
|
|
1f61340fa3 | ||
|
|
f92bfabf86 | ||
|
|
cd8b43d984 | ||
|
|
556881964f | ||
|
|
ee68a826a5 | ||
|
|
e90f014e4a | ||
|
|
125fe92a19 | ||
|
|
10e4b5b6c6 | ||
|
|
7ccab9cd09 | ||
|
|
2369881808 | ||
|
|
04164eada3 | ||
|
|
e97a6ff911 | ||
|
|
7d109573cb | ||
|
|
74a8bb93d8 | ||
|
|
059338139c | ||
|
|
aa670ce660 | ||
|
|
81fcc0db0c | ||
|
|
c753fdceaf | ||
|
|
a6a99d49cf | ||
|
|
9dfa17faf2 | ||
|
|
3fcc39c26b | ||
|
|
1654e9ecab | ||
|
|
bbee7b7196 | ||
|
|
4f567edc6e | ||
|
|
fc4dff1b17 | ||
|
|
065f8d1f56 | ||
|
|
2f1369c614 | ||
|
|
8f1d2d9f24 | ||
|
|
3efe3f42e8 | ||
|
|
5293ae1221 | ||
|
|
d2f439a241 | ||
|
|
77ac1e6ff6 | ||
|
|
c0ad512398 | ||
|
|
563e8b4ea9 | ||
|
|
be19fe48d7 | ||
|
|
b508fb041f | ||
|
|
1628ef4ba5 | ||
|
|
0fa209d07b | ||
|
|
6e341e26b3 | ||
|
|
a307574fbc | ||
|
|
58e28e5d9d | ||
|
|
4e18bbf1cf | ||
|
|
e6fc58a744 | ||
|
|
aa68e86206 | ||
|
|
7759b9ee6e | ||
|
|
b6519f78c7 | ||
|
|
455fad0fbd | ||
|
|
ed89b39984 | ||
|
|
f9454cc32c | ||
|
|
d85366930c | ||
|
|
f625665d8d | ||
|
|
d047811c1a | ||
|
|
685ed1f807 | ||
|
|
8c1986181d | ||
|
|
a38e4a0b02 | ||
|
|
cd6a2b78a7 | ||
|
|
0009a1d2b1 | ||
|
|
def39d191b | ||
|
|
cdd8f7c53a | ||
|
|
ddf7014b9b | ||
|
|
2692d4aa49 | ||
|
|
25f5a8d798 | ||
|
|
3aaf292ba8 | ||
|
|
6b7d35eade | ||
|
|
6d0f3a07d4 | ||
|
|
b99c4baab2 | ||
|
|
7fda0cdb93 | ||
|
|
0b3722c359 | ||
|
|
31eb49c3ae | ||
|
|
67a9416ae5 | ||
|
|
8a6c86644e | ||
|
|
6c1ee384f1 | ||
|
|
0a4cda0dd4 | ||
|
|
2804784df9 | ||
|
|
876a856759 | ||
|
|
7e7160eefd | ||
|
|
c5c467a9cd | ||
|
|
c7a042ef36 | ||
|
|
e805fdb29c | ||
|
|
0af74b36ad | ||
|
|
d02e45f985 | ||
|
|
e5d6f4ce56 | ||
|
|
485ea6f14f | ||
|
|
28580aee63 | ||
|
|
6a23252edc | ||
|
|
e407df54f0 | ||
|
|
bad533a219 | ||
|
|
7d3932b9cd | ||
|
|
b61ef40406 | ||
|
|
767bf82eab | ||
|
|
0d158e569b | ||
|
|
5cd887dba5 | ||
|
|
b7e26aa5e3 | ||
|
|
aa35be975f | ||
|
|
6ed96b7a20 | ||
|
|
3cc04682c5 | ||
|
|
f15fa9167a | ||
|
|
cd0ee35b3f | ||
|
|
3a44143b81 | ||
|
|
9420eecb87 | ||
|
|
17a34949eb | ||
|
|
775bd65234 | ||
|
|
85f384f271 | ||
|
|
00653e52ee | ||
|
|
ba77a3b0b4 | ||
|
|
19525abfc4 | ||
|
|
f989805050 | ||
|
|
fc1befcf3c | ||
|
|
2a2596fe61 | ||
|
|
3f2e99962c | ||
|
|
216683004e | ||
|
|
87b90372a7 | ||
|
|
5a99e9a37b | ||
|
|
afccd0a3ee | ||
|
|
0669897226 | ||
|
|
ddddad9792 | ||
|
|
4e79adf6b5 | ||
|
|
fc6d80d619 | ||
|
|
92036a78d1 | ||
|
|
3c65265871 | ||
|
|
79f3281548 | ||
|
|
16018e8323 | ||
|
|
15d4f32825 | ||
|
|
04adc94b26 | ||
|
|
2f40f614b5 | ||
|
|
23f3f60dcf | ||
|
|
1ab09e4f1b | ||
|
|
03af37554e | ||
|
|
01cef678a3 | ||
|
|
02c5bade0f | ||
|
|
f706102890 | ||
|
|
7140f50637 | ||
|
|
e0329c0eb5 | ||
|
|
4dfffee9fb | ||
|
|
3e307e7862 | ||
|
|
e91b28eb9b | ||
|
|
5d4425bbbc | ||
|
|
fd1df86c44 | ||
|
|
bef38d9d3f | ||
|
|
7f71fe9dae | ||
|
|
5589445557 | ||
|
|
98f7f6bef8 | ||
|
|
43bf94e1aa | ||
|
|
a7662f4a39 | ||
|
|
8e238058b2 | ||
|
|
26bccef297 | ||
|
|
e8b62e8957 | ||
|
|
32fb5ea5d0 | ||
|
|
e43bd15b96 | ||
|
|
4de0b19cec | ||
|
|
902f19f70b | ||
|
|
bfce0def25 | ||
|
|
5c4b85c029 | ||
|
|
57291d1e2a | ||
|
|
956c59b282 | ||
|
|
0a2068d7fb | ||
|
|
cd6376f093 | ||
|
|
d4fc8880eb | ||
|
|
b8425ccbec | ||
|
|
7ec42465a7 | ||
|
|
89ea3e1acc | ||
|
|
facd491a6d | ||
|
|
4c4488213a | ||
|
|
ac29dc93cd | ||
|
|
27bd2157ed | ||
|
|
b293b6eaa6 | ||
|
|
3d9cda2d98 | ||
|
|
faddaff90d | ||
|
|
569fcc30f3 | ||
|
|
32152d2363 | ||
|
|
69d98e9edd | ||
|
|
66a9c0d71d | ||
|
|
7e3d66673d | ||
|
|
fb9dcfa921 | ||
|
|
d8394bb2e0 | ||
|
|
ee6786216a | ||
|
|
37fcc8daf2 | ||
|
|
9803f84c88 | ||
|
|
c0e9481fa6 | ||
|
|
76f8904718 | ||
|
|
c6b87aaf02 | ||
|
|
077d1ae70b | ||
|
|
61608f13a0 | ||
|
|
4ef3245413 | ||
|
|
2a70d6b723 | ||
|
|
bb103e8723 | ||
|
|
161774d4fb | ||
|
|
edbfbfa66e | ||
|
|
830bc75107 | ||
|
|
8e384ce46c | ||
|
|
cf59057ef3 | ||
|
|
0e286a0ca9 | ||
|
|
bd414a2d1f | ||
|
|
be8bdc0393 | ||
|
|
9fa287e4f7 | ||
|
|
210306bd64 | ||
|
|
eae08ea8f4 | ||
|
|
452cca35e0 | ||
|
|
7170011f4d | ||
|
|
f99690a545 | ||
|
|
bdd6aef746 | ||
|
|
e6f97c78ff | ||
|
|
50d91f3b6a | ||
|
|
7d4cef6008 | ||
|
|
d0827e5d5e | ||
|
|
bb26285a12 | ||
|
|
9e61ec316e | ||
|
|
13e35398aa | ||
|
|
9f4e584122 | ||
|
|
04d698bfbc | ||
|
|
c7cbdd34fb | ||
|
|
d5c6b53571 | ||
|
|
f0ca16d78f | ||
|
|
6251626de4 | ||
|
|
9b0858b1ad | ||
|
|
c73e9057ae | ||
|
|
fd70f9ec1b | ||
|
|
d016eaaa09 | ||
|
|
44fa9147b7 | ||
|
|
0b56272c13 | ||
|
|
677b1ec627 | ||
|
|
3ea1443885 | ||
|
|
6643647687 | ||
|
|
b6272d1803 | ||
|
|
40de2f78c4 | ||
|
|
aa2148a7a9 | ||
|
|
bd555551ce | ||
|
|
e1c5008238 | ||
|
|
0f1ff9b1ad | ||
|
|
52cc58fd9d | ||
|
|
477bea574a | ||
|
|
37566f71a9 | ||
|
|
afdb0c7f9d | ||
|
|
63c1f9a23f | ||
|
|
e948c7c262 | ||
|
|
81a44e4cd0 | ||
|
|
f059866a21 | ||
|
|
234a7c19a4 | ||
|
|
35dd41c3a2 | ||
|
|
afc659442d | ||
|
|
6a6636d451 | ||
|
|
46742a79ca | ||
|
|
d61def86e1 | ||
|
|
30c750a5df | ||
|
|
bae1d65564 | ||
|
|
995a805a31 | ||
|
|
c0cfd62b90 | ||
|
|
e193005c66 | ||
|
|
fff8109567 | ||
|
|
3af757ed77 | ||
|
|
ebbe6177a9 | ||
|
|
97b39ae2e4 | ||
|
|
0f77ad219c | ||
|
|
8b31be43c6 | ||
|
|
21dbcb7c77 | ||
|
|
0d7bb9af46 | ||
|
|
86e9ebdcc9 | ||
|
|
350e0080e6 | ||
|
|
66e2016eeb | ||
|
|
030b3d751e | ||
|
|
79537467da | ||
|
|
a18decf4cc | ||
|
|
20b5c23a19 | ||
|
|
e6e2cf7855 | ||
|
|
c884ecfea1 | ||
|
|
edbe1de026 | ||
|
|
2321b4b272 | ||
|
|
007cf33e88 | ||
|
|
b231b8c927 | ||
|
|
d01e7b0173 | ||
|
|
bb267e30b6 | ||
|
|
eca42bcb44 | ||
|
|
5ffeca35e7 | ||
|
|
87be137b88 | ||
|
|
0a697517ac | ||
|
|
c4820f119d | ||
|
|
57b3be4016 | ||
|
|
b033f2f535 | ||
|
|
f34b04cfc0 | ||
|
|
ec71d538fc | ||
|
|
6919c80f0b | ||
|
|
99599c099f | ||
|
|
d01f2f3c22 | ||
|
|
1a5aa5e0c0 | ||
|
|
9803c421f5 | ||
|
|
792ec63c8a | ||
|
|
c9e0b3b987 | ||
|
|
28766479a7 | ||
|
|
9ac940d31d | ||
|
|
b553ea45ee | ||
|
|
ac4a10456e | ||
|
|
2f3a7e53cb | ||
|
|
42c7bb7529 | ||
|
|
35140f1cc7 | ||
|
|
4f4392b83e | ||
|
|
db6c0ebf76 | ||
|
|
cf7ebfbdc8 | ||
|
|
bc8721fb6c | ||
|
|
01ba771783 | ||
|
|
9ee80e3e54 | ||
|
|
b2c6a6920f | ||
|
|
e321469884 | ||
|
|
b7ebbb4064 | ||
|
|
9a1fe801e5 | ||
|
|
6f71632e3e | ||
|
|
2844674587 | ||
|
|
0daef29053 | ||
|
|
21081836ba | ||
|
|
a2f6e1803b | ||
|
|
39c068400e | ||
|
|
47e7175b80 | ||
|
|
0b785ad967 | ||
|
|
069486d169 | ||
|
|
298ebc58c1 | ||
|
|
3fd41d138c | ||
|
|
35b02997f8 | ||
|
|
adc1ac689e | ||
|
|
528c075ad6 | ||
|
|
e577f2fff3 | ||
|
|
daf96dfae1 | ||
|
|
d4a1d9f82a | ||
|
|
f7f4ea1dcf | ||
|
|
0af3a5b603 | ||
|
|
00cf3e4dab | ||
|
|
cb6be94358 | ||
|
|
54ef1cee1d | ||
|
|
b9999427a8 | ||
|
|
ddeb076890 | ||
|
|
d06d58e461 | ||
|
|
48bb0fadc2 | ||
|
|
cd627ba16e | ||
|
|
d0a80e432d | ||
|
|
9558999698 | ||
|
|
5338808600 | ||
|
|
82da024a4d | ||
|
|
5c866fc737 | ||
|
|
d75013a0e8 | ||
|
|
1591a37ad5 | ||
|
|
3e528f34af | ||
|
|
b6437b5a4c | ||
|
|
db4951bc61 | ||
|
|
d6132aaa88 | ||
|
|
9adc8e9d3f | ||
|
|
be54b4bf26 | ||
|
|
64d90a761b | ||
|
|
4d123d0a93 | ||
|
|
5dd8308686 | ||
|
|
9c2120eb34 | ||
|
|
4f8d888e66 | ||
|
|
ca09a0b516 | ||
|
|
a43164877c | ||
|
|
515641d033 | ||
|
|
54d25c13d7 | ||
|
|
23d53561d1 | ||
|
|
0cce61de3a | ||
|
|
5b96e3fcc7 | ||
|
|
79dae254cf | ||
|
|
5b32cdd960 | ||
|
|
f9ad8d6903 | ||
|
|
1b66600bd0 | ||
|
|
dc53270da9 | ||
|
|
8ea7ba3afa | ||
|
|
ef275ebf62 | ||
|
|
22ab4fa1b0 | ||
|
|
55dfe2c978 | ||
|
|
3c3f7c2a56 | ||
|
|
0c92da7e9c | ||
|
|
8fac41768c | ||
|
|
c418b83678 | ||
|
|
b53f6357fc | ||
|
|
11ca3dedfb | ||
|
|
f77680520f | ||
|
|
2d8c414f8c | ||
|
|
ce8d4cc80b | ||
|
|
37d8d3afe9 | ||
|
|
db0026c507 | ||
|
|
51f6148851 | ||
|
|
c0549a169a | ||
|
|
1e47e2df85 | ||
|
|
5d9ef2bb12 | ||
|
|
d21d7171b0 | ||
|
|
32dcaefafa | ||
|
|
d1a60e3643 | ||
|
|
a0f9197b45 | ||
|
|
340a4595dd | ||
|
|
4c770b87c5 | ||
|
|
47f37e55e9 | ||
|
|
52d66ba6c8 | ||
|
|
437dd5272f | ||
|
|
6bdb8ec4b9 | ||
|
|
9dc3c93a6a | ||
|
|
9e22840483 | ||
|
|
8eb5120fbd | ||
|
|
8c9338a537 | ||
|
|
21b9d5fa1f | ||
|
|
4f360d8f08 | ||
|
|
dfa4b38081 | ||
|
|
e0de6cb5ad | ||
|
|
ff8578082e | ||
|
|
35977cd34c | ||
|
|
abc57b6e43 | ||
|
|
a01b4baca2 | ||
|
|
fc5985f425 | ||
|
|
23eec25274 | ||
|
|
4e7eb5be9d | ||
|
|
b375192352 | ||
|
|
0c5ba4573a | ||
|
|
69a98236bd | ||
|
|
b866dc92d7 | ||
|
|
78f4f59380 | ||
|
|
743b55b9b0 | ||
|
|
0d5d555521 | ||
|
|
80c6cc6321 | ||
|
|
6588ce52fe | ||
|
|
5094e9501c | ||
|
|
e9875edcad | ||
|
|
7e2ea7639e | ||
|
|
5b290013a9 | ||
|
|
2c28ed8c05 | ||
|
|
283c81316c | ||
|
|
beb8a77fc5 | ||
|
|
b9881d1e7b | ||
|
|
87be4623cf | ||
|
|
377530ec21 | ||
|
|
bff1e157d5 | ||
|
|
e84e0ab904 | ||
|
|
c7f56d7483 | ||
|
|
83283bca4c | ||
|
|
f1d8746264 | ||
|
|
baae94b9cf | ||
|
|
3794111460 | ||
|
|
d7ea49b9f5 | ||
|
|
d87a9cb362 | ||
|
|
93b9a2acc0 | ||
|
|
d4a608f64c | ||
|
|
8209bf74f8 | ||
|
|
d88ebd9a4b | ||
|
|
ec8ec58b17 | ||
|
|
a342d58d7e | ||
|
|
d7d167ac63 | ||
|
|
146c8efee3 | ||
|
|
3abc41ccca | ||
|
|
9e3a1bc11a | ||
|
|
cb2da7bf2c | ||
|
|
1aa12c7452 | ||
|
|
fa241efa6d | ||
|
|
ecf3eb4307 | ||
|
|
9ae92459a5 | ||
|
|
5b3f1efd9f | ||
|
|
e0f945959e | ||
|
|
885833892f | ||
|
|
91127d9016 | ||
|
|
1a38f0e0d9 | ||
|
|
fb8beaf19a | ||
|
|
4a8a70dde0 | ||
|
|
8d2a6fc484 | ||
|
|
29ac3980ff | ||
|
|
89bd994c83 | ||
|
|
3e4db7299d | ||
|
|
80dd548b39 | ||
|
|
451f328a4c | ||
|
|
9e4c2afad7 | ||
|
|
2dd4ab65c7 | ||
|
|
b93ae452fe | ||
|
|
c04aea8d9d | ||
|
|
0d7b9065c6 | ||
|
|
452ccff81c | ||
|
|
fb839ca0fb | ||
|
|
b7b7863364 | ||
|
|
3005c4f6db | ||
|
|
963354c5d7 | ||
|
|
17c1bc7383 | ||
|
|
5103f16f78 | ||
|
|
e848b17fab | ||
|
|
3600498c8f | ||
|
|
b2632dec09 | ||
|
|
54930c001d | ||
|
|
41dbb4c148 | ||
|
|
85c9f7c5f3 | ||
|
|
c31606daf9 | ||
|
|
d78abd3561 | ||
|
|
8c71ab5094 | ||
|
|
211dc74816 | ||
|
|
79262173a6 | ||
|
|
7b03b1df0e | ||
|
|
39931f8e00 | ||
|
|
1aa76bd279 | ||
|
|
54c9844d66 | ||
|
|
6705559ce0 | ||
|
|
8e8dfaf227 | ||
|
|
ce7422473a | ||
|
|
fc18741cc7 | ||
|
|
fef09c2de6 | ||
|
|
1e1f9e7166 | ||
|
|
64c68220d2 | ||
|
|
91e5c24a31 | ||
|
|
810ff480b8 | ||
|
|
de65c30770 | ||
|
|
bbf5bcdf99 | ||
|
|
02b53aff0f | ||
|
|
b694cc88e4 | ||
|
|
67c44b7d27 | ||
|
|
263d409326 | ||
|
|
6a79b76531 | ||
|
|
da0fbbadc2 | ||
|
|
1031271224 | ||
|
|
8c70bcee99 | ||
|
|
07c8925805 | ||
|
|
c9e5e38fcf | ||
|
|
29a7d1ce61 | ||
|
|
500b8a2a0f | ||
|
|
ba1270df2d | ||
|
|
ba0feadc34 | ||
|
|
405ee14711 | ||
|
|
1126522a99 | ||
|
|
1601b27ad3 | ||
|
|
f03b6be8f9 | ||
|
|
3ffa17c49a | ||
|
|
98c719c342 | ||
|
|
2a031c1365 | ||
|
|
198567eccb | ||
|
|
f7de6d2b86 | ||
|
|
86eac0842b | ||
|
|
a046a31d2b | ||
|
|
cd084dacf1 | ||
|
|
ac2055e33c | ||
|
|
96f4c9045a | ||
|
|
d95e7065d9 | ||
|
|
5e48c89c5e | ||
|
|
3cfa4a581c | ||
|
|
ce6931a046 | ||
|
|
eb1e6f8e3e | ||
|
|
263fc76b87 | ||
|
|
c1d047d16e | ||
|
|
38f71af363 | ||
|
|
ecdbeea3f5 | ||
|
|
b7b0ee7df9 | ||
|
|
bb05ef907b | ||
|
|
204952439a | ||
|
|
e2e362f2dc | ||
|
|
26a0888bee | ||
|
|
9ce0bd043c | ||
|
|
5e747bc877 | ||
|
|
11af8658cf | ||
|
|
e6e6aaeacb | ||
|
|
e3b78c47e2 | ||
|
|
49193bebd2 | ||
|
|
3598c1435e | ||
|
|
ab59165d2f | ||
|
|
092b59a297 | ||
|
|
7d48f811f1 | ||
|
|
e3a27aeb25 | ||
|
|
dccc50e9d4 | ||
|
|
ad2ab6d214 | ||
|
|
b8368f98ff | ||
|
|
3164354255 | ||
|
|
54724c33ec | ||
|
|
d1911658e1 | ||
|
|
c8b50975bc | ||
|
|
10673417dc | ||
|
|
ad52b2d791 | ||
|
|
09c3c4e70c | ||
|
|
977779cdcf | ||
|
|
71e4689d11 | ||
|
|
f69761563b | ||
|
|
57d48fb6a2 | ||
|
|
7c30ae7002 | ||
|
|
089d934547 | ||
|
|
b0f8b1147c | ||
|
|
25268577a5 | ||
|
|
612fdb98df | ||
|
|
bd55b78775 | ||
|
|
5bbeeb0f1b | ||
|
|
93ee0838eb | ||
|
|
a1109e6fbc | ||
|
|
ebb05475ed | ||
|
|
a11ed51bbb | ||
|
|
e0493259a6 | ||
|
|
b3f0d25ce5 | ||
|
|
d750d53422 | ||
|
|
8d5a4cc9eb | ||
|
|
1476a1a729 | ||
|
|
e3eea745f4 | ||
|
|
60c65415dd | ||
|
|
b92cac7038 | ||
|
|
904f799c1a | ||
|
|
de2a4f8f83 | ||
|
|
135d3733b3 | ||
|
|
3f707b3f32 | ||
|
|
063aacd436 | ||
|
|
196efecaaa | ||
|
|
01e69af2c8 | ||
|
|
25c8d01676 | ||
|
|
7df60af60e | ||
|
|
79ec08141a | ||
|
|
150eef93b2 | ||
|
|
1273b3d3a9 | ||
|
|
b72d7c201a | ||
|
|
4a01bb8fa4 | ||
|
|
d325b23dbb | ||
|
|
976f1486e0 | ||
|
|
cb0ea46d1e | ||
|
|
052ab30409 | ||
|
|
7ba9257a7f | ||
|
|
6a7bd097fe | ||
|
|
0055cbd365 | ||
|
|
4f74b4e657 | ||
|
|
31d763bc1f | ||
|
|
a596388ebf | ||
|
|
8a09256941 | ||
|
|
c03f5a2c7c | ||
|
|
f94d7c3f51 | ||
|
|
061a879cea | ||
|
|
ed84adb679 | ||
|
|
9f015b4c73 | ||
|
|
bc3abb397f | ||
|
|
9e10304ab2 | ||
|
|
ae3639868e | ||
|
|
d082e821a0 | ||
|
|
78bd144c1c | ||
|
|
ebb4f1b78c | ||
|
|
62f21ff3ed | ||
|
|
0d9c41be7d | ||
|
|
c1ceec45da | ||
|
|
b162e565b3 | ||
|
|
6516ecaa51 | ||
|
|
5163d368e3 | ||
|
|
ad041167f7 | ||
|
|
cff3ca23a5 | ||
|
|
41386fa91a | ||
|
|
ea309acdb2 | ||
|
|
0f037b430a | ||
|
|
632b1b694d | ||
|
|
efb68a0a96 | ||
|
|
7027ac9308 | ||
|
|
b9560374cd | ||
|
|
a5926f2689 | ||
|
|
f1304bde34 | ||
|
|
3549fb0ea8 | ||
|
|
a2cac952a4 | ||
|
|
bba401a5dc | ||
|
|
1b7adf57e9 | ||
|
|
cfed11f092 | ||
|
|
f67c59135f | ||
|
|
fdc8c34258 | ||
|
|
18a80b291b | ||
|
|
52d15ddec8 | ||
|
|
2a3660dae3 | ||
|
|
09ca5d125a | ||
|
|
27cb01cd5f | ||
|
|
7fe61558f6 | ||
|
|
33659ed9a5 | ||
|
|
e004ec08e9 | ||
|
|
132590fab8 | ||
|
|
e21d8a7d35 | ||
|
|
d84d6dfdae | ||
|
|
b92384020c | ||
|
|
d89e630bc0 | ||
|
|
59a7c7c5a5 | ||
|
|
25d6ae69d1 | ||
|
|
f8977f4847 | ||
|
|
e79e4b1580 | ||
|
|
40bc130b19 | ||
|
|
0ddb1eb769 | ||
|
|
ab7206d6b7 | ||
|
|
f7be61c819 | ||
|
|
85c35a6b8b | ||
|
|
7269b06fd5 | ||
|
|
8d2fe064c5 | ||
|
|
6498fce04b | ||
|
|
033a7f0224 | ||
|
|
31d8011843 | ||
|
|
d8290c9bac | ||
|
|
bdfdf3cacb | ||
|
|
8db8771be7 | ||
|
|
9fc4ded369 | ||
|
|
881ee6a4df | ||
|
|
aee46bac01 | ||
|
|
714de0a3af | ||
|
|
863a4d5bc4 | ||
|
|
f36f9e07b7 | ||
|
|
7df0794e14 | ||
|
|
000b906259 | ||
|
|
87b442433c | ||
|
|
097f1b5759 | ||
|
|
dcb10a41d4 | ||
|
|
2a7a03e5b3 | ||
|
|
05a33107c9 | ||
|
|
8b0e815d98 | ||
|
|
f19fc230d4 | ||
|
|
9476e58de9 | ||
|
|
9ddd545473 | ||
|
|
0730ec4087 | ||
|
|
8826186c30 | ||
|
|
565974f8f7 | ||
|
|
399887cc0e | ||
|
|
fd5ea4b79e | ||
|
|
830efc90da | ||
|
|
8e0aeb4ad5 | ||
|
|
c80f0232f1 | ||
|
|
1240fef0ca | ||
|
|
85f375433d | ||
|
|
af0741da07 | ||
|
|
00a864e693 | ||
|
|
d55c5b9e28 | ||
|
|
bc67c34bea | ||
|
|
d1a2228f1c | ||
|
|
7b310b1abb | ||
|
|
2886eb76b6 | ||
|
|
1858d2066b | ||
|
|
3e740278bd | ||
|
|
9611f29966 | ||
|
|
c5ce33047e | ||
|
|
da8dba53a7 | ||
|
|
bf5595f9a0 | ||
|
|
1ed67798ac | ||
|
|
36661f53e6 | ||
|
|
801fc536f2 | ||
|
|
99e009665c | ||
|
|
72ec3e8da0 | ||
|
|
2bce24068d | ||
|
|
9554ad514e | ||
|
|
df3621e050 | ||
|
|
5e6091a30a | ||
|
|
80447f1168 | ||
|
|
bc1a578914 | ||
|
|
cc9a84b83a | ||
|
|
c30063eefb | ||
|
|
ae2f4866d0 | ||
|
|
676bd764fa | ||
|
|
1bbf4c9768 | ||
|
|
7e36bf448d | ||
|
|
d78008b546 | ||
|
|
1d6df04ecb | ||
|
|
084dce53ac | ||
|
|
5cdecd74c7 | ||
|
|
85e01bfe01 | ||
|
|
73ddf401ee | ||
|
|
4c8ef90157 | ||
|
|
69e332f432 | ||
|
|
9bc63bda7d | ||
|
|
66d51804c9 | ||
|
|
444032664b | ||
|
|
272d387c0c | ||
|
|
32760ba49d | ||
|
|
08dbf08d39 | ||
|
|
d2aff9a46a | ||
|
|
56b735f67b | ||
|
|
904bf1a50b | ||
|
|
8829174574 | ||
|
|
6558990e3a | ||
|
|
a6ec6def8d | ||
|
|
c40e815763 | ||
|
|
c4a33892d3 | ||
|
|
1aec1a2dda | ||
|
|
81287ba022 | ||
|
|
9baf2b38d0 | ||
|
|
50de06056b | ||
|
|
74b31566cf | ||
|
|
66c9c86219 | ||
|
|
ce55807542 | ||
|
|
510d5a5d74 | ||
|
|
cd0ddcfa01 | ||
|
|
3d79f59671 | ||
|
|
b40922f4d4 | ||
|
|
12639c577f | ||
|
|
95a594d75a | ||
|
|
f2c263c54f | ||
|
|
21a1b8e5a3 | ||
|
|
03c6a395aa | ||
|
|
1661421a65 | ||
|
|
e325c8499a | ||
|
|
97a373f5e7 | ||
|
|
b765229a6d | ||
|
|
e0a2d23baf | ||
|
|
fa60502a70 | ||
|
|
97fb62f51e | ||
|
|
a60edbe88c | ||
|
|
bba707de36 | ||
|
|
78add502d7 | ||
|
|
36b4c57ff1 | ||
|
|
3e32b14ad4 | ||
|
|
202a29a475 | ||
|
|
352d8943e4 | ||
|
|
ccc20f7c70 | ||
|
|
5fbf27bb07 | ||
|
|
d0dd90958a | ||
|
|
ba8b6f5d78 | ||
|
|
872cd0d3bd | ||
|
|
5acc948562 | ||
|
|
2935ee440c | ||
|
|
371372d65d | ||
|
|
5fbf8531e6 | ||
|
|
7af7584d25 | ||
|
|
5605af973b | ||
|
|
78defd238c | ||
|
|
08c6d07aad | ||
|
|
9a1d5d2489 | ||
|
|
9820b8e134 | ||
|
|
7c7014262b | ||
|
|
57f6ec672a | ||
|
|
9d5c0c80a4 | ||
|
|
e527c9b330 | ||
|
|
e8c9bb2c66 | ||
|
|
0bfbefc38a | ||
|
|
51abaf788c | ||
|
|
be7ce72ebe | ||
|
|
99eeb08419 | ||
|
|
a8e05fdf1b | ||
|
|
6fc2107529 | ||
|
|
fa0a389dc4 | ||
|
|
6f6fda1481 | ||
|
|
5f84e8f4ff | ||
|
|
2cb754b5af | ||
|
|
8023494a94 | ||
|
|
755eec745f | ||
|
|
669552e255 | ||
|
|
17d2675dd2 | ||
|
|
b95e78f7e6 | ||
|
|
568c9b353e | ||
|
|
dabf5b057c | ||
|
|
7bbf644dd5 | ||
|
|
3428baa3b5 | ||
|
|
78672b9227 | ||
|
|
8453ffb7ed | ||
|
|
645c194a00 | ||
|
|
d4cbbc864a | ||
|
|
b1185e121f | ||
|
|
febaddfd1d | ||
|
|
9813161411 | ||
|
|
5e81383413 | ||
|
|
02a81ddb62 | ||
|
|
27a51f5bcc | ||
|
|
91480f3791 | ||
|
|
7de3dd01de | ||
|
|
35c75f06a0 | ||
|
|
545d320648 | ||
|
|
5c4bc3c848 | ||
|
|
3f38ff6c09 | ||
|
|
8dd07c0ddd | ||
|
|
76f7ad45e6 | ||
|
|
872590d8b5 | ||
|
|
7921e60f30 | ||
|
|
0db84e4f63 | ||
|
|
0a739cf9ac | ||
|
|
3e23241f58 | ||
|
|
6407caa761 | ||
|
|
ef8eef7519 | ||
|
|
71cefc95ab | ||
|
|
957361d755 | ||
|
|
cd369b667f | ||
|
|
ef430ae7ab | ||
|
|
a447aecd95 | ||
|
|
aea2b54c99 | ||
|
|
cf3021ecca | ||
|
|
c084a5ba73 | ||
|
|
5ed5912ef5 | ||
|
|
09cb8c67cb | ||
|
|
a03a1e87e9 | ||
|
|
aad91d4b21 | ||
|
|
f0da8a68c2 | ||
|
|
12fb42de5a | ||
|
|
4e2477a1a5 | ||
|
|
f7617997ce | ||
|
|
204ef41b09 | ||
|
|
dedb156d4a | ||
|
|
30d7397f97 | ||
|
|
0f3414ec39 | ||
|
|
2032080d86 | ||
|
|
8ccde45c5f | ||
|
|
eafa365453 | ||
|
|
ad7beb78d0 | ||
|
|
835e85b5ce | ||
|
|
c4eeb803e1 | ||
|
|
3e7e9ee289 | ||
|
|
87855d42a0 | ||
|
|
620c0ef297 | ||
|
|
cbcd08aa17 | ||
|
|
c20f5dc2ea | ||
|
|
a41a1fe60d | ||
|
|
da0240aacd | ||
|
|
9a7349ce64 | ||
|
|
4d702eb345 | ||
|
|
9df99681fb | ||
|
|
bfe5b86004 | ||
|
|
3db84c8893 | ||
|
|
70b0023b82 | ||
|
|
43e5de7f83 | ||
|
|
fa1db64ff0 | ||
|
|
ef1cbcd761 | ||
|
|
1129f756c8 | ||
|
|
967856f36e | ||
|
|
a76a948a02 | ||
|
|
d43c5895bc | ||
|
|
3c025b3950 | ||
|
|
34304e6a0c | ||
|
|
4617bef895 | ||
|
|
c850c01007 | ||
|
|
469cbc8813 | ||
|
|
6e9f1c52b1 | ||
|
|
812f71e21b | ||
|
|
94b100ce43 | ||
|
|
40557a4f79 | ||
|
|
8e4debe99d | ||
|
|
dc2e140360 | ||
|
|
5bbd5be0ca | ||
|
|
0d06c7e5f2 | ||
|
|
636a78fed1 | ||
|
|
e194cf3291 | ||
|
|
ed73af6fa1 | ||
|
|
267870537d | ||
|
|
ccca60a5a1 | ||
|
|
ec26b78d3c | ||
|
|
18718afb36 | ||
|
|
0b4fcf1224 | ||
|
|
dcb252eff4 | ||
|
|
78103f1df3 | ||
|
|
536f65b8ad | ||
|
|
887ad1ec8b | ||
|
|
aab2dbc505 | ||
|
|
5a97cc69ed | ||
|
|
6418caf23a | ||
|
|
9a3e1790a1 | ||
|
|
3969d704a0 | ||
|
|
0f907301b7 | ||
|
|
590f9e599c | ||
|
|
63e47405b2 | ||
|
|
c127d84777 | ||
|
|
63cc14062a | ||
|
|
7ffdabb28f | ||
|
|
9b014d05e4 | ||
|
|
097c8e05e6 | ||
|
|
21088a40f5 | ||
|
|
10f932b952 | ||
|
|
fd5412ec47 | ||
|
|
baa255e899 | ||
|
|
3c6da63216 | ||
|
|
aed4271c8d | ||
|
|
be8ac7fb75 | ||
|
|
7f3015b32b | ||
|
|
13b032f829 | ||
|
|
ae7f3eed78 | ||
|
|
a481672c5c | ||
|
|
0820b24f0b | ||
|
|
36292060d6 | ||
|
|
cdffdeddc9 | ||
|
|
465dc962b5 | ||
|
|
3f42cb7c23 | ||
|
|
3ad20773a2 | ||
|
|
e57aebb316 | ||
|
|
269da8fe7a | ||
|
|
e4ea5cf598 | ||
|
|
be123588ce | ||
|
|
99713e1180 | ||
|
|
5dbfe3c26c | ||
|
|
1c46d68aba | ||
|
|
4ce2fa520a | ||
|
|
a357cda957 | ||
|
|
54e17c7cca | ||
|
|
86e2627175 | ||
|
|
e5ae41e21f | ||
|
|
6e448b0714 | ||
|
|
ee9b7f322f | ||
|
|
57ac15aa20 | ||
|
|
7dbeee94e3 | ||
|
|
1d55ecd29c | ||
|
|
b5ba2bd268 | ||
|
|
19e9104289 | ||
|
|
165e3e8f18 | ||
|
|
32b09681b2 | ||
|
|
8644c571db | ||
|
|
43b33440b5 | ||
|
|
72ba273cc9 | ||
|
|
4cf7a1fca5 | ||
|
|
80be060735 | ||
|
|
8e6c254c03 | ||
|
|
3624b2a7f1 | ||
|
|
e0f9c628c5 | ||
|
|
cc703ee663 | ||
|
|
b2801a2e98 | ||
|
|
ceb415df8a | ||
|
|
63770d93a1 | ||
|
|
9bdff5bd97 | ||
|
|
d5d04a66f3 | ||
|
|
29a40c97f3 | ||
|
|
98f614a58e | ||
|
|
47d29a1ee0 | ||
|
|
fb53cc4fa8 | ||
|
|
f393dc6520 | ||
|
|
ea507e20d4 | ||
|
|
314193029a | ||
|
|
9c82073091 | ||
|
|
9924e65ca1 | ||
|
|
adda10f4a4 | ||
|
|
514d7e1922 | ||
|
|
bf703ef617 | ||
|
|
c280415e0b | ||
|
|
9d2cef23f2 | ||
|
|
ad5ec45dd6 | ||
|
|
8bfa7ae745 | ||
|
|
6c8d630bef | ||
|
|
f147ad619a | ||
|
|
8d3276cab0 | ||
|
|
d952b4200c | ||
|
|
e07674bff1 | ||
|
|
fb0972afad | ||
|
|
9961f9a53c | ||
|
|
1161c71ac1 | ||
|
|
c018b1a88d | ||
|
|
29561acb43 | ||
|
|
2da9908e29 | ||
|
|
a13a6b14ec | ||
|
|
a3e1383cac | ||
|
|
f160b4f33c | ||
|
|
1f58d6f5d9 | ||
|
|
a80d8d96fa | ||
|
|
302c863cda | ||
|
|
4fcbf553aa | ||
|
|
a0318db2f9 | ||
|
|
c6058e5ea8 | ||
|
|
4f2f3c2857 | ||
|
|
925ccc2608 | ||
|
|
11f9d738e8 | ||
|
|
63baf76ab2 | ||
|
|
9c3aa6936a | ||
|
|
32c5fa514c | ||
|
|
eaa7d71fc7 | ||
|
|
e1332c5239 | ||
|
|
afc6cbc479 | ||
|
|
1f059502dc | ||
|
|
01a516b584 | ||
|
|
48c98c92c8 | ||
|
|
6fe43eb8d4 | ||
|
|
2657f88d9a | ||
|
|
ddb7f55035 | ||
|
|
fbf274b751 | ||
|
|
422043f422 | ||
|
|
617bbe3fee | ||
|
|
9085dfa426 | ||
|
|
6696610aea | ||
|
|
e323604d78 | ||
|
|
4ee6bc4fca | ||
|
|
ab13a29cb5 | ||
|
|
ff690fd976 | ||
|
|
bcfa78b8b5 | ||
|
|
6227b59b1a | ||
|
|
e0a6e6dd1a | ||
|
|
bf5fcfb49c | ||
|
|
ff48aeddef | ||
|
|
d72fdc9900 | ||
|
|
5543a0b6dc | ||
|
|
2f820e01d8 | ||
|
|
688ec6ecbd | ||
|
|
87854c95a9 | ||
|
|
80055bde86 | ||
|
|
e33a104448 | ||
|
|
dce17c86ac | ||
|
|
b1bdbd7f94 | ||
|
|
50ba08e2c6 | ||
|
|
5e9a45f74a | ||
|
|
1331134316 | ||
|
|
4e8a1bf9c9 | ||
|
|
c82807a713 | ||
|
|
342baf1dda | ||
|
|
fdc6b64f15 | ||
|
|
02fb088b80 | ||
|
|
5660570d92 | ||
|
|
93f8f92523 | ||
|
|
a4c3ab48a5 | ||
|
|
7fd22bea1e | ||
|
|
04890904f9 | ||
|
|
a0a95d797e | ||
|
|
956f011dd3 | ||
|
|
16e162b669 | ||
|
|
61641d9c63 | ||
|
|
44f1ef2493 | ||
|
|
be82716b66 | ||
|
|
57ad8d50b7 | ||
|
|
f6c94c29d5 | ||
|
|
4744996f9a | ||
|
|
db6b71ad03 | ||
|
|
f4486f3eec | ||
|
|
4f042d12bd | ||
|
|
7869cfccb9 | ||
|
|
eb264a112b | ||
|
|
839a9bb054 | ||
|
|
9d5e827a1e | ||
|
|
b70db61854 | ||
|
|
16bddd593a | ||
|
|
e880a2fa48 | ||
|
|
46fc36c3a6 | ||
|
|
a1bb3741d5 | ||
|
|
99f2400e3b | ||
|
|
4a4392192b | ||
|
|
e8dd480f10 | ||
|
|
9100786beb | ||
|
|
b0084b1adc | ||
|
|
5ed5aa5228 | ||
|
|
33ec0632ff | ||
|
|
f276b37bbb | ||
|
|
cca2a53d6f | ||
|
|
5d5c4535cb | ||
|
|
2eee1e9bc2 | ||
|
|
98dbbae2ef | ||
|
|
c117f9e73f | ||
|
|
f979d0d6b9 | ||
|
|
a913aff1d0 | ||
|
|
54e95fa367 | ||
|
|
f1130ce5e9 | ||
|
|
f5b2e5f836 | ||
|
|
1769bb2f26 | ||
|
|
83a10ce880 | ||
|
|
7ec3f1b2d8 | ||
|
|
3fe87cba85 | ||
|
|
ca0b6dfa38 | ||
|
|
1482bd8fb4 | ||
|
|
0970d6cc38 | ||
|
|
98eeec4cbb | ||
|
|
68fb62347f | ||
|
|
a196245a87 | ||
|
|
605a38759f | ||
|
|
fd4b123e88 | ||
|
|
d122aa6d88 | ||
|
|
2c73ced0db | ||
|
|
fd7b0a2ba4 | ||
|
|
27f9b7a144 | ||
|
|
f68e279150 | ||
|
|
70398ed01a | ||
|
|
d2231bb54c | ||
|
|
65e628d1f4 | ||
|
|
c5dbc24ca4 | ||
|
|
bf58679390 | ||
|
|
cdc87623dc | ||
|
|
b33f255c40 | ||
|
|
26c0113ea0 | ||
|
|
55019bfbc5 | ||
|
|
4d6de6c7b9 | ||
|
|
7d84cc96e8 | ||
|
|
2eabeba6b7 | ||
|
|
045c21de4f | ||
|
|
4ef9494637 | ||
|
|
43ffacd05b | ||
|
|
501f70e248 | ||
|
|
09dba7d63e | ||
|
|
3f4c040f3f | ||
|
|
830494a8aa | ||
|
|
25713ab209 | ||
|
|
914ffa496f | ||
|
|
a742ee543e | ||
|
|
e867283406 | ||
|
|
a03f380fa8 | ||
|
|
8eb15815f1 | ||
|
|
11ca10ab2f | ||
|
|
23a857d107 | ||
|
|
495d939ca5 | ||
|
|
7d89e765ab | ||
|
|
31fd45ba02 | ||
|
|
abd8c2a7ca | ||
|
|
e05b1385fb | ||
|
|
8b6766ecbe | ||
|
|
269281ab76 | ||
|
|
4b08d3aacf | ||
|
|
33d32585b1 | ||
|
|
6fb7229bea | ||
|
|
7407f9caf3 | ||
|
|
d76772adb9 | ||
|
|
8ca14e2109 | ||
|
|
7cb5a15c9b | ||
|
|
e573855a4f | ||
|
|
94bccbb148 | ||
|
|
24f614f6db | ||
|
|
cb505b22ec | ||
|
|
6e3dba2cc5 | ||
|
|
bbdfe25769 | ||
|
|
c1eb4d894a | ||
|
|
5f653898f3 | ||
|
|
d189b83ac1 | ||
|
|
d34c3bb751 | ||
|
|
3b7465f817 | ||
|
|
d8136c9c3c | ||
|
|
1652dd5068 | ||
|
|
02687cbdf3 | ||
|
|
07c3d497a7 | ||
|
|
816c0ed5e7 | ||
|
|
a641854cad | ||
|
|
bb0bc0a240 | ||
|
|
7b60756f2c | ||
|
|
163fcec59f | ||
|
|
79ea34e70e | ||
|
|
e10096ee2e | ||
|
|
a9e6d49dc6 | ||
|
|
3e856928a2 | ||
|
|
8bbaf9550a | ||
|
|
e7d8fadb08 | ||
|
|
3bd5fc6d6f | ||
|
|
cd2020429a | ||
|
|
ff9872104e | ||
|
|
a3f807106a | ||
|
|
100cd181bc | ||
|
|
03c2468c2f | ||
|
|
fa17989763 | ||
|
|
75109bbd65 | ||
|
|
6ce8fa49ea | ||
|
|
0a187dbef5 | ||
|
|
f6c4fbeb37 | ||
|
|
ad71775ae8 | ||
|
|
0dfb5560cd | ||
|
|
1c88a541cb | ||
|
|
a7584d16e4 | ||
|
|
480a4ae8c5 | ||
|
|
cc1eb5643e | ||
|
|
a2333d95d5 | ||
|
|
89c99167b2 | ||
|
|
d0ea4c7b68 | ||
|
|
2a1dc0085b | ||
|
|
46af92c57e | ||
|
|
52fbb9788a | ||
|
|
00ebb5019f | ||
|
|
dc5546633f | ||
|
|
eb463000a9 | ||
|
|
49dc57e336 | ||
|
|
de46c06d2e | ||
|
|
b36448a537 | ||
|
|
48bfbb7ddf | ||
|
|
1e9f376d3d | ||
|
|
a85f242030 | ||
|
|
cdc843f06b | ||
|
|
0d6856dbe7 | ||
|
|
494e5fd40c | ||
|
|
2401e68d7e | ||
|
|
31805e2bbe | ||
|
|
6700257558 | ||
|
|
41b0a7b97c | ||
|
|
62240b6bc1 | ||
|
|
ce05a8d7b6 | ||
|
|
62d23e9154 | ||
|
|
9fdf4bc277 | ||
|
|
8a8f84d245 | ||
|
|
59d0e73c35 | ||
|
|
1badb2bbcc | ||
|
|
89b68bdd45 | ||
|
|
597387ad40 | ||
|
|
cfa0968191 | ||
|
|
9dfb7de371 | ||
|
|
1b734501bd | ||
|
|
861a20f464 | ||
|
|
8bab21d795 | ||
|
|
0da329462e | ||
|
|
3684e70dc4 | ||
|
|
83578cff65 | ||
|
|
3f2f648035 | ||
|
|
d0f887a1ed | ||
|
|
35a86d04c0 | ||
|
|
37cbfc032a | ||
|
|
5898d56205 | ||
|
|
cf7901fe6a | ||
|
|
e5af34a078 | ||
|
|
51550e5b2e | ||
|
|
eb4691cb2f | ||
|
|
912481019f | ||
|
|
184f1ae135 | ||
|
|
efc05ea1de | ||
|
|
521c5f0e10 | ||
|
|
32ae6896fa | ||
|
|
4b58c01603 | ||
|
|
ff690840d4 | ||
|
|
0c5e50a888 | ||
|
|
7ded30ba5b | ||
|
|
683e58878a | ||
|
|
649d0e1681 | ||
|
|
d7956b3fb8 | ||
|
|
2a95bc1395 | ||
|
|
e554e49c16 | ||
|
|
9abb37b45e | ||
|
|
22f8536577 | ||
|
|
8952eb1ce0 | ||
|
|
ee7bfe2ebe | ||
|
|
b270b34c98 | ||
|
|
b01e967a9f | ||
|
|
baacba96ca | ||
|
|
8bc502a1ea | ||
|
|
e5aaf23bb2 | ||
|
|
a90a014033 | ||
|
|
88072a1e9b | ||
|
|
f0cdf30134 | ||
|
|
22bb5104c8 | ||
|
|
1560abe553 | ||
|
|
65ad26feba | ||
|
|
b60d5ecc3e | ||
|
|
8a6119551b | ||
|
|
4b8d72dec2 | ||
|
|
5435b259cc | ||
|
|
dbdaf934e1 | ||
|
|
d6ff275c58 | ||
|
|
b32407456a | ||
|
|
2a9da4b8e5 | ||
|
|
9a5e49cccb | ||
|
|
338fc122fa | ||
|
|
34d18a19a3 | ||
|
|
de01f81489 | ||
|
|
660b47373d | ||
|
|
11a28428de | ||
|
|
ea29a9b846 | ||
|
|
7b91dfeb01 | ||
|
|
006c45e21d | ||
|
|
e55d1ea3d6 | ||
|
|
d304a23787 | ||
|
|
5fdfc2e223 | ||
|
|
8bed017557 | ||
|
|
0e41726ece | ||
|
|
eda3f8b3b3 | ||
|
|
b32e223db5 | ||
|
|
bda8fdc5f4 | ||
|
|
aa58320a1b | ||
|
|
8719c1b8c5 | ||
|
|
642687d08d | ||
|
|
49c01c0b57 | ||
|
|
55af04d801 | ||
|
|
96f7af1d70 | ||
|
|
f8571f4db1 | ||
|
|
7d2632784f | ||
|
|
e44655f722 | ||
|
|
1bfe4ee665 | ||
|
|
2dc0329c5f | ||
|
|
6277f8497c | ||
|
|
7ad05ce210 | ||
|
|
066d91e113 | ||
|
|
bb84bb8ac3 | ||
|
|
9e047cdbbb | ||
|
|
213b366959 | ||
|
|
4c5a6e4d87 | ||
|
|
c3a52f7dd0 | ||
|
|
dfba49b062 | ||
|
|
67426534ef | ||
|
|
7d656ee2e3 | ||
|
|
83283dfe37 | ||
|
|
f456f964ec | ||
|
|
1f989d0b98 | ||
|
|
d3fc1da8c2 | ||
|
|
4fafc76052 | ||
|
|
8080beea85 | ||
|
|
1d3c7693b7 | ||
|
|
6cc914b090 | ||
|
|
5378bb326b | ||
|
|
df0c61cc62 | ||
|
|
b9a1d13c29 | ||
|
|
d9f2878db4 | ||
|
|
caeddb79a3 | ||
|
|
4210f56dbc | ||
|
|
6cb636f8a0 | ||
|
|
8549b47e04 | ||
|
|
337eef2ee5 | ||
|
|
516baa4531 | ||
|
|
a1ab3cad3e | ||
|
|
3c3cda7326 | ||
|
|
c3c2cfebaa | ||
|
|
c36e7d322e | ||
|
|
38c069308e | ||
|
|
8283e16ef7 | ||
|
|
57f84fb051 | ||
|
|
6cee65db5a | ||
|
|
f644cefa86 | ||
|
|
190b83e05e | ||
|
|
d2b53dd43b | ||
|
|
4b9b8024ba | ||
|
|
8c266f2df5 | ||
|
|
4c1452574a | ||
|
|
ea74be2f2e | ||
|
|
d26a333dfb | ||
|
|
9d983f27d6 | ||
|
|
5c2da610a2 | ||
|
|
33f2d33a46 | ||
|
|
c9a1eb4789 | ||
|
|
52b4ab2aa5 | ||
|
|
9ffa8a4083 | ||
|
|
90f6aa8cd1 | ||
|
|
23bba7633b | ||
|
|
d60f7b85e5 | ||
|
|
47f3dd43a5 | ||
|
|
25ecf56285 | ||
|
|
25fd495b2e | ||
|
|
75d2affcbf | ||
|
|
f92851e347 | ||
|
|
2ce0c3befe | ||
|
|
802a110e42 | ||
|
|
559a57330e | ||
|
|
fe4750ebe2 | ||
|
|
5f3a6a9d74 | ||
|
|
794b457252 | ||
|
|
790a2c1099 | ||
|
|
31d613c01d | ||
|
|
b057cffd85 | ||
|
|
d305448fa8 | ||
|
|
3df8b2bef0 | ||
|
|
2e6d50addc | ||
|
|
5d30bfc8ba | ||
|
|
4fc5dcc764 | ||
|
|
33aa4f7438 | ||
|
|
f8e97b75fb | ||
|
|
5c1312f38e | ||
|
|
d6dac160df | ||
|
|
47aa53bd36 | ||
|
|
7d07b58114 | ||
|
|
4c6e0e9499 | ||
|
|
dd815ae7b5 | ||
|
|
a5fcaae5ee | ||
|
|
b26df29865 | ||
|
|
23e318f85a | ||
|
|
11f54b1426 | ||
|
|
0650c3c9f6 | ||
|
|
555b6976a3 | ||
|
|
df000245d1 | ||
|
|
668007592a | ||
|
|
a4f070b828 | ||
|
|
b1a3ba9932 | ||
|
|
2315dc39b6 | ||
|
|
65c2c62982 | ||
|
|
f8e370f8ca | ||
|
|
ed546912e5 | ||
|
|
ee2d8d2469 | ||
|
|
8cfa2be433 | ||
|
|
db39e58a13 | ||
|
|
306aa5bffe | ||
|
|
8980675a9f | ||
|
|
45462662e9 | ||
|
|
459223cf01 | ||
|
|
8faa0dbcd7 | ||
|
|
29e255422e | ||
|
|
af552596cf | ||
|
|
a4cbe79567 | ||
|
|
f3ed11d177 | ||
|
|
fde5b16332 | ||
|
|
7811e58726 | ||
|
|
a24c0b92e4 | ||
|
|
88d873c67f | ||
|
|
94c7278194 | ||
|
|
16b6e5d50b | ||
|
|
6b30d9b0f2 | ||
|
|
a354f33ac2 | ||
|
|
5966dd78e6 | ||
|
|
b3f1ae1ba6 | ||
|
|
5d4025cb5a | ||
|
|
0f9e07de2d | ||
|
|
3487f17285 | ||
|
|
9f7bd5007b | ||
|
|
5f6bd323f5 | ||
|
|
a773cf1d87 | ||
|
|
8683d2f857 | ||
|
|
c72e1b5c2a | ||
|
|
721834a267 | ||
|
|
4efb56af03 | ||
|
|
c8b81d8339 | ||
|
|
a991ebf5d0 | ||
|
|
b506429803 | ||
|
|
115a349131 | ||
|
|
24d0ca4aa0 | ||
|
|
d4565483e6 | ||
|
|
2577940c30 | ||
|
|
22feddf804 | ||
|
|
7776f407b6 | ||
|
|
9ea9818d32 | ||
|
|
05fb34eacd | ||
|
|
a92d67fa01 | ||
|
|
125c87a405 | ||
|
|
8c9a0494ec | ||
|
|
e2fe220905 | ||
|
|
e7c8a3cb8d | ||
|
|
db1fe3483e | ||
|
|
6a16866f4e | ||
|
|
794cd27db3 | ||
|
|
cd5b800a21 | ||
|
|
2846ff7d31 | ||
|
|
583f11f27c | ||
|
|
7a4c6c22ce | ||
|
|
5e534bf2a5 | ||
|
|
a04918e36d | ||
|
|
5f4b5c1557 | ||
|
|
2e8d5c2eb3 | ||
|
|
d3a987eded | ||
|
|
1b0142513e | ||
|
|
98f918ed28 | ||
|
|
3ede496383 | ||
|
|
b7c3b0cc73 | ||
|
|
3ebc9b991a | ||
|
|
1336d8d54d | ||
|
|
c22d3503fd | ||
|
|
ce350a737a | ||
|
|
9791e70da6 | ||
|
|
a92826a8fe | ||
|
|
493b0c5ac2 | ||
|
|
e41ab839c7 | ||
|
|
ef6b978496 | ||
|
|
eb803ec5eb | ||
|
|
ca5dcea7d1 | ||
|
|
3a23476dbe | ||
|
|
4a4997a3c7 | ||
|
|
48d3a1fef1 | ||
|
|
75db79b4b6 | ||
|
|
fa34656b5d | ||
|
|
e0d64d3168 | ||
|
|
6b9f7fd758 | ||
|
|
e9c4156c87 | ||
|
|
79a610592e | ||
|
|
bbadbbdf68 | ||
|
|
bfdadaa13c | ||
|
|
b9a7dd72f8 | ||
|
|
4586c386e7 | ||
|
|
1757a59a99 | ||
|
|
db66b8da72 | ||
|
|
97b133bbee | ||
|
|
d9005ee970 | ||
|
|
adf42a5b54 | ||
|
|
93f6e98047 | ||
|
|
5180506678 | ||
|
|
b0e7dd6864 | ||
|
|
13824af291 | ||
|
|
272c27c8f2 | ||
|
|
a044c24c3d | ||
|
|
91e6db1bae | ||
|
|
67bd2daa02 | ||
|
|
9ef100bbf0 | ||
|
|
128b7c790e | ||
|
|
5a07b5430e | ||
|
|
868d921f7b | ||
|
|
f9ba8f01d1 | ||
|
|
5a01a0f668 | ||
|
|
1240041b4d | ||
|
|
10ba28deba | ||
|
|
a187ba9651 | ||
|
|
76c64b43cb | ||
|
|
1a247340db | ||
|
|
dd9fb807a4 | ||
|
|
9acc1c33be | ||
|
|
587e6d8089 | ||
|
|
74ff217c7e | ||
|
|
e938863ae6 | ||
|
|
2a0066420a | ||
|
|
d0e6a4c25a | ||
|
|
3698431fc1 | ||
|
|
9f91dee53f | ||
|
|
a6e12aaef6 | ||
|
|
03cc39ea12 | ||
|
|
b1627672f9 | ||
|
|
4c70249f75 | ||
|
|
816bb08720 | ||
|
|
d6c9e3413a | ||
|
|
e2f63d81d3 | ||
|
|
578d981d7e | ||
|
|
af2129c254 | ||
|
|
cd800d7837 | ||
|
|
50391f434e | ||
|
|
b27c34f39a | ||
|
|
41ca0ed302 | ||
|
|
105f97e61c | ||
|
|
e60676aec6 | ||
|
|
66b697a513 | ||
|
|
3f65760739 | ||
|
|
107a1eadac | ||
|
|
1f671e5d29 | ||
|
|
cad2ced394 | ||
|
|
5ab3962b12 | ||
|
|
be45057c3a | ||
|
|
ffa59739b6 | ||
|
|
2c073afbec | ||
|
|
ecce694d77 | ||
|
|
035facc564 | ||
|
|
f0d5c3992b | ||
|
|
ec1b801732 | ||
|
|
8282828820 | ||
|
|
879ef8d81f | ||
|
|
a726c125b5 | ||
|
|
beb1761d7c | ||
|
|
bf2e76fc7e | ||
|
|
f48fc24670 | ||
|
|
e085d7738a | ||
|
|
d01820c125 | ||
|
|
6e376bb85c | ||
|
|
a55941ff83 | ||
|
|
9047cadcd3 | ||
|
|
63dae435f9 | ||
|
|
76b8642348 | ||
|
|
cb05b8325c | ||
|
|
6bd4f34c8d | ||
|
|
d800a44a26 | ||
|
|
04bc86cafc | ||
|
|
0fd754bbe0 | ||
|
|
89258e868b | ||
|
|
922a189f40 | ||
|
|
5344a03003 | ||
|
|
8b700e825b | ||
|
|
eb6021f73f | ||
|
|
34f4af9ebf | ||
|
|
f76eb8a666 | ||
|
|
6b43067e1b | ||
|
|
06d3c87b23 | ||
|
|
10b412d237 | ||
|
|
3144fac03c | ||
|
|
442996f032 | ||
|
|
417d861be6 | ||
|
|
7524aeab63 | ||
|
|
bce8586bc6 | ||
|
|
346db02d89 | ||
|
|
16cb1e974c | ||
|
|
677643b812 | ||
|
|
743593f791 | ||
|
|
f470c241d6 | ||
|
|
e1e2eee508 | ||
|
|
c796ed3849 | ||
|
|
ce679cce52 | ||
|
|
bc1abb010d | ||
|
|
dd6246877d | ||
|
|
4b9eef50c9 | ||
|
|
8c2f751bbb | ||
|
|
08405a4fea | ||
|
|
32e05ae212 | ||
|
|
bffa6979b0 | ||
|
|
4662a73ac3 | ||
|
|
7ab94fe816 | ||
|
|
0b22d90b7c | ||
|
|
f5c9149dd5 | ||
|
|
409e4cde7a | ||
|
|
3cc860a46f | ||
|
|
ed9b7d2db9 | ||
|
|
78979c6d4c | ||
|
|
ac3a653442 | ||
|
|
3a27a0c146 | ||
|
|
74b3c953de | ||
|
|
8e0748e0b8 | ||
|
|
9dbc808c7b | ||
|
|
f9024b3f43 | ||
|
|
74859010d5 | ||
|
|
8c63169718 | ||
|
|
7c6ec5332c | ||
|
|
11b0a97d7a | ||
|
|
b4db9f6754 | ||
|
|
597f5ede12 | ||
|
|
87eb2c3665 | ||
|
|
9750d5ed16 | ||
|
|
cf4123f3bc | ||
|
|
fc1419d763 | ||
|
|
06cf878471 | ||
|
|
a3d0d29496 | ||
|
|
87de66561c | ||
|
|
a8623ec104 | ||
|
|
c1a3d4fefb | ||
|
|
bc5316b82e | ||
|
|
60b83ce0c6 | ||
|
|
3d2258f0d3 | ||
|
|
588a700257 | ||
|
|
d3b8e9daa1 | ||
|
|
d374b13d44 | ||
|
|
6177849fce | ||
|
|
c5ff58272b | ||
|
|
29fe44da50 | ||
|
|
2fa8d0c8dd | ||
|
|
1284d99fd2 | ||
|
|
9b509054cf | ||
|
|
84bec2842f | ||
|
|
8ce9458d65 | ||
|
|
20ec459b93 | ||
|
|
23d103c721 | ||
|
|
124c4d72bf | ||
|
|
e5d8fe41c4 | ||
|
|
9aba29dd8f | ||
|
|
197c4d4a5b | ||
|
|
09e7e76204 | ||
|
|
34bea3650b | ||
|
|
4f6889bef2 | ||
|
|
9b7e2823ea | ||
|
|
ca49acfe67 | ||
|
|
5d67960b1e | ||
|
|
c3953a62fd | ||
|
|
7aa0a97d10 | ||
|
|
be69e74bc0 | ||
|
|
e95be2cb3e | ||
|
|
eeb793524f | ||
|
|
94ac5ebb9f | ||
|
|
2a2f025388 | ||
|
|
f0352789cd | ||
|
|
7048ea4527 | ||
|
|
4e88ae19d1 | ||
|
|
bb71a1bc1d | ||
|
|
6e33e54e71 | ||
|
|
01b3b7004d | ||
|
|
19b7f74b75 | ||
|
|
2ec111e1a2 | ||
|
|
2856bee022 | ||
|
|
9c27f8c228 | ||
|
|
d8b859ec86 | ||
|
|
a80603727d | ||
|
|
c0649c861c | ||
|
|
649bc91057 | ||
|
|
fcbe7ef5c1 | ||
|
|
c61fa28f49 | ||
|
|
5bfad6867d | ||
|
|
d24a4a142e | ||
|
|
7f6126dd04 | ||
|
|
6ef3e8b3c9 | ||
|
|
743fee6015 | ||
|
|
123c7b44e8 | ||
|
|
79633ab1fb | ||
|
|
8909935a10 | ||
|
|
62b05c1e22 | ||
|
|
6302f54628 | ||
|
|
52959c988c | ||
|
|
d2ceb001d0 | ||
|
|
6337d3bf19 | ||
|
|
ff36248419 | ||
|
|
92a6058e29 | ||
|
|
414ebe7553 | ||
|
|
40b22822fc | ||
|
|
67b43387f4 | ||
|
|
3473aa9e42 | ||
|
|
e75ab8cdbd | ||
|
|
6e972afb15 | ||
|
|
0e28dcdac4 | ||
|
|
1d30f545d6 | ||
|
|
48ea9b12f6 | ||
|
|
c9e1eb0a0d | ||
|
|
1b3af2f6c6 | ||
|
|
8aec5e16c4 | ||
|
|
19de20c2f8 | ||
|
|
98ec6a4eaa | ||
|
|
5e22f1437a | ||
|
|
8376b0d53c | ||
|
|
ae92f92dee | ||
|
|
59bbddb318 | ||
|
|
d44c44987f | ||
|
|
137538e54b | ||
|
|
b9b82cfe47 | ||
|
|
003298ef1d | ||
|
|
f8cfb81fb0 | ||
|
|
3070c5513d | ||
|
|
139a6f80dc | ||
|
|
b31070faf5 | ||
|
|
6bc7ae971a | ||
|
|
dd12d0cf82 | ||
|
|
8b43bd1c37 | ||
|
|
4bac361605 | ||
|
|
b9302749dd | ||
|
|
f7f175a079 | ||
|
|
d945d0911b | ||
|
|
809a4eab67 | ||
|
|
559cd63fc5 | ||
|
|
97debac185 | ||
|
|
97e82a0ff6 | ||
|
|
3d1a967477 | ||
|
|
2dd5259f8e | ||
|
|
e9a3432d98 | ||
|
|
c386bb4bd3 | ||
|
|
1eb078d0a8 | ||
|
|
0d39c18b6a | ||
|
|
964e537479 | ||
|
|
24630e0c9b | ||
|
|
d6619cfe15 | ||
|
|
ace20602b5 | ||
|
|
0119675480 | ||
|
|
c9e830cefb | ||
|
|
7b9d4d126a | ||
|
|
91c3fc3e99 | ||
|
|
406afa3c32 | ||
|
|
c4287bafab | ||
|
|
21a138a75a | ||
|
|
d594bb386f | ||
|
|
d786a74a9f | ||
|
|
5c57a06c51 | ||
|
|
b9dd62af5b | ||
|
|
4adb024715 | ||
|
|
1201c6a9b4 | ||
|
|
13b6e06943 | ||
|
|
1a16b3e99a | ||
|
|
79604f553f | ||
|
|
91a1b55707 | ||
|
|
1c01db4019 | ||
|
|
bdd32f152d | ||
|
|
47493a0191 | ||
|
|
8e47ae2102 | ||
|
|
ad31893bbb | ||
|
|
7356153ba3 | ||
|
|
cb52f6d07d | ||
|
|
59ffdbf6f8 | ||
|
|
b3cfd9fe0c | ||
|
|
e385efcc22 | ||
|
|
61e2922601 | ||
|
|
5edd57e482 | ||
|
|
076fc98d98 | ||
|
|
e3f55ca0fb | ||
|
|
cd070b56d2 | ||
|
|
fd1831052c | ||
|
|
01e781dedb | ||
|
|
f9c07c4186 | ||
|
|
0d1872ebe3 | ||
|
|
7a1ff8636c | ||
|
|
76cd448e79 | ||
|
|
19104f156f | ||
|
|
932f717adb | ||
|
|
17da2fd2e3 | ||
|
|
efdaf6ee15 | ||
|
|
f219ddcf4e | ||
|
|
9a9ae918c5 | ||
|
|
9218f76c8e | ||
|
|
011134e0af | ||
|
|
d725c41b56 | ||
|
|
d40499e7fa | ||
|
|
67c4e54298 | ||
|
|
85abe5132e | ||
|
|
6bc311c552 | ||
|
|
770c78a177 | ||
|
|
14ddb8b1fa | ||
|
|
77b612b5ea | ||
|
|
c7e0d3a499 | ||
|
|
ecc61ced41 | ||
|
|
e4053f5e98 | ||
|
|
30618b271a | ||
|
|
e67653cf13 | ||
|
|
c2816afe9c | ||
|
|
c1576b4c40 | ||
|
|
5373a3093e | ||
|
|
f6596f11c4 | ||
|
|
369ddf76a8 | ||
|
|
53a17bbd24 | ||
|
|
06631ab91f | ||
|
|
686348974b | ||
|
|
28b4b6c9d5 | ||
|
|
c44aa757d0 | ||
|
|
a3c1c1d9c8 | ||
|
|
3b387336bf | ||
|
|
88eaa68763 | ||
|
|
ef3c0b215d | ||
|
|
1a0d7c54a2 | ||
|
|
4a6c56d2fd | ||
|
|
b4a55434a4 | ||
|
|
7c6c6125f3 | ||
|
|
d9991603e6 | ||
|
|
fa455ab757 | ||
|
|
4efd73d37a | ||
|
|
7f1fdf441f | ||
|
|
42b08ff261 | ||
|
|
c8790eb7d3 | ||
|
|
47234f1031 | ||
|
|
de956c4776 | ||
|
|
c6bd723ce1 | ||
|
|
c7b6fbfd46 | ||
|
|
e8a49c7746 | ||
|
|
cb80111e89 | ||
|
|
4cf6cc63b0 | ||
|
|
9f9cd6bfc6 | ||
|
|
21379e30a1 | ||
|
|
c3532718a7 | ||
|
|
8ef71343df | ||
|
|
5cb2d3d2e2 | ||
|
|
f9fd972cbe | ||
|
|
a10e126803 | ||
|
|
8ef46e90e5 | ||
|
|
ebc3d86e63 | ||
|
|
bbd38829eb | ||
|
|
24678d73f5 | ||
|
|
805732fdc7 | ||
|
|
ee92fb8635 | ||
|
|
59ea3c0413 | ||
|
|
a922c3ff6a | ||
|
|
8b0f421eb5 | ||
|
|
0e7a2d9d3c | ||
|
|
6f68620860 | ||
|
|
601c10309d | ||
|
|
757f360949 | ||
|
|
04b0ba6852 | ||
|
|
35d473f04a | ||
|
|
67f92c9d47 | ||
|
|
c6e12d2568 | ||
|
|
a22c4ba71d | ||
|
|
ddbd2ce152 | ||
|
|
54b94272c9 | ||
|
|
a63b5982b5 | ||
|
|
9bc06dc716 | ||
|
|
f0993ae3c8 | ||
|
|
199fdd0336 | ||
|
|
c7660a81c6 | ||
|
|
a0e73e2b54 | ||
|
|
483cc31369 | ||
|
|
3634d1ee32 | ||
|
|
42b85a9698 | ||
|
|
89041248d4 | ||
|
|
8e1f339fd6 | ||
|
|
dd8e7868ce | ||
|
|
56af7e99a8 | ||
|
|
0da4975f4f | ||
|
|
bf1d1f9579 | ||
|
|
a2fbb24615 | ||
|
|
06af48503c | ||
|
|
78097a2c5a | ||
|
|
de087c7b4a | ||
|
|
fbbae2b721 | ||
|
|
9a666f3377 | ||
|
|
04e5d5b71f | ||
|
|
c593578a55 | ||
|
|
5fe2b2157a | ||
|
|
bd9d90d8c4 | ||
|
|
2513dab2b0 | ||
|
|
7076f466c9 | ||
|
|
b192b70aec | ||
|
|
cef9bbd530 | ||
|
|
01162bfc78 | ||
|
|
57db97b32c | ||
|
|
460aa3eaa9 | ||
|
|
9e8e910bd6 | ||
|
|
3da325591b | ||
|
|
38776a0dd5 | ||
|
|
fbd252c1cf | ||
|
|
58147bef20 | ||
|
|
ccd43b09b2 | ||
|
|
76644c2fcc | ||
|
|
9533b23272 | ||
|
|
a3a93aef11 | ||
|
|
d886f4df97 | ||
|
|
e44d9ffd89 | ||
|
|
3ceb008e1f | ||
|
|
e656609b0d | ||
|
|
6ca32ef44f | ||
|
|
97b7cb0dca | ||
|
|
971cd87cc6 | ||
|
|
9eabbe68a6 | ||
|
|
b3dc159c45 | ||
|
|
b51a9d109f | ||
|
|
f31151e681 | ||
|
|
e51afe4621 | ||
|
|
9d3b003add | ||
|
|
757e4f658c | ||
|
|
d6f3333e48 | ||
|
|
4249cec68c | ||
|
|
45a6444b1e | ||
|
|
be8baea7ad | ||
|
|
f2b0dc18b5 | ||
|
|
a30e72323d | ||
|
|
f90e37ade0 | ||
|
|
ee93186f72 | ||
|
|
914ce405af | ||
|
|
5bc2a1a6f9 | ||
|
|
26f9962b6e | ||
|
|
df1985e1e8 | ||
|
|
3a3ac1f0f3 | ||
|
|
0d6aafdef5 | ||
|
|
5c3054c3b7 | ||
|
|
cf9fa06eae | ||
|
|
24d91ecda8 | ||
|
|
3a2eee0827 | ||
|
|
1043ab506e | ||
|
|
95cb7cb2ad | ||
|
|
d64a8e8d3a | ||
|
|
c101471bdf | ||
|
|
0f68930892 | ||
|
|
664bbe4f54 | ||
|
|
685631627e | ||
|
|
cc3cbf8cbe | ||
|
|
7015c3d491 | ||
|
|
ec65be79f0 | ||
|
|
c569b91c89 | ||
|
|
c97a435d73 | ||
|
|
48b2425c1d | ||
|
|
c9bf526be7 | ||
|
|
015174484a | ||
|
|
1fb457ac1f | ||
|
|
9249ceaff2 | ||
|
|
80dca032d1 | ||
|
|
22f467dc7d | ||
|
|
8c2597b5d9 | ||
|
|
2fd3608388 | ||
|
|
425a58afd6 | ||
|
|
f824d6a4b1 | ||
|
|
f620f23c35 | ||
|
|
9557cfc653 | ||
|
|
1f9ced7960 | ||
|
|
f6e32b1b08 | ||
|
|
0754dd2f95 | ||
|
|
fb960db6af | ||
|
|
ca956d5cec | ||
|
|
c83657307e | ||
|
|
bcafba47e8 | ||
|
|
ab747f2790 | ||
|
|
8de9517862 | ||
|
|
c3e0554fd7 | ||
|
|
50df58a893 | ||
|
|
828c89de99 | ||
|
|
795dad7861 | ||
|
|
3035a38caa | ||
|
|
631deb2e7d | ||
|
|
606ad6dcd0 | ||
|
|
8fb4b3afad | ||
|
|
4224ef142e | ||
|
|
3d032dfb5a | ||
|
|
f18c8fc4d9 | ||
|
|
f026ae8652 | ||
|
|
dfcae2a97a | ||
|
|
7ca8306775 | ||
|
|
f047df6e2b | ||
|
|
6bdd6f9b18 | ||
|
|
b43cfc5b39 | ||
|
|
2acf54b53b | ||
|
|
aa8b38fe35 | ||
|
|
12b98bb58a | ||
|
|
b9e57e41ce | ||
|
|
c44f18cae1 | ||
|
|
b3373aa8d3 | ||
|
|
ca86433402 | ||
|
|
218cafed1d | ||
|
|
27a9e18e48 | ||
|
|
f174633b36 | ||
|
|
b3919c577f | ||
|
|
37300dc0d7 | ||
|
|
9cdded911b | ||
|
|
c7acb9552a | ||
|
|
0791d01513 | ||
|
|
a33d03f008 | ||
|
|
81fedd8198 | ||
|
|
fa5ad1e465 | ||
|
|
e9fdf1031d | ||
|
|
4b8e888437 | ||
|
|
06deed820d | ||
|
|
e251b9bbca | ||
|
|
adb17791bd | ||
|
|
2289ff20bf | ||
|
|
d50e18ab6d | ||
|
|
4470192c70 | ||
|
|
d80f43ca81 | ||
|
|
b27e8e87f8 | ||
|
|
607303e4de | ||
|
|
d18237850c | ||
|
|
398809b135 | ||
|
|
df7f20a87b | ||
|
|
bd6542c2f1 | ||
|
|
8d1fcdaf2c | ||
|
|
1ce17cce76 | ||
|
|
15f8bc417e | ||
|
|
56cf05be77 | ||
|
|
47edf7f4f9 | ||
|
|
495a52d78b | ||
|
|
bd4ee75fc3 | ||
|
|
9c0672e0dd | ||
|
|
52de63e7bb | ||
|
|
c01f593daa | ||
|
|
76dae5bf68 | ||
|
|
57bc2d1ca0 | ||
|
|
adedd9181c | ||
|
|
7b34f6f1da | ||
|
|
1902500b0d | ||
|
|
3a1fa012f7 | ||
|
|
27104ac89a | ||
|
|
18ba149137 | ||
|
|
ea765d25e2 | ||
|
|
a8d8e72562 | ||
|
|
3005a0f13e | ||
|
|
f2ce1eebbb | ||
|
|
37fae304d3 | ||
|
|
f65d8f9144 | ||
|
|
d093406634 | ||
|
|
8c96091727 | ||
|
|
6a75b1f7b3 | ||
|
|
b1fe498eb9 | ||
|
|
fecafdca2a | ||
|
|
555c8f1d91 | ||
|
|
4fff38856e | ||
|
|
9b845c1115 | ||
|
|
08feaf3ded | ||
|
|
3c67318d8f | ||
|
|
8dd956f88a | ||
|
|
a9a5fb45f8 | ||
|
|
29e9b8c3c4 | ||
|
|
caf05599df | ||
|
|
0b5f6b176f | ||
|
|
c2e7e93e0c | ||
|
|
af5435d586 | ||
|
|
12f81de349 | ||
|
|
b3de0ded70 | ||
|
|
23400dd0a2 | ||
|
|
4f4ec9321f | ||
|
|
b5cc4078a9 | ||
|
|
fdc4151ff3 | ||
|
|
e9b71c88d7 | ||
|
|
b4727c7601 | ||
|
|
63d2f74c21 | ||
|
|
5b5d54621e | ||
|
|
f9907bbfa4 | ||
|
|
295cfd42aa | ||
|
|
7f92579905 | ||
|
|
6ce9d800d0 | ||
|
|
52837e3d36 | ||
|
|
897329a644 | ||
|
|
efa039a0f7 | ||
|
|
3ca7a33907 | ||
|
|
8934fe414c | ||
|
|
46687f391c | ||
|
|
0d9b2f3860 | ||
|
|
76ce6f9848 | ||
|
|
5a05d6633d | ||
|
|
a2a59f8ad1 | ||
|
|
ba5c7ea771 | ||
|
|
8e821c75d7 | ||
|
|
e246f2188e | ||
|
|
90223dcfc4 | ||
|
|
56a7ab4da5 | ||
|
|
d8b92b4bc9 | ||
|
|
1249392c83 | ||
|
|
4c1858c07b | ||
|
|
9cd14f97c2 | ||
|
|
4b912b9ae6 | ||
|
|
e878bfb80f | ||
|
|
245e806679 | ||
|
|
35bff9e661 | ||
|
|
5959e344a9 | ||
|
|
c6f2c23b05 | ||
|
|
e59f90b8fe | ||
|
|
fea660f1d7 | ||
|
|
b73cf0ee77 | ||
|
|
39ac95e5a2 | ||
|
|
c2dbaebde0 | ||
|
|
d8a24aff8c | ||
|
|
aad4856948 | ||
|
|
916053d3a5 | ||
|
|
defcc9374b | ||
|
|
0632198a40 | ||
|
|
3f849ddfab | ||
|
|
e9487cb59c | ||
|
|
71bae3ebd3 | ||
|
|
c5132b87a6 | ||
|
|
c4c23b3f79 | ||
|
|
c8909d4758 | ||
|
|
ffe0ba562c | ||
|
|
ffcfd428b8 | ||
|
|
9c3a8ff299 | ||
|
|
52984f85d5 | ||
|
|
d42c194aad | ||
|
|
bbf5345004 | ||
|
|
f7826d4ed7 | ||
|
|
3b8657d917 | ||
|
|
594ec0b659 | ||
|
|
104aa23a9e | ||
|
|
fee3bd0a93 | ||
|
|
b1b6def5bc | ||
|
|
8962b39648 | ||
|
|
d4728fafaf | ||
|
|
d87ea87aee | ||
|
|
4b92a6c2df | ||
|
|
be0ba9ea88 | ||
|
|
94311e187f | ||
|
|
b455478df8 | ||
|
|
3eb1ab9e8b | ||
|
|
5da2ad7435 | ||
|
|
3628964795 | ||
|
|
ee9bcf4d9f | ||
|
|
b1c5adc2f2 | ||
|
|
8ef198dfac | ||
|
|
237193ef2a | ||
|
|
a30e5bcaf8 | ||
|
|
b5ba387891 | ||
|
|
96b317d3ff | ||
|
|
4836fea876 | ||
|
|
38422805dc | ||
|
|
475e3471b4 |
44
.changelog.yml
Normal file
44
.changelog.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
repo: go-gitea/gitea
|
||||||
|
groups:
|
||||||
|
-
|
||||||
|
name: BREAKING
|
||||||
|
labels:
|
||||||
|
- kind/breaking
|
||||||
|
-
|
||||||
|
name: FEATURE
|
||||||
|
labels:
|
||||||
|
- kind/feature
|
||||||
|
-
|
||||||
|
name: BUGFIXES
|
||||||
|
labels:
|
||||||
|
- kind/bug
|
||||||
|
-
|
||||||
|
name: ENHANCEMENT
|
||||||
|
labels:
|
||||||
|
- kind/enhancement
|
||||||
|
- kind/refactor
|
||||||
|
- kind/ui
|
||||||
|
-
|
||||||
|
name: SECURITY
|
||||||
|
labels:
|
||||||
|
- kind/security
|
||||||
|
-
|
||||||
|
name: TESTING
|
||||||
|
labels:
|
||||||
|
- kind/testing
|
||||||
|
-
|
||||||
|
name: TRANSLATION
|
||||||
|
labels:
|
||||||
|
- kind/translation
|
||||||
|
-
|
||||||
|
name: BUILD
|
||||||
|
labels:
|
||||||
|
- kind/build
|
||||||
|
- kind/lint
|
||||||
|
-
|
||||||
|
name: DOCS
|
||||||
|
labels:
|
||||||
|
- kind/docs
|
||||||
|
-
|
||||||
|
name: MISC
|
||||||
|
default: true
|
||||||
452
.drone.yml
Normal file
452
.drone.yml
Normal file
@@ -0,0 +1,452 @@
|
|||||||
|
workspace:
|
||||||
|
base: /go
|
||||||
|
path: src/code.gitea.io/gitea
|
||||||
|
|
||||||
|
pipeline:
|
||||||
|
fetch-tags:
|
||||||
|
image: docker:git
|
||||||
|
commands:
|
||||||
|
- git fetch --tags --force
|
||||||
|
|
||||||
|
download_translations:
|
||||||
|
image: jonasfranz/crowdin
|
||||||
|
pull: true
|
||||||
|
secrets: [ crowdin_key ]
|
||||||
|
project_identifier: gitea
|
||||||
|
ignore_branch: true
|
||||||
|
download: true
|
||||||
|
export_dir: options/locale/
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
update-translations:
|
||||||
|
image: alpine:3.7
|
||||||
|
commands:
|
||||||
|
- mv ./options/locale/locale_en-US.ini ./options/
|
||||||
|
- sed -i -e 's/="/=/g' -e 's/"$$//g' ./options/locale/*.ini
|
||||||
|
- sed -i -e 's/\\\\"/"/g' ./options/locale/*.ini
|
||||||
|
- mv ./options/locale_en-US.ini ./options/locale/
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
git_push:
|
||||||
|
image: appleboy/drone-git-push
|
||||||
|
pull: true
|
||||||
|
secrets: [ git_push_ssh_key ]
|
||||||
|
remote: git@github.com:go-gitea/gitea.git
|
||||||
|
force: false
|
||||||
|
commit: true
|
||||||
|
commit_message: "[skip ci] Updated translations via Crowdin"
|
||||||
|
author_name: GiteaBot
|
||||||
|
author_email: teabot@gitea.io
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
pre-build:
|
||||||
|
image: webhippie/nodejs:latest
|
||||||
|
pull: true
|
||||||
|
commands:
|
||||||
|
- npm install
|
||||||
|
- make stylesheets-check
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
build-without-gcc:
|
||||||
|
image: golang:1.10 # this step is kept as the lowest version of golang that we support
|
||||||
|
pull: true
|
||||||
|
commands:
|
||||||
|
- go build -o gitea_no_gcc # test if build succeeds without the sqlite tag
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
build:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
environment:
|
||||||
|
TAGS: bindata sqlite sqlite_unlock_notify
|
||||||
|
commands:
|
||||||
|
- make clean
|
||||||
|
- make generate
|
||||||
|
- make vet
|
||||||
|
- make lint
|
||||||
|
- make fmt-check
|
||||||
|
- make swagger-check
|
||||||
|
- make swagger-validate
|
||||||
|
- make misspell-check
|
||||||
|
- make test-vendor
|
||||||
|
- make build
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
unit-test:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata sqlite sqlite_unlock_notify
|
||||||
|
commands:
|
||||||
|
- make unit-test-coverage
|
||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
release-test:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata sqlite sqlite_unlock_notify
|
||||||
|
commands:
|
||||||
|
- make test
|
||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
branch: [ release/* ]
|
||||||
|
|
||||||
|
tag-test:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
commands:
|
||||||
|
- make test
|
||||||
|
when:
|
||||||
|
event: [ tag ]
|
||||||
|
|
||||||
|
test-sqlite:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.sqlite.test)' | sh)) &
|
||||||
|
- make test-sqlite-migration
|
||||||
|
- make test-sqlite
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
test-mysql:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
TEST_LDAP: "1"
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- make test-mysql-migration
|
||||||
|
- make integration-test-coverage
|
||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
tag-test-mysql:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
TEST_LDAP: "1"
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) &
|
||||||
|
- make test-mysql-migration
|
||||||
|
- make test-mysql
|
||||||
|
when:
|
||||||
|
event: [ tag ]
|
||||||
|
|
||||||
|
test-mysql8:
|
||||||
|
image: golang:1.11
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
TEST_LDAP: "1"
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) &
|
||||||
|
- make test-mysql8-migration
|
||||||
|
- make test-mysql8
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
test-pgsql:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
TEST_LDAP: "1"
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) &
|
||||||
|
- make test-pgsql-migration
|
||||||
|
- make test-pgsql
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
test-mssql:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
group: test
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
TEST_LDAP: "1"
|
||||||
|
commands:
|
||||||
|
- curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
|
||||||
|
- apt-get install -y git-lfs
|
||||||
|
- make test-mssql-migration
|
||||||
|
- make test-mssql
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
# bench-sqlite:
|
||||||
|
# image: golang:1.12
|
||||||
|
# pull: true
|
||||||
|
# group: bench
|
||||||
|
# commands:
|
||||||
|
# - make bench-sqlite
|
||||||
|
# when:
|
||||||
|
# event: [ tag ]
|
||||||
|
|
||||||
|
# bench-mysql:
|
||||||
|
# image: golang:1.12
|
||||||
|
# pull: true
|
||||||
|
# group: bench
|
||||||
|
# commands:
|
||||||
|
# - make bench-mysql
|
||||||
|
# when:
|
||||||
|
# event: [ tag ]
|
||||||
|
|
||||||
|
# bench-mssql:
|
||||||
|
# image: golang:1.12
|
||||||
|
# pull: true
|
||||||
|
# group: bench
|
||||||
|
# commands:
|
||||||
|
# - make bench-mssql
|
||||||
|
# when:
|
||||||
|
# event: [ tag ]
|
||||||
|
|
||||||
|
# bench-pgsql:
|
||||||
|
# image: golang:1.12
|
||||||
|
# pull: true
|
||||||
|
# group: bench
|
||||||
|
# commands:
|
||||||
|
# - make bench-pgsql
|
||||||
|
# when:
|
||||||
|
# event: [ tag ]
|
||||||
|
|
||||||
|
generate-coverage:
|
||||||
|
image: golang:1.12
|
||||||
|
pull: true
|
||||||
|
environment:
|
||||||
|
TAGS: bindata
|
||||||
|
commands:
|
||||||
|
- make coverage
|
||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
image: robertstettner/drone-codecov
|
||||||
|
secrets: [ codecov_token ]
|
||||||
|
files:
|
||||||
|
- coverage.all
|
||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
static:
|
||||||
|
image: techknowlogick/xgo:latest
|
||||||
|
pull: true
|
||||||
|
environment:
|
||||||
|
TAGS: bindata sqlite sqlite_unlock_notify
|
||||||
|
commands:
|
||||||
|
- export PATH=$PATH:$GOPATH/bin
|
||||||
|
- make release
|
||||||
|
when:
|
||||||
|
event: [ push, tag ]
|
||||||
|
|
||||||
|
build-docs:
|
||||||
|
image: webhippie/hugo:latest
|
||||||
|
pull: true
|
||||||
|
commands:
|
||||||
|
- cd docs
|
||||||
|
- make trans-copy
|
||||||
|
- make clean
|
||||||
|
- make build
|
||||||
|
|
||||||
|
publish-docs:
|
||||||
|
image: lucap/drone-netlify:latest
|
||||||
|
pull: true
|
||||||
|
secrets: [ netlify_token ]
|
||||||
|
site_id: d2260bae-7861-4c02-8646-8f6440b12672
|
||||||
|
path: docs/public/
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
docker-dryrun:
|
||||||
|
image: plugins/docker:17.12
|
||||||
|
pull: true
|
||||||
|
repo: gitea/gitea
|
||||||
|
cache_from: gitea/gitea
|
||||||
|
dry_run: true
|
||||||
|
when:
|
||||||
|
event: [ pull_request ]
|
||||||
|
|
||||||
|
release-docker:
|
||||||
|
image: plugins/docker:17.12
|
||||||
|
pull: true
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
|
repo: gitea/gitea
|
||||||
|
tags: [ '${DRONE_BRANCH##release/v}' ]
|
||||||
|
cache_from: gitea/gitea
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ release/* ]
|
||||||
|
|
||||||
|
docker:
|
||||||
|
image: plugins/docker:17.12
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
|
pull: true
|
||||||
|
repo: gitea/gitea
|
||||||
|
cache_from: gitea/gitea
|
||||||
|
default_tags: true
|
||||||
|
when:
|
||||||
|
event: [ push, tag ]
|
||||||
|
|
||||||
|
gpg-sign:
|
||||||
|
image: plugins/gpgsign:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ gpgsign_key, gpgsign_passphrase ]
|
||||||
|
detach_sign: true
|
||||||
|
files:
|
||||||
|
- dist/release/*
|
||||||
|
excludes:
|
||||||
|
- dist/release/*.sha256
|
||||||
|
when:
|
||||||
|
event: [ push, tag ]
|
||||||
|
|
||||||
|
tag-release:
|
||||||
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
acl: public-read
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
|
path_style: true
|
||||||
|
strip_prefix: dist/release/
|
||||||
|
source: dist/release/*
|
||||||
|
target: /gitea/${DRONE_TAG##v}
|
||||||
|
when:
|
||||||
|
event: [ tag ]
|
||||||
|
|
||||||
|
release-branch-release:
|
||||||
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
acl: public-read
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
|
path_style: true
|
||||||
|
strip_prefix: dist/release/
|
||||||
|
source: dist/release/*
|
||||||
|
target: /gitea/${DRONE_BRANCH##release/v}
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ release/* ]
|
||||||
|
|
||||||
|
release:
|
||||||
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
acl: public-read
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
|
path_style: true
|
||||||
|
strip_prefix: dist/release/
|
||||||
|
source: dist/release/*
|
||||||
|
target: /gitea/master
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
github:
|
||||||
|
image: plugins/github-release:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ github_token ]
|
||||||
|
files:
|
||||||
|
- dist/release/*
|
||||||
|
when:
|
||||||
|
event: [ tag ]
|
||||||
|
|
||||||
|
upload_translations:
|
||||||
|
image: jonasfranz/crowdin
|
||||||
|
pull: true
|
||||||
|
secrets: [ crowdin_key ]
|
||||||
|
project_identifier: gitea
|
||||||
|
ignore_branch: true
|
||||||
|
download: false
|
||||||
|
files:
|
||||||
|
locale_en-US.ini: options/locale/locale_en-US.ini
|
||||||
|
when:
|
||||||
|
event: [ push ]
|
||||||
|
branch: [ master ]
|
||||||
|
|
||||||
|
discord:
|
||||||
|
image: appleboy/drone-discord:1.0.0
|
||||||
|
pull: true
|
||||||
|
secrets: [ discord_webhook_id, discord_webhook_token ]
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
status: [ changed, failure ]
|
||||||
|
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:5.7
|
||||||
|
environment:
|
||||||
|
- MYSQL_DATABASE=test
|
||||||
|
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
mysql8:
|
||||||
|
image: mysql:8.0
|
||||||
|
environment:
|
||||||
|
- MYSQL_DATABASE=test
|
||||||
|
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
||||||
|
- MYSQL_DATABASE=testgitea
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
pgsql:
|
||||||
|
image: postgres:9.5
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=test
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
mssql:
|
||||||
|
image: microsoft/mssql-server-linux:latest
|
||||||
|
environment:
|
||||||
|
- ACCEPT_EULA=Y
|
||||||
|
- SA_PASSWORD=MwantsaSecurePassword1
|
||||||
|
- MSSQL_PID=Standard
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
|
ldap:
|
||||||
|
image: gitea/test-openldap:latest
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
30
.editorconfig
Normal file
30
.editorconfig
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# http://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.go]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 8
|
||||||
|
|
||||||
|
[*.{tmpl,html}]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.less]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.{yml,json}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.js]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
||||||
6
.gitattributes
vendored
Normal file
6
.gitattributes
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
conf/* linguist-vendored
|
||||||
|
docker/* linguist-vendored
|
||||||
|
options/* linguist-vendored
|
||||||
|
public/* linguist-vendored
|
||||||
|
scripts/* linguist-vendored
|
||||||
|
templates/* linguist-vendored
|
||||||
33
.github/issue_template.md
vendored
Normal file
33
.github/issue_template.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<!-- NOTE: If your issue is a security concern, please send an email to security@gitea.io instead of opening a public issue -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
1. Please speak English, this is the language all maintainers can speak and write.
|
||||||
|
2. Please ask questions or configuration/deploy problems on our Discord
|
||||||
|
server (https://discord.gg/gitea) or forum (https://discourse.gitea.io).
|
||||||
|
3. Please take a moment to check that your issue doesn't already exist.
|
||||||
|
4. Please give all relevant information below for bug reports, because
|
||||||
|
incomplete details will be handled as an invalid report.
|
||||||
|
-->
|
||||||
|
|
||||||
|
- Gitea version (or commit ref):
|
||||||
|
- Git version:
|
||||||
|
- Operating system:
|
||||||
|
- Database (use `[x]`):
|
||||||
|
- [ ] PostgreSQL
|
||||||
|
- [ ] MySQL
|
||||||
|
- [ ] MSSQL
|
||||||
|
- [ ] SQLite
|
||||||
|
- Can you reproduce the bug at https://try.gitea.io:
|
||||||
|
- [ ] Yes (provide example URL)
|
||||||
|
- [ ] No
|
||||||
|
- [ ] Not relevant
|
||||||
|
- Log gist:
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
<!-- **If this issue involves the Web Interface, please include a screenshot** -->
|
||||||
7
.github/pull_request_template.md
vendored
Normal file
7
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Please check the following:
|
||||||
|
|
||||||
|
1. Make sure you are targeting the `master` branch, pull requests on release branches are only allowed for bug fixes.
|
||||||
|
2. Read contributing guidelines: https://github.com/go-gitea/gitea/blob/master/CONTRIBUTING.md
|
||||||
|
3. Describe what your pull request does and which issue you're targeting (if any)
|
||||||
|
|
||||||
|
**You MUST delete the content above including this line before posting, otherwise your pull request will be invalid.**
|
||||||
53
.github/stale.yml
vendored
Normal file
53
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Configuration for probot-stale - https://github.com/probot/stale
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||||
|
daysUntilStale: 60
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
|
||||||
|
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||||
|
daysUntilClose: 14
|
||||||
|
|
||||||
|
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||||
|
exemptLabels:
|
||||||
|
- status/blocked
|
||||||
|
- kind/security
|
||||||
|
- lgtm/done
|
||||||
|
- reviewed/confirmed
|
||||||
|
- priority/critical
|
||||||
|
- kind/proposal
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a project (defaults to false)
|
||||||
|
exemptProjects: false
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a milestone (defaults to false)
|
||||||
|
exemptMilestones: false
|
||||||
|
|
||||||
|
# Label to use when marking as stale
|
||||||
|
staleLabel: stale
|
||||||
|
|
||||||
|
# Comment to post when marking as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs during the next 2 weeks. Thank you
|
||||||
|
for your contributions.
|
||||||
|
|
||||||
|
# Comment to post when closing a stale Issue or Pull Request.
|
||||||
|
closeComment: >
|
||||||
|
This issue has been automatically closed because of inactivity.
|
||||||
|
You can re-open it if needed.
|
||||||
|
|
||||||
|
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||||
|
limitPerRun: 1
|
||||||
|
|
||||||
|
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
||||||
|
pulls:
|
||||||
|
daysUntilStale: 60
|
||||||
|
daysUntilClose: 60
|
||||||
|
markComment: >
|
||||||
|
This pull request has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs during the next 2 months. Thank you
|
||||||
|
for your contributions.
|
||||||
|
closeComment: >
|
||||||
|
This pull request has been automatically closed because of inactivity.
|
||||||
|
You can re-open it if needed.
|
||||||
|
|
||||||
78
.gitignore
vendored
Normal file
78
.gitignore
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Folders
|
||||||
|
_obj
|
||||||
|
_test
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# MS VSCode
|
||||||
|
.vscode
|
||||||
|
|
||||||
|
# Architecture specific extensions/prefixes
|
||||||
|
*.[568vq]
|
||||||
|
[568vq].out
|
||||||
|
|
||||||
|
*.cgo1.go
|
||||||
|
*.cgo2.c
|
||||||
|
_cgo_defun.c
|
||||||
|
_cgo_gotypes.go
|
||||||
|
_cgo_export.*
|
||||||
|
|
||||||
|
_testmain.go
|
||||||
|
|
||||||
|
*.exe
|
||||||
|
*.test
|
||||||
|
*.prof
|
||||||
|
|
||||||
|
*coverage.out
|
||||||
|
coverage.all
|
||||||
|
|
||||||
|
/modules/options/bindata.go
|
||||||
|
/modules/public/bindata.go
|
||||||
|
/modules/templates/bindata.go
|
||||||
|
|
||||||
|
*.db
|
||||||
|
*.log
|
||||||
|
|
||||||
|
/gitea
|
||||||
|
/debug
|
||||||
|
/integrations.test
|
||||||
|
|
||||||
|
/bin
|
||||||
|
/dist
|
||||||
|
/custom
|
||||||
|
/data
|
||||||
|
/indexers
|
||||||
|
/log
|
||||||
|
/public/img/avatar
|
||||||
|
/integrations/gitea-integration-mysql
|
||||||
|
/integrations/gitea-integration-mysql8
|
||||||
|
/integrations/gitea-integration-pgsql
|
||||||
|
/integrations/gitea-integration-sqlite
|
||||||
|
/integrations/gitea-integration-mssql
|
||||||
|
/integrations/indexers-mysql
|
||||||
|
/integrations/indexers-mysql8
|
||||||
|
/integrations/indexers-pgsql
|
||||||
|
/integrations/indexers-sqlite
|
||||||
|
/integrations/indexers-mssql
|
||||||
|
/integrations/mysql.ini
|
||||||
|
/integrations/mysql8.ini
|
||||||
|
/integrations/pgsql.ini
|
||||||
|
/integrations/mssql.ini
|
||||||
|
/node_modules
|
||||||
|
/modules/indexer/issues/indexers
|
||||||
|
|
||||||
|
|
||||||
|
# Snapcraft
|
||||||
|
snap/.snapcraft/
|
||||||
|
parts/
|
||||||
|
stage/
|
||||||
|
prime/
|
||||||
|
*.snap
|
||||||
|
*.snap-build
|
||||||
|
*_source.tar.bz2
|
||||||
3
.lgtm
Normal file
3
.lgtm
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
pattern = "(?)LGTM"
|
||||||
|
self_approval_off = true
|
||||||
|
ignore_maintainers_file = true
|
||||||
25
.revive.toml
Normal file
25
.revive.toml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
ignoreGeneratedHeader = false
|
||||||
|
severity = "warning"
|
||||||
|
confidence = 0.8
|
||||||
|
errorCode = 1
|
||||||
|
warningCode = 1
|
||||||
|
|
||||||
|
[rule.blank-imports]
|
||||||
|
[rule.context-as-argument]
|
||||||
|
[rule.context-keys-type]
|
||||||
|
[rule.dot-imports]
|
||||||
|
[rule.error-return]
|
||||||
|
[rule.error-strings]
|
||||||
|
[rule.error-naming]
|
||||||
|
[rule.exported]
|
||||||
|
[rule.if-return]
|
||||||
|
[rule.increment-decrement]
|
||||||
|
[rule.var-naming]
|
||||||
|
[rule.var-declaration]
|
||||||
|
[rule.package-comments]
|
||||||
|
[rule.range]
|
||||||
|
[rule.receiver-naming]
|
||||||
|
[rule.time-naming]
|
||||||
|
[rule.unexported-return]
|
||||||
|
[rule.indent-error-flow]
|
||||||
|
[rule.errorf]
|
||||||
51
BSDmakefile
Normal file
51
BSDmakefile
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# GNU makefile proxy script for BSD make
|
||||||
|
# Written and maintained by Mahmoud Al-Qudsi <mqudsi@neosmart.net>
|
||||||
|
# Copyright NeoSmart Technologies <https://neosmart.net/> 2014-2018
|
||||||
|
# Obtain updates from <https://github.com/neosmart/gmake-proxy>
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
# list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
JARG =
|
||||||
|
GMAKE = "gmake"
|
||||||
|
#When gmake is called from another make instance, -w is automatically added
|
||||||
|
#which causes extraneous messages about directory changes to be emitted.
|
||||||
|
#--no-print-directory silences these messages.
|
||||||
|
GARGS = "--no-print-directory"
|
||||||
|
|
||||||
|
.if "$(.MAKE.JOBS)" != ""
|
||||||
|
JARG = -j$(.MAKE.JOBS)
|
||||||
|
.endif
|
||||||
|
|
||||||
|
#by default bmake will cd into ./obj first
|
||||||
|
.OBJDIR: ./
|
||||||
|
|
||||||
|
.PHONY: FRC
|
||||||
|
$(.TARGETS): FRC
|
||||||
|
$(GMAKE) $(GARGS) $(.TARGETS:S,.DONE,,) $(JARG)
|
||||||
|
|
||||||
|
.DONE .DEFAULT: .SILENT
|
||||||
|
$(GMAKE) $(GARGS) $(.TARGETS:S,.DONE,,) $(JARG)
|
||||||
|
|
||||||
|
.ERROR: .SILENT
|
||||||
|
if ! which $(GMAKE) > /dev/null; then \
|
||||||
|
echo "GNU Make is required!"; \
|
||||||
|
fi
|
||||||
1904
CHANGELOG.md
Normal file
1904
CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
301
CONTRIBUTING.md
Normal file
301
CONTRIBUTING.md
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Contribution Guidelines](#contribution-guidelines)
|
||||||
|
- [Introduction](#introduction)
|
||||||
|
- [Bug reports](#bug-reports)
|
||||||
|
- [Discuss your design](#discuss-your-design)
|
||||||
|
- [Testing redux](#testing-redux)
|
||||||
|
- [Vendoring](#vendoring)
|
||||||
|
- [Translation](#translation)
|
||||||
|
- [Code review](#code-review)
|
||||||
|
- [Styleguide](#styleguide)
|
||||||
|
- [Sign-off your work](#sign-off-your-work)
|
||||||
|
- [Release Cycle](#release-cycle)
|
||||||
|
- [Maintainers](#maintainers)
|
||||||
|
- [Owners](#owners)
|
||||||
|
- [Versions](#versions)
|
||||||
|
- [Releasing Gitea](#releasing-gitea)
|
||||||
|
- [Copyright](#copyright)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This document explains how to contribute changes to the Gitea project.
|
||||||
|
It assumes you have followed the
|
||||||
|
[installation instructions](https://docs.gitea.io/en-us/).
|
||||||
|
Sensitive security-related issues should be reported to
|
||||||
|
[security@gitea.io](mailto:security@gitea.io).
|
||||||
|
|
||||||
|
For configuring IDE or code editor to develop Gitea see [IDE and code editor configuration](contrib/ide/)
|
||||||
|
|
||||||
|
## Bug reports
|
||||||
|
|
||||||
|
Please search the issues on the issue tracker with a variety of keywords
|
||||||
|
to ensure your bug is not already reported.
|
||||||
|
|
||||||
|
If unique, [open an issue](https://github.com/go-gitea/gitea/issues/new)
|
||||||
|
and answer the questions so we can understand and reproduce the
|
||||||
|
problematic behavior.
|
||||||
|
|
||||||
|
To show us that the issue you are having is in Gitea itself, please
|
||||||
|
write clear, concise instructions so we can reproduce the behavior—
|
||||||
|
even if it seems obvious. The more detailed and specific you are,
|
||||||
|
the faster we can fix the issue. Check out [How to Report Bugs
|
||||||
|
Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html).
|
||||||
|
|
||||||
|
Please be kind, remember that Gitea comes at no cost to you, and you're
|
||||||
|
getting free help.
|
||||||
|
|
||||||
|
## Discuss your design
|
||||||
|
|
||||||
|
The project welcomes submissions. If you want to change or add something,
|
||||||
|
please let everyone know what you're working on—[file an issue](https://github.com/go-gitea/gitea/issues/new)!
|
||||||
|
Significant changes must go through the change proposal process
|
||||||
|
before they can be accepted. To create a proposal, file an issue with
|
||||||
|
your proposed changes documented, and make sure to note in the title
|
||||||
|
of the issue that it is a proposal.
|
||||||
|
|
||||||
|
This process gives everyone a chance to validate the design, helps
|
||||||
|
prevent duplication of effort, and ensures that the idea fits inside
|
||||||
|
the goals for the project and tools. It also checks that the design is
|
||||||
|
sound before code is written; the code review tool is not the place for
|
||||||
|
high-level discussions.
|
||||||
|
|
||||||
|
## Testing redux
|
||||||
|
|
||||||
|
Before submitting a pull request, run all the tests for the whole tree
|
||||||
|
to make sure your changes don't cause regression elsewhere.
|
||||||
|
|
||||||
|
Here's how to run the test suite:
|
||||||
|
|
||||||
|
- Install the correct version of the drone-cli package. As of this
|
||||||
|
writing, the correct drone-cli version is
|
||||||
|
[0.8.6](https://0-8-0.docs.drone.io/cli-installation/).
|
||||||
|
- Ensure you have enough free disk space. You will need at least
|
||||||
|
15-20 Gb of free disk space to hold all of the containers drone
|
||||||
|
creates (a default AWS or GCE disk size won't work -- see
|
||||||
|
[#6243](https://github.com/go-gitea/gitea/issues/6243)).
|
||||||
|
- Change into the base directory of your copy of the gitea repository,
|
||||||
|
and run `drone exec --local --build-event pull_request`.
|
||||||
|
|
||||||
|
The drone version, command line, and disk requirements do change over
|
||||||
|
time (see [#4053](https://github.com/go-gitea/gitea/issues/4053) and
|
||||||
|
[#6243](https://github.com/go-gitea/gitea/issues/6243)); if you
|
||||||
|
discover any issues, please feel free to send us a pull request to
|
||||||
|
update these instructions.
|
||||||
|
|
||||||
|
## Vendoring
|
||||||
|
|
||||||
|
We keep a cached copy of dependencies within the `vendor/` directory,
|
||||||
|
managing updates via [dep](https://github.com/golang/dep).
|
||||||
|
|
||||||
|
Pull requests should only include `vendor/` updates if they are part of
|
||||||
|
the same change, be it a bugfix or a feature addition.
|
||||||
|
|
||||||
|
The `vendor/` update needs to be justified as part of the PR description,
|
||||||
|
and must be verified by the reviewers and/or merger to always reference
|
||||||
|
an existing upstream commit.
|
||||||
|
|
||||||
|
You can find more information on how to get started with it on the [dep project website](https://golang.github.io/dep/docs/introduction.html).
|
||||||
|
|
||||||
|
## Translation
|
||||||
|
|
||||||
|
We do all translation work inside [Crowdin](https://crowdin.com/project/gitea).
|
||||||
|
The only translation that is maintained in this git repository is
|
||||||
|
[`en_US.ini`](https://github.com/go-gitea/gitea/blob/master/options/locale/locale_en-US.ini)
|
||||||
|
and is synced regularly to Crowdin. Once a translation has reached
|
||||||
|
A SATISFACTORY PERCENTAGE it will be synced back into this repo and
|
||||||
|
included in the next released version.
|
||||||
|
|
||||||
|
## Building Gitea
|
||||||
|
|
||||||
|
Generally, the go build tools are installed as-needed in the `Makefile`.
|
||||||
|
An exception are the tools to build the CSS and images.
|
||||||
|
|
||||||
|
- To build CSS: Install [Node.js](https://nodejs.org/en/download/package-manager) at version 8.0 or above
|
||||||
|
with `npm` and then run `npm install` and `make generate-stylesheets`.
|
||||||
|
- To build Images: ImageMagick, inkscape and zopflipng binaries must be
|
||||||
|
available in your `PATH` to run `make generate-images`.
|
||||||
|
|
||||||
|
## Code review
|
||||||
|
|
||||||
|
Changes to Gitea must be reviewed before they are accepted—no matter who
|
||||||
|
makes the change, even if they are an owner or a maintainer. We use GitHub's
|
||||||
|
pull request workflow to do that. And, we also use [LGTM](http://lgtm.co)
|
||||||
|
to ensure every PR is reviewed by at least 2 maintainers.
|
||||||
|
|
||||||
|
Please try to make your pull request easy to review for us. And, please read
|
||||||
|
the *[How to get faster PR reviews](https://github.com/kubernetes/community/blob/261cb0fd089b64002c91e8eddceebf032462ccd6/contributors/guide/pull-requests.md#best-practices-for-faster-reviews)* guide;
|
||||||
|
it has lots of useful tips for any project you may want to contribute.
|
||||||
|
Some of the key points:
|
||||||
|
|
||||||
|
* Make small pull requests. The smaller, the faster to review and the
|
||||||
|
more likely it will be merged soon.
|
||||||
|
* Don't make changes unrelated to your PR. Maybe there are typos on
|
||||||
|
some comments, maybe refactoring would be welcome on a function... but
|
||||||
|
if that is not related to your PR, please make *another* PR for that.
|
||||||
|
* Split big pull requests into multiple small ones. An incremental change
|
||||||
|
will be faster to review than a huge PR.
|
||||||
|
|
||||||
|
## Styleguide
|
||||||
|
|
||||||
|
For imports you should use the following format (_without_ the comments)
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
// stdlib
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
// local packages
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
|
||||||
|
// external packages
|
||||||
|
"github.com/foo/bar"
|
||||||
|
"gopkg.io/baz.v1"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sign-off your work
|
||||||
|
|
||||||
|
The sign-off is a simple line at the end of the explanation for the
|
||||||
|
patch. Your signature certifies that you wrote the patch or otherwise
|
||||||
|
have the right to pass it on as an open-source patch. The rules are
|
||||||
|
pretty simple: If you can certify [DCO](DCO), then you just add a line
|
||||||
|
to every git commit message:
|
||||||
|
|
||||||
|
```
|
||||||
|
Signed-off-by: Joe Smith <joe.smith@email.com>
|
||||||
|
```
|
||||||
|
|
||||||
|
Please use your real name; we really dislike pseudonyms or anonymous
|
||||||
|
contributions. We are in the open-source world without secrets. If you
|
||||||
|
set your `user.name` and `user.email` git configs, you can sign-off your
|
||||||
|
commit automatically with `git commit -s`.
|
||||||
|
|
||||||
|
## Release Cycle
|
||||||
|
|
||||||
|
We adopted a release schedule to streamline the process of working
|
||||||
|
on, finishing, and issuing releases. The overall goal is to make a
|
||||||
|
minor release every two months, which breaks down into one month of
|
||||||
|
general development followed by one month of testing and polishing
|
||||||
|
known as the release freeze. All the feature pull requests should be
|
||||||
|
merged in the first month of one release period. And, during the frozen
|
||||||
|
period, a corresponding release branch is open for fixes backported from
|
||||||
|
master. Release candidates are made during this period for user testing to
|
||||||
|
obtain a final version that is maintained in this branch. A release is
|
||||||
|
maintained by issuing patch releases to only correct critical problems
|
||||||
|
such as crashes or security issues.
|
||||||
|
|
||||||
|
Major release cycles are bimonthly. They always begin on the 25th and end on
|
||||||
|
the 24th (i.e., the 25th of December to February 24th).
|
||||||
|
|
||||||
|
During a development cycle, we may also publish any necessary minor releases
|
||||||
|
for the previous version. For example, if the latest, published release is
|
||||||
|
v1.2, then minor changes for the previous release—e.g., v1.1.0 -> v1.1.1—are
|
||||||
|
still possible.
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
|
||||||
|
To make sure every PR is checked, we have [team
|
||||||
|
maintainers](MAINTAINERS). Every PR **MUST** be reviewed by at least
|
||||||
|
two maintainers (or owners) before it can get merged. A maintainer
|
||||||
|
should be a contributor of Gitea (or Gogs) and contributed at least
|
||||||
|
4 accepted PRs. A contributor should apply as a maintainer in the
|
||||||
|
[Discord](https://discord.gg/NsatcWJ) #develop channel. The owners
|
||||||
|
or the team maintainers may invite the contributor. A maintainer
|
||||||
|
should spend some time on code reviews. If a maintainer has no
|
||||||
|
time to do that, they should apply to leave the maintainers team
|
||||||
|
and we will give them the honor of being a member of the [advisors
|
||||||
|
team](https://github.com/orgs/go-gitea/teams/advisors). Of course, if
|
||||||
|
an advisor has time to code review, we will gladly welcome them back
|
||||||
|
to the maintainers team. If a maintainer is inactive for more than 3
|
||||||
|
months and forgets to leave the maintainers team, the owners may move
|
||||||
|
him or her from the maintainers team to the advisors team.
|
||||||
|
For security reasons, Maintainers should use 2FA for their accounts and
|
||||||
|
if possible provide gpg signed commits.
|
||||||
|
https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/
|
||||||
|
https://help.github.com/articles/signing-commits-with-gpg/
|
||||||
|
|
||||||
|
## Owners
|
||||||
|
|
||||||
|
Since Gitea is a pure community organization without any company support,
|
||||||
|
to keep the development healthy we will elect three owners every year. All
|
||||||
|
contributors may vote to elect up to three candidates, one of which will
|
||||||
|
be the main owner, and the other two the assistant owners. When the new
|
||||||
|
owners have been elected, the old owners will give up ownership to the
|
||||||
|
newly elected owners. If an owner is unable to do so, the other owners
|
||||||
|
will assist in ceding ownership to the newly elected owners.
|
||||||
|
For security reasons, Owners or any account with write access (like a bot)
|
||||||
|
must use 2FA.
|
||||||
|
https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/
|
||||||
|
|
||||||
|
After the election, the new owners should proactively agree
|
||||||
|
with our [CONTRIBUTING](CONTRIBUTING.md) requirements in the
|
||||||
|
[Discord](https://discord.gg/NsatcWJ) #general channel. Below are the
|
||||||
|
words to speak:
|
||||||
|
|
||||||
|
```
|
||||||
|
I'm honored to having been elected an owner of Gitea, I agree with
|
||||||
|
[CONTRIBUTING](CONTRIBUTING.md). I will spend part of my time on Gitea
|
||||||
|
and lead the development of Gitea.
|
||||||
|
```
|
||||||
|
|
||||||
|
To honor the past owners, here's the history of the owners and the time
|
||||||
|
they served:
|
||||||
|
|
||||||
|
* 2016-11-04 ~ 2017-12-31
|
||||||
|
* [Lunny Xiao](https://github.com/lunny) <xiaolunwen@gmail.com>
|
||||||
|
* [Thomas Boerger](https://github.com/tboerger) <thomas@webhippie.de>
|
||||||
|
* [Kim Carlbäcker](https://github.com/bkcsoft) <kim.carlbacker@gmail.com>
|
||||||
|
|
||||||
|
* 2018-01-01 ~ 2018-12-31
|
||||||
|
* [Lunny Xiao](https://github.com/lunny) <xiaolunwen@gmail.com>
|
||||||
|
* [Lauris Bukšis-Haberkorns](https://github.com/lafriks) <lauris@nix.lv>
|
||||||
|
* [Kim Carlbäcker](https://github.com/bkcsoft) <kim.carlbacker@gmail.com>
|
||||||
|
|
||||||
|
* 2019-01-01 ~ 2019-12-31
|
||||||
|
* [Lunny Xiao](https://github.com/lunny) <xiaolunwen@gmail.com>
|
||||||
|
* [Lauris Bukšis-Haberkorns](https://github.com/lafriks) <lauris@nix.lv>
|
||||||
|
* [Matti Ranta](https://github.com/techknowlogick) <matti@mdranta.net>
|
||||||
|
|
||||||
|
## Versions
|
||||||
|
|
||||||
|
Gitea has the `master` branch as a tip branch and has version branches
|
||||||
|
such as `release/v0.9`. `release/v0.9` is a release branch and we will
|
||||||
|
tag `v0.9.0` for binary download. If `v0.9.0` has bugs, we will accept
|
||||||
|
pull requests on the `release/v0.9` branch and publish a `v0.9.1` tag,
|
||||||
|
after bringing the bug fix also to the master branch.
|
||||||
|
|
||||||
|
Since the `master` branch is a tip version, if you wish to use Gitea
|
||||||
|
in production, please download the latest release tag version. All the
|
||||||
|
branches will be protected via GitHub, all the PRs to every branch must
|
||||||
|
be reviewed by two maintainers and must pass the automatic tests.
|
||||||
|
|
||||||
|
## Releasing Gitea
|
||||||
|
|
||||||
|
* Let $vmaj, $vmin and $vpat be Major, Minor and Patch version numbers, $vpat should be rc1, rc2, 0, 1, ...... $vmaj.$vmin will be kept the same as milestones on github or gitea in future.
|
||||||
|
* Before releasing, confirm all the version's milestone issues or PRs has been resolved. Then discuss the release on discord channel #maintainers and get agreed with almost all the owners and mergers. Or you can declare the version and if nobody against in about serval hours.
|
||||||
|
* If this is a big version first you have to create PR for changelog on branch `master` with PRs with label `changelog` and after it has been merged do following steps:
|
||||||
|
* Create `-dev` tag as `git tag -s -F release.notes v$vmaj.$vmin.0-dev` and push the tag as `git push origin v$vmaj.$vmin.0-dev`.
|
||||||
|
* When CI has finished building tag then you have to create a new branch named `release/v$vmaj.$vmin`
|
||||||
|
* If it is bugfix version create PR for changelog on branch `release/v$vmaj.$vmin` and wait till it is reviewed and merged.
|
||||||
|
* Add a tag as `git tag -s -F release.notes v$vmaj.$vmin.$`, release.notes file could be a temporary file to only include the changelog this version which you added to `CHANGELOG.md`.
|
||||||
|
* And then push the tag as `git push origin v$vmaj.$vmin.$`. Drone CI will automatically created a release and upload all the compiled binary. (But currently it didn't add the release notes automatically. Maybe we should fix that.)
|
||||||
|
* If needed send PR for changelog on branch `master`.
|
||||||
|
* Send PR to [blog repository](https://github.com/go-gitea/blog) announcing the release.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Code that you contribute should use the standard copyright header:
|
||||||
|
|
||||||
|
```
|
||||||
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
```
|
||||||
|
|
||||||
|
Files in the repository contain copyright from the year they are added
|
||||||
|
to the year they are last changed. If the copyright author is changed,
|
||||||
|
just paste the header below the old one.
|
||||||
36
DCO
Normal file
36
DCO
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
Developer Certificate of Origin
|
||||||
|
Version 1.1
|
||||||
|
|
||||||
|
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
||||||
|
660 York Street, Suite 102,
|
||||||
|
San Francisco, CA 94110 USA
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this
|
||||||
|
license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
Developer's Certificate of Origin 1.1
|
||||||
|
|
||||||
|
By making a contribution to this project, I certify that:
|
||||||
|
|
||||||
|
(a) The contribution was created in whole or in part by me and I
|
||||||
|
have the right to submit it under the open source license
|
||||||
|
indicated in the file; or
|
||||||
|
|
||||||
|
(b) The contribution is based upon previous work that, to the best
|
||||||
|
of my knowledge, is covered under an appropriate open source
|
||||||
|
license and I have the right under that license to submit that
|
||||||
|
work with modifications, whether created in whole or in part
|
||||||
|
by me, under the same open source license (unless I am
|
||||||
|
permitted to submit under a different license), as indicated
|
||||||
|
in the file; or
|
||||||
|
|
||||||
|
(c) The contribution was provided directly to me by some other
|
||||||
|
person who certified (a), (b) or (c) and I have not modified
|
||||||
|
it.
|
||||||
|
|
||||||
|
(d) I understand and agree that this project and the contribution
|
||||||
|
are public and that a record of the contribution (including all
|
||||||
|
personal information I submit with it, including my sign-off) is
|
||||||
|
maintained indefinitely and may be redistributed consistent with
|
||||||
|
this project or the open source license(s) involved.
|
||||||
61
Dockerfile
Normal file
61
Dockerfile
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
###################################
|
||||||
|
#Build stage
|
||||||
|
FROM golang:1.12-alpine3.9 AS build-env
|
||||||
|
|
||||||
|
ARG GITEA_VERSION
|
||||||
|
ARG TAGS="sqlite sqlite_unlock_notify"
|
||||||
|
ENV TAGS "bindata $TAGS"
|
||||||
|
|
||||||
|
#Build deps
|
||||||
|
RUN apk --no-cache add build-base git
|
||||||
|
|
||||||
|
#Setup repo
|
||||||
|
COPY . ${GOPATH}/src/code.gitea.io/gitea
|
||||||
|
WORKDIR ${GOPATH}/src/code.gitea.io/gitea
|
||||||
|
|
||||||
|
#Checkout version if set
|
||||||
|
RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \
|
||||||
|
&& make clean generate build
|
||||||
|
|
||||||
|
FROM alpine:3.9
|
||||||
|
LABEL maintainer="maintainers@gitea.io"
|
||||||
|
|
||||||
|
EXPOSE 22 3000
|
||||||
|
|
||||||
|
RUN apk --no-cache add \
|
||||||
|
bash \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
gettext \
|
||||||
|
git \
|
||||||
|
linux-pam \
|
||||||
|
openssh \
|
||||||
|
s6 \
|
||||||
|
sqlite \
|
||||||
|
su-exec \
|
||||||
|
tzdata
|
||||||
|
|
||||||
|
RUN addgroup \
|
||||||
|
-S -g 1000 \
|
||||||
|
git && \
|
||||||
|
adduser \
|
||||||
|
-S -H -D \
|
||||||
|
-h /data/git \
|
||||||
|
-s /bin/bash \
|
||||||
|
-u 1000 \
|
||||||
|
-G git \
|
||||||
|
git && \
|
||||||
|
echo "git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" | chpasswd
|
||||||
|
|
||||||
|
ENV USER git
|
||||||
|
ENV GITEA_CUSTOM /data/gitea
|
||||||
|
|
||||||
|
VOLUME ["/data"]
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/bin/entrypoint"]
|
||||||
|
CMD ["/bin/s6-svscan", "/etc/s6"]
|
||||||
|
|
||||||
|
COPY docker /
|
||||||
|
COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
|
||||||
|
RUN ln -s /app/gitea/gitea /usr/local/bin/gitea
|
||||||
1341
Gopkg.lock
generated
Normal file
1341
Gopkg.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
119
Gopkg.toml
Normal file
119
Gopkg.toml
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
|
||||||
|
ignored = ["google.golang.org/appengine*"]
|
||||||
|
|
||||||
|
[prune]
|
||||||
|
go-tests = true
|
||||||
|
unused-packages = true
|
||||||
|
non-go = true
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "code.gitea.io/git"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "code.gitea.io/sdk"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
revision = "05d86ea8f6e30456949f612cf68cf4a27ce8c9c5"
|
||||||
|
name = "github.com/blevesearch/bleve"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
revision = "12dd70caea0268ac0d6c2707d0611ef601e7c64e"
|
||||||
|
name = "golang.org/x/crypto"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/sys"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
revision = "2bf8f2a19ec09c670e931282edfe6567f6be21c9"
|
||||||
|
name = "golang.org/x/text"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/net"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
name = "github.com/go-xorm/xorm"
|
||||||
|
revision = "a6300f2a45e05a8f75f00a1d6188049fe7851915"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
name = "github.com/go-xorm/builder"
|
||||||
|
version = "0.3.3"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
name = "github.com/go-sql-driver/mysql"
|
||||||
|
revision = "c45f530f8e7fe40f4687eaa50d0c8c5f1b66f9e0"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
name = "github.com/mattn/go-sqlite3"
|
||||||
|
revision = "c7c4067b79cc51e6dfdcef5c702e74b1e0fa7c75"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
name = "github.com/gorilla/mux"
|
||||||
|
revision = "757bef944d0f21880861c2dd9c871ca543023cba"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/gorilla/context"
|
||||||
|
version = "1.1.1"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/lafriks/xormstore"
|
||||||
|
version = "1.0.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/lunny/dingtalk_webhook"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/markbates/goth"
|
||||||
|
version = "1.47.2"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/mcuadros/go-version"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/russross/blackfriday"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/tstranex/u2f"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/editorconfig/editorconfig-core-go.v1"
|
||||||
|
version = "1.2.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "v2"
|
||||||
|
name = "gopkg.in/gomail.v2"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/ini.v1"
|
||||||
|
version = "1.31.1"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/ldap.v3"
|
||||||
|
version = "3.0.1"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/macaron.v1"
|
||||||
|
version = "1.2.4"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/testfixtures.v2"
|
||||||
|
version = "2.0.0"
|
||||||
|
|
||||||
|
[[override]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/oauth2"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/prometheus/client_golang"
|
||||||
|
version = "0.9.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/mvdan/xurls"
|
||||||
|
version = "2.0.0"
|
||||||
34
LICENSE
34
LICENSE
@@ -1,20 +1,20 @@
|
|||||||
Copyright (c) 2015 Daniel Theophanes
|
Copyright (c) 2016 The Gitea Authors
|
||||||
|
Copyright (c) 2015 The Gogs Authors
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
warranty. In no event will the authors be held liable for any damages
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
arising from the use of this software.
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
The above copyright notice and this permission notice shall be included in
|
||||||
including commercial applications, and to alter it and redistribute it
|
all copies or substantial portions of the Software.
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
claim that you wrote the original software. If you use this software
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
in a product, an acknowledgment in the product documentation would be
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
appreciated but is not required.
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
misrepresented as being the original software.
|
THE SOFTWARE.
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
|
|||||||
30
MAINTAINERS
Normal file
30
MAINTAINERS
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
Alexey Makhov <amakhov@avito.ru> (@makhov)
|
||||||
|
Andrey Nering <andrey.nering@gmail.com> (@andreynering)
|
||||||
|
Bo-Yi Wu <appleboy.tw@gmail.com> (@appleboy)
|
||||||
|
Ethan Koenig <ethantkoenig@gmail.com> (@ethantkoenig)
|
||||||
|
Kees de Vries <bouwko@gmail.com> (@Bwko)
|
||||||
|
Kim Carlbäcker <kim.carlbacker@gmail.com> (@bkcsoft)
|
||||||
|
LefsFlare <nobody@nobody.tld> (@LefsFlarey)
|
||||||
|
Lunny Xiao <xiaolunwen@gmail.com> (@lunny)
|
||||||
|
Matthias Loibl <mail@matthiasloibl.com> (@metalmatze)
|
||||||
|
Morgan Bazalgette <the@howl.moe> (@thehowl)
|
||||||
|
Rachid Zarouali <nobody@nobody.tld> (@xinity)
|
||||||
|
Rémy Boulanouar <admin@dblk.org> (@DblK)
|
||||||
|
Sandro Santilli <strk@kbt.io> (@strk)
|
||||||
|
Thibault Meyer <meyer.thibault@gmail.com> (@0xbaadf00d)
|
||||||
|
Thomas Boerger <thomas@webhippie.de> (@tboerger)
|
||||||
|
Patrick G <geek1011@outlook.com> (@geek1011)
|
||||||
|
Antoine Girard <sapk@sapk.fr> (@sapk)
|
||||||
|
Lauris Bukšis-Haberkorns <lauris@nix.lv> (@lafriks)
|
||||||
|
Jonas Östanbäck <jonas.ostanback@gmail.com> (@cez81)
|
||||||
|
David Schneiderbauer <dschneiderbauer@gmail.com> (@daviian)
|
||||||
|
Peter Žeby <morlinest@gmail.com> (@morlinest)
|
||||||
|
Matti Ranta <matti@mdranta.net> (@techknowlogick)
|
||||||
|
Jonas Franz <info@jonasfranz.software> (@jonasfranz)
|
||||||
|
Alexey Terentyev <axifnx@gmail.com> (@axifive)
|
||||||
|
Lanre Adelowo <yo@lanre.wtf> (@adelowo)
|
||||||
|
Konrad Langenberg <k@knt.li> (@kolaente)
|
||||||
|
He-Long Zhang <outman99@hotmail.com> (@BetaCat0)
|
||||||
|
Andrew Thornton <art27@cantab.net> (@zeripath)
|
||||||
|
John Olheiser <john.olheiser@gmail.com> (@jolheiser)
|
||||||
|
Richard Mahn <rich.mahn@unfoldingword.org> (@richmahn)
|
||||||
443
Makefile
Normal file
443
Makefile
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
DIST := dist
|
||||||
|
IMPORT := code.gitea.io/gitea
|
||||||
|
|
||||||
|
GO ?= go
|
||||||
|
SED_INPLACE := sed -i
|
||||||
|
SHASUM ?= shasum -a 256
|
||||||
|
|
||||||
|
export PATH := $($(GO) env GOPATH)/bin:$(PATH)
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
EXECUTABLE := gitea.exe
|
||||||
|
else
|
||||||
|
EXECUTABLE := gitea
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S),Darwin)
|
||||||
|
SED_INPLACE := sed -i ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
BINDATA := modules/{options,public,templates}/bindata.go
|
||||||
|
GOFILES := $(shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go")
|
||||||
|
GOFMT ?= gofmt -s
|
||||||
|
|
||||||
|
GOFLAGS := -i -v
|
||||||
|
EXTRA_GOFLAGS ?=
|
||||||
|
|
||||||
|
ifneq ($(DRONE_TAG),)
|
||||||
|
VERSION ?= $(subst v,,$(DRONE_TAG))
|
||||||
|
GITEA_VERSION := $(VERSION)
|
||||||
|
else
|
||||||
|
ifneq ($(DRONE_BRANCH),)
|
||||||
|
VERSION ?= $(subst release/v,,$(DRONE_BRANCH))
|
||||||
|
else
|
||||||
|
VERSION ?= master
|
||||||
|
endif
|
||||||
|
GITEA_VERSION := $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//')
|
||||||
|
endif
|
||||||
|
|
||||||
|
LDFLAGS := -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)"
|
||||||
|
|
||||||
|
PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/)))
|
||||||
|
SOURCES ?= $(shell find . -name "*.go" -type f)
|
||||||
|
|
||||||
|
TAGS ?=
|
||||||
|
|
||||||
|
TMPDIR := $(shell mktemp -d 2>/dev/null || mktemp -d -t 'gitea-temp')
|
||||||
|
|
||||||
|
SWAGGER_SPEC := templates/swagger/v1_json.tmpl
|
||||||
|
SWAGGER_SPEC_S_TMPL := s|"basePath":\s*"/api/v1"|"basePath": "{{AppSubUrl}}/api/v1"|g
|
||||||
|
SWAGGER_SPEC_S_JSON := s|"basePath":\s*"{{AppSubUrl}}/api/v1"|"basePath": "/api/v1"|g
|
||||||
|
|
||||||
|
TEST_MYSQL_HOST ?= mysql:3306
|
||||||
|
TEST_MYSQL_DBNAME ?= testgitea
|
||||||
|
TEST_MYSQL_USERNAME ?= root
|
||||||
|
TEST_MYSQL_PASSWORD ?=
|
||||||
|
TEST_MYSQL8_HOST ?= mysql8:3306
|
||||||
|
TEST_MYSQL8_DBNAME ?= testgitea
|
||||||
|
TEST_MYSQL8_USERNAME ?= root
|
||||||
|
TEST_MYSQL8_PASSWORD ?=
|
||||||
|
TEST_PGSQL_HOST ?= pgsql:5432
|
||||||
|
TEST_PGSQL_DBNAME ?= testgitea
|
||||||
|
TEST_PGSQL_USERNAME ?= postgres
|
||||||
|
TEST_PGSQL_PASSWORD ?= postgres
|
||||||
|
TEST_MSSQL_HOST ?= mssql:1433
|
||||||
|
TEST_MSSQL_DBNAME ?= gitea
|
||||||
|
TEST_MSSQL_USERNAME ?= sa
|
||||||
|
TEST_MSSQL_PASSWORD ?= MwantsaSecurePassword1
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
EXECUTABLE := gitea.exe
|
||||||
|
else
|
||||||
|
EXECUTABLE := gitea
|
||||||
|
endif
|
||||||
|
|
||||||
|
# $(call strip-suffix,filename)
|
||||||
|
strip-suffix = $(firstword $(subst ., ,$(1)))
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: build
|
||||||
|
|
||||||
|
include docker/Makefile
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(GO) clean -i ./...
|
||||||
|
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) \
|
||||||
|
integrations*.test \
|
||||||
|
integrations/gitea-integration-pgsql/ integrations/gitea-integration-mysql/ integrations/gitea-integration-mysql8/ integrations/gitea-integration-sqlite/ \
|
||||||
|
integrations/gitea-integration-mssql/ integrations/indexers-mysql/ integrations/indexers-mysql8/ integrations/indexers-pgsql integrations/indexers-sqlite \
|
||||||
|
integrations/indexers-mssql integrations/mysql.ini integrations/mysql8.ini integrations/pgsql.ini integrations/mssql.ini
|
||||||
|
|
||||||
|
.PHONY: fmt
|
||||||
|
fmt:
|
||||||
|
$(GOFMT) -w $(GOFILES)
|
||||||
|
|
||||||
|
.PHONY: vet
|
||||||
|
vet:
|
||||||
|
$(GO) vet $(PACKAGES)
|
||||||
|
|
||||||
|
.PHONY: generate
|
||||||
|
generate:
|
||||||
|
@hash go-bindata > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/jteeuwen/go-bindata/go-bindata; \
|
||||||
|
fi
|
||||||
|
$(GO) generate $(PACKAGES)
|
||||||
|
|
||||||
|
.PHONY: generate-swagger
|
||||||
|
generate-swagger:
|
||||||
|
@hash swagger > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/go-swagger/go-swagger/cmd/swagger; \
|
||||||
|
fi
|
||||||
|
swagger generate spec -o './$(SWAGGER_SPEC)'
|
||||||
|
$(SED_INPLACE) '$(SWAGGER_SPEC_S_TMPL)' './$(SWAGGER_SPEC)'
|
||||||
|
|
||||||
|
.PHONY: swagger-check
|
||||||
|
swagger-check: generate-swagger
|
||||||
|
@diff=$$(git diff '$(SWAGGER_SPEC)'); \
|
||||||
|
if [ -n "$$diff" ]; then \
|
||||||
|
echo "Please run 'make generate-swagger' and commit the result:"; \
|
||||||
|
echo "$${diff}"; \
|
||||||
|
exit 1; \
|
||||||
|
fi;
|
||||||
|
|
||||||
|
.PHONY: swagger-validate
|
||||||
|
swagger-validate:
|
||||||
|
@hash swagger > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/go-swagger/go-swagger/cmd/swagger; \
|
||||||
|
fi
|
||||||
|
$(SED_INPLACE) '$(SWAGGER_SPEC_S_JSON)' './$(SWAGGER_SPEC)'
|
||||||
|
swagger validate './$(SWAGGER_SPEC)'
|
||||||
|
$(SED_INPLACE) '$(SWAGGER_SPEC_S_TMPL)' './$(SWAGGER_SPEC)'
|
||||||
|
|
||||||
|
.PHONY: errcheck
|
||||||
|
errcheck:
|
||||||
|
@hash errcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/kisielk/errcheck; \
|
||||||
|
fi
|
||||||
|
errcheck $(PACKAGES)
|
||||||
|
|
||||||
|
.PHONY: lint
|
||||||
|
lint:
|
||||||
|
@hash revive > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/mgechev/revive; \
|
||||||
|
fi
|
||||||
|
revive -config .revive.toml -exclude=./vendor/... ./... || exit 1
|
||||||
|
|
||||||
|
.PHONY: misspell-check
|
||||||
|
misspell-check:
|
||||||
|
@hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/client9/misspell/cmd/misspell; \
|
||||||
|
fi
|
||||||
|
misspell -error -i unknwon,destory $(GOFILES)
|
||||||
|
|
||||||
|
.PHONY: misspell
|
||||||
|
misspell:
|
||||||
|
@hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/client9/misspell/cmd/misspell; \
|
||||||
|
fi
|
||||||
|
misspell -w -i unknwon $(GOFILES)
|
||||||
|
|
||||||
|
.PHONY: fmt-check
|
||||||
|
fmt-check:
|
||||||
|
# get all go files and run go fmt on them
|
||||||
|
@diff=$$($(GOFMT) -d $(GOFILES)); \
|
||||||
|
if [ -n "$$diff" ]; then \
|
||||||
|
echo "Please run 'make fmt' and commit the result:"; \
|
||||||
|
echo "$${diff}"; \
|
||||||
|
exit 1; \
|
||||||
|
fi;
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test:
|
||||||
|
$(GO) test -tags='sqlite sqlite_unlock_notify' $(PACKAGES)
|
||||||
|
|
||||||
|
.PHONY: coverage
|
||||||
|
coverage:
|
||||||
|
@hash gocovmerge > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/wadey/gocovmerge; \
|
||||||
|
fi
|
||||||
|
gocovmerge integration.coverage.out $(shell find . -type f -name "coverage.out") > coverage.all;\
|
||||||
|
|
||||||
|
.PHONY: unit-test-coverage
|
||||||
|
unit-test-coverage:
|
||||||
|
$(GO) test -tags='sqlite sqlite_unlock_notify' -cover -coverprofile coverage.out $(PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1
|
||||||
|
|
||||||
|
.PHONY: vendor
|
||||||
|
vendor:
|
||||||
|
@hash dep > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/golang/dep/cmd/dep; \
|
||||||
|
fi
|
||||||
|
dep ensure -vendor-only
|
||||||
|
|
||||||
|
.PHONY: test-vendor
|
||||||
|
test-vendor: vendor
|
||||||
|
@diff=$$(git diff vendor/); \
|
||||||
|
if [ -n "$$diff" ]; then \
|
||||||
|
echo "Please run 'make vendor' and commit the result:"; \
|
||||||
|
echo "$${diff}"; \
|
||||||
|
exit 1; \
|
||||||
|
fi;
|
||||||
|
#TODO add dep status -missing when implemented
|
||||||
|
|
||||||
|
.PHONY: test-sqlite
|
||||||
|
test-sqlite: integrations.sqlite.test
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test
|
||||||
|
|
||||||
|
.PHONY: test-sqlite-migration
|
||||||
|
test-sqlite-migration: migrations.sqlite.test
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./migrations.sqlite.test
|
||||||
|
|
||||||
|
generate-ini:
|
||||||
|
sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \
|
||||||
|
integrations/mysql.ini.tmpl > integrations/mysql.ini
|
||||||
|
sed -e 's|{{TEST_MYSQL8_HOST}}|${TEST_MYSQL8_HOST}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL8_DBNAME}}|${TEST_MYSQL8_DBNAME}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL8_USERNAME}}|${TEST_MYSQL8_USERNAME}|g' \
|
||||||
|
-e 's|{{TEST_MYSQL8_PASSWORD}}|${TEST_MYSQL8_PASSWORD}|g' \
|
||||||
|
integrations/mysql8.ini.tmpl > integrations/mysql8.ini
|
||||||
|
sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \
|
||||||
|
-e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \
|
||||||
|
-e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \
|
||||||
|
-e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \
|
||||||
|
integrations/pgsql.ini.tmpl > integrations/pgsql.ini
|
||||||
|
sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \
|
||||||
|
-e 's|{{TEST_MSSQL_DBNAME}}|${TEST_MSSQL_DBNAME}|g' \
|
||||||
|
-e 's|{{TEST_MSSQL_USERNAME}}|${TEST_MSSQL_USERNAME}|g' \
|
||||||
|
-e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \
|
||||||
|
integrations/mssql.ini.tmpl > integrations/mssql.ini
|
||||||
|
|
||||||
|
.PHONY: test-mysql
|
||||||
|
test-mysql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.test
|
||||||
|
|
||||||
|
.PHONY: test-mysql-migration
|
||||||
|
test-mysql-migration: migrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./migrations.test
|
||||||
|
|
||||||
|
.PHONY: test-mysql8
|
||||||
|
test-mysql8: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql8.ini ./integrations.test
|
||||||
|
|
||||||
|
.PHONY: test-mysql8-migration
|
||||||
|
test-mysql8-migration: migrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql8.ini ./migrations.test
|
||||||
|
|
||||||
|
.PHONY: test-pgsql
|
||||||
|
test-pgsql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test
|
||||||
|
|
||||||
|
.PHONY: test-pgsql-migration
|
||||||
|
test-pgsql-migration: migrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./migrations.test
|
||||||
|
|
||||||
|
.PHONY: test-mssql
|
||||||
|
test-mssql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./integrations.test
|
||||||
|
|
||||||
|
.PHONY: test-mssql-migration
|
||||||
|
test-mssql-migration: migrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./migrations.test
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: bench-sqlite
|
||||||
|
bench-sqlite: integrations.sqlite.test
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
|
||||||
|
|
||||||
|
.PHONY: bench-mysql
|
||||||
|
bench-mysql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
|
||||||
|
|
||||||
|
.PHONY: bench-mssql
|
||||||
|
bench-mssql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./integrations.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
|
||||||
|
|
||||||
|
.PHONY: bench-pgsql
|
||||||
|
bench-pgsql: integrations.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: integration-test-coverage
|
||||||
|
integration-test-coverage: integrations.cover.test generate-ini
|
||||||
|
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out
|
||||||
|
|
||||||
|
integrations.test: $(SOURCES)
|
||||||
|
$(GO) test -c code.gitea.io/gitea/integrations -o integrations.test
|
||||||
|
|
||||||
|
integrations.sqlite.test: $(SOURCES)
|
||||||
|
$(GO) test -c code.gitea.io/gitea/integrations -o integrations.sqlite.test -tags 'sqlite sqlite_unlock_notify'
|
||||||
|
|
||||||
|
integrations.cover.test: $(SOURCES)
|
||||||
|
$(GO) test -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(PACKAGES) | tr ' ' ',') -o integrations.cover.test
|
||||||
|
|
||||||
|
.PHONY: migrations.test
|
||||||
|
migrations.test: $(SOURCES)
|
||||||
|
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.test
|
||||||
|
|
||||||
|
.PHONY: migrations.sqlite.test
|
||||||
|
migrations.sqlite.test: $(SOURCES)
|
||||||
|
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.sqlite.test -tags 'sqlite sqlite_unlock_notify'
|
||||||
|
|
||||||
|
.PHONY: check
|
||||||
|
check: test
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install: $(wildcard *.go)
|
||||||
|
$(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(SOURCES)
|
||||||
|
$(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
|
||||||
|
|
||||||
|
.PHONY: release
|
||||||
|
release: release-dirs release-windows release-linux release-darwin release-copy release-compress release-check
|
||||||
|
|
||||||
|
.PHONY: release-dirs
|
||||||
|
release-dirs:
|
||||||
|
mkdir -p $(DIST)/binaries $(DIST)/release
|
||||||
|
|
||||||
|
.PHONY: release-windows
|
||||||
|
release-windows:
|
||||||
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u src.techknowlogick.com/xgo; \
|
||||||
|
fi
|
||||||
|
xgo -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
|
||||||
|
ifeq ($(CI),drone)
|
||||||
|
cp /build/* $(DIST)/binaries
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: release-linux
|
||||||
|
release-linux:
|
||||||
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u src.techknowlogick.com/xgo; \
|
||||||
|
fi
|
||||||
|
xgo -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64,linux/mips64le,linux/mips,linux/mipsle' -out gitea-$(VERSION) .
|
||||||
|
ifeq ($(CI),drone)
|
||||||
|
cp /build/* $(DIST)/binaries
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: release-darwin
|
||||||
|
release-darwin:
|
||||||
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u src.techknowlogick.com/xgo; \
|
||||||
|
fi
|
||||||
|
xgo -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out gitea-$(VERSION) .
|
||||||
|
ifeq ($(CI),drone)
|
||||||
|
cp /build/* $(DIST)/binaries
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: release-copy
|
||||||
|
release-copy:
|
||||||
|
cd $(DIST); for file in `find /build -type f -name "*"`; do cp $${file} ./release/; done;
|
||||||
|
|
||||||
|
.PHONY: release-check
|
||||||
|
release-check:
|
||||||
|
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "checksumming $${file}" && $(SHASUM) `echo $${file} | sed 's/^..//'` > $${file}.sha256; done;
|
||||||
|
|
||||||
|
.PHONY: release-compress
|
||||||
|
release-compress:
|
||||||
|
@hash gxz > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
$(GO) get -u github.com/ulikunitz/xz/cmd/gxz; \
|
||||||
|
fi
|
||||||
|
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done;
|
||||||
|
|
||||||
|
.PHONY: javascripts
|
||||||
|
javascripts: public/js/index.js
|
||||||
|
|
||||||
|
.IGNORE: public/js/index.js
|
||||||
|
public/js/index.js: $(JAVASCRIPTS)
|
||||||
|
cat $< >| $@
|
||||||
|
|
||||||
|
.PHONY: stylesheets-check
|
||||||
|
stylesheets-check: generate-stylesheets
|
||||||
|
@diff=$$(git diff public/css/*); \
|
||||||
|
if [ -n "$$diff" ]; then \
|
||||||
|
echo "Please run 'make generate-stylesheets' and commit the result:"; \
|
||||||
|
echo "$${diff}"; \
|
||||||
|
exit 1; \
|
||||||
|
fi;
|
||||||
|
|
||||||
|
.PHONY: generate-stylesheets
|
||||||
|
generate-stylesheets:
|
||||||
|
@hash npx > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
echo "Please install npm version 5.2+"; \
|
||||||
|
exit 1; \
|
||||||
|
fi;
|
||||||
|
$(eval BROWSERS := "> 1%, last 2 firefox versions, last 2 safari versions, ie 11")
|
||||||
|
npx lessc --clean-css public/less/index.less public/css/index.css
|
||||||
|
$(foreach file, $(filter-out public/less/themes/_base.less, $(wildcard public/less/themes/*)),npx lessc --clean-css public/less/themes/$(notdir $(file)) > public/css/theme-$(notdir $(call strip-suffix,$(file))).css;)
|
||||||
|
$(foreach file, $(wildcard public/css/*),npx postcss --use autoprefixer --autoprefixer.browsers $(BROWSERS) -o $(file) $(file);)
|
||||||
|
|
||||||
|
.PHONY: swagger-ui
|
||||||
|
swagger-ui:
|
||||||
|
rm -Rf public/vendor/assets/swagger-ui
|
||||||
|
git clone --depth=10 -b v3.13.4 --single-branch https://github.com/swagger-api/swagger-ui.git $(TMPDIR)/swagger-ui
|
||||||
|
mv $(TMPDIR)/swagger-ui/dist public/vendor/assets/swagger-ui
|
||||||
|
rm -Rf $(TMPDIR)/swagger-ui
|
||||||
|
$(SED_INPLACE) "s;http://petstore.swagger.io/v2/swagger.json;../../../swagger.v1.json;g" public/vendor/assets/swagger-ui/index.html
|
||||||
|
|
||||||
|
.PHONY: update-translations
|
||||||
|
update-translations:
|
||||||
|
mkdir -p ./translations
|
||||||
|
cd ./translations && curl -L https://crowdin.com/download/project/gitea.zip > gitea.zip && unzip gitea.zip
|
||||||
|
rm ./translations/gitea.zip
|
||||||
|
$(SED_INPLACE) -e 's/="/=/g' -e 's/"$$//g' ./translations/*.ini
|
||||||
|
$(SED_INPLACE) -e 's/\\"/"/g' ./translations/*.ini
|
||||||
|
mv ./translations/*.ini ./options/locale/
|
||||||
|
rmdir ./translations
|
||||||
|
|
||||||
|
.PHONY: generate-images
|
||||||
|
generate-images:
|
||||||
|
mkdir -p $(TMPDIR)/images
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 880 -h 880 -e $(PWD)/public/img/gitea-lg.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 512 -h 512 -e $(PWD)/public/img/gitea-512.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 192 -h 192 -e $(PWD)/public/img/gitea-192.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 120 -h 120 -jC -i layer1 -e $(TMPDIR)/images/sm-1.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 120 -h 120 -jC -i layer2 -e $(TMPDIR)/images/sm-2.png
|
||||||
|
composite -compose atop $(TMPDIR)/images/sm-2.png $(TMPDIR)/images/sm-1.png $(PWD)/public/img/gitea-sm.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 200 -h 200 -e $(PWD)/public/img/avatar_default.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 180 -h 180 -e $(PWD)/public/img/favicon.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 128 -h 128 -e $(TMPDIR)/images/128-raw.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 64 -h 64 -e $(TMPDIR)/images/64-raw.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 32 -h 32 -jC -i layer1 -e $(TMPDIR)/images/32-1.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 32 -h 32 -jC -i layer2 -e $(TMPDIR)/images/32-2.png
|
||||||
|
composite -compose atop $(TMPDIR)/images/32-2.png $(TMPDIR)/images/32-1.png $(TMPDIR)/images/32-raw.png
|
||||||
|
inkscape -f $(PWD)/assets/logo.svg -w 16 -h 16 -jC -i layer1 -e $(TMPDIR)/images/16-raw.png
|
||||||
|
zopflipng $(TMPDIR)/images/128-raw.png $(TMPDIR)/images/128.png
|
||||||
|
zopflipng $(TMPDIR)/images/64-raw.png $(TMPDIR)/images/64.png
|
||||||
|
zopflipng $(TMPDIR)/images/32-raw.png $(TMPDIR)/images/32.png
|
||||||
|
zopflipng $(TMPDIR)/images/16-raw.png $(TMPDIR)/images/16.png
|
||||||
|
rm -f $(TMPDIR)/images/*-*.png
|
||||||
|
convert $(TMPDIR)/images/16.png $(TMPDIR)/images/32.png \
|
||||||
|
$(TMPDIR)/images/64.png $(TMPDIR)/images/128.png \
|
||||||
|
$(PWD)/public/img/favicon.ico
|
||||||
|
rm -rf $(TMPDIR)/images
|
||||||
|
|
||||||
|
.PHONY: pr
|
||||||
|
pr:
|
||||||
|
$(GO) run contrib/pr/checkout.go $(PR)
|
||||||
123
README.md
123
README.md
@@ -1,18 +1,111 @@
|
|||||||
### Minimal windows service stub
|
[简体中文](https://github.com/go-gitea/gitea/blob/master/README_ZH.md)
|
||||||
|
|
||||||
Programs designed to run from most *nix style operating systems
|
# Gitea - Git with a cup of tea
|
||||||
can import this package to enable running programs as services without modifying
|
|
||||||
them.
|
|
||||||
|
|
||||||
```
|
[](https://drone.gitea.io/go-gitea/gitea)
|
||||||
import _ "github.com/kardianos/minwinsvc"
|
[](https://discord.gg/NsatcWJ)
|
||||||
```
|
[](https://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
|
||||||
|
[](https://codecov.io/gh/go-gitea/gitea)
|
||||||
|
[](https://goreportcard.com/report/code.gitea.io/gitea)
|
||||||
|
[](https://godoc.org/code.gitea.io/gitea)
|
||||||
|
[](https://github.com/go-gitea/gitea/releases/latest)
|
||||||
|
[](https://www.codetriage.com/go-gitea/gitea)
|
||||||
|
[](https://opencollective.com/gitea)
|
||||||
|
|
||||||
If you need more control over the exit behavior, set
|
## Purpose
|
||||||
```
|
|
||||||
minwinsvc.SetOnExit(func() {
|
The goal of this project is to make the easiest, fastest, and most
|
||||||
// Do something.
|
painless way of setting up a self-hosted Git service.
|
||||||
// Within 10 seconds call:
|
Using Go, this can be done with an independent binary distribution across
|
||||||
os.Exit(0)
|
**all platforms** which Go supports, including Linux, macOS, and Windows
|
||||||
})
|
on x86, amd64, ARM and PowerPC architectures.
|
||||||
```
|
Want to try it before doing anything else?
|
||||||
|
Do it [with the online demo](https://try.gitea.io/)!
|
||||||
|
This project has been
|
||||||
|
[forked](https://blog.gitea.io/2016/12/welcome-to-gitea/) from
|
||||||
|
[Gogs](https://gogs.io) since 2016.11 but changed a lot.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
From the root of the source tree, run:
|
||||||
|
|
||||||
|
TAGS="bindata" make generate all
|
||||||
|
|
||||||
|
More info: https://docs.gitea.io/en-us/install-from-source/
|
||||||
|
|
||||||
|
## Using
|
||||||
|
|
||||||
|
./gitea web
|
||||||
|
|
||||||
|
NOTE: If you're interested in using our APIs, we have experimental
|
||||||
|
support with [documentation](https://try.gitea.io/api/swagger).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Expected workflow is: Fork -> Patch -> Push -> Pull Request
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
1. **YOU MUST READ THE [CONTRIBUTORS GUIDE](CONTRIBUTING.md) BEFORE STARTING TO WORK ON A PULL REQUEST.**
|
||||||
|
2. If you have found a vulnerability in the project, please write privately to **security@gitea.io**. Thanks!
|
||||||
|
|
||||||
|
## Further information
|
||||||
|
|
||||||
|
For more information and instructions about how to install Gitea, please look
|
||||||
|
at our [documentation](https://docs.gitea.io/en-us/). If you have questions
|
||||||
|
that are not covered by the documentation, you can get in contact with us on
|
||||||
|
our [Discord server](https://discord.gg/NsatcWJ),
|
||||||
|
or [forum](https://discourse.gitea.io/)!
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
* [Maintainers](https://github.com/orgs/go-gitea/people)
|
||||||
|
* [Contributors](https://github.com/go-gitea/gitea/graphs/contributors)
|
||||||
|
* [Translators](options/locale/TRANSLATORS)
|
||||||
|
|
||||||
|
## Backers
|
||||||
|
|
||||||
|
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/gitea#backer)]
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/gitea#backers" target="_blank"><img src="https://opencollective.com/gitea/backers.svg?width=890"></a>
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
|
||||||
|
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/gitea#sponsor)]
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/0/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/0/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/1/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/1/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/2/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/2/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/3/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/3/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/4/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/4/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/5/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/5/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/6/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/6/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/7/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/7/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/8/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/8/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/gitea/sponsor/9/website" target="_blank"><img src="https://opencollective.com/gitea/sponsor/9/avatar.svg"></a>
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
**How do you pronounce Gitea?**
|
||||||
|
|
||||||
|
Gitea is pronounced [/ɡɪ’ti:/](https://youtu.be/EM71-2uDAoY) as in "gi-tea" with a hard g.
|
||||||
|
|
||||||
|
**Why is this not hosted on a Gitea instance?**
|
||||||
|
|
||||||
|
We're [working on it](https://github.com/go-gitea/gitea/issues/1029).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License.
|
||||||
|
See the [LICENSE](https://github.com/go-gitea/gitea/blob/master/LICENSE) file
|
||||||
|
for the full license text.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
Looking for an overview of the interface? Check it out!
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|:---:|:---:|:---:|
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
|||||||
51
README_ZH.md
Normal file
51
README_ZH.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
[English](https://github.com/go-gitea/gitea/blob/master/README.md)
|
||||||
|
|
||||||
|
# Gitea - Git with a cup of tea
|
||||||
|
|
||||||
|
[](https://drone.gitea.io/go-gitea/gitea)
|
||||||
|
[](https://discord.gg/NsatcWJ)
|
||||||
|
[](https://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
|
||||||
|
[](https://coverage.gitea.io/go-gitea/gitea)
|
||||||
|
[](https://goreportcard.com/report/code.gitea.io/gitea)
|
||||||
|
[](https://godoc.org/code.gitea.io/gitea)
|
||||||
|
[](https://github.com/go-gitea/gitea/releases/latest)
|
||||||
|
[](https://opencollective.com/gitea)
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC。
|
||||||
|
|
||||||
|
如果您想试用一下,请访问 [在线Demo](https://try.gitea.io/)!
|
||||||
|
|
||||||
|
## 提示
|
||||||
|
|
||||||
|
1. **开始贡献代码之前请确保你已经看过了 [贡献者向导(英文)](CONTRIBUTING.md)**.
|
||||||
|
2. 所有的安全问题,请私下发送邮件给 **security@gitea.io**。谢谢!
|
||||||
|
3. 如果你要使用API,请参见 [API 文档](https://godoc.org/code.gitea.io/sdk/gitea).
|
||||||
|
|
||||||
|
## 文档
|
||||||
|
|
||||||
|
关于如何安装请访问我们的 [文档站](https://docs.gitea.io/zh-cn/),如果没有找到对应的文档,你也可以通过 [Discord - 英文](https://discord.gg/NsatcWJ) 和 QQ群 328432459 来和我们交流。
|
||||||
|
|
||||||
|
## 贡献流程
|
||||||
|
|
||||||
|
Fork -> Patch -> Push -> Pull Request
|
||||||
|
|
||||||
|
## 作者
|
||||||
|
|
||||||
|
* [Maintainers](https://github.com/orgs/go-gitea/people)
|
||||||
|
* [Contributors](https://github.com/go-gitea/gitea/graphs/contributors)
|
||||||
|
* [Translators](options/locale/TRANSLATORS)
|
||||||
|
|
||||||
|
## 授权许可
|
||||||
|
|
||||||
|
本项目采用 MIT 开源授权许可证,完整的授权说明已放置在 [LICENSE](https://github.com/go-gitea/gitea/blob/master/LICENSE) 文件中。
|
||||||
|
|
||||||
|
## 截图
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|:---:|:---:|:---:|
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
||||
|
||||||
|
||||
|
||||||
160
assets/logo.svg
Normal file
160
assets/logo.svg
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
viewBox="0 0 135.46667 135.46667"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
inkscape:version="0.92.1 r15371"
|
||||||
|
inkscape:export-filename=""
|
||||||
|
inkscape:export-xdpi="48.000004"
|
||||||
|
inkscape:export-ydpi="48.000004">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.70710678"
|
||||||
|
inkscape:cx="418.13805"
|
||||||
|
inkscape:cy="177.57445"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer2"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
width="256px"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1137"
|
||||||
|
inkscape:window-x="1912"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:measure-start="283.373,243.952"
|
||||||
|
inkscape:measure-end="290.267,236.527">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,0"
|
||||||
|
orientation="0,512"
|
||||||
|
id="guide3699"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="135.46667,0"
|
||||||
|
orientation="-512,0"
|
||||||
|
id="guide3701"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="135.46667,135.46667"
|
||||||
|
orientation="0,-512"
|
||||||
|
id="guide3703"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,135.46667"
|
||||||
|
orientation="512,0"
|
||||||
|
id="guide3705"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-161.53334)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
style="fill:#609926;fill-opacity:1;stroke:#428f29;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 27.709937,195.15095 c -9.546573,-0.0272 -22.3392732,6.79805 -21.6317552,23.90397 1.105534,26.72889 25.4565952,29.20839 35.1916502,29.42301 1.068023,5.01357 12.521798,22.30563 21.001818,23.21667 h 37.15277 c 22.27763,-1.66785 38.9607,-75.75671 26.59321,-76.03825 -46.781583,2.47691 -49.995146,2.13838 -88.599758,0 -2.495053,-0.0266 -5.972321,-0.49474 -9.707935,-0.5054 z m 2.491319,9.45886 c 1.351378,13.69267 3.555849,21.70359 8.018216,33.94345 -11.382872,-1.50473 -21.069822,-5.22443 -22.851515,-19.10984 -0.950962,-7.4112 2.390428,-15.16769 14.833299,-14.83361 z"
|
||||||
|
id="path3722"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sscccccsccsc" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="Layer 2"
|
||||||
|
style="display:inline">
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.24757317;stroke-opacity:1"
|
||||||
|
id="rect4599"
|
||||||
|
width="34.762054"
|
||||||
|
height="34.762054"
|
||||||
|
x="87.508659"
|
||||||
|
y="18.291576"
|
||||||
|
transform="rotate(25.914715)"
|
||||||
|
ry="5.4825778" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26644793px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 79.804947,57.359056 3.241146,1.609954 V 35.255731 h -3.262698 z"
|
||||||
|
id="path4525"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="Layer 3"
|
||||||
|
style="display:inline">
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="g4539">
|
||||||
|
<circle
|
||||||
|
transform="rotate(-19.796137)"
|
||||||
|
r="3.4745038"
|
||||||
|
cy="90.077766"
|
||||||
|
cx="49.064713"
|
||||||
|
id="path4606"
|
||||||
|
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
transform="rotate(-19.796137)"
|
||||||
|
r="3.4745038"
|
||||||
|
cy="102.1049"
|
||||||
|
cx="36.810425"
|
||||||
|
id="path4606-3"
|
||||||
|
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
transform="rotate(-19.796137)"
|
||||||
|
r="3.4745038"
|
||||||
|
cy="111.43928"
|
||||||
|
cx="46.484283"
|
||||||
|
id="path4606-1"
|
||||||
|
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
transform="rotate(26.024158)"
|
||||||
|
y="18.061695"
|
||||||
|
x="97.333458"
|
||||||
|
height="27.261492"
|
||||||
|
width="2.6726954"
|
||||||
|
id="rect4629-8"
|
||||||
|
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.27444693;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4514"
|
||||||
|
d="m 76.558096,68.116343 c 12.97589,6.395378 13.012989,4.101862 4.890858,20.907244"
|
||||||
|
style="fill:none;stroke:#609926;stroke-width:2.68000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.6 KiB |
589
cmd/admin.go
Normal file
589
cmd/admin.go
Normal file
@@ -0,0 +1,589 @@
|
|||||||
|
// Copyright 2016 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"text/tabwriter"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/auth/oauth2"
|
||||||
|
"code.gitea.io/gitea/modules/generate"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// CmdAdmin represents the available admin sub-command.
|
||||||
|
CmdAdmin = cli.Command{
|
||||||
|
Name: "admin",
|
||||||
|
Usage: "Command line interface to perform common administrative operations",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
subcmdCreateUser,
|
||||||
|
subcmdChangePassword,
|
||||||
|
subcmdRepoSyncReleases,
|
||||||
|
subcmdRegenerate,
|
||||||
|
subcmdAuth,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdCreateUser = cli.Command{
|
||||||
|
Name: "create-user",
|
||||||
|
Usage: "Create a new user in database",
|
||||||
|
Action: runCreateUser,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "name",
|
||||||
|
Usage: "Username",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "password",
|
||||||
|
Usage: "User password",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "email",
|
||||||
|
Usage: "User email address",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "admin",
|
||||||
|
Usage: "User is an admin",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "random-password",
|
||||||
|
Usage: "Generate a random password for the user",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "must-change-password",
|
||||||
|
Usage: "Force the user to change his/her password after initial login",
|
||||||
|
},
|
||||||
|
cli.IntFlag{
|
||||||
|
Name: "random-password-length",
|
||||||
|
Usage: "Length of the random password to be generated",
|
||||||
|
Value: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdChangePassword = cli.Command{
|
||||||
|
Name: "change-password",
|
||||||
|
Usage: "Change a user's password",
|
||||||
|
Action: runChangePassword,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "username,u",
|
||||||
|
Value: "",
|
||||||
|
Usage: "The user to change password for",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "password,p",
|
||||||
|
Value: "",
|
||||||
|
Usage: "New password to set for user",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdRepoSyncReleases = cli.Command{
|
||||||
|
Name: "repo-sync-releases",
|
||||||
|
Usage: "Synchronize repository releases with tags",
|
||||||
|
Action: runRepoSyncReleases,
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdRegenerate = cli.Command{
|
||||||
|
Name: "regenerate",
|
||||||
|
Usage: "Regenerate specific files",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
microcmdRegenHooks,
|
||||||
|
microcmdRegenKeys,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdRegenHooks = cli.Command{
|
||||||
|
Name: "hooks",
|
||||||
|
Usage: "Regenerate git-hooks",
|
||||||
|
Action: runRegenerateHooks,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdRegenKeys = cli.Command{
|
||||||
|
Name: "keys",
|
||||||
|
Usage: "Regenerate authorized_keys file",
|
||||||
|
Action: runRegenerateKeys,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdAuth = cli.Command{
|
||||||
|
Name: "auth",
|
||||||
|
Usage: "Modify external auth providers",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
microcmdAuthAddOauth,
|
||||||
|
microcmdAuthUpdateOauth,
|
||||||
|
microcmdAuthList,
|
||||||
|
microcmdAuthDelete,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdAuthList = cli.Command{
|
||||||
|
Name: "list",
|
||||||
|
Usage: "List auth sources",
|
||||||
|
Action: runListAuth,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
idFlag = cli.Int64Flag{
|
||||||
|
Name: "id",
|
||||||
|
Usage: "ID of OAuth authentication source",
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdAuthDelete = cli.Command{
|
||||||
|
Name: "delete",
|
||||||
|
Usage: "Delete specific auth source",
|
||||||
|
Action: runDeleteAuth,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
idFlag,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
oauthCLIFlags = []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "name",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Application Name",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "provider",
|
||||||
|
Value: "",
|
||||||
|
Usage: "OAuth2 Provider",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "key",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Client ID (Key)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "secret",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Client Secret",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "auto-discover-url",
|
||||||
|
Value: "",
|
||||||
|
Usage: "OpenID Connect Auto Discovery URL (only required when using OpenID Connect as provider)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "use-custom-urls",
|
||||||
|
Value: "false",
|
||||||
|
Usage: "Use custom URLs for GitLab/GitHub OAuth endpoints",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "custom-auth-url",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Use a custom Authorization URL (option for GitLab/GitHub)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "custom-token-url",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Use a custom Token URL (option for GitLab/GitHub)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "custom-profile-url",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Use a custom Profile URL (option for GitLab/GitHub)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "custom-email-url",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Use a custom Email URL (option for GitHub)",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdAuthUpdateOauth = cli.Command{
|
||||||
|
Name: "update-oauth",
|
||||||
|
Usage: "Update existing Oauth authentication source",
|
||||||
|
Action: runUpdateOauth,
|
||||||
|
Flags: append(oauthCLIFlags[:1], append([]cli.Flag{idFlag}, oauthCLIFlags[1:]...)...),
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdAuthAddOauth = cli.Command{
|
||||||
|
Name: "add-oauth",
|
||||||
|
Usage: "Add new Oauth authentication source",
|
||||||
|
Action: runAddOauth,
|
||||||
|
Flags: oauthCLIFlags,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func runChangePassword(c *cli.Context) error {
|
||||||
|
if err := argsSet(c, "username", "password"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
uname := c.String("username")
|
||||||
|
user, err := models.GetUserByName(uname)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if user.Salt, err = models.GetUserSalt(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
user.HashPassword(c.String("password"))
|
||||||
|
if err := models.UpdateUserCols(user, "passwd", "salt"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%s's password has been successfully updated!\n", user.Name)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runCreateUser(c *cli.Context) error {
|
||||||
|
if err := argsSet(c, "name", "email"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("password") && c.IsSet("random-password") {
|
||||||
|
return errors.New("cannot set both -random-password and -password flags")
|
||||||
|
}
|
||||||
|
|
||||||
|
var password string
|
||||||
|
|
||||||
|
if c.IsSet("password") {
|
||||||
|
password = c.String("password")
|
||||||
|
} else if c.IsSet("random-password") {
|
||||||
|
var err error
|
||||||
|
password, err = generate.GetRandomString(c.Int("random-password-length"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("generated random password is '%s'\n", password)
|
||||||
|
} else {
|
||||||
|
return errors.New("must set either password or random-password flag")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// always default to true
|
||||||
|
var changePassword = true
|
||||||
|
|
||||||
|
// If this is the first user being created.
|
||||||
|
// Take it as the admin and don't force a password update.
|
||||||
|
if n := models.CountUsers(); n == 0 {
|
||||||
|
changePassword = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("must-change-password") {
|
||||||
|
changePassword = c.Bool("must-change-password")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := models.CreateUser(&models.User{
|
||||||
|
Name: c.String("name"),
|
||||||
|
Email: c.String("email"),
|
||||||
|
Passwd: password,
|
||||||
|
IsActive: true,
|
||||||
|
IsAdmin: c.Bool("admin"),
|
||||||
|
MustChangePassword: changePassword,
|
||||||
|
Theme: setting.UI.DefaultTheme,
|
||||||
|
}); err != nil {
|
||||||
|
return fmt.Errorf("CreateUser: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("New user '%s' has been successfully created!\n", c.String("name"))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runRepoSyncReleases(c *cli.Context) error {
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Trace("Synchronizing repository releases (this may take a while)")
|
||||||
|
for page := 1; ; page++ {
|
||||||
|
repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
|
||||||
|
Page: page,
|
||||||
|
PageSize: models.RepositoryListDefaultPageSize,
|
||||||
|
Private: true,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("SearchRepositoryByName: %v", err)
|
||||||
|
}
|
||||||
|
if len(repos) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
log.Trace("Processing next %d repos of %d", len(repos), count)
|
||||||
|
for _, repo := range repos {
|
||||||
|
log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RepoPath())
|
||||||
|
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("OpenRepository: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
oldnum, err := getReleaseCount(repo.ID)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn(" GetReleaseCountByRepoID: %v", err)
|
||||||
|
}
|
||||||
|
log.Trace(" currentNumReleases is %d, running SyncReleasesWithTags", oldnum)
|
||||||
|
|
||||||
|
if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
|
||||||
|
log.Warn(" SyncReleasesWithTags: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err = getReleaseCount(repo.ID)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn(" GetReleaseCountByRepoID: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Trace(" repo %s releases synchronized to tags: from %d to %d",
|
||||||
|
repo.FullName(), oldnum, count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getReleaseCount(id int64) (int64, error) {
|
||||||
|
return models.GetReleaseCountByRepoID(
|
||||||
|
id,
|
||||||
|
models.FindReleasesOptions{
|
||||||
|
IncludeTags: true,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runRegenerateHooks(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return models.SyncRepositoryHooks()
|
||||||
|
}
|
||||||
|
|
||||||
|
func runRegenerateKeys(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return models.RewriteAllPublicKeys()
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseOAuth2Config(c *cli.Context) *models.OAuth2Config {
|
||||||
|
var customURLMapping *oauth2.CustomURLMapping
|
||||||
|
if c.IsSet("use-custom-urls") {
|
||||||
|
customURLMapping = &oauth2.CustomURLMapping{
|
||||||
|
TokenURL: c.String("custom-token-url"),
|
||||||
|
AuthURL: c.String("custom-auth-url"),
|
||||||
|
ProfileURL: c.String("custom-profile-url"),
|
||||||
|
EmailURL: c.String("custom-email-url"),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
customURLMapping = nil
|
||||||
|
}
|
||||||
|
return &models.OAuth2Config{
|
||||||
|
Provider: c.String("provider"),
|
||||||
|
ClientID: c.String("key"),
|
||||||
|
ClientSecret: c.String("secret"),
|
||||||
|
OpenIDConnectAutoDiscoveryURL: c.String("auto-discover-url"),
|
||||||
|
CustomURLMapping: customURLMapping,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runAddOauth(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return models.CreateLoginSource(&models.LoginSource{
|
||||||
|
Type: models.LoginOAuth2,
|
||||||
|
Name: c.String("name"),
|
||||||
|
IsActived: true,
|
||||||
|
Cfg: parseOAuth2Config(c),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func runUpdateOauth(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !c.IsSet("id") {
|
||||||
|
return fmt.Errorf("--id flag is missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
source, err := models.GetLoginSourceByID(c.Int64("id"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
oAuth2Config := source.OAuth2()
|
||||||
|
|
||||||
|
if c.IsSet("name") {
|
||||||
|
source.Name = c.String("name")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("provider") {
|
||||||
|
oAuth2Config.Provider = c.String("provider")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("key") {
|
||||||
|
oAuth2Config.ClientID = c.String("key")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("secret") {
|
||||||
|
oAuth2Config.ClientSecret = c.String("secret")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("auto-discover-url") {
|
||||||
|
oAuth2Config.OpenIDConnectAutoDiscoveryURL = c.String("auto-discover-url")
|
||||||
|
}
|
||||||
|
|
||||||
|
// update custom URL mapping
|
||||||
|
var customURLMapping *oauth2.CustomURLMapping
|
||||||
|
|
||||||
|
if oAuth2Config.CustomURLMapping != nil {
|
||||||
|
customURLMapping.TokenURL = oAuth2Config.CustomURLMapping.TokenURL
|
||||||
|
customURLMapping.AuthURL = oAuth2Config.CustomURLMapping.AuthURL
|
||||||
|
customURLMapping.ProfileURL = oAuth2Config.CustomURLMapping.ProfileURL
|
||||||
|
customURLMapping.EmailURL = oAuth2Config.CustomURLMapping.EmailURL
|
||||||
|
}
|
||||||
|
if c.IsSet("use-custom-urls") && c.IsSet("custom-token-url") {
|
||||||
|
customURLMapping.TokenURL = c.String("custom-token-url")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("use-custom-urls") && c.IsSet("custom-auth-url") {
|
||||||
|
customURLMapping.AuthURL = c.String("custom-auth-url")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("use-custom-urls") && c.IsSet("custom-profile-url") {
|
||||||
|
customURLMapping.ProfileURL = c.String("custom-profile-url")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("use-custom-urls") && c.IsSet("custom-email-url") {
|
||||||
|
customURLMapping.EmailURL = c.String("custom-email-url")
|
||||||
|
}
|
||||||
|
|
||||||
|
oAuth2Config.CustomURLMapping = customURLMapping
|
||||||
|
source.Cfg = oAuth2Config
|
||||||
|
|
||||||
|
return models.UpdateSource(source)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runListAuth(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
loginSources, err := models.LoginSources()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop through each source and print
|
||||||
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.AlignRight)
|
||||||
|
fmt.Fprintf(w, "ID\tName\tType\tEnabled")
|
||||||
|
for _, source := range loginSources {
|
||||||
|
fmt.Fprintf(w, "%d\t%s\t%s\t%t", source.ID, source.Name, models.LoginNames[source.Type], source.IsActived)
|
||||||
|
}
|
||||||
|
w.Flush()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runDeleteAuth(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !c.IsSet("id") {
|
||||||
|
return fmt.Errorf("--id flag is missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
source, err := models.GetLoginSourceByID(c.Int64("id"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return models.DeleteSource(source)
|
||||||
|
}
|
||||||
186
cmd/cert.go
Normal file
186
cmd/cert.go
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/ecdsa"
|
||||||
|
"crypto/elliptic"
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/rsa"
|
||||||
|
"crypto/x509"
|
||||||
|
"crypto/x509/pkix"
|
||||||
|
"encoding/pem"
|
||||||
|
"log"
|
||||||
|
"math/big"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdCert represents the available cert sub-command.
|
||||||
|
var CmdCert = cli.Command{
|
||||||
|
Name: "cert",
|
||||||
|
Usage: "Generate self-signed certificate",
|
||||||
|
Description: `Generate a self-signed X.509 certificate for a TLS server.
|
||||||
|
Outputs to 'cert.pem' and 'key.pem' and will overwrite existing files.`,
|
||||||
|
Action: runCert,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "host",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Comma-separated hostnames and IPs to generate a certificate for",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "ecdsa-curve",
|
||||||
|
Value: "",
|
||||||
|
Usage: "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521",
|
||||||
|
},
|
||||||
|
cli.IntFlag{
|
||||||
|
Name: "rsa-bits",
|
||||||
|
Value: 2048,
|
||||||
|
Usage: "Size of RSA key to generate. Ignored if --ecdsa-curve is set",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "start-date",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Creation date formatted as Jan 1 15:04:05 2011",
|
||||||
|
},
|
||||||
|
cli.DurationFlag{
|
||||||
|
Name: "duration",
|
||||||
|
Value: 365 * 24 * time.Hour,
|
||||||
|
Usage: "Duration that certificate is valid for",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "ca",
|
||||||
|
Usage: "whether this cert should be its own Certificate Authority",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func publicKey(priv interface{}) interface{} {
|
||||||
|
switch k := priv.(type) {
|
||||||
|
case *rsa.PrivateKey:
|
||||||
|
return &k.PublicKey
|
||||||
|
case *ecdsa.PrivateKey:
|
||||||
|
return &k.PublicKey
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func pemBlockForKey(priv interface{}) *pem.Block {
|
||||||
|
switch k := priv.(type) {
|
||||||
|
case *rsa.PrivateKey:
|
||||||
|
return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}
|
||||||
|
case *ecdsa.PrivateKey:
|
||||||
|
b, err := x509.MarshalECPrivateKey(k)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Unable to marshal ECDSA private key: %v", err)
|
||||||
|
}
|
||||||
|
return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runCert(c *cli.Context) error {
|
||||||
|
if err := argsSet(c, "host"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var priv interface{}
|
||||||
|
var err error
|
||||||
|
switch c.String("ecdsa-curve") {
|
||||||
|
case "":
|
||||||
|
priv, err = rsa.GenerateKey(rand.Reader, c.Int("rsa-bits"))
|
||||||
|
case "P224":
|
||||||
|
priv, err = ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
|
||||||
|
case "P256":
|
||||||
|
priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||||
|
case "P384":
|
||||||
|
priv, err = ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
|
||||||
|
case "P521":
|
||||||
|
priv, err = ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
|
||||||
|
default:
|
||||||
|
log.Fatalf("Unrecognized elliptic curve: %q", c.String("ecdsa-curve"))
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to generate private key: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var notBefore time.Time
|
||||||
|
if startDate := c.String("start-date"); startDate != "" {
|
||||||
|
notBefore, err = time.Parse("Jan 2 15:04:05 2006", startDate)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to parse creation date: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
notBefore = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
notAfter := notBefore.Add(c.Duration("duration"))
|
||||||
|
|
||||||
|
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
|
||||||
|
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to generate serial number: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
template := x509.Certificate{
|
||||||
|
SerialNumber: serialNumber,
|
||||||
|
Subject: pkix.Name{
|
||||||
|
Organization: []string{"Acme Co"},
|
||||||
|
CommonName: "Gitea",
|
||||||
|
},
|
||||||
|
NotBefore: notBefore,
|
||||||
|
NotAfter: notAfter,
|
||||||
|
|
||||||
|
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
|
||||||
|
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
|
||||||
|
BasicConstraintsValid: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
hosts := strings.Split(c.String("host"), ",")
|
||||||
|
for _, h := range hosts {
|
||||||
|
if ip := net.ParseIP(h); ip != nil {
|
||||||
|
template.IPAddresses = append(template.IPAddresses, ip)
|
||||||
|
} else {
|
||||||
|
template.DNSNames = append(template.DNSNames, h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Bool("ca") {
|
||||||
|
template.IsCA = true
|
||||||
|
template.KeyUsage |= x509.KeyUsageCertSign
|
||||||
|
}
|
||||||
|
|
||||||
|
derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to create certificate: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
certOut, err := os.Create("cert.pem")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to open cert.pem for writing: %v", err)
|
||||||
|
}
|
||||||
|
pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
|
||||||
|
certOut.Close()
|
||||||
|
log.Println("Written cert.pem")
|
||||||
|
|
||||||
|
keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to open key.pem for writing: %v", err)
|
||||||
|
}
|
||||||
|
pem.Encode(keyOut, pemBlockForKey(priv))
|
||||||
|
keyOut.Close()
|
||||||
|
log.Println("Written key.pem")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
48
cmd/cmd.go
Normal file
48
cmd/cmd.go
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Package cmd provides subcommands to the gitea binary - such as "web" or
|
||||||
|
// "admin".
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// argsSet checks that all the required arguments are set. args is a list of
|
||||||
|
// arguments that must be set in the passed Context.
|
||||||
|
func argsSet(c *cli.Context, args ...string) error {
|
||||||
|
for _, a := range args {
|
||||||
|
if !c.IsSet(a) {
|
||||||
|
return errors.New(a + " is not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if util.IsEmptyString(a) {
|
||||||
|
return errors.New(a + " is required")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDB() error {
|
||||||
|
return initDBDisableConsole(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDBDisableConsole(disableConsole bool) error {
|
||||||
|
setting.NewContext()
|
||||||
|
models.LoadConfigs()
|
||||||
|
|
||||||
|
setting.NewXORMLogService(disableConsole)
|
||||||
|
if err := models.SetEngine(); err != nil {
|
||||||
|
return fmt.Errorf("models.SetEngine: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
202
cmd/dump.go
Normal file
202
cmd/dump.go
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
"github.com/Unknwon/cae/zip"
|
||||||
|
"github.com/Unknwon/com"
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdDump represents the available dump sub-command.
|
||||||
|
var CmdDump = cli.Command{
|
||||||
|
Name: "dump",
|
||||||
|
Usage: "Dump Gitea files and database",
|
||||||
|
Description: `Dump compresses all related files and database into zip file.
|
||||||
|
It can be used for backup and capture Gitea server image to send to maintainer`,
|
||||||
|
Action: runDump,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "verbose, v",
|
||||||
|
Usage: "Show process details",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "tempdir, t",
|
||||||
|
Value: os.TempDir(),
|
||||||
|
Usage: "Temporary dir path",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "database, d",
|
||||||
|
Usage: "Specify the database SQL syntax",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "skip-repository, R",
|
||||||
|
Usage: "Skip the repository dumping",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func runDump(ctx *cli.Context) error {
|
||||||
|
if ctx.IsSet("config") {
|
||||||
|
setting.CustomConf = ctx.String("config")
|
||||||
|
}
|
||||||
|
setting.NewContext()
|
||||||
|
setting.NewServices() // cannot access session settings otherwise
|
||||||
|
models.LoadConfigs()
|
||||||
|
|
||||||
|
err := models.SetEngine()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpDir := ctx.String("tempdir")
|
||||||
|
if _, err := os.Stat(tmpDir); os.IsNotExist(err) {
|
||||||
|
log.Fatalf("Path does not exist: %s", tmpDir)
|
||||||
|
}
|
||||||
|
tmpWorkDir, err := ioutil.TempDir(tmpDir, "gitea-dump-")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to create tmp work directory: %v", err)
|
||||||
|
}
|
||||||
|
log.Printf("Creating tmp work dir: %s", tmpWorkDir)
|
||||||
|
|
||||||
|
// work-around #1103
|
||||||
|
if os.Getenv("TMPDIR") == "" {
|
||||||
|
os.Setenv("TMPDIR", tmpWorkDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
dbDump := path.Join(tmpWorkDir, "gitea-db.sql")
|
||||||
|
|
||||||
|
fileName := fmt.Sprintf("gitea-dump-%d.zip", time.Now().Unix())
|
||||||
|
log.Printf("Packing dump files...")
|
||||||
|
z, err := zip.Create(fileName)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to create %s: %v", fileName, err)
|
||||||
|
}
|
||||||
|
zip.Verbose = ctx.Bool("verbose")
|
||||||
|
|
||||||
|
if ctx.IsSet("skip-repository") {
|
||||||
|
log.Printf("Skip dumping local repositories")
|
||||||
|
} else {
|
||||||
|
log.Printf("Dumping local repositories...%s", setting.RepoRootPath)
|
||||||
|
reposDump := path.Join(tmpWorkDir, "gitea-repo.zip")
|
||||||
|
if err := zip.PackTo(setting.RepoRootPath, reposDump, true); err != nil {
|
||||||
|
log.Fatalf("Failed to dump local repositories: %v", err)
|
||||||
|
}
|
||||||
|
if err := z.AddFile("gitea-repo.zip", reposDump); err != nil {
|
||||||
|
log.Fatalf("Failed to include gitea-repo.zip: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
targetDBType := ctx.String("database")
|
||||||
|
if len(targetDBType) > 0 && targetDBType != models.DbCfg.Type {
|
||||||
|
log.Printf("Dumping database %s => %s...", models.DbCfg.Type, targetDBType)
|
||||||
|
} else {
|
||||||
|
log.Printf("Dumping database...")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := models.DumpDatabase(dbDump, targetDBType); err != nil {
|
||||||
|
log.Fatalf("Failed to dump database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := z.AddFile("gitea-db.sql", dbDump); err != nil {
|
||||||
|
log.Fatalf("Failed to include gitea-db.sql: %v", err)
|
||||||
|
}
|
||||||
|
customDir, err := os.Stat(setting.CustomPath)
|
||||||
|
if err == nil && customDir.IsDir() {
|
||||||
|
if err := z.AddDir("custom", setting.CustomPath); err != nil {
|
||||||
|
log.Fatalf("Failed to include custom: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf("Custom dir %s doesn't exist, skipped", setting.CustomPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
if com.IsExist(setting.AppDataPath) {
|
||||||
|
log.Printf("Packing data directory...%s", setting.AppDataPath)
|
||||||
|
|
||||||
|
var sessionAbsPath string
|
||||||
|
if setting.SessionConfig.Provider == "file" {
|
||||||
|
sessionAbsPath = setting.SessionConfig.ProviderConfig
|
||||||
|
}
|
||||||
|
if err := zipAddDirectoryExclude(z, "data", setting.AppDataPath, sessionAbsPath); err != nil {
|
||||||
|
log.Fatalf("Failed to include data directory: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := z.AddDir("log", setting.LogRootPath); err != nil {
|
||||||
|
log.Fatalf("Failed to include log: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = z.Close(); err != nil {
|
||||||
|
_ = os.Remove(fileName)
|
||||||
|
log.Fatalf("Failed to save %s: %v", fileName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.Chmod(fileName, 0600); err != nil {
|
||||||
|
log.Printf("Can't change file access permissions mask to 0600: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Removing tmp work dir: %s", tmpWorkDir)
|
||||||
|
|
||||||
|
if err := os.RemoveAll(tmpWorkDir); err != nil {
|
||||||
|
log.Fatalf("Failed to remove %s: %v", tmpWorkDir, err)
|
||||||
|
}
|
||||||
|
log.Printf("Finish dumping in file %s", fileName)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// zipAddDirectoryExclude zips absPath to specified zipPath inside z excluding excludeAbsPath
|
||||||
|
func zipAddDirectoryExclude(zip *zip.ZipArchive, zipPath, absPath string, excludeAbsPath string) error {
|
||||||
|
absPath, err := filepath.Abs(absPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
dir, err := os.Open(absPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer dir.Close()
|
||||||
|
|
||||||
|
zip.AddEmptyDir(zipPath)
|
||||||
|
|
||||||
|
files, err := dir.Readdir(0)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, file := range files {
|
||||||
|
currentAbsPath := path.Join(absPath, file.Name())
|
||||||
|
currentZipPath := path.Join(zipPath, file.Name())
|
||||||
|
if file.IsDir() {
|
||||||
|
if currentAbsPath != excludeAbsPath {
|
||||||
|
if err = zipAddDirectoryExclude(zip, currentZipPath, currentAbsPath, excludeAbsPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if err = zip.AddFile(currentZipPath, currentAbsPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
83
cmd/generate.go
Normal file
83
cmd/generate.go
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
// Copyright 2016 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/generate"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// CmdGenerate represents the available generate sub-command.
|
||||||
|
CmdGenerate = cli.Command{
|
||||||
|
Name: "generate",
|
||||||
|
Usage: "Command line interface for running generators",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
subcmdSecret,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdSecret = cli.Command{
|
||||||
|
Name: "secret",
|
||||||
|
Usage: "Generate a secret token",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
microcmdGenerateInternalToken,
|
||||||
|
microcmdGenerateLfsJwtSecret,
|
||||||
|
microcmdGenerateSecretKey,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdGenerateInternalToken = cli.Command{
|
||||||
|
Name: "INTERNAL_TOKEN",
|
||||||
|
Usage: "Generate a new INTERNAL_TOKEN",
|
||||||
|
Action: runGenerateInternalToken,
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdGenerateLfsJwtSecret = cli.Command{
|
||||||
|
Name: "LFS_JWT_SECRET",
|
||||||
|
Usage: "Generate a new LFS_JWT_SECRET",
|
||||||
|
Action: runGenerateLfsJwtSecret,
|
||||||
|
}
|
||||||
|
|
||||||
|
microcmdGenerateSecretKey = cli.Command{
|
||||||
|
Name: "SECRET_KEY",
|
||||||
|
Usage: "Generate a new SECRET_KEY",
|
||||||
|
Action: runGenerateSecretKey,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func runGenerateInternalToken(c *cli.Context) error {
|
||||||
|
internalToken, err := generate.NewInternalToken()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%s\n", internalToken)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runGenerateLfsJwtSecret(c *cli.Context) error {
|
||||||
|
JWTSecretBase64, err := generate.NewJwtSecret()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%s\n", JWTSecretBase64)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runGenerateSecretKey(c *cli.Context) error {
|
||||||
|
secretKey, err := generate.NewSecretKey()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%s\n", secretKey)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
253
cmd/hook.go
Normal file
253
cmd/hook.go
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
// Copyright 2017 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/private"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// CmdHook represents the available hooks sub-command.
|
||||||
|
CmdHook = cli.Command{
|
||||||
|
Name: "hook",
|
||||||
|
Usage: "Delegate commands to corresponding Git hooks",
|
||||||
|
Description: "This should only be called by Git",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
subcmdHookPreReceive,
|
||||||
|
subcmdHookUpdate,
|
||||||
|
subcmdHookPostReceive,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
subcmdHookPreReceive = cli.Command{
|
||||||
|
Name: "pre-receive",
|
||||||
|
Usage: "Delegate pre-receive Git hook",
|
||||||
|
Description: "This command should only be called by Git",
|
||||||
|
Action: runHookPreReceive,
|
||||||
|
}
|
||||||
|
subcmdHookUpdate = cli.Command{
|
||||||
|
Name: "update",
|
||||||
|
Usage: "Delegate update Git hook",
|
||||||
|
Description: "This command should only be called by Git",
|
||||||
|
Action: runHookUpdate,
|
||||||
|
}
|
||||||
|
subcmdHookPostReceive = cli.Command{
|
||||||
|
Name: "post-receive",
|
||||||
|
Usage: "Delegate post-receive Git hook",
|
||||||
|
Description: "This command should only be called by Git",
|
||||||
|
Action: runHookPostReceive,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func runHookPreReceive(c *cli.Context) error {
|
||||||
|
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
} else if c.GlobalIsSet("config") {
|
||||||
|
setting.CustomConf = c.GlobalString("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
setup("hooks/pre-receive.log")
|
||||||
|
|
||||||
|
// the environment setted on serv command
|
||||||
|
repoID, _ := strconv.ParseInt(os.Getenv(models.ProtectedBranchRepoID), 10, 64)
|
||||||
|
isWiki := (os.Getenv(models.EnvRepoIsWiki) == "true")
|
||||||
|
username := os.Getenv(models.EnvRepoUsername)
|
||||||
|
reponame := os.Getenv(models.EnvRepoName)
|
||||||
|
userIDStr := os.Getenv(models.EnvPusherID)
|
||||||
|
repoPath := models.RepoPath(username, reponame)
|
||||||
|
|
||||||
|
buf := bytes.NewBuffer(nil)
|
||||||
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
for scanner.Scan() {
|
||||||
|
buf.Write(scanner.Bytes())
|
||||||
|
buf.WriteByte('\n')
|
||||||
|
|
||||||
|
// TODO: support news feeds for wiki
|
||||||
|
if isWiki {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fields := bytes.Fields(scanner.Bytes())
|
||||||
|
if len(fields) != 3 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
oldCommitID := string(fields[0])
|
||||||
|
newCommitID := string(fields[1])
|
||||||
|
refFullName := string(fields[2])
|
||||||
|
|
||||||
|
branchName := strings.TrimPrefix(refFullName, git.BranchPrefix)
|
||||||
|
protectBranch, err := private.GetProtectedBranchBy(repoID, branchName)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", fmt.Sprintf("retrieve protected branches information failed: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
if protectBranch != nil && protectBranch.IsProtected() {
|
||||||
|
// check and deletion
|
||||||
|
if newCommitID == git.EmptySHA {
|
||||||
|
fail(fmt.Sprintf("branch %s is protected from deletion", branchName), "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect force push
|
||||||
|
if git.EmptySHA != oldCommitID {
|
||||||
|
output, err := git.NewCommand("rev-list", "--max-count=1", oldCommitID, "^"+newCommitID).RunInDir(repoPath)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", "Fail to detect force push: %v", err)
|
||||||
|
} else if len(output) > 0 {
|
||||||
|
fail(fmt.Sprintf("branch %s is protected from force push", branchName), "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
userID, _ := strconv.ParseInt(userIDStr, 10, 64)
|
||||||
|
canPush, err := private.CanUserPush(protectBranch.ID, userID)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", "Fail to detect user can push: %v", err)
|
||||||
|
} else if !canPush {
|
||||||
|
fail(fmt.Sprintf("protected branch %s can not be pushed to", branchName), "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runHookUpdate(c *cli.Context) error {
|
||||||
|
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
} else if c.GlobalIsSet("config") {
|
||||||
|
setting.CustomConf = c.GlobalString("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
setup("hooks/update.log")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runHookPostReceive(c *cli.Context) error {
|
||||||
|
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
} else if c.GlobalIsSet("config") {
|
||||||
|
setting.CustomConf = c.GlobalString("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
setup("hooks/post-receive.log")
|
||||||
|
|
||||||
|
// the environment setted on serv command
|
||||||
|
repoID, _ := strconv.ParseInt(os.Getenv(models.ProtectedBranchRepoID), 10, 64)
|
||||||
|
repoUser := os.Getenv(models.EnvRepoUsername)
|
||||||
|
isWiki := (os.Getenv(models.EnvRepoIsWiki) == "true")
|
||||||
|
repoName := os.Getenv(models.EnvRepoName)
|
||||||
|
pusherID, _ := strconv.ParseInt(os.Getenv(models.EnvPusherID), 10, 64)
|
||||||
|
pusherName := os.Getenv(models.EnvPusherName)
|
||||||
|
|
||||||
|
buf := bytes.NewBuffer(nil)
|
||||||
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
for scanner.Scan() {
|
||||||
|
buf.Write(scanner.Bytes())
|
||||||
|
buf.WriteByte('\n')
|
||||||
|
|
||||||
|
// TODO: support news feeds for wiki
|
||||||
|
if isWiki {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fields := bytes.Fields(scanner.Bytes())
|
||||||
|
if len(fields) != 3 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
oldCommitID := string(fields[0])
|
||||||
|
newCommitID := string(fields[1])
|
||||||
|
refFullName := string(fields[2])
|
||||||
|
|
||||||
|
if err := private.PushUpdate(models.PushUpdateOptions{
|
||||||
|
RefFullName: refFullName,
|
||||||
|
OldCommitID: oldCommitID,
|
||||||
|
NewCommitID: newCommitID,
|
||||||
|
PusherID: pusherID,
|
||||||
|
PusherName: pusherName,
|
||||||
|
RepoUserName: repoUser,
|
||||||
|
RepoName: repoName,
|
||||||
|
}); err != nil {
|
||||||
|
log.GitLogger.Error(2, "Update: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if newCommitID != git.EmptySHA && strings.HasPrefix(refFullName, git.BranchPrefix) {
|
||||||
|
branch := strings.TrimPrefix(refFullName, git.BranchPrefix)
|
||||||
|
repo, pullRequestAllowed, err := private.GetRepository(repoID)
|
||||||
|
if err != nil {
|
||||||
|
log.GitLogger.Error(2, "get repo: %v", err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if !pullRequestAllowed {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
baseRepo := repo
|
||||||
|
if repo.IsFork {
|
||||||
|
baseRepo = repo.BaseRepo
|
||||||
|
}
|
||||||
|
|
||||||
|
if !repo.IsFork && branch == baseRepo.DefaultBranch {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
pr, err := private.ActivePullRequest(baseRepo.ID, repo.ID, baseRepo.DefaultBranch, branch)
|
||||||
|
if err != nil {
|
||||||
|
log.GitLogger.Error(2, "get active pr: %v", err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintln(os.Stderr, "")
|
||||||
|
if pr == nil {
|
||||||
|
if repo.IsFork {
|
||||||
|
branch = fmt.Sprintf("%s:%s", repo.OwnerName, branch)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stderr, "Create a new pull request for '%s':\n", branch)
|
||||||
|
fmt.Fprintf(os.Stderr, " %s/compare/%s...%s\n", baseRepo.HTMLURL(), util.PathEscapeSegments(baseRepo.DefaultBranch), util.PathEscapeSegments(branch))
|
||||||
|
} else {
|
||||||
|
fmt.Fprint(os.Stderr, "Visit the existing pull request:\n")
|
||||||
|
fmt.Fprintf(os.Stderr, " %s/pulls/%d\n", baseRepo.HTMLURL(), pr.Index)
|
||||||
|
}
|
||||||
|
fmt.Fprintln(os.Stderr, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
85
cmd/keys.go
Normal file
85
cmd/keys.go
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdKeys represents the available keys sub-command
|
||||||
|
var CmdKeys = cli.Command{
|
||||||
|
Name: "keys",
|
||||||
|
Usage: "This command queries the Gitea database to get the authorized command for a given ssh key fingerprint",
|
||||||
|
Action: runKeys,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "expected, e",
|
||||||
|
Value: "git",
|
||||||
|
Usage: "Expected user for whom provide key commands",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "username, u",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Username trying to log in by SSH",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "type, t",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Type of the SSH key provided to the SSH Server (requires content to be provided too)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "content, k",
|
||||||
|
Value: "",
|
||||||
|
Usage: "Base64 encoded content of the SSH key provided to the SSH Server (requires type to be provided too)",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func runKeys(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !c.IsSet("username") {
|
||||||
|
return errors.New("No username provided")
|
||||||
|
}
|
||||||
|
// Check username matches the expected username
|
||||||
|
if strings.TrimSpace(c.String("username")) != strings.TrimSpace(c.String("expected")) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
content := ""
|
||||||
|
|
||||||
|
if c.IsSet("type") && c.IsSet("content") {
|
||||||
|
content = fmt.Sprintf("%s %s", strings.TrimSpace(c.String("type")), strings.TrimSpace(c.String("content")))
|
||||||
|
}
|
||||||
|
|
||||||
|
if content == "" {
|
||||||
|
return errors.New("No key type and content provided")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDBDisableConsole(true); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
publicKey, err := models.SearchPublicKeyByContent(content)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Println(publicKey.AuthorizedString())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
52
cmd/migrate.go
Normal file
52
cmd/migrate.go
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/models/migrations"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdMigrate represents the available migrate sub-command.
|
||||||
|
var CmdMigrate = cli.Command{
|
||||||
|
Name: "migrate",
|
||||||
|
Usage: "Migrate the database",
|
||||||
|
Description: "This is a command for migrating the database, so that you can run gitea admin create-user before starting the server.",
|
||||||
|
Action: runMigrate,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func runMigrate(ctx *cli.Context) error {
|
||||||
|
if ctx.IsSet("config") {
|
||||||
|
setting.CustomConf = ctx.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := initDB(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Trace("AppPath: %s", setting.AppPath)
|
||||||
|
log.Trace("AppWorkPath: %s", setting.AppWorkPath)
|
||||||
|
log.Trace("Custom path: %s", setting.CustomPath)
|
||||||
|
log.Trace("Log path: %s", setting.LogRootPath)
|
||||||
|
models.LoadConfigs()
|
||||||
|
|
||||||
|
if err := models.NewEngine(migrations.Migrate); err != nil {
|
||||||
|
log.Fatal(4, "Failed to initialize ORM engine: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
366
cmd/serv.go
Normal file
366
cmd/serv.go
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/pprof"
|
||||||
|
"code.gitea.io/gitea/modules/private"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
"github.com/Unknwon/com"
|
||||||
|
"github.com/dgrijalva/jwt-go"
|
||||||
|
version "github.com/mcuadros/go-version"
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
accessDenied = "Repository does not exist or you do not have access"
|
||||||
|
lfsAuthenticateVerb = "git-lfs-authenticate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdServ represents the available serv sub-command.
|
||||||
|
var CmdServ = cli.Command{
|
||||||
|
Name: "serv",
|
||||||
|
Usage: "This command should only be called by SSH shell",
|
||||||
|
Description: `Serv provide access auth for repositories`,
|
||||||
|
Action: runServ,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "enable-pprof",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkLFSVersion() {
|
||||||
|
if setting.LFS.StartServer {
|
||||||
|
//Disable LFS client hooks if installed for the current OS user
|
||||||
|
//Needs at least git v2.1.2
|
||||||
|
binVersion, err := git.BinVersion()
|
||||||
|
if err != nil {
|
||||||
|
fail(fmt.Sprintf("Error retrieving git version: %v", err), fmt.Sprintf("Error retrieving git version: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !version.Compare(binVersion, "2.1.2", ">=") {
|
||||||
|
setting.LFS.StartServer = false
|
||||||
|
println("LFS server support needs at least Git v2.1.2, disabled")
|
||||||
|
} else {
|
||||||
|
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "filter.lfs.required=",
|
||||||
|
"-c", "filter.lfs.smudge=", "-c", "filter.lfs.clean=")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setup(logPath string) {
|
||||||
|
log.DelLogger("console")
|
||||||
|
setting.NewContext()
|
||||||
|
checkLFSVersion()
|
||||||
|
log.NewGitLogger(filepath.Join(setting.LogRootPath, logPath))
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseCmd(cmd string) (string, string) {
|
||||||
|
ss := strings.SplitN(cmd, " ", 2)
|
||||||
|
if len(ss) != 2 {
|
||||||
|
return "", ""
|
||||||
|
}
|
||||||
|
return ss[0], strings.Replace(ss[1], "'/", "'", 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
allowedCommands = map[string]models.AccessMode{
|
||||||
|
"git-upload-pack": models.AccessModeRead,
|
||||||
|
"git-upload-archive": models.AccessModeRead,
|
||||||
|
"git-receive-pack": models.AccessModeWrite,
|
||||||
|
lfsAuthenticateVerb: models.AccessModeNone,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func fail(userMessage, logMessage string, args ...interface{}) {
|
||||||
|
fmt.Fprintln(os.Stderr, "Gitea:", userMessage)
|
||||||
|
|
||||||
|
if len(logMessage) > 0 {
|
||||||
|
if !setting.ProdMode {
|
||||||
|
fmt.Fprintf(os.Stderr, logMessage+"\n", args...)
|
||||||
|
}
|
||||||
|
log.GitLogger.Fatal(3, logMessage, args...)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.GitLogger.Close()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runServ(c *cli.Context) error {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
|
setup("serv.log")
|
||||||
|
|
||||||
|
if setting.SSH.Disabled {
|
||||||
|
println("Gitea: SSH has been disabled")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(c.Args()) < 1 {
|
||||||
|
cli.ShowSubcommandHelp(c)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
|
||||||
|
if len(cmd) == 0 {
|
||||||
|
println("Hi there, You've successfully authenticated, but Gitea does not provide shell access.")
|
||||||
|
println("If this is unexpected, please log in with password and setup Gitea under another user.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
verb, args := parseCmd(cmd)
|
||||||
|
|
||||||
|
var lfsVerb string
|
||||||
|
if verb == lfsAuthenticateVerb {
|
||||||
|
if !setting.LFS.StartServer {
|
||||||
|
fail("Unknown git command", "LFS authentication request over SSH denied, LFS support is disabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
argsSplit := strings.Split(args, " ")
|
||||||
|
if len(argsSplit) >= 2 {
|
||||||
|
args = strings.TrimSpace(argsSplit[0])
|
||||||
|
lfsVerb = strings.TrimSpace(argsSplit[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repoPath := strings.ToLower(strings.Trim(args, "'"))
|
||||||
|
rr := strings.SplitN(repoPath, "/", 2)
|
||||||
|
if len(rr) != 2 {
|
||||||
|
fail("Invalid repository path", "Invalid repository path: %v", args)
|
||||||
|
}
|
||||||
|
|
||||||
|
username := strings.ToLower(rr[0])
|
||||||
|
reponame := strings.ToLower(strings.TrimSuffix(rr[1], ".git"))
|
||||||
|
|
||||||
|
if setting.EnablePprof || c.Bool("enable-pprof") {
|
||||||
|
if err := os.MkdirAll(setting.PprofDataPath, os.ModePerm); err != nil {
|
||||||
|
fail("Error while trying to create PPROF_DATA_PATH", "Error while trying to create PPROF_DATA_PATH: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
stopCPUProfiler := pprof.DumpCPUProfileForUsername(setting.PprofDataPath, username)
|
||||||
|
defer func() {
|
||||||
|
stopCPUProfiler()
|
||||||
|
pprof.DumpMemProfileForUsername(setting.PprofDataPath, username)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
isWiki bool
|
||||||
|
unitType = models.UnitTypeCode
|
||||||
|
unitName = "code"
|
||||||
|
)
|
||||||
|
if strings.HasSuffix(reponame, ".wiki") {
|
||||||
|
isWiki = true
|
||||||
|
unitType = models.UnitTypeWiki
|
||||||
|
unitName = "wiki"
|
||||||
|
reponame = reponame[:len(reponame)-5]
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv(models.EnvRepoUsername, username)
|
||||||
|
if isWiki {
|
||||||
|
os.Setenv(models.EnvRepoIsWiki, "true")
|
||||||
|
} else {
|
||||||
|
os.Setenv(models.EnvRepoIsWiki, "false")
|
||||||
|
}
|
||||||
|
os.Setenv(models.EnvRepoName, reponame)
|
||||||
|
|
||||||
|
repo, err := private.GetRepositoryByOwnerAndName(username, reponame)
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(err.Error(), "Failed to get repository: repository does not exist") {
|
||||||
|
fail(accessDenied, "Repository does not exist: %s/%s", username, reponame)
|
||||||
|
}
|
||||||
|
fail("Internal error", "Failed to get repository: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
requestedMode, has := allowedCommands[verb]
|
||||||
|
if !has {
|
||||||
|
fail("Unknown git command", "Unknown git command %s", verb)
|
||||||
|
}
|
||||||
|
|
||||||
|
if verb == lfsAuthenticateVerb {
|
||||||
|
if lfsVerb == "upload" {
|
||||||
|
requestedMode = models.AccessModeWrite
|
||||||
|
} else if lfsVerb == "download" {
|
||||||
|
requestedMode = models.AccessModeRead
|
||||||
|
} else {
|
||||||
|
fail("Unknown LFS verb", "Unknown lfs verb %s", lfsVerb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prohibit push to mirror repositories.
|
||||||
|
if requestedMode > models.AccessModeRead && repo.IsMirror {
|
||||||
|
fail("mirror repository is read-only", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow anonymous clone for public repositories.
|
||||||
|
var (
|
||||||
|
keyID int64
|
||||||
|
user *models.User
|
||||||
|
userID int64
|
||||||
|
)
|
||||||
|
|
||||||
|
keys := strings.Split(c.Args()[0], "-")
|
||||||
|
if len(keys) != 2 {
|
||||||
|
fail("Key ID format error", "Invalid key argument: %s", c.Args()[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
key, err := private.GetPublicKeyByID(com.StrTo(keys[1]).MustInt64())
|
||||||
|
if err != nil {
|
||||||
|
fail("Invalid key ID", "Invalid key ID[%s]: %v", c.Args()[0], err)
|
||||||
|
}
|
||||||
|
keyID = key.ID
|
||||||
|
userID = key.OwnerID
|
||||||
|
|
||||||
|
if key.Type == models.KeyTypeDeploy {
|
||||||
|
// Now we have to get the deploy key for this repo
|
||||||
|
deployKey, err := private.GetDeployKey(key.ID, repo.ID)
|
||||||
|
if err != nil {
|
||||||
|
fail("Key access denied", "Failed to access internal api: [key_id: %d, repo_id: %d]", key.ID, repo.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
if deployKey == nil {
|
||||||
|
fail("Key access denied", "Deploy key access denied: [key_id: %d, repo_id: %d]", key.ID, repo.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
if deployKey.Mode < requestedMode {
|
||||||
|
fail("Key permission denied", "Cannot push with read-only deployment key: %d to repo_id: %d", key.ID, repo.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update deploy key activity.
|
||||||
|
if err = private.UpdateDeployKeyUpdated(key.ID, repo.ID); err != nil {
|
||||||
|
fail("Internal error", "UpdateDeployKey: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: Deploy keys aren't really the owner of the repo pushing changes
|
||||||
|
// however we don't have good way of representing deploy keys in hook.go
|
||||||
|
// so for now use the owner
|
||||||
|
os.Setenv(models.EnvPusherName, username)
|
||||||
|
os.Setenv(models.EnvPusherID, fmt.Sprintf("%d", repo.OwnerID))
|
||||||
|
userID = repo.OwnerID
|
||||||
|
} else if requestedMode == models.AccessModeWrite || repo.IsPrivate || setting.Service.RequireSignInView {
|
||||||
|
// Check deploy key or user key.
|
||||||
|
user, err = private.GetUserByKeyID(key.ID)
|
||||||
|
if err != nil {
|
||||||
|
fail("internal error", "Failed to get user by key ID(%d): %v", keyID, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !user.IsActive || user.ProhibitLogin {
|
||||||
|
fail("Your account is not active or has been disabled by Administrator",
|
||||||
|
"User %s is disabled and have no access to repository %s",
|
||||||
|
user.Name, repoPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
mode, err := private.CheckUnitUser(user.ID, repo.ID, user.IsAdmin, unitType)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", "Failed to check access: %v", err)
|
||||||
|
} else if *mode < requestedMode {
|
||||||
|
clientMessage := accessDenied
|
||||||
|
if *mode >= models.AccessModeRead {
|
||||||
|
clientMessage = "You do not have sufficient authorization for this action"
|
||||||
|
}
|
||||||
|
fail(clientMessage,
|
||||||
|
"User %s does not have level %v access to repository %s's "+unitName,
|
||||||
|
user.Name, requestedMode, repoPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv(models.EnvPusherName, user.Name)
|
||||||
|
os.Setenv(models.EnvPusherID, fmt.Sprintf("%d", user.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
//LFS token authentication
|
||||||
|
if verb == lfsAuthenticateVerb {
|
||||||
|
url := fmt.Sprintf("%s%s/%s.git/info/lfs", setting.AppURL, username, repo.Name)
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
claims := jwt.MapClaims{
|
||||||
|
"repo": repo.ID,
|
||||||
|
"op": lfsVerb,
|
||||||
|
"exp": now.Add(setting.LFS.HTTPAuthExpiry).Unix(),
|
||||||
|
"nbf": now.Unix(),
|
||||||
|
}
|
||||||
|
if userID > 0 {
|
||||||
|
claims["user"] = userID
|
||||||
|
}
|
||||||
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||||
|
|
||||||
|
// Sign and get the complete encoded token as a string using the secret
|
||||||
|
tokenString, err := token.SignedString(setting.LFS.JWTSecretBytes)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", "Failed to sign JWT token: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tokenAuthentication := &models.LFSTokenResponse{
|
||||||
|
Header: make(map[string]string),
|
||||||
|
Href: url,
|
||||||
|
}
|
||||||
|
tokenAuthentication.Header["Authorization"] = fmt.Sprintf("Bearer %s", tokenString)
|
||||||
|
|
||||||
|
enc := json.NewEncoder(os.Stdout)
|
||||||
|
err = enc.Encode(tokenAuthentication)
|
||||||
|
if err != nil {
|
||||||
|
fail("Internal error", "Failed to encode LFS json response: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special handle for Windows.
|
||||||
|
if setting.IsWindows {
|
||||||
|
verb = strings.Replace(verb, "-", " ", 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
var gitcmd *exec.Cmd
|
||||||
|
verbs := strings.Split(verb, " ")
|
||||||
|
if len(verbs) == 2 {
|
||||||
|
gitcmd = exec.Command(verbs[0], verbs[1], repoPath)
|
||||||
|
} else {
|
||||||
|
gitcmd = exec.Command(verb, repoPath)
|
||||||
|
}
|
||||||
|
if isWiki {
|
||||||
|
if err = private.InitWiki(repo.ID); err != nil {
|
||||||
|
fail("Internal error", "Failed to init wiki repo: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv(models.ProtectedBranchRepoID, fmt.Sprintf("%d", repo.ID))
|
||||||
|
|
||||||
|
gitcmd.Dir = setting.RepoRootPath
|
||||||
|
gitcmd.Stdout = os.Stdout
|
||||||
|
gitcmd.Stdin = os.Stdin
|
||||||
|
gitcmd.Stderr = os.Stderr
|
||||||
|
if err = gitcmd.Run(); err != nil {
|
||||||
|
fail("Internal error", "Failed to execute git command: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update user key activity.
|
||||||
|
if keyID > 0 {
|
||||||
|
if err = private.UpdatePublicKeyUpdated(keyID); err != nil {
|
||||||
|
fail("Internal error", "UpdatePublicKey: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
221
cmd/web.go
Normal file
221
cmd/web.go
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"net/http/fcgi"
|
||||||
|
_ "net/http/pprof" // Used for debugging if enabled and a web server is running
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/routers"
|
||||||
|
"code.gitea.io/gitea/routers/routes"
|
||||||
|
|
||||||
|
"github.com/Unknwon/com"
|
||||||
|
context2 "github.com/gorilla/context"
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
"golang.org/x/crypto/acme/autocert"
|
||||||
|
ini "gopkg.in/ini.v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdWeb represents the available web sub-command.
|
||||||
|
var CmdWeb = cli.Command{
|
||||||
|
Name: "web",
|
||||||
|
Usage: "Start Gitea web server",
|
||||||
|
Description: `Gitea web server is the only thing you need to run,
|
||||||
|
and it takes care of all the other things for you`,
|
||||||
|
Action: runWeb,
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "port, p",
|
||||||
|
Value: "3000",
|
||||||
|
Usage: "Temporary port number to prevent conflict",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "config, c",
|
||||||
|
Value: "custom/conf/app.ini",
|
||||||
|
Usage: "Custom configuration file path",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "pid, P",
|
||||||
|
Value: "/var/run/gitea.pid",
|
||||||
|
Usage: "Custom pid file path",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func runHTTPRedirector() {
|
||||||
|
source := fmt.Sprintf("%s:%s", setting.HTTPAddr, setting.PortToRedirect)
|
||||||
|
dest := strings.TrimSuffix(setting.AppURL, "/")
|
||||||
|
log.Info("Redirecting: %s to %s", source, dest)
|
||||||
|
|
||||||
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
target := dest + r.URL.Path
|
||||||
|
if len(r.URL.RawQuery) > 0 {
|
||||||
|
target += "?" + r.URL.RawQuery
|
||||||
|
}
|
||||||
|
http.Redirect(w, r, target, http.StatusTemporaryRedirect)
|
||||||
|
})
|
||||||
|
|
||||||
|
var err = runHTTP(source, context2.ClearHandler(handler))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(4, "Failed to start port redirection: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runLetsEncrypt(listenAddr, domain, directory, email string, m http.Handler) error {
|
||||||
|
certManager := autocert.Manager{
|
||||||
|
Prompt: autocert.AcceptTOS,
|
||||||
|
HostPolicy: autocert.HostWhitelist(domain),
|
||||||
|
Cache: autocert.DirCache(directory),
|
||||||
|
Email: email,
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
log.Info("Running Let's Encrypt handler on %s", setting.HTTPAddr+":"+setting.PortToRedirect)
|
||||||
|
var err = http.ListenAndServe(setting.HTTPAddr+":"+setting.PortToRedirect, certManager.HTTPHandler(http.HandlerFunc(runLetsEncryptFallbackHandler))) // all traffic coming into HTTP will be redirect to HTTPS automatically (LE HTTP-01 validation happens here)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(4, "Failed to start the Let's Encrypt handler on port %s: %v", setting.PortToRedirect, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
server := &http.Server{
|
||||||
|
Addr: listenAddr,
|
||||||
|
Handler: m,
|
||||||
|
TLSConfig: &tls.Config{
|
||||||
|
GetCertificate: certManager.GetCertificate,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return server.ListenAndServeTLS("", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func runLetsEncryptFallbackHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Method != "GET" && r.Method != "HEAD" {
|
||||||
|
http.Error(w, "Use HTTPS", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Remove the trailing slash at the end of setting.AppURL, the request
|
||||||
|
// URI always contains a leading slash, which would result in a double
|
||||||
|
// slash
|
||||||
|
target := strings.TrimRight(setting.AppURL, "/") + r.URL.RequestURI()
|
||||||
|
http.Redirect(w, r, target, http.StatusFound)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runWeb(ctx *cli.Context) error {
|
||||||
|
if ctx.IsSet("config") {
|
||||||
|
setting.CustomConf = ctx.String("config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ctx.IsSet("pid") {
|
||||||
|
setting.CustomPID = ctx.String("pid")
|
||||||
|
}
|
||||||
|
|
||||||
|
routers.GlobalInit()
|
||||||
|
|
||||||
|
m := routes.NewMacaron()
|
||||||
|
routes.RegisterRoutes(m)
|
||||||
|
|
||||||
|
// Flag for port number in case first time run conflict.
|
||||||
|
if ctx.IsSet("port") {
|
||||||
|
setting.AppURL = strings.Replace(setting.AppURL, setting.HTTPPort, ctx.String("port"), 1)
|
||||||
|
setting.HTTPPort = ctx.String("port")
|
||||||
|
|
||||||
|
switch setting.Protocol {
|
||||||
|
case setting.UnixSocket:
|
||||||
|
case setting.FCGI:
|
||||||
|
default:
|
||||||
|
// Save LOCAL_ROOT_URL if port changed
|
||||||
|
cfg := ini.Empty()
|
||||||
|
if com.IsFile(setting.CustomConf) {
|
||||||
|
// Keeps custom settings if there is already something.
|
||||||
|
if err := cfg.Append(setting.CustomConf); err != nil {
|
||||||
|
return fmt.Errorf("Failed to load custom conf '%s': %v", setting.CustomConf, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultLocalURL := string(setting.Protocol) + "://"
|
||||||
|
if setting.HTTPAddr == "0.0.0.0" {
|
||||||
|
defaultLocalURL += "localhost"
|
||||||
|
} else {
|
||||||
|
defaultLocalURL += setting.HTTPAddr
|
||||||
|
}
|
||||||
|
defaultLocalURL += ":" + setting.HTTPPort + "/"
|
||||||
|
|
||||||
|
cfg.Section("server").Key("LOCAL_ROOT_URL").SetValue(defaultLocalURL)
|
||||||
|
|
||||||
|
if err := cfg.SaveTo(setting.CustomConf); err != nil {
|
||||||
|
return fmt.Errorf("Error saving generated JWT Secret to custom config: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
listenAddr := setting.HTTPAddr
|
||||||
|
if setting.Protocol != setting.UnixSocket {
|
||||||
|
listenAddr += ":" + setting.HTTPPort
|
||||||
|
}
|
||||||
|
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
|
||||||
|
|
||||||
|
if setting.LFS.StartServer {
|
||||||
|
log.Info("LFS server enabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
if setting.EnablePprof {
|
||||||
|
go func() {
|
||||||
|
log.Info("Starting pprof server on localhost:6060")
|
||||||
|
log.Info("%v", http.ListenAndServe("localhost:6060", nil))
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
switch setting.Protocol {
|
||||||
|
case setting.HTTP:
|
||||||
|
err = runHTTP(listenAddr, context2.ClearHandler(m))
|
||||||
|
case setting.HTTPS:
|
||||||
|
if setting.EnableLetsEncrypt {
|
||||||
|
err = runLetsEncrypt(listenAddr, setting.Domain, setting.LetsEncryptDirectory, setting.LetsEncryptEmail, context2.ClearHandler(m))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if setting.RedirectOtherPort {
|
||||||
|
go runHTTPRedirector()
|
||||||
|
}
|
||||||
|
err = runHTTPS(listenAddr, setting.CertFile, setting.KeyFile, context2.ClearHandler(m))
|
||||||
|
case setting.FCGI:
|
||||||
|
listener, err := net.Listen("tcp", listenAddr)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(4, "Failed to bind %s", listenAddr, err)
|
||||||
|
}
|
||||||
|
defer listener.Close()
|
||||||
|
err = fcgi.Serve(listener, context2.ClearHandler(m))
|
||||||
|
case setting.UnixSocket:
|
||||||
|
if err := os.Remove(listenAddr); err != nil && !os.IsNotExist(err) {
|
||||||
|
log.Fatal(4, "Failed to remove unix socket directory %s: %v", listenAddr, err)
|
||||||
|
}
|
||||||
|
var listener *net.UnixListener
|
||||||
|
listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: listenAddr, Net: "unix"})
|
||||||
|
if err != nil {
|
||||||
|
break // Handle error after switch
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: add proper implementation of signal capture on all protocols
|
||||||
|
// execute this on SIGTERM or SIGINT: listener.Close()
|
||||||
|
if err = os.Chmod(listenAddr, os.FileMode(setting.UnixSocketPermission)); err != nil {
|
||||||
|
log.Fatal(4, "Failed to set permission of unix socket: %v", err)
|
||||||
|
}
|
||||||
|
err = http.Serve(listener, context2.ClearHandler(m))
|
||||||
|
default:
|
||||||
|
log.Fatal(4, "Invalid protocol: %s", setting.Protocol)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(4, "Failed to start server: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
45
cmd/web_graceful.go
Normal file
45
cmd/web_graceful.go
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// +build !windows
|
||||||
|
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
|
||||||
|
"github.com/facebookgo/grace/gracehttp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func runHTTP(listenAddr string, m http.Handler) error {
|
||||||
|
return gracehttp.Serve(&http.Server{
|
||||||
|
Addr: listenAddr,
|
||||||
|
Handler: m,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func runHTTPS(listenAddr, certFile, keyFile string, m http.Handler) error {
|
||||||
|
config := &tls.Config{
|
||||||
|
MinVersion: tls.VersionTLS10,
|
||||||
|
}
|
||||||
|
if config.NextProtos == nil {
|
||||||
|
config.NextProtos = []string{"http/1.1"}
|
||||||
|
}
|
||||||
|
|
||||||
|
config.Certificates = make([]tls.Certificate, 1)
|
||||||
|
var err error
|
||||||
|
config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(4, "Failed to load https cert file %s: %v", listenAddr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return gracehttp.Serve(&http.Server{
|
||||||
|
Addr: listenAddr,
|
||||||
|
Handler: m,
|
||||||
|
TLSConfig: config,
|
||||||
|
})
|
||||||
|
}
|
||||||
19
cmd/web_windows.go
Normal file
19
cmd/web_windows.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
// Copyright 2016 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func runHTTP(listenAddr string, m http.Handler) error {
|
||||||
|
return http.ListenAndServe(listenAddr, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runHTTPS(listenAddr, certFile, keyFile string, m http.Handler) error {
|
||||||
|
return http.ListenAndServeTLS(listenAddr, certFile, keyFile, m)
|
||||||
|
}
|
||||||
1
contrib/README
Normal file
1
contrib/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
All files in subdirectories are templates, do modifications based on your environment first.
|
||||||
2
contrib/autoboot.sh
Executable file
2
contrib/autoboot.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
su git -c "/home/git/gogs/scripts/gogs_supervisord.sh restart"
|
||||||
12
contrib/ide/README.md
Normal file
12
contrib/ide/README.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# IDE and code editor configuration
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [IDE and code editor configuration](#ide-and-code-editor-configuration)
|
||||||
|
- [Microsoft Visual Studio Code](#microsoft-visual-studio-code)
|
||||||
|
|
||||||
|
## Microsoft Visual Studio Code
|
||||||
|
Download Microsoft Visual Studio Code at https://code.visualstudio.com/ and follow instructions at https://code.visualstudio.com/docs/languages/go to setup Go extension for it.
|
||||||
|
|
||||||
|
Create new directory `.vscode` in Gitea root folder and copy contents of folder [contrib/ide/vscode](vscode/) to it. You can now use `Ctrl`+`Shift`+`B` to build gitea executable and `F5` to run it in debug mode.
|
||||||
|
|
||||||
|
Supported on Debian, Ubuntu, Red Hat, Fedora, SUSE Linux, MacOS and Microsoft Windows.
|
||||||
31
contrib/ide/vscode/launch.json
Normal file
31
contrib/ide/vscode/launch.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "debug",
|
||||||
|
"buildFlags": "",
|
||||||
|
"port": 2345,
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"program": "${workspaceRoot}/main.go",
|
||||||
|
"env": {},
|
||||||
|
"args": ["web"],
|
||||||
|
"showLog": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Launch (with SQLite3)",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "debug",
|
||||||
|
"buildFlags": "-tags=\"sqlite sqlite_unlock_notify\"",
|
||||||
|
"port": 2345,
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"program": "${workspaceRoot}/main.go",
|
||||||
|
"env": {},
|
||||||
|
"args": ["web"],
|
||||||
|
"showLog": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
51
contrib/ide/vscode/tasks.json
Normal file
51
contrib/ide/vscode/tasks.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"taskName": "Build",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "go",
|
||||||
|
"group": "build",
|
||||||
|
"presentation": {
|
||||||
|
"echo": true,
|
||||||
|
"reveal": "always",
|
||||||
|
"focus": false,
|
||||||
|
"panel": "shared"
|
||||||
|
},
|
||||||
|
"args": ["build"],
|
||||||
|
"linux": {
|
||||||
|
"args": [ "-o", "gitea", "${workspaceRoot}/main.go" ]
|
||||||
|
},
|
||||||
|
"osx": {
|
||||||
|
"args": [ "-o", "gitea", "${workspaceRoot}/main.go" ]
|
||||||
|
},
|
||||||
|
"windows": {
|
||||||
|
"args": [ "-o", "gitea.exe", "\"${workspaceRoot}\\main.go\""]
|
||||||
|
},
|
||||||
|
"problemMatcher": ["$go"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskName": "Build (with SQLite3)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "go",
|
||||||
|
"group": "build",
|
||||||
|
"presentation": {
|
||||||
|
"echo": true,
|
||||||
|
"reveal": "always",
|
||||||
|
"focus": false,
|
||||||
|
"panel": "shared"
|
||||||
|
},
|
||||||
|
"args": ["build", "-tags=\"sqlite sqlite_unlock_notify\""],
|
||||||
|
"linux": {
|
||||||
|
"args": ["-o", "gitea", "${workspaceRoot}/main.go"]
|
||||||
|
},
|
||||||
|
"osx": {
|
||||||
|
"args": ["-o", "gitea", "${workspaceRoot}/main.go"]
|
||||||
|
},
|
||||||
|
"windows": {
|
||||||
|
"args": ["-o", "gitea.exe", "\"${workspaceRoot}\\main.go\""]
|
||||||
|
},
|
||||||
|
"problemMatcher": ["$go"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
93
contrib/init/centos/gitea
Normal file
93
contrib/init/centos/gitea
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# /etc/rc.d/init.d/gitea
|
||||||
|
#
|
||||||
|
# Runs the Gitea Git with a cup of tea.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# chkconfig: - 85 15
|
||||||
|
#
|
||||||
|
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: gitea
|
||||||
|
# Required-Start: $remote_fs $syslog
|
||||||
|
# Required-Stop: $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Start gitea at boot time.
|
||||||
|
# Description: Control gitea.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/init.d/functions
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
|
||||||
|
NAME=gitea
|
||||||
|
GITEA_HOME=/var/lib/${NAME}
|
||||||
|
GITEA_PATH=/usr/local/bin/${NAME}
|
||||||
|
GITEA_USER=git
|
||||||
|
SERVICENAME="Gitea - Git with a cup of tea"
|
||||||
|
LOCKFILE=/var/lock/subsys/gitea
|
||||||
|
LOGPATH=${GITEA_HOME}/log
|
||||||
|
LOGFILE=${LOGPATH}/gitea.log
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
# Read configuration from /etc/sysconfig/gitea to override defaults
|
||||||
|
[ -r /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
|
||||||
|
|
||||||
|
# Don't do anything if nothing is installed
|
||||||
|
[ -x ${GITEA_PATH} ] || exit 0
|
||||||
|
# exit if logpath dir is not created.
|
||||||
|
[ -x ${LOGPATH} ] || exit 0
|
||||||
|
|
||||||
|
DAEMON_OPTS="--check $NAME"
|
||||||
|
|
||||||
|
# Set additional options, if any
|
||||||
|
[ ! -z "$GITEA_USER" ] && DAEMON_OPTS="$DAEMON_OPTS --user=${GITEA_USER}"
|
||||||
|
|
||||||
|
start() {
|
||||||
|
cd ${GITEA_HOME}
|
||||||
|
echo -n "Starting ${SERVICENAME}: "
|
||||||
|
daemon $DAEMON_OPTS "${GITEA_PATH} web -c /etc/${NAME}/app.ini > ${LOGFILE} 2>&1 &"
|
||||||
|
RETVAL=$?
|
||||||
|
echo
|
||||||
|
[ $RETVAL = 0 ] && touch ${LOCKFILE}
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
cd ${GITEA_HOME}
|
||||||
|
echo -n "Shutting down ${SERVICENAME}: "
|
||||||
|
killproc ${NAME}
|
||||||
|
RETVAL=$?
|
||||||
|
echo
|
||||||
|
[ $RETVAL = 0 ] && rm -f ${LOCKFILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
status ${NAME} > /dev/null 2>&1 && exit 0
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status ${NAME}
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
reload)
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: ${NAME} {start|stop|status|restart}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit $RETVAL
|
||||||
89
contrib/init/debian/gitea
Normal file
89
contrib/init/debian/gitea
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: gitea
|
||||||
|
# Required-Start: $syslog $network
|
||||||
|
# Required-Stop: $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: A self-hosted Git service written in Go.
|
||||||
|
# Description: A self-hosted Git service written in Go.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Author: Danny Boisvert
|
||||||
|
|
||||||
|
# Do NOT "set -e"
|
||||||
|
|
||||||
|
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||||
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
||||||
|
DESC="Gitea - Git with a cup of tea"
|
||||||
|
NAME=gitea
|
||||||
|
SERVICEVERBOSE=yes
|
||||||
|
PIDFILE=/var/run/$NAME.pid
|
||||||
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
WORKINGDIR=/var/lib/$NAME
|
||||||
|
DAEMON=/usr/local/bin/$NAME
|
||||||
|
DAEMON_ARGS="web -c /etc/$NAME/app.ini"
|
||||||
|
USER=git
|
||||||
|
USERBIND=""
|
||||||
|
# If you want to bind Gitea to a port below 1024 uncomment
|
||||||
|
# the line below
|
||||||
|
#USERBIND="setcap cap_net_bind_service=+ep"
|
||||||
|
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"
|
||||||
|
|
||||||
|
# Read configuration variable file if it is present
|
||||||
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||||
|
|
||||||
|
# Exit if the package is not installed
|
||||||
|
[ -x "$DAEMON" ] || exit 0
|
||||||
|
|
||||||
|
do_start()
|
||||||
|
{
|
||||||
|
$USERBIND $DAEMON
|
||||||
|
sh -c "USER=$USER HOME=/home/$USER GITEA_WORK_DIR=$WORKINGDIR start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
|
||||||
|
--background --chdir $WORKINGDIR --chuid $USER \\
|
||||||
|
--exec $DAEMON -- $DAEMON_ARGS"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_stop()
|
||||||
|
{
|
||||||
|
start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PIDFILE --name $NAME --oknodo
|
||||||
|
rm -f $PIDFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
do_status()
|
||||||
|
{
|
||||||
|
if [ -f $PIDFILE ]; then
|
||||||
|
if kill -0 $(cat "$PIDFILE"); then
|
||||||
|
echo "$NAME is running, PID is $(cat $PIDFILE)"
|
||||||
|
else
|
||||||
|
echo "$NAME process is dead, but pidfile exists"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$NAME is not running"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo "Starting $DESC" "$NAME"
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
echo "Stopping $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
do_status
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
echo "Restarting $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
48
contrib/init/freebsd/gitea
Normal file
48
contrib/init/freebsd/gitea
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# $FreeBSD$
|
||||||
|
#
|
||||||
|
# PROVIDE: gitea
|
||||||
|
# REQUIRE: NETWORKING SYSLOG
|
||||||
|
# KEYWORD: shutdown
|
||||||
|
#
|
||||||
|
# Add the following lines to /etc/rc.conf to enable gitea:
|
||||||
|
#
|
||||||
|
#gitea_enable="YES"
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
|
||||||
|
name="gitea"
|
||||||
|
rcvar="gitea_enable"
|
||||||
|
|
||||||
|
load_rc_config $name
|
||||||
|
|
||||||
|
: ${gitea_user:="git"}
|
||||||
|
: ${gitea_enable:="NO"}
|
||||||
|
: ${gitea_directory:="/var/lib/gitea"}
|
||||||
|
|
||||||
|
command="/usr/local/bin/gitea web -c /etc/gitea/app.ini"
|
||||||
|
procname="$(echo $command |cut -d' ' -f1)"
|
||||||
|
|
||||||
|
pidfile="${gitea_directory}/${name}.pid"
|
||||||
|
|
||||||
|
start_cmd="${name}_start"
|
||||||
|
stop_cmd="${name}_stop"
|
||||||
|
|
||||||
|
gitea_start() {
|
||||||
|
cd ${gitea_directory}
|
||||||
|
export USER=${gitea_user}
|
||||||
|
export HOME=/usr/home/${gitea_user}
|
||||||
|
export GITEA_WORK_DIR=${gitea_directory}
|
||||||
|
/usr/sbin/daemon -f -u ${gitea_user} -p ${pidfile} $command
|
||||||
|
}
|
||||||
|
|
||||||
|
gitea_stop() {
|
||||||
|
if [ ! -f $pidfile ]; then
|
||||||
|
echo "GITEA PID File not found. Maybe GITEA is not running?"
|
||||||
|
else
|
||||||
|
kill $(cat $pidfile)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
run_rc_command "$1"
|
||||||
15
contrib/init/gentoo/gitea
Normal file
15
contrib/init/gentoo/gitea
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
DIR=/var/lib/gitea
|
||||||
|
USER=git
|
||||||
|
|
||||||
|
start_stop_daemon_args="--user ${USER} --chdir ${DIR}"
|
||||||
|
command="/usr/local/bin/gitea"
|
||||||
|
command_args="web -c /etc/gitea/app.ini"
|
||||||
|
command_background=yes
|
||||||
|
pidfile=/var/run/gitea.pid
|
||||||
|
|
||||||
|
depend()
|
||||||
|
{
|
||||||
|
need net
|
||||||
|
}
|
||||||
19
contrib/init/openbsd/gitea
Executable file
19
contrib/init/openbsd/gitea
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# $OpenBSD$
|
||||||
|
|
||||||
|
daemon="/usr/local/bin/gitea"
|
||||||
|
daemon_user="git"
|
||||||
|
daemon_flags="web -c /etc/gitea/app.ini"
|
||||||
|
|
||||||
|
gitea_directory="/var/lib/gitea"
|
||||||
|
|
||||||
|
rc_bg=YES
|
||||||
|
|
||||||
|
. /etc/rc.d/rc.subr
|
||||||
|
|
||||||
|
rc_start() {
|
||||||
|
${rcexec} "cd ${gitea_directory}; ${daemon} ${daemon_flags} ${_bg}"
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_cmd $1
|
||||||
46
contrib/init/sunos/gitea.xml
Normal file
46
contrib/init/sunos/gitea.xml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
|
||||||
|
<service_bundle type="manifest" name="export">
|
||||||
|
<service name="gitea" type="service" version="1">
|
||||||
|
<create_default_instance enabled="false"/>
|
||||||
|
|
||||||
|
<dependency name="network" grouping="require_all" restart_on="refresh" type="service">
|
||||||
|
<service_fmri value="svc:/milestone/network:default"/>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service">
|
||||||
|
<service_fmri value="svc:/system/filesystem/local"/>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<exec_method
|
||||||
|
type="method"
|
||||||
|
name="start"
|
||||||
|
exec="/opt/local/bin/gitea web"
|
||||||
|
timeout_seconds="60">
|
||||||
|
<method_context>
|
||||||
|
<method_credential user="git" group="git" />
|
||||||
|
<method_environment>
|
||||||
|
<envvar name='GITEA_WORK_DIR' value='/opt/local/share/gitea'/>
|
||||||
|
<envvar name='GITEA_CUSTOM' value='/opt/local/etc/gitea'/>
|
||||||
|
<envvar name='HOME' value='/var/db/gitea'/>
|
||||||
|
<envvar name='PATH' value='/opt/local/bin:${PATH}'/>
|
||||||
|
<envvar name='USER' value='git'/>
|
||||||
|
</method_environment>
|
||||||
|
</method_context>
|
||||||
|
</exec_method>
|
||||||
|
<exec_method type="method" name="stop" exec=":kill" timeout_seconds="60"/>
|
||||||
|
|
||||||
|
<property_group name="application" type="application"></property_group>
|
||||||
|
<property_group name="startd" type="framework">
|
||||||
|
<propval name="duration" type="astring" value="child"/>
|
||||||
|
<propval name="ignore_error" type="astring" value="core,signal"/>
|
||||||
|
</property_group>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<common_name>
|
||||||
|
<loctext xml:lang="C">A painless, self-hosted Git service</loctext>
|
||||||
|
</common_name>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</service>
|
||||||
|
</service_bundle>
|
||||||
115
contrib/init/suse/gitea
Normal file
115
contrib/init/suse/gitea
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# /etc/init.d/gitea
|
||||||
|
#
|
||||||
|
# Runs the Gitea Git with a cup of tea.
|
||||||
|
#
|
||||||
|
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: gitea
|
||||||
|
# Required-Start: $remote_fs
|
||||||
|
# Required-Stop: $remote_fs
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Start gitea at boot time.
|
||||||
|
# Description: Control gitea.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
|
||||||
|
NAME=gitea
|
||||||
|
GITEA_HOME=/var/lib/$NAME
|
||||||
|
GITEA_PATH=/usr/local/bin/$NAME
|
||||||
|
GITEA_USER=git
|
||||||
|
SERVICENAME="Gitea - Git with a cup of tea"
|
||||||
|
LOCKFILE=/var/lock/subsys/gitea
|
||||||
|
LOGPATH=${GITEA_HOME}/log
|
||||||
|
LOGFILE=${LOGPATH}/error.log
|
||||||
|
# gitea creates its own gitea.log from stdout
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
# Read configuration from /etc/sysconfig/gitea to override defaults
|
||||||
|
[ -r /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
|
||||||
|
|
||||||
|
# Don't do anything if nothing is installed
|
||||||
|
test -x ${GITEA_PATH} || { echo "$NAME not installed";
|
||||||
|
if [ "$1" = "stop" ]; then exit 0;
|
||||||
|
else exit 5; fi; }
|
||||||
|
|
||||||
|
# exit if logpath dir is not created.
|
||||||
|
test -r ${LOGPATH} || { echo "$LOGPATH not existing";
|
||||||
|
if [ "$1" = "stop" ]; then exit 0;
|
||||||
|
else exit 6; fi; }
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/rc.status
|
||||||
|
|
||||||
|
# Reset status of this service
|
||||||
|
rc_reset
|
||||||
|
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo -n "Starting ${SERVICENAME} "
|
||||||
|
|
||||||
|
# As we can't use startproc, we have to check ourselves if the service is already running
|
||||||
|
/sbin/checkproc ${GITEA_PATH}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# return skipped as service is already running
|
||||||
|
(exit 5)
|
||||||
|
else
|
||||||
|
su - ${GITEA_USER} -c "USER=${GITEA_USER} GITEA_WORK_DIR=${GITEA_HOME} ${GITEA_PATH} web -c /etc/${NAME}/app.ini 2>&1 >>${LOGFILE} &"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remember status and be verbose
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
|
||||||
|
stop)
|
||||||
|
echo -n "Shutting down ${SERVICENAME} "
|
||||||
|
|
||||||
|
## Stop daemon with killproc(8) and if this fails
|
||||||
|
## killproc sets the return value according to LSB.
|
||||||
|
/sbin/killproc ${GITEA_PATH}
|
||||||
|
|
||||||
|
# Remember status and be verbose
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
|
||||||
|
restart)
|
||||||
|
## Stop the service and regardless of whether it was
|
||||||
|
## running or not, start it again.
|
||||||
|
$0 stop
|
||||||
|
$0 start
|
||||||
|
|
||||||
|
# Remember status and be quiet
|
||||||
|
rc_status
|
||||||
|
;;
|
||||||
|
|
||||||
|
status)
|
||||||
|
echo -n "Checking for ${SERVICENAME} "
|
||||||
|
## Check status with checkproc(8), if process is running
|
||||||
|
## checkproc will return with exit status 0.
|
||||||
|
|
||||||
|
# Return value is slightly different for the status command:
|
||||||
|
# 0 - service up and running
|
||||||
|
# 1 - service dead, but /var/run/ pid file exists
|
||||||
|
# 2 - service dead, but /var/lock/ lock file exists
|
||||||
|
# 3 - service not running (unused)
|
||||||
|
# 4 - service status unknown :-(
|
||||||
|
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
|
||||||
|
|
||||||
|
# NOTE: checkproc returns LSB compliant status values.
|
||||||
|
/sbin/checkproc ${GITEA_PATH}
|
||||||
|
# NOTE: rc_status knows that we called this init script with
|
||||||
|
# "status" option and adapts its messages accordingly.
|
||||||
|
rc_status -v
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|status|restart}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
rc_exit
|
||||||
107
contrib/k8s/gitea.yml
Normal file
107
contrib/k8s/gitea.yml
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
app: gitea
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
labels:
|
||||||
|
app: gitea
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: gitea
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: "/var/lib/gitea"
|
||||||
|
name: "root"
|
||||||
|
- mountPath: "/data"
|
||||||
|
name: "data"
|
||||||
|
ports:
|
||||||
|
- containerPort: 22
|
||||||
|
name: ssh
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 3000
|
||||||
|
name: http
|
||||||
|
protocol: TCP
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
# Set up a data directory for gitea
|
||||||
|
# For production usage, you should consider using PV/PVC instead(or simply using storage like NAS)
|
||||||
|
# For more details, please see https://kubernetes.io/docs/concepts/storage/volumes/
|
||||||
|
- name: "root"
|
||||||
|
hostPath:
|
||||||
|
# directory location on host
|
||||||
|
path: "/var/lib/gitea"
|
||||||
|
# this field is optional
|
||||||
|
type: Directory
|
||||||
|
- name: "data"
|
||||||
|
hostPath:
|
||||||
|
path: "/data/gitea"
|
||||||
|
type: Directory
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: gitea
|
||||||
|
---
|
||||||
|
# Using cluster mode
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: gitea-web
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
app: gitea-web
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 80
|
||||||
|
targetPort: 3000
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app: gitea
|
||||||
|
---
|
||||||
|
# Using node-port mode
|
||||||
|
# This mainly open a specific TCP port for SSH usage on each host,
|
||||||
|
# so you can use a proxy layer to handle it(e.g. slb, nginx)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: gitea-ssh
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
app: gitea-ssh
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 22
|
||||||
|
targetPort: 22
|
||||||
|
nodePort: 30022
|
||||||
|
name: ssh
|
||||||
|
selector:
|
||||||
|
app: gitea
|
||||||
|
type: NodePort
|
||||||
|
---
|
||||||
|
# Ingress is always suitable for HTTP usage,
|
||||||
|
# we suggest using an proxy layer such as slb to send traffic to different ports.
|
||||||
|
# Usually 80/443 for web and 22 directly for SSH.
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: your-gitea-host.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
serviceName: gitea-web
|
||||||
|
servicePort: 80
|
||||||
39
contrib/launchd/io.gitea.web.plist
Normal file
39
contrib/launchd/io.gitea.web.plist
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>io.gitea.web</string>
|
||||||
|
<!-- assumes Gitea is running under 'git' account -->
|
||||||
|
<!-- modify below to reflect your settings -->
|
||||||
|
<key>UserName</key>
|
||||||
|
<string>git</string>
|
||||||
|
<key>GroupName</key>
|
||||||
|
<string>git</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<!-- assumes Gitea is installed in /Users/git/gitea -->
|
||||||
|
<!-- modify below to reflect your settings -->
|
||||||
|
<string>/Users/git/gitea/gitea</string>
|
||||||
|
<string>web</string>
|
||||||
|
</array>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<true/>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<true/>
|
||||||
|
<!-- assumes Gitea is installed in /Users/git/gitea -->
|
||||||
|
<!-- modify below to reflect your settings -->
|
||||||
|
<key>WorkingDirectory</key>
|
||||||
|
<string>/Users/git/gitea/</string>
|
||||||
|
<key>StandardOutPath</key>
|
||||||
|
<string>/Users/git/gitea/log/stdout.log</string>
|
||||||
|
<key>StandardErrorPath</key>
|
||||||
|
<string>/Users/git/gitea/log/stderr.log</string>
|
||||||
|
<!-- default 256 is too low for Gitea needs using parallel pipes -->
|
||||||
|
<key>SoftResourceLimits</key>
|
||||||
|
<dict>
|
||||||
|
<key>NumberOfFiles</key>
|
||||||
|
<integer>8192</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
2
contrib/mysql.sql
Normal file
2
contrib/mysql.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
DROP DATABASE IF EXISTS gitea;
|
||||||
|
CREATE DATABASE IF NOT EXISTS gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
265
contrib/pr/checkout.go
Normal file
265
contrib/pr/checkout.go
Normal file
@@ -0,0 +1,265 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
/*
|
||||||
|
Checkout a PR and load the tests data into sqlite database
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"os/user"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/markup"
|
||||||
|
"code.gitea.io/gitea/modules/markup/external"
|
||||||
|
"code.gitea.io/gitea/routers"
|
||||||
|
"code.gitea.io/gitea/routers/routes"
|
||||||
|
"github.com/Unknwon/com"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
context2 "github.com/gorilla/context"
|
||||||
|
"gopkg.in/src-d/go-git.v4"
|
||||||
|
"gopkg.in/src-d/go-git.v4/config"
|
||||||
|
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||||
|
"gopkg.in/testfixtures.v2"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
)
|
||||||
|
|
||||||
|
var codeFilePath = "contrib/pr/checkout.go"
|
||||||
|
|
||||||
|
func runPR() {
|
||||||
|
log.Printf("[PR] Starting gitea ...\n")
|
||||||
|
curDir, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
setting.NewContext()
|
||||||
|
|
||||||
|
setting.RepoRootPath, err = ioutil.TempDir(os.TempDir(), "repos")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("TempDir: %v\n", err)
|
||||||
|
}
|
||||||
|
setting.AppDataPath, err = ioutil.TempDir(os.TempDir(), "appdata")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("TempDir: %v\n", err)
|
||||||
|
}
|
||||||
|
setting.AppWorkPath = curDir
|
||||||
|
setting.StaticRootPath = curDir
|
||||||
|
setting.GravatarSourceURL, err = url.Parse("https://secure.gravatar.com/avatar/")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("url.Parse: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
setting.AppURL = "http://localhost:8080/"
|
||||||
|
setting.HTTPPort = "8080"
|
||||||
|
setting.SSH.Domain = "localhost"
|
||||||
|
setting.SSH.Port = 3000
|
||||||
|
setting.InstallLock = true
|
||||||
|
setting.SecretKey = "9pCviYTWSb"
|
||||||
|
setting.InternalToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8"
|
||||||
|
curUser, err := user.Current()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
setting.RunUser = curUser.Username
|
||||||
|
|
||||||
|
log.Printf("[PR] Loading fixtures data ...\n")
|
||||||
|
setting.CheckLFSVersion()
|
||||||
|
//models.LoadConfigs()
|
||||||
|
/*
|
||||||
|
models.DbCfg.Type = "sqlite3"
|
||||||
|
models.DbCfg.Path = ":memory:"
|
||||||
|
models.DbCfg.Timeout = 500
|
||||||
|
*/
|
||||||
|
db := setting.Cfg.Section("database")
|
||||||
|
db.NewKey("DB_TYPE", "sqlite3")
|
||||||
|
db.NewKey("PATH", ":memory:")
|
||||||
|
setting.LogSQL = true
|
||||||
|
models.LoadConfigs()
|
||||||
|
routers.NewServices()
|
||||||
|
//x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared")
|
||||||
|
|
||||||
|
var helper testfixtures.Helper
|
||||||
|
helper = &testfixtures.SQLite{}
|
||||||
|
models.NewEngine(func(_ *xorm.Engine) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
models.HasEngine = true
|
||||||
|
//x.ShowSQL(true)
|
||||||
|
err = models.InitFixtures(
|
||||||
|
helper,
|
||||||
|
path.Join(curDir, "models/fixtures/"),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error initializing test database: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
models.LoadFixtures()
|
||||||
|
os.RemoveAll(setting.RepoRootPath)
|
||||||
|
os.RemoveAll(models.LocalCopyPath())
|
||||||
|
os.RemoveAll(models.LocalWikiPath())
|
||||||
|
com.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath)
|
||||||
|
|
||||||
|
log.Printf("[PR] Setting up router\n")
|
||||||
|
//routers.GlobalInit()
|
||||||
|
external.RegisterParsers()
|
||||||
|
markup.Init()
|
||||||
|
m := routes.NewMacaron()
|
||||||
|
routes.RegisterRoutes(m)
|
||||||
|
|
||||||
|
log.Printf("[PR] Ready for testing !\n")
|
||||||
|
log.Printf("[PR] Login with user1, user2, user3, ... with pass: password\n")
|
||||||
|
/*
|
||||||
|
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
|
||||||
|
|
||||||
|
if setting.LFS.StartServer {
|
||||||
|
log.Info("LFS server enabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
if setting.EnablePprof {
|
||||||
|
go func() {
|
||||||
|
log.Info("Starting pprof server on localhost:6060")
|
||||||
|
log.Info("%v", http.ListenAndServe("localhost:6060", nil))
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Start the server
|
||||||
|
http.ListenAndServe(":8080", context2.ClearHandler(m))
|
||||||
|
|
||||||
|
log.Printf("[PR] Cleaning up ...\n")
|
||||||
|
/*
|
||||||
|
if err = os.RemoveAll(setting.Indexer.IssuePath); err != nil {
|
||||||
|
fmt.Printf("os.RemoveAll: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
if err = os.RemoveAll(setting.Indexer.RepoPath); err != nil {
|
||||||
|
fmt.Printf("Unable to remove repo indexer: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if err = os.RemoveAll(setting.RepoRootPath); err != nil {
|
||||||
|
log.Fatalf("os.RemoveAll: %v\n", err)
|
||||||
|
}
|
||||||
|
if err = os.RemoveAll(setting.AppDataPath); err != nil {
|
||||||
|
log.Fatalf("os.RemoveAll: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var runPRFlag = flag.Bool("run", false, "Run the PR code")
|
||||||
|
flag.Parse()
|
||||||
|
if *runPRFlag {
|
||||||
|
runPR()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// To force checkout (e.g. Windows complains about unclean work tree) set env variable FORCE=true
|
||||||
|
force, err := strconv.ParseBool(os.Getenv("FORCE"))
|
||||||
|
if err != nil {
|
||||||
|
force = false
|
||||||
|
}
|
||||||
|
|
||||||
|
//Otherwise checkout PR
|
||||||
|
if len(os.Args) != 2 {
|
||||||
|
log.Fatal("Need only one arg: the PR number")
|
||||||
|
}
|
||||||
|
pr := os.Args[1]
|
||||||
|
|
||||||
|
codeFilePath = filepath.FromSlash(codeFilePath) //Convert to running OS
|
||||||
|
|
||||||
|
//Copy this file if it will not exist in the PR branch
|
||||||
|
dat, err := ioutil.ReadFile(codeFilePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to cache this code file : %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
repo, err := git.PlainOpen(".")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to open the repo : %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Find remote upstream
|
||||||
|
remotes, err := repo.Remotes()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to list remotes of repo : %v", err)
|
||||||
|
}
|
||||||
|
remoteUpstream := "origin" //Default
|
||||||
|
for _, r := range remotes {
|
||||||
|
if r.Config().URLs[0] == "https://github.com/go-gitea/gitea" || r.Config().URLs[0] == "git@github.com:go-gitea/gitea.git" { //fetch at index 0
|
||||||
|
remoteUpstream = r.Config().Name
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
branch := fmt.Sprintf("pr-%s-%d", pr, time.Now().Unix())
|
||||||
|
branchRef := plumbing.NewBranchReferenceName(branch)
|
||||||
|
|
||||||
|
log.Printf("Fetching PR #%s in %s\n", pr, branch)
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
//Use git cli command for windows
|
||||||
|
runCmd("git", "fetch", remoteUpstream, fmt.Sprintf("pull/%s/head:%s", pr, branch))
|
||||||
|
} else {
|
||||||
|
ref := fmt.Sprintf("refs/pull/%s/head:%s", pr, branchRef)
|
||||||
|
err = repo.Fetch(&git.FetchOptions{
|
||||||
|
RemoteName: remoteUpstream,
|
||||||
|
RefSpecs: []config.RefSpec{
|
||||||
|
config.RefSpec(ref),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to fetch %s from %s : %v", ref, remoteUpstream, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tree, err := repo.Worktree()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to parse git tree : %v", err)
|
||||||
|
}
|
||||||
|
log.Printf("Checkout PR #%s in %s\n", pr, branch)
|
||||||
|
err = tree.Checkout(&git.CheckoutOptions{
|
||||||
|
Branch: branchRef,
|
||||||
|
Force: force,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to checkout %s : %v", branch, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Copy this file if not exist
|
||||||
|
if _, err := os.Stat(codeFilePath); os.IsNotExist(err) {
|
||||||
|
err = os.MkdirAll(filepath.Dir(codeFilePath), 0755)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to duplicate this code file in PR : %v", err)
|
||||||
|
}
|
||||||
|
err = ioutil.WriteFile(codeFilePath, dat, 0644)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to duplicate this code file in PR : %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
//Start with integration test
|
||||||
|
runCmd("go", "run", "-tags", "sqlite sqlite_unlock_notify", codeFilePath, "-run")
|
||||||
|
}
|
||||||
|
func runCmd(cmd ...string) {
|
||||||
|
log.Printf("Executing : %s ...\n", cmd)
|
||||||
|
c := exec.Command(cmd[0], cmd[1:]...)
|
||||||
|
c.Stdout = os.Stdout
|
||||||
|
c.Stderr = os.Stderr
|
||||||
|
if err := c.Start(); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
if err := c.Wait(); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
16
contrib/supervisor/gitea
Normal file
16
contrib/supervisor/gitea
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[program:gitea]
|
||||||
|
directory=/home/git/go/src/github.com/go-gitea/gitea/
|
||||||
|
command=/home/git/go/src/github.com/go-gitea/gitea/gitea web
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
startsecs=10
|
||||||
|
stdout_logfile=/var/log/gitea/stdout.log
|
||||||
|
stdout_logfile_maxbytes=1MB
|
||||||
|
stdout_logfile_backups=10
|
||||||
|
stdout_capture_maxbytes=1MB
|
||||||
|
stderr_logfile=/var/log/gitea/stderr.log
|
||||||
|
stderr_logfile_maxbytes=1MB
|
||||||
|
stderr_logfile_backups=10
|
||||||
|
stderr_capture_maxbytes=1MB
|
||||||
|
user = git
|
||||||
|
environment = HOME="/home/git", USER="git"
|
||||||
33
contrib/systemd/gitea.service
Normal file
33
contrib/systemd/gitea.service
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea (Git with a cup of tea)
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
#Requires=mysql.service
|
||||||
|
#Requires=mariadb.service
|
||||||
|
#Requires=postgresql.service
|
||||||
|
#Requires=memcached.service
|
||||||
|
#Requires=redis.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
# Modify these two values and uncomment them if you have
|
||||||
|
# repos with lots of files and get an HTTP error 500 because
|
||||||
|
# of that
|
||||||
|
###
|
||||||
|
#LimitMEMLOCK=infinity
|
||||||
|
#LimitNOFILE=65535
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User=git
|
||||||
|
Group=git
|
||||||
|
WorkingDirectory=/var/lib/gitea/
|
||||||
|
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
|
||||||
|
Restart=always
|
||||||
|
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
|
||||||
|
# If you want to bind Gitea to a port below 1024 uncomment
|
||||||
|
# the two values below
|
||||||
|
###
|
||||||
|
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||||
|
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
730
custom/conf/app.ini.sample
Normal file
730
custom/conf/app.ini.sample
Normal file
@@ -0,0 +1,730 @@
|
|||||||
|
; This file lists the default values used by Gitea
|
||||||
|
; Copy required sections to your own app.ini (default is custom/conf/app.ini)
|
||||||
|
; and modify as needed.
|
||||||
|
|
||||||
|
; see https://docs.gitea.io/en-us/config-cheat-sheet/ for additional documentation.
|
||||||
|
|
||||||
|
; App name that shows in every page title
|
||||||
|
APP_NAME = Gitea: Git with a cup of tea
|
||||||
|
; Change it if you run locally
|
||||||
|
RUN_USER = git
|
||||||
|
; Either "dev", "prod" or "test", default is "dev"
|
||||||
|
RUN_MODE = dev
|
||||||
|
|
||||||
|
[repository]
|
||||||
|
ROOT =
|
||||||
|
SCRIPT_TYPE = bash
|
||||||
|
; Default ANSI charset
|
||||||
|
ANSI_CHARSET =
|
||||||
|
; Force every new repository to be private
|
||||||
|
FORCE_PRIVATE = false
|
||||||
|
; Default privacy setting when creating a new repository, allowed values: last, private, public. Default is last which means the last setting used.
|
||||||
|
DEFAULT_PRIVATE = last
|
||||||
|
; Global limit of repositories per user, applied at creation time. -1 means no limit
|
||||||
|
MAX_CREATION_LIMIT = -1
|
||||||
|
; Mirror sync queue length, increase if mirror syncing starts hanging
|
||||||
|
MIRROR_QUEUE_LENGTH = 1000
|
||||||
|
; Patch test queue length, increase if pull request patch testing starts hanging
|
||||||
|
PULL_REQUEST_QUEUE_LENGTH = 1000
|
||||||
|
; Preferred Licenses to place at the top of the List
|
||||||
|
; The name here must match the filename in conf/license or custom/conf/license
|
||||||
|
PREFERRED_LICENSES = Apache License 2.0,MIT License
|
||||||
|
; Disable the ability to interact with repositories using the HTTP protocol
|
||||||
|
DISABLE_HTTP_GIT = false
|
||||||
|
; Value for Access-Control-Allow-Origin header, default is not to present
|
||||||
|
; WARNING: This maybe harmful to you website if you do not give it a right value.
|
||||||
|
ACCESS_CONTROL_ALLOW_ORIGIN =
|
||||||
|
; Force ssh:// clone url instead of scp-style uri when default SSH port is used
|
||||||
|
USE_COMPAT_SSH_URI = false
|
||||||
|
; Close issues as long as a commit on any branch marks it as fixed
|
||||||
|
DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH = false
|
||||||
|
|
||||||
|
[repository.editor]
|
||||||
|
; List of file extensions for which lines should be wrapped in the CodeMirror editor
|
||||||
|
; Separate extensions with a comma. To line wrap files without an extension, just put a comma
|
||||||
|
LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd,
|
||||||
|
; Valid file modes that have a preview API associated with them, such as api/v1/markdown
|
||||||
|
; Separate the values by commas. The preview tab in edit mode won't be displayed if the file extension doesn't match
|
||||||
|
PREVIEWABLE_FILE_MODES = markdown
|
||||||
|
|
||||||
|
[repository.local]
|
||||||
|
; Path for local repository copy. Defaults to `tmp/local-repo`
|
||||||
|
LOCAL_COPY_PATH = tmp/local-repo
|
||||||
|
; Path for local wiki copy. Defaults to `tmp/local-wiki`
|
||||||
|
LOCAL_WIKI_PATH = tmp/local-wiki
|
||||||
|
|
||||||
|
[repository.upload]
|
||||||
|
; Whether repository file uploads are enabled. Defaults to `true`
|
||||||
|
ENABLED = true
|
||||||
|
; Path for uploads. Defaults to `data/tmp/uploads` (tmp gets deleted on gitea restart)
|
||||||
|
TEMP_PATH = data/tmp/uploads
|
||||||
|
; One or more allowed types, e.g. image/jpeg|image/png. Nothing means any file type
|
||||||
|
ALLOWED_TYPES =
|
||||||
|
; Max size of each file in megabytes. Defaults to 3MB
|
||||||
|
FILE_MAX_SIZE = 3
|
||||||
|
; Max number of files per upload. Defaults to 5
|
||||||
|
MAX_FILES = 5
|
||||||
|
|
||||||
|
[repository.pull-request]
|
||||||
|
; List of prefixes used in Pull Request title to mark them as Work In Progress
|
||||||
|
WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP]
|
||||||
|
|
||||||
|
[repository.issue]
|
||||||
|
; List of reasons why a Pull Request or Issue can be locked
|
||||||
|
LOCK_REASONS=Too heated,Off-topic,Resolved,Spam
|
||||||
|
|
||||||
|
[ui]
|
||||||
|
; Number of repositories that are displayed on one explore page
|
||||||
|
EXPLORE_PAGING_NUM = 20
|
||||||
|
; Number of issues that are displayed on one page
|
||||||
|
ISSUE_PAGING_NUM = 10
|
||||||
|
; Number of maximum commits displayed in one activity feed
|
||||||
|
FEED_MAX_COMMIT_NUM = 5
|
||||||
|
; Number of maximum commits displayed in commit graph.
|
||||||
|
GRAPH_MAX_COMMIT_NUM = 100
|
||||||
|
; Number of line of codes shown for a code comment
|
||||||
|
CODE_COMMENT_LINES = 4
|
||||||
|
; Value of `theme-color` meta tag, used by Android >= 5.0
|
||||||
|
; An invalid color like "none" or "disable" will have the default style
|
||||||
|
; More info: https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android
|
||||||
|
THEME_COLOR_META_TAG = `#6cc644`
|
||||||
|
; Max size of files to be displayed (default is 8MiB)
|
||||||
|
MAX_DISPLAY_FILE_SIZE = 8388608
|
||||||
|
; Whether the email of the user should be shown in the Explore Users page
|
||||||
|
SHOW_USER_EMAIL = true
|
||||||
|
; Set the default theme for the Gitea install
|
||||||
|
DEFAULT_THEME = gitea
|
||||||
|
; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`.
|
||||||
|
THEMES = gitea,arc-green
|
||||||
|
|
||||||
|
[ui.admin]
|
||||||
|
; Number of users that are displayed on one page
|
||||||
|
USER_PAGING_NUM = 50
|
||||||
|
; Number of repos that are displayed on one page
|
||||||
|
REPO_PAGING_NUM = 50
|
||||||
|
; Number of notices that are displayed on one page
|
||||||
|
NOTICE_PAGING_NUM = 25
|
||||||
|
; Number of organizations that are displayed on one page
|
||||||
|
ORG_PAGING_NUM = 50
|
||||||
|
|
||||||
|
[ui.user]
|
||||||
|
; Number of repos that are displayed on one page
|
||||||
|
REPO_PAGING_NUM = 15
|
||||||
|
|
||||||
|
[ui.meta]
|
||||||
|
AUTHOR = Gitea - Git with a cup of tea
|
||||||
|
DESCRIPTION = Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go
|
||||||
|
KEYWORDS = go,git,self-hosted,gitea
|
||||||
|
|
||||||
|
[markdown]
|
||||||
|
; Enable hard line break extension
|
||||||
|
ENABLE_HARD_LINE_BREAK = false
|
||||||
|
; List of custom URL-Schemes that are allowed as links when rendering Markdown
|
||||||
|
; for example git,magnet
|
||||||
|
CUSTOM_URL_SCHEMES =
|
||||||
|
; List of file extensions that should be rendered/edited as Markdown
|
||||||
|
; Separate the extensions with a comma. To render files without any extension as markdown, just put a comma
|
||||||
|
FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd
|
||||||
|
|
||||||
|
[server]
|
||||||
|
; The protocol the server listens on. One of 'http', 'https', 'unix' or 'fcgi'.
|
||||||
|
PROTOCOL = http
|
||||||
|
DOMAIN = localhost
|
||||||
|
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
|
||||||
|
; The address to listen on. Either a IPv4/IPv6 address or the path to a unix socket.
|
||||||
|
HTTP_ADDR = 0.0.0.0
|
||||||
|
HTTP_PORT = 3000
|
||||||
|
; If REDIRECT_OTHER_PORT is true, and PROTOCOL is set to https an http server
|
||||||
|
; will be started on PORT_TO_REDIRECT and it will redirect plain, non-secure http requests to the main
|
||||||
|
; ROOT_URL. Defaults are false for REDIRECT_OTHER_PORT and 80 for
|
||||||
|
; PORT_TO_REDIRECT.
|
||||||
|
REDIRECT_OTHER_PORT = false
|
||||||
|
PORT_TO_REDIRECT = 80
|
||||||
|
; Permission for unix socket
|
||||||
|
UNIX_SOCKET_PERMISSION = 666
|
||||||
|
; Local (DMZ) URL for Gitea workers (such as SSH update) accessing web service.
|
||||||
|
; In most cases you do not need to change the default value.
|
||||||
|
; Alter it only if your SSH server node is not the same as HTTP node.
|
||||||
|
; Do not set this variable if PROTOCOL is set to 'unix'.
|
||||||
|
LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/
|
||||||
|
; Disable SSH feature when not available
|
||||||
|
DISABLE_SSH = false
|
||||||
|
; Whether to use the builtin SSH server or not.
|
||||||
|
START_SSH_SERVER = false
|
||||||
|
; Username to use for the builtin SSH server. If blank, then it is the value of RUN_USER.
|
||||||
|
BUILTIN_SSH_SERVER_USER =
|
||||||
|
; Domain name to be exposed in clone URL
|
||||||
|
SSH_DOMAIN = %(DOMAIN)s
|
||||||
|
; The network interface the builtin SSH server should listen on
|
||||||
|
SSH_LISTEN_HOST =
|
||||||
|
; Port number to be exposed in clone URL
|
||||||
|
SSH_PORT = 22
|
||||||
|
; The port number the builtin SSH server should listen on
|
||||||
|
SSH_LISTEN_PORT = %(SSH_PORT)s
|
||||||
|
; Root path of SSH directory, default is '~/.ssh', but you have to use '/home/git/.ssh'.
|
||||||
|
SSH_ROOT_PATH =
|
||||||
|
; Gitea will create a authorized_keys file by default when it is not using the internal ssh server
|
||||||
|
; If you intend to use the AuthorizedKeysCommand functionality then you should turn this off.
|
||||||
|
SSH_CREATE_AUTHORIZED_KEYS_FILE = true
|
||||||
|
; For the built-in SSH server, choose the ciphers to support for SSH connections,
|
||||||
|
; for system SSH this setting has no effect
|
||||||
|
SSH_SERVER_CIPHERS = aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, arcfour256, arcfour128
|
||||||
|
; For the built-in SSH server, choose the key exchange algorithms to support for SSH connections,
|
||||||
|
; for system SSH this setting has no effect
|
||||||
|
SSH_SERVER_KEY_EXCHANGES = diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, curve25519-sha256@libssh.org
|
||||||
|
; For the built-in SSH server, choose the MACs to support for SSH connections,
|
||||||
|
; for system SSH this setting has no effect
|
||||||
|
SSH_SERVER_MACS = hmac-sha2-256-etm@openssh.com, hmac-sha2-256, hmac-sha1, hmac-sha1-96
|
||||||
|
; Directory to create temporary files in when testing public keys using ssh-keygen,
|
||||||
|
; default is the system temporary directory.
|
||||||
|
SSH_KEY_TEST_PATH =
|
||||||
|
; Path to ssh-keygen, default is 'ssh-keygen' which means the shell is responsible for finding out which one to call.
|
||||||
|
SSH_KEYGEN_PATH = ssh-keygen
|
||||||
|
; Enable SSH Authorized Key Backup when rewriting all keys, default is true
|
||||||
|
SSH_BACKUP_AUTHORIZED_KEYS = true
|
||||||
|
; Enable exposure of SSH clone URL to anonymous visitors, default is false
|
||||||
|
SSH_EXPOSE_ANONYMOUS = false
|
||||||
|
; Indicate whether to check minimum key size with corresponding type
|
||||||
|
MINIMUM_KEY_SIZE_CHECK = false
|
||||||
|
; Disable CDN even in "prod" mode
|
||||||
|
OFFLINE_MODE = false
|
||||||
|
DISABLE_ROUTER_LOG = false
|
||||||
|
; Generate steps:
|
||||||
|
; $ ./gitea cert -ca=true -duration=8760h0m0s -host=myhost.example.com
|
||||||
|
;
|
||||||
|
; Or from a .pfx file exported from the Windows certificate store (do
|
||||||
|
; not forget to export the private key):
|
||||||
|
; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys
|
||||||
|
; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes
|
||||||
|
CERT_FILE = custom/https/cert.pem
|
||||||
|
KEY_FILE = custom/https/key.pem
|
||||||
|
; Root directory containing templates and static files.
|
||||||
|
; default is the path where Gitea is executed
|
||||||
|
STATIC_ROOT_PATH =
|
||||||
|
; Default path for App data
|
||||||
|
APP_DATA_PATH = data
|
||||||
|
; Application level GZIP support
|
||||||
|
ENABLE_GZIP = false
|
||||||
|
; Application profiling (memory and cpu)
|
||||||
|
; For "web" command it listens on localhost:6060
|
||||||
|
; For "serve" command it dumps to disk at PPROF_DATA_PATH as (cpuprofile|memprofile)_<username>_<temporary id>
|
||||||
|
ENABLE_PPROF = false
|
||||||
|
; PPROF_DATA_PATH, use an absolute path when you start gitea as service
|
||||||
|
PPROF_DATA_PATH = data/tmp/pprof
|
||||||
|
; Landing page, can be "home", "explore", or "organizations"
|
||||||
|
LANDING_PAGE = home
|
||||||
|
; Enables git-lfs support. true or false, default is false.
|
||||||
|
LFS_START_SERVER = false
|
||||||
|
; Where your lfs files reside, default is data/lfs.
|
||||||
|
LFS_CONTENT_PATH = data/lfs
|
||||||
|
; LFS authentication secret, change this yourself
|
||||||
|
LFS_JWT_SECRET =
|
||||||
|
; LFS authentication validity period (in time.Duration), pushes taking longer than this may fail.
|
||||||
|
LFS_HTTP_AUTH_EXPIRY = 20m
|
||||||
|
|
||||||
|
; Define allowed algorithms and their minimum key length (use -1 to disable a type)
|
||||||
|
[ssh.minimum_key_sizes]
|
||||||
|
ED25519 = 256
|
||||||
|
ECDSA = 256
|
||||||
|
RSA = 2048
|
||||||
|
DSA = 1024
|
||||||
|
|
||||||
|
[database]
|
||||||
|
; Either "mysql", "postgres", "mssql" or "sqlite3", it's your choice
|
||||||
|
DB_TYPE = mysql
|
||||||
|
HOST = 127.0.0.1:3306
|
||||||
|
NAME = gitea
|
||||||
|
USER = root
|
||||||
|
; Use PASSWD = `your password` for quoting if you use special characters in the password.
|
||||||
|
PASSWD =
|
||||||
|
; For Postgres, either "disable" (default), "require", or "verify-full"
|
||||||
|
; For MySQL, either "false" (default), "true", or "skip-verify"
|
||||||
|
SSL_MODE = disable
|
||||||
|
; For "sqlite3" and "tidb", use an absolute path when you start gitea as service
|
||||||
|
PATH = data/gitea.db
|
||||||
|
; For "sqlite3" only. Query timeout
|
||||||
|
SQLITE_TIMEOUT = 500
|
||||||
|
; For iterate buffer, default is 50
|
||||||
|
ITERATE_BUFFER_SIZE = 50
|
||||||
|
; Show the database generated SQL
|
||||||
|
LOG_SQL = true
|
||||||
|
; Maximum number of DB Connect retries
|
||||||
|
DB_RETRIES = 10
|
||||||
|
; Backoff time per DB retry (time.Duration)
|
||||||
|
DB_RETRY_BACKOFF = 3s
|
||||||
|
|
||||||
|
[indexer]
|
||||||
|
; Issue indexer type, currently support: bleve or db, default is bleve
|
||||||
|
ISSUE_INDEXER_TYPE = bleve
|
||||||
|
; Issue indexer storage path, available when ISSUE_INDEXER_TYPE is bleve
|
||||||
|
ISSUE_INDEXER_PATH = indexers/issues.bleve
|
||||||
|
; Issue indexer queue, currently support: channel or levelqueue, default is levelqueue
|
||||||
|
ISSUE_INDEXER_QUEUE_TYPE = levelqueue
|
||||||
|
; When ISSUE_INDEXER_QUEUE_TYPE is levelqueue, this will be the queue will be saved path,
|
||||||
|
; default is indexers/issues.queue
|
||||||
|
ISSUE_INDEXER_QUEUE_DIR = indexers/issues.queue
|
||||||
|
; Batch queue number, default is 20
|
||||||
|
ISSUE_INDEXER_QUEUE_BATCH_NUMBER = 20
|
||||||
|
|
||||||
|
; repo indexer by default disabled, since it uses a lot of disk space
|
||||||
|
REPO_INDEXER_ENABLED = false
|
||||||
|
REPO_INDEXER_PATH = indexers/repos.bleve
|
||||||
|
UPDATE_BUFFER_LEN = 20
|
||||||
|
MAX_FILE_SIZE = 1048576
|
||||||
|
|
||||||
|
[admin]
|
||||||
|
; Disallow regular (non-admin) users from creating organizations.
|
||||||
|
DISABLE_REGULAR_ORG_CREATION = false
|
||||||
|
|
||||||
|
[security]
|
||||||
|
; Whether the installer is disabled
|
||||||
|
INSTALL_LOCK = false
|
||||||
|
; !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!!
|
||||||
|
SECRET_KEY = !#@FDEWREWR&*(
|
||||||
|
; How long to remember that an user is logged in before requiring relogin (in days)
|
||||||
|
LOGIN_REMEMBER_DAYS = 7
|
||||||
|
COOKIE_USERNAME = gitea_awesome
|
||||||
|
COOKIE_REMEMBER_NAME = gitea_incredible
|
||||||
|
; Reverse proxy authentication header name of user name
|
||||||
|
REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER
|
||||||
|
REVERSE_PROXY_AUTHENTICATION_EMAIL = X-WEBAUTH-EMAIL
|
||||||
|
; The minimum password length for new Users
|
||||||
|
MIN_PASSWORD_LENGTH = 6
|
||||||
|
; Set to true to allow users to import local server paths
|
||||||
|
IMPORT_LOCAL_PATHS = false
|
||||||
|
; Set to true to prevent all users (including admin) from creating custom git hooks
|
||||||
|
DISABLE_GIT_HOOKS = false
|
||||||
|
|
||||||
|
[openid]
|
||||||
|
;
|
||||||
|
; OpenID is an open, standard and decentralized authentication protocol.
|
||||||
|
; Your identity is the address of a webpage you provide, which describes
|
||||||
|
; how to prove you are in control of that page.
|
||||||
|
;
|
||||||
|
; For more info: https://en.wikipedia.org/wiki/OpenID
|
||||||
|
;
|
||||||
|
; Current implementation supports OpenID-2.0
|
||||||
|
;
|
||||||
|
; Tested to work providers at the time of writing:
|
||||||
|
; - Any GNUSocial node (your.hostname.tld/username)
|
||||||
|
; - Any SimpleID provider (http://simpleid.koinic.net)
|
||||||
|
; - http://openid.org.cn/
|
||||||
|
; - openid.stackexchange.com
|
||||||
|
; - login.launchpad.net
|
||||||
|
; - <username>.livejournal.com
|
||||||
|
;
|
||||||
|
; Whether to allow signin in via OpenID
|
||||||
|
ENABLE_OPENID_SIGNIN = true
|
||||||
|
; Whether to allow registering via OpenID
|
||||||
|
; Do not include to rely on rhw DISABLE_REGISTRATION setting
|
||||||
|
;ENABLE_OPENID_SIGNUP = true
|
||||||
|
; Allowed URI patterns (POSIX regexp).
|
||||||
|
; Space separated.
|
||||||
|
; Only these would be allowed if non-blank.
|
||||||
|
; Example value: trusted.domain.org trusted.domain.net
|
||||||
|
WHITELISTED_URIS =
|
||||||
|
; Forbidden URI patterns (POSIX regexp).
|
||||||
|
; Space separated.
|
||||||
|
; Only used if WHITELISTED_URIS is blank.
|
||||||
|
; Example value: loadaverage.org/badguy stackexchange.com/.*spammer
|
||||||
|
BLACKLISTED_URIS =
|
||||||
|
|
||||||
|
[service]
|
||||||
|
; Time limit to confirm account/email registration
|
||||||
|
ACTIVE_CODE_LIVE_MINUTES = 180
|
||||||
|
; Time limit to perform the reset of a forgotten password
|
||||||
|
RESET_PASSWD_CODE_LIVE_MINUTES = 180
|
||||||
|
; Whether a new user needs to confirm their email when registering.
|
||||||
|
REGISTER_EMAIL_CONFIRM = false
|
||||||
|
; List of domain names that are allowed to be used to register on a Gitea instance
|
||||||
|
; gitea.io,example.com
|
||||||
|
EMAIL_DOMAIN_WHITELIST=
|
||||||
|
; Disallow registration, only allow admins to create accounts.
|
||||||
|
DISABLE_REGISTRATION = false
|
||||||
|
; Allow registration only using third-party services, it works only when DISABLE_REGISTRATION is false
|
||||||
|
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
|
||||||
|
; User must sign in to view anything.
|
||||||
|
REQUIRE_SIGNIN_VIEW = false
|
||||||
|
; Mail notification
|
||||||
|
ENABLE_NOTIFY_MAIL = false
|
||||||
|
; More detail: https://github.com/gogits/gogs/issues/165
|
||||||
|
ENABLE_REVERSE_PROXY_AUTHENTICATION = false
|
||||||
|
ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
|
||||||
|
ENABLE_REVERSE_PROXY_EMAIL = false
|
||||||
|
; Enable captcha validation for registration
|
||||||
|
ENABLE_CAPTCHA = false
|
||||||
|
; Type of captcha you want to use. Options: image, recaptcha
|
||||||
|
CAPTCHA_TYPE = image
|
||||||
|
; Enable recaptcha to use Google's recaptcha service
|
||||||
|
; Go to https://www.google.com/recaptcha/admin to sign up for a key
|
||||||
|
RECAPTCHA_SECRET =
|
||||||
|
RECAPTCHA_SITEKEY =
|
||||||
|
; Default value for KeepEmailPrivate
|
||||||
|
; Each new user will get the value of this setting copied into their profile
|
||||||
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
|
; Default value for AllowCreateOrganization
|
||||||
|
; Every new user will have rights set to create organizations depending on this setting
|
||||||
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
|
; Either "public", "limited" or "private", default is "public"
|
||||||
|
; Limited is for signed user only
|
||||||
|
; Private is only for member of the organization
|
||||||
|
; Public is for everyone
|
||||||
|
DEFAULT_ORG_VISIBILITY = public
|
||||||
|
; Default value for EnableDependencies
|
||||||
|
; Repositories will use dependencies by default depending on this setting
|
||||||
|
DEFAULT_ENABLE_DEPENDENCIES = true
|
||||||
|
; Enable heatmap on users profiles.
|
||||||
|
ENABLE_USER_HEATMAP = true
|
||||||
|
; Enable Timetracking
|
||||||
|
ENABLE_TIMETRACKING = true
|
||||||
|
; Default value for EnableTimetracking
|
||||||
|
; Repositories will use timetracking by default depending on this setting
|
||||||
|
DEFAULT_ENABLE_TIMETRACKING = true
|
||||||
|
; Default value for AllowOnlyContributorsToTrackTime
|
||||||
|
; Only users with write permissions can track time if this is true
|
||||||
|
DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME = true
|
||||||
|
; Default value for the domain part of the user's email address in the git log
|
||||||
|
; if he has set KeepEmailPrivate to true. The user's email will be replaced with a
|
||||||
|
; concatenation of the user name in lower case, "@" and NO_REPLY_ADDRESS.
|
||||||
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
; Show Registration button
|
||||||
|
SHOW_REGISTRATION_BUTTON = true
|
||||||
|
; Default value for AutoWatchNewRepos
|
||||||
|
; When adding a repo to a team or creating a new repo all team members will watch the
|
||||||
|
; repo automatically if enabled
|
||||||
|
AUTO_WATCH_NEW_REPOS = true
|
||||||
|
|
||||||
|
[webhook]
|
||||||
|
; Hook task queue length, increase if webhook shooting starts hanging
|
||||||
|
QUEUE_LENGTH = 1000
|
||||||
|
; Deliver timeout in seconds
|
||||||
|
DELIVER_TIMEOUT = 5
|
||||||
|
; Allow insecure certification
|
||||||
|
SKIP_TLS_VERIFY = false
|
||||||
|
; Number of history information in each page
|
||||||
|
PAGING_NUM = 10
|
||||||
|
|
||||||
|
[mailer]
|
||||||
|
ENABLED = false
|
||||||
|
; Buffer length of channel, keep it as it is if you don't know what it is.
|
||||||
|
SEND_BUFFER_LEN = 100
|
||||||
|
; Name displayed in mail title
|
||||||
|
SUBJECT = %(APP_NAME)s
|
||||||
|
; Mail server
|
||||||
|
; Gmail: smtp.gmail.com:587
|
||||||
|
; QQ: smtp.qq.com:465
|
||||||
|
; Note, if the port ends with "465", SMTPS will be used. Using STARTTLS on port 587 is recommended per RFC 6409. If the server supports STARTTLS it will always be used.
|
||||||
|
HOST =
|
||||||
|
; Disable HELO operation when hostnames are different.
|
||||||
|
DISABLE_HELO =
|
||||||
|
; Custom hostname for HELO operation, if no value is provided, one is retrieved from system.
|
||||||
|
HELO_HOSTNAME =
|
||||||
|
; Do not verify the certificate of the server. Only use this for self-signed certificates
|
||||||
|
SKIP_VERIFY =
|
||||||
|
; Use client certificate
|
||||||
|
USE_CERTIFICATE = false
|
||||||
|
CERT_FILE = custom/mailer/cert.pem
|
||||||
|
KEY_FILE = custom/mailer/key.pem
|
||||||
|
; Should SMTP connection use TLS
|
||||||
|
IS_TLS_ENABLED = false
|
||||||
|
; Mail from address, RFC 5322. This can be just an email address, or the `"Name" <email@example.com>` format
|
||||||
|
FROM =
|
||||||
|
; Mailer user name and password
|
||||||
|
USER =
|
||||||
|
; Use PASSWD = `your password` for quoting if you use special characters in the password.
|
||||||
|
PASSWD =
|
||||||
|
; Send mails as plain text
|
||||||
|
SEND_AS_PLAIN_TEXT = false
|
||||||
|
; Set Mailer Type (either SMTP, sendmail or dummy to just send to the log)
|
||||||
|
MAILER_TYPE = smtp
|
||||||
|
; Specify an alternative sendmail binary
|
||||||
|
SENDMAIL_PATH = sendmail
|
||||||
|
; Specify any extra sendmail arguments
|
||||||
|
SENDMAIL_ARGS =
|
||||||
|
|
||||||
|
[cache]
|
||||||
|
; Either "memory", "redis", or "memcache", default is "memory"
|
||||||
|
ADAPTER = memory
|
||||||
|
; For "memory" only, GC interval in seconds, default is 60
|
||||||
|
INTERVAL = 60
|
||||||
|
; For "redis" and "memcache", connection host address
|
||||||
|
; redis: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180
|
||||||
|
; memcache: `127.0.0.1:11211`
|
||||||
|
HOST =
|
||||||
|
; Time to keep items in cache if not used, default is 16 hours.
|
||||||
|
; Setting it to 0 disables caching
|
||||||
|
ITEM_TTL = 16h
|
||||||
|
|
||||||
|
[session]
|
||||||
|
; Either "memory", "file", or "redis", default is "memory"
|
||||||
|
PROVIDER = memory
|
||||||
|
; Provider config options
|
||||||
|
; memory: doesn't have any config yet
|
||||||
|
; file: session file path, e.g. `data/sessions`
|
||||||
|
; redis: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180
|
||||||
|
; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table`
|
||||||
|
PROVIDER_CONFIG = data/sessions
|
||||||
|
; Session cookie name
|
||||||
|
COOKIE_NAME = i_like_gitea
|
||||||
|
; If you use session in https only, default is false
|
||||||
|
COOKIE_SECURE = false
|
||||||
|
; Enable set cookie, default is true
|
||||||
|
ENABLE_SET_COOKIE = true
|
||||||
|
; Session GC time interval in seconds, default is 86400 (1 day)
|
||||||
|
GC_INTERVAL_TIME = 86400
|
||||||
|
; Session life time in seconds, default is 86400 (1 day)
|
||||||
|
SESSION_LIFE_TIME = 86400
|
||||||
|
|
||||||
|
[picture]
|
||||||
|
AVATAR_UPLOAD_PATH = data/avatars
|
||||||
|
; Max Width and Height of uploaded avatars. This is to limit the amount of RAM
|
||||||
|
; used when resizing the image.
|
||||||
|
AVATAR_MAX_WIDTH = 4096
|
||||||
|
AVATAR_MAX_HEIGHT = 3072
|
||||||
|
; Chinese users can choose "duoshuo"
|
||||||
|
; or a custom avatar source, like: http://cn.gravatar.com/avatar/
|
||||||
|
GRAVATAR_SOURCE = gravatar
|
||||||
|
; This value will always be true in offline mode.
|
||||||
|
DISABLE_GRAVATAR = false
|
||||||
|
; Federated avatar lookup uses DNS to discover avatar associated
|
||||||
|
; with emails, see https://www.libravatar.org
|
||||||
|
; This value will always be false in offline mode or when Gravatar is disabled.
|
||||||
|
ENABLE_FEDERATED_AVATAR = false
|
||||||
|
|
||||||
|
[attachment]
|
||||||
|
; Whether attachments are enabled. Defaults to `true`
|
||||||
|
ENABLED = true
|
||||||
|
; Path for attachments. Defaults to `data/attachments`
|
||||||
|
PATH = data/attachments
|
||||||
|
; One or more allowed types, e.g. image/jpeg|image/png
|
||||||
|
ALLOWED_TYPES = image/jpeg|image/png|application/zip|application/gzip
|
||||||
|
; Max size of each file. Defaults to 4MB
|
||||||
|
MAX_SIZE = 4
|
||||||
|
; Max number of files per upload. Defaults to 5
|
||||||
|
MAX_FILES = 5
|
||||||
|
|
||||||
|
[time]
|
||||||
|
; Specifies the format for fully outputted dates. Defaults to RFC1123
|
||||||
|
; Special supported values are ANSIC, UnixDate, RubyDate, RFC822, RFC822Z, RFC850, RFC1123, RFC1123Z, RFC3339, RFC3339Nano, Kitchen, Stamp, StampMilli, StampMicro and StampNano
|
||||||
|
; For more information about the format see http://golang.org/pkg/time/#pkg-constants
|
||||||
|
FORMAT =
|
||||||
|
|
||||||
|
[log]
|
||||||
|
ROOT_PATH =
|
||||||
|
; Either "console", "file", "conn", "smtp" or "database", default is "console"
|
||||||
|
; Use comma to separate multiple modes, e.g. "console, file"
|
||||||
|
MODE = console
|
||||||
|
; Buffer length of the channel, keep it as it is if you don't know what it is.
|
||||||
|
BUFFER_LEN = 10000
|
||||||
|
; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace"
|
||||||
|
LEVEL = Trace
|
||||||
|
REDIRECT_MACARON_LOG = false
|
||||||
|
|
||||||
|
; For "console" mode only
|
||||||
|
[log.console]
|
||||||
|
LEVEL =
|
||||||
|
|
||||||
|
; For "file" mode only
|
||||||
|
[log.file]
|
||||||
|
LEVEL =
|
||||||
|
; This enables automated log rotate(switch of following options), default is true
|
||||||
|
LOG_ROTATE = true
|
||||||
|
; Max number of lines in a single file, default is 1000000
|
||||||
|
MAX_LINES = 1000000
|
||||||
|
; Max size shift of a single file, default is 28 means 1 << 28, 256MB
|
||||||
|
MAX_SIZE_SHIFT = 28
|
||||||
|
; Segment log daily, default is true
|
||||||
|
DAILY_ROTATE = true
|
||||||
|
; delete the log file after n days, default is 7
|
||||||
|
MAX_DAYS = 7
|
||||||
|
|
||||||
|
; For "conn" mode only
|
||||||
|
[log.conn]
|
||||||
|
LEVEL =
|
||||||
|
; Reconnect host for every single message, default is false
|
||||||
|
RECONNECT_ON_MSG = false
|
||||||
|
; Try to reconnect when connection is lost, default is false
|
||||||
|
RECONNECT = false
|
||||||
|
; Either "tcp", "unix" or "udp", default is "tcp"
|
||||||
|
PROTOCOL = tcp
|
||||||
|
; Host address
|
||||||
|
ADDR =
|
||||||
|
|
||||||
|
; For "smtp" mode only
|
||||||
|
[log.smtp]
|
||||||
|
LEVEL =
|
||||||
|
; Name displayed in mail title, default is "Diagnostic message from server"
|
||||||
|
SUBJECT = Diagnostic message from server
|
||||||
|
; Mail server
|
||||||
|
HOST =
|
||||||
|
; Mailer user name and password
|
||||||
|
USER =
|
||||||
|
; Use PASSWD = `your password` for quoting if you use special characters in the password.
|
||||||
|
PASSWD =
|
||||||
|
; Receivers, can be one or more, e.g. 1@example.com,2@example.com
|
||||||
|
RECEIVERS =
|
||||||
|
|
||||||
|
; For "database" mode only
|
||||||
|
[log.database]
|
||||||
|
LEVEL =
|
||||||
|
; Either "mysql" or "postgres"
|
||||||
|
DRIVER =
|
||||||
|
; Based on xorm, e.g.: root:root@localhost/gitea?charset=utf8
|
||||||
|
CONN =
|
||||||
|
|
||||||
|
[cron]
|
||||||
|
; Enable running cron tasks periodically.
|
||||||
|
ENABLED = true
|
||||||
|
; Run cron tasks when Gitea starts.
|
||||||
|
RUN_AT_START = false
|
||||||
|
|
||||||
|
; Update mirrors
|
||||||
|
[cron.update_mirrors]
|
||||||
|
SCHEDULE = @every 10m
|
||||||
|
|
||||||
|
; Repository health check
|
||||||
|
[cron.repo_health_check]
|
||||||
|
SCHEDULE = @every 24h
|
||||||
|
TIMEOUT = 60s
|
||||||
|
; Arguments for command 'git fsck', e.g. "--unreachable --tags"
|
||||||
|
; see more on http://git-scm.com/docs/git-fsck
|
||||||
|
ARGS =
|
||||||
|
|
||||||
|
; Check repository statistics
|
||||||
|
[cron.check_repo_stats]
|
||||||
|
RUN_AT_START = true
|
||||||
|
SCHEDULE = @every 24h
|
||||||
|
|
||||||
|
; Clean up old repository archives
|
||||||
|
[cron.archive_cleanup]
|
||||||
|
; Whether to enable the job
|
||||||
|
ENABLED = true
|
||||||
|
; Whether to always run at least once at start up time (if ENABLED)
|
||||||
|
RUN_AT_START = true
|
||||||
|
; Time interval for job to run
|
||||||
|
SCHEDULE = @every 24h
|
||||||
|
; Archives created more than OLDER_THAN ago are subject to deletion
|
||||||
|
OLDER_THAN = 24h
|
||||||
|
|
||||||
|
; Synchronize external user data (only LDAP user synchronization is supported)
|
||||||
|
[cron.sync_external_users]
|
||||||
|
; Synchronize external user data when starting server (default false)
|
||||||
|
RUN_AT_START = false
|
||||||
|
; Interval as a duration between each synchronization (default every 24h)
|
||||||
|
SCHEDULE = @every 24h
|
||||||
|
; Create new users, update existing user data and disable users that are not in external source anymore (default)
|
||||||
|
; or only create new users if UPDATE_EXISTING is set to false
|
||||||
|
UPDATE_EXISTING = true
|
||||||
|
|
||||||
|
[git]
|
||||||
|
; Disables highlight of added and removed changes
|
||||||
|
DISABLE_DIFF_HIGHLIGHT = false
|
||||||
|
; Max number of lines allowed in a single file in diff view
|
||||||
|
MAX_GIT_DIFF_LINES = 1000
|
||||||
|
; Max number of allowed characters in a line in diff view
|
||||||
|
MAX_GIT_DIFF_LINE_CHARACTERS = 5000
|
||||||
|
; Max number of files shown in diff view
|
||||||
|
MAX_GIT_DIFF_FILES = 100
|
||||||
|
; Arguments for command 'git gc', e.g. "--aggressive --auto"
|
||||||
|
; see more on http://git-scm.com/docs/git-gc/
|
||||||
|
GC_ARGS =
|
||||||
|
|
||||||
|
; Operation timeout in seconds
|
||||||
|
[git.timeout]
|
||||||
|
DEFAULT = 360
|
||||||
|
MIGRATE = 600
|
||||||
|
MIRROR = 300
|
||||||
|
CLONE = 300
|
||||||
|
PULL = 300
|
||||||
|
GC = 60
|
||||||
|
|
||||||
|
[mirror]
|
||||||
|
; Default interval as a duration between each check
|
||||||
|
DEFAULT_INTERVAL = 8h
|
||||||
|
; Min interval as a duration must be > 1m
|
||||||
|
MIN_INTERVAL = 10m
|
||||||
|
|
||||||
|
[api]
|
||||||
|
; Enables Swagger. True or false; default is true.
|
||||||
|
ENABLE_SWAGGER = true
|
||||||
|
; Max number of items in a page
|
||||||
|
MAX_RESPONSE_ITEMS = 50
|
||||||
|
; Default paging number of api
|
||||||
|
DEFAULT_PAGING_NUM = 30
|
||||||
|
; Default and maximum number of items per page for git trees api
|
||||||
|
DEFAULT_GIT_TREES_PER_PAGE = 1000
|
||||||
|
|
||||||
|
[oauth2]
|
||||||
|
; Enables OAuth2 provider
|
||||||
|
ENABLED = true
|
||||||
|
; Lifetime of an OAuth2 access token in seconds
|
||||||
|
ACCESS_TOKEN_EXPIRATION_TIME=3600
|
||||||
|
; Lifetime of an OAuth2 access token in hours
|
||||||
|
REFRESH_TOKEN_EXPIRATION_TIME=730
|
||||||
|
; Check if refresh token got already used
|
||||||
|
INVALIDATE_REFRESH_TOKENS=false
|
||||||
|
; OAuth2 authentication secret for access and refresh tokens, change this a unique string.
|
||||||
|
JWT_SECRET=Bk0yK7Y9g_p56v86KaHqjSbxvNvu3SbKoOdOt2ZcXvU
|
||||||
|
|
||||||
|
[i18n]
|
||||||
|
LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR
|
||||||
|
NAMES = English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,français,Nederlands,latviešu,русский,Українська,日本語,español,português do Brasil,polski,български,italiano,suomi,Türkçe,čeština,српски,svenska,한국어
|
||||||
|
|
||||||
|
; Used for datetimepicker
|
||||||
|
[i18n.datelang]
|
||||||
|
en-US = en
|
||||||
|
zh-CN = zh
|
||||||
|
zh-HK = zh-HK
|
||||||
|
zh-TW = zh-TW
|
||||||
|
de-DE = de
|
||||||
|
fr-FR = fr
|
||||||
|
nl-NL = nl
|
||||||
|
lv-LV = lv
|
||||||
|
ru-RU = ru
|
||||||
|
uk-UA = uk
|
||||||
|
ja-JP = ja
|
||||||
|
es-ES = es
|
||||||
|
pt-BR = pt-BR
|
||||||
|
pl-PL = pl
|
||||||
|
bg-BG = bg
|
||||||
|
it-IT = it
|
||||||
|
fi-FI = fi
|
||||||
|
tr-TR = tr
|
||||||
|
cs-CZ = cs-CZ
|
||||||
|
sr-SP = sr
|
||||||
|
sv-SE = sv
|
||||||
|
ko-KR = ko
|
||||||
|
|
||||||
|
[U2F]
|
||||||
|
; NOTE: THE DEFAULT VALUES HERE WILL NEED TO BE CHANGED
|
||||||
|
; Two Factor authentication with security keys
|
||||||
|
; https://developers.yubico.com/U2F/App_ID.html
|
||||||
|
;APP_ID = http://localhost:3000/
|
||||||
|
; Comma seperated list of trusted facets
|
||||||
|
;TRUSTED_FACETS = http://localhost:3000/
|
||||||
|
|
||||||
|
; Extension mapping to highlight class
|
||||||
|
; e.g. .toml=ini
|
||||||
|
[highlight.mapping]
|
||||||
|
|
||||||
|
[other]
|
||||||
|
SHOW_FOOTER_BRANDING = false
|
||||||
|
; Show version information about Gitea and Go in the footer
|
||||||
|
SHOW_FOOTER_VERSION = true
|
||||||
|
; Show template execution time in the footer
|
||||||
|
SHOW_FOOTER_TEMPLATE_LOAD_TIME = true
|
||||||
|
|
||||||
|
[markup.asciidoc]
|
||||||
|
ENABLED = false
|
||||||
|
; List of file extensions that should be rendered by an external command
|
||||||
|
FILE_EXTENSIONS = .adoc,.asciidoc
|
||||||
|
; External command to render all matching extensions
|
||||||
|
RENDER_COMMAND = "asciidoc --out-file=- -"
|
||||||
|
; Don't pass the file on STDIN, pass the filename as argument instead.
|
||||||
|
IS_INPUT_FILE = false
|
||||||
|
|
||||||
|
[metrics]
|
||||||
|
; Enables metrics endpoint. True or false; default is false.
|
||||||
|
ENABLED = false
|
||||||
|
; If you want to add authorization, specify a token here
|
||||||
|
TOKEN =
|
||||||
15
docker/Makefile
vendored
Normal file
15
docker/Makefile
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#Makefile related to docker
|
||||||
|
|
||||||
|
DOCKER_IMAGE ?= gitea/gitea
|
||||||
|
DOCKER_TAG ?= latest
|
||||||
|
DOCKER_REF := $(DOCKER_IMAGE):$(DOCKER_TAG)
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: docker
|
||||||
|
docker:
|
||||||
|
docker build --disable-content-trust=false -t $(DOCKER_REF) .
|
||||||
|
# support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify" .
|
||||||
|
|
||||||
|
.PHONY: docker-build
|
||||||
|
docker-build:
|
||||||
|
docker run -ti --rm -v $(CURDIR):/srv/app/src/code.gitea.io/gitea -w /srv/app/src/code.gitea.io/gitea -e TAGS="bindata $(TAGS)" webhippie/golang:edge make clean generate build
|
||||||
15
docker/etc/nsswitch.conf
Normal file
15
docker/etc/nsswitch.conf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# /etc/nsswitch.conf
|
||||||
|
|
||||||
|
passwd: compat
|
||||||
|
group: compat
|
||||||
|
shadow: compat
|
||||||
|
|
||||||
|
hosts: files dns
|
||||||
|
networks: files
|
||||||
|
|
||||||
|
protocols: db files
|
||||||
|
services: db files
|
||||||
|
ethers: db files
|
||||||
|
rpc: db files
|
||||||
|
|
||||||
|
netgroup: nis
|
||||||
2
docker/etc/profile.d/gitea.sh
Executable file
2
docker/etc/profile.d/gitea.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
export GITEA_CUSTOM=/data/gitea
|
||||||
2
docker/etc/s6/.s6-svscan/finish
Executable file
2
docker/etc/s6/.s6-svscan/finish
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
exit 0
|
||||||
2
docker/etc/s6/gitea/finish
Executable file
2
docker/etc/s6/gitea/finish
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
exit 0
|
||||||
6
docker/etc/s6/gitea/run
Executable file
6
docker/etc/s6/gitea/run
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
[[ -f ./setup ]] && source ./setup
|
||||||
|
|
||||||
|
pushd /app/gitea > /dev/null
|
||||||
|
exec su-exec $USER /app/gitea/gitea web
|
||||||
|
popd
|
||||||
46
docker/etc/s6/gitea/setup
Executable file
46
docker/etc/s6/gitea/setup
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ! -d /data/git/.ssh ]; then
|
||||||
|
mkdir -p /data/git/.ssh
|
||||||
|
chmod 700 /data/git/.ssh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/git/.ssh/environment ]; then
|
||||||
|
echo "GITEA_CUSTOM=/data/gitea" >| /data/git/.ssh/environment
|
||||||
|
chmod 600 /data/git/.ssh/environment
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/gitea/conf/app.ini ]; then
|
||||||
|
mkdir -p /data/gitea/conf
|
||||||
|
|
||||||
|
# Set INSTALL_LOCK to true only if SECRET_KEY is not empty and
|
||||||
|
# INSTALL_LOCK is empty
|
||||||
|
if [ -n "$SECRET_KEY" ] && [ -z "$INSTALL_LOCK" ]; then
|
||||||
|
INSTALL_LOCK=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Substitude the environment variables in the template
|
||||||
|
APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \
|
||||||
|
RUN_MODE=${RUN_MODE:-"dev"} \
|
||||||
|
SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \
|
||||||
|
HTTP_PORT=${HTTP_PORT:-"3000"} \
|
||||||
|
ROOT_URL=${ROOT_URL:-""} \
|
||||||
|
DISABLE_SSH=${DISABLE_SSH:-"false"} \
|
||||||
|
SSH_PORT=${SSH_PORT:-"22"} \
|
||||||
|
DB_TYPE=${DB_TYPE:-"sqlite3"} \
|
||||||
|
DB_HOST=${DB_HOST:-"localhost:3306"} \
|
||||||
|
DB_NAME=${DB_NAME:-"gitea"} \
|
||||||
|
DB_USER=${DB_USER:-"root"} \
|
||||||
|
DB_PASSWD=${DB_PASSWD:-""} \
|
||||||
|
INSTALL_LOCK=${INSTALL_LOCK:-"false"} \
|
||||||
|
DISABLE_REGISTRATION=${DISABLE_REGISTRATION:-"false"} \
|
||||||
|
REQUIRE_SIGNIN_VIEW=${REQUIRE_SIGNIN_VIEW:-"false"} \
|
||||||
|
SECRET_KEY=${SECRET_KEY:-""} \
|
||||||
|
envsubst < /etc/templates/app.ini > /data/gitea/conf/app.ini
|
||||||
|
fi
|
||||||
|
|
||||||
|
# only chown if current owner is not already the gitea ${USER}. No recursive check to save time
|
||||||
|
if ! [[ $(ls -ld /data/gitea | awk '{print $3}') = ${USER} ]]; then chown -R ${USER}:git /data/gitea; fi
|
||||||
|
if ! [[ $(ls -ld /app/gitea | awk '{print $3}') = ${USER} ]]; then chown -R ${USER}:git /app/gitea; fi
|
||||||
|
if ! [[ $(ls -ld /data/git | awk '{print $3}') = ${USER} ]]; then chown -R ${USER}:git /data/git; fi
|
||||||
|
chmod 0755 /data/gitea /app/gitea /data/git
|
||||||
2
docker/etc/s6/openssh/finish
Executable file
2
docker/etc/s6/openssh/finish
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
exit 0
|
||||||
6
docker/etc/s6/openssh/run
Executable file
6
docker/etc/s6/openssh/run
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
[[ -f ./setup ]] && source ./setup
|
||||||
|
|
||||||
|
pushd /root > /dev/null
|
||||||
|
exec su-exec root /usr/sbin/sshd -D
|
||||||
|
popd
|
||||||
29
docker/etc/s6/openssh/setup
Executable file
29
docker/etc/s6/openssh/setup
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ! -d /data/ssh ]; then
|
||||||
|
mkdir -p /data/ssh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/ssh/ssh_host_ed25519_key ]; then
|
||||||
|
echo "Generating /data/ssh/ssh_host_ed25519_key..."
|
||||||
|
ssh-keygen -t ed25519 -b 4096 -f /data/ssh/ssh_host_ed25519_key -N "" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/ssh/ssh_host_rsa_key ]; then
|
||||||
|
echo "Generating /data/ssh/ssh_host_rsa_key..."
|
||||||
|
ssh-keygen -t rsa -b 2048 -f /data/ssh/ssh_host_rsa_key -N "" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/ssh/ssh_host_dsa_key ]; then
|
||||||
|
echo "Generating /data/ssh/ssh_host_dsa_key..."
|
||||||
|
ssh-keygen -t dsa -f /data/ssh/ssh_host_dsa_key -N "" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /data/ssh/ssh_host_ecdsa_key ]; then
|
||||||
|
echo "Generating /data/ssh/ssh_host_ecdsa_key..."
|
||||||
|
ssh-keygen -t ecdsa -b 256 -f /data/ssh/ssh_host_ecdsa_key -N "" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown root:root /data/ssh/*
|
||||||
|
chmod 0700 /data/ssh
|
||||||
|
chmod 0600 /data/ssh/*
|
||||||
2
docker/etc/s6/syslogd/finish
Executable file
2
docker/etc/s6/syslogd/finish
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
exit 0
|
||||||
6
docker/etc/s6/syslogd/run
Executable file
6
docker/etc/s6/syslogd/run
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
[[ -f ./setup ]] && source ./setup
|
||||||
|
|
||||||
|
pushd /root > /dev/null
|
||||||
|
exec su-exec root /sbin/syslogd -nS -O-
|
||||||
|
popd
|
||||||
1
docker/etc/s6/syslogd/setup
Executable file
1
docker/etc/s6/syslogd/setup
Executable file
@@ -0,0 +1 @@
|
|||||||
|
#!/bin/bash
|
||||||
33
docker/etc/ssh/sshd_config
Normal file
33
docker/etc/ssh/sshd_config
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
Port 22
|
||||||
|
Protocol 2
|
||||||
|
|
||||||
|
AddressFamily any
|
||||||
|
ListenAddress 0.0.0.0
|
||||||
|
ListenAddress ::
|
||||||
|
|
||||||
|
LogLevel INFO
|
||||||
|
|
||||||
|
HostKey /data/ssh/ssh_host_ed25519_key
|
||||||
|
HostKey /data/ssh/ssh_host_rsa_key
|
||||||
|
HostKey /data/ssh/ssh_host_dsa_key
|
||||||
|
HostKey /data/ssh/ssh_host_ecdsa_key
|
||||||
|
|
||||||
|
AuthorizedKeysFile .ssh/authorized_keys
|
||||||
|
|
||||||
|
UseDNS no
|
||||||
|
AllowAgentForwarding no
|
||||||
|
AllowTcpForwarding no
|
||||||
|
PrintMotd no
|
||||||
|
|
||||||
|
PermitUserEnvironment yes
|
||||||
|
PermitRootLogin no
|
||||||
|
ChallengeResponseAuthentication no
|
||||||
|
PasswordAuthentication no
|
||||||
|
PermitEmptyPasswords no
|
||||||
|
|
||||||
|
AllowUsers git
|
||||||
|
|
||||||
|
Banner none
|
||||||
|
Subsystem sftp /usr/lib/ssh/sftp-server
|
||||||
|
|
||||||
|
AcceptEnv GIT_PROTOCOL
|
||||||
51
docker/etc/templates/app.ini
Normal file
51
docker/etc/templates/app.ini
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
APP_NAME = $APP_NAME
|
||||||
|
RUN_MODE = $RUN_MODE
|
||||||
|
|
||||||
|
[repository]
|
||||||
|
ROOT = /data/git/repositories
|
||||||
|
|
||||||
|
[repository.local]
|
||||||
|
LOCAL_COPY_PATH = /data/gitea/tmp/local-repo
|
||||||
|
|
||||||
|
[repository.upload]
|
||||||
|
TEMP_PATH = /data/gitea/uploads
|
||||||
|
|
||||||
|
[server]
|
||||||
|
APP_DATA_PATH = /data/gitea
|
||||||
|
SSH_DOMAIN = $SSH_DOMAIN
|
||||||
|
HTTP_PORT = $HTTP_PORT
|
||||||
|
ROOT_URL = $ROOT_URL
|
||||||
|
DISABLE_SSH = $DISABLE_SSH
|
||||||
|
SSH_PORT = $SSH_PORT
|
||||||
|
LFS_CONTENT_PATH = /data/git/lfs
|
||||||
|
|
||||||
|
[database]
|
||||||
|
PATH = /data/gitea/gitea.db
|
||||||
|
DB_TYPE = $DB_TYPE
|
||||||
|
HOST = $DB_HOST
|
||||||
|
NAME = $DB_NAME
|
||||||
|
USER = $DB_USER
|
||||||
|
PASSWD = $DB_PASSWD
|
||||||
|
|
||||||
|
[indexer]
|
||||||
|
ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
|
||||||
|
|
||||||
|
[session]
|
||||||
|
PROVIDER_CONFIG = /data/gitea/sessions
|
||||||
|
|
||||||
|
[picture]
|
||||||
|
AVATAR_UPLOAD_PATH = /data/gitea/avatars
|
||||||
|
|
||||||
|
[attachment]
|
||||||
|
PATH = /data/gitea/attachments
|
||||||
|
|
||||||
|
[log]
|
||||||
|
ROOT_PATH = /data/gitea/log
|
||||||
|
|
||||||
|
[security]
|
||||||
|
INSTALL_LOCK = $INSTALL_LOCK
|
||||||
|
SECRET_KEY = $SECRET_KEY
|
||||||
|
|
||||||
|
[service]
|
||||||
|
DISABLE_REGISTRATION = $DISABLE_REGISTRATION
|
||||||
|
REQUIRE_SIGNIN_VIEW = $REQUIRE_SIGNIN_VIEW
|
||||||
37
docker/usr/bin/entrypoint
Executable file
37
docker/usr/bin/entrypoint
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "${USER}" != "git" ]; then
|
||||||
|
# rename user
|
||||||
|
sed -i -e "s/^git\:/${USER}\:/g" /etc/passwd
|
||||||
|
# switch sshd config to different user
|
||||||
|
sed -i -e "s/AllowUsers git$/AllowUsers ${USER}/g" /etc/ssh/sshd_config
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${USER_GID}" ]; then
|
||||||
|
USER_GID="`id -g ${USER}`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${USER_UID}" ]; then
|
||||||
|
USER_UID="`id -u ${USER}`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Change GID for USER?
|
||||||
|
if [ -n "${USER_GID}" ] && [ "${USER_GID}" != "`id -g ${USER}`" ]; then
|
||||||
|
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group
|
||||||
|
sed -i -e "s/^${USER}:\([^:]*\):\([0-9]*\):[0-9]*/${USER}:\1:\2:${USER_GID}/" /etc/passwd
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Change UID for USER?
|
||||||
|
if [ -n "${USER_UID}" ] && [ "${USER_UID}" != "`id -u ${USER}`" ]; then
|
||||||
|
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:\([0-9]*\)/${USER}:\1:${USER_UID}:\2/" /etc/passwd
|
||||||
|
fi
|
||||||
|
|
||||||
|
for FOLDER in /data/gitea/conf /data/gitea/log /data/git /data/ssh; do
|
||||||
|
mkdir -p ${FOLDER}
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
exec "$@"
|
||||||
|
else
|
||||||
|
exec /bin/s6-svscan /etc/s6
|
||||||
|
fi
|
||||||
34
docs/.editorconfig
Normal file
34
docs/.editorconfig
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# http://editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.go]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 8
|
||||||
|
|
||||||
|
[*.{tmpl,html}]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.{less}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.{yml}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.js]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
3
docs/.gitignore
vendored
Normal file
3
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
public/
|
||||||
|
templates/swagger/v1_json.tmpl
|
||||||
|
themes/
|
||||||
202
docs/LICENSE
Normal file
202
docs/LICENSE
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
30
docs/Makefile
Normal file
30
docs/Makefile
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
THEME := themes/gitea
|
||||||
|
PUBLIC := public
|
||||||
|
ARCHIVE := https://dl.gitea.io/theme/master.tar.gz
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf $(PUBLIC) $(THEME)
|
||||||
|
|
||||||
|
.PHONY: trans-copy
|
||||||
|
trans-copy:
|
||||||
|
@bash scripts/trans-copy
|
||||||
|
|
||||||
|
.PHONY: server
|
||||||
|
server: $(THEME)
|
||||||
|
hugo server
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: $(THEME)
|
||||||
|
hugo --cleanDestinationDir
|
||||||
|
|
||||||
|
.PHONY: update
|
||||||
|
update: $(THEME)
|
||||||
|
|
||||||
|
$(THEME): $(THEME)/theme.toml
|
||||||
|
$(THEME)/theme.toml:
|
||||||
|
mkdir -p $$(dirname $@)
|
||||||
|
curl -s $(ARCHIVE) | tar xz -C $$(dirname $@)
|
||||||
51
docs/README.md
Normal file
51
docs/README.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Gitea: Docs
|
||||||
|
|
||||||
|
[](https://discord.gg/Gitea)
|
||||||
|
[](http://microbadger.com/images/gitea/docs "Get your own image badge on microbadger.com")
|
||||||
|
|
||||||
|
## Hosting
|
||||||
|
|
||||||
|
These pages are hosted using [netlifycms](https://www.netlifycms.org/) and get
|
||||||
|
automatically updated on every push to the `master` branch.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
These pages use the [Hugo](https://gohugo.io/) static site generator.
|
||||||
|
If you are planning to contribute you'll want to download and install Hugo on
|
||||||
|
your local machine.
|
||||||
|
|
||||||
|
The installation of Hugo is out of the scope of this document, so please take
|
||||||
|
the [official install instructions](https://gohugo.io/overview/installing/) to
|
||||||
|
get Hugo up and running.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
To generate the website and serve it on [localhost:1313](http://localhost:1313)
|
||||||
|
just execute this command and stop it with `Ctrl+C`:
|
||||||
|
|
||||||
|
```
|
||||||
|
make server
|
||||||
|
```
|
||||||
|
|
||||||
|
When you are done with your changes just create a pull request, after merging
|
||||||
|
the pull request the website will be updated automatically.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Fork -> Patch -> Push -> Pull Request
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
* [Maintainers](https://github.com/orgs/go-gitea/people)
|
||||||
|
* [Contributors](https://github.com/go-gitea/docs/graphs/contributors)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is under the Apache-2.0 License. See the [LICENSE](LICENSE) file
|
||||||
|
for the full license text.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
```
|
||||||
|
Copyright (c) 2016 The Gitea Authors <https://gitea.io>
|
||||||
|
```
|
||||||
42
docs/README_ZH.md
Normal file
42
docs/README_ZH.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Gitea: 文档
|
||||||
|
|
||||||
|
[](http://drone.gitea.io/go-gitea/docs)
|
||||||
|
[](https://discord.gg/NsatcWJ)
|
||||||
|
[](http://microbadger.com/images/gitea/docs "Get your own image badge on microbadger.com")
|
||||||
|
|
||||||
|
## 关于托管方式
|
||||||
|
|
||||||
|
本页面托管在我们 Docker 容器内的基础设施上, 它会在每次推送到 `master` 分支的时候自动更新,如果你想自己管理这个页面,你可以从我们的 Docker 镜像 [gitea/docs](https://hub.docker.com/r/gitea/docs/) 中获取它。
|
||||||
|
|
||||||
|
## 安装 Hugo
|
||||||
|
|
||||||
|
本页面使用了 [Hugo](https://github.com/spf13/hugo) 静态页面生成工具,如果您有维护它的意愿,则需要在本地计算机上下载并安装 Hugo。Hugo 的安装教程不在本文档的讲述范围之内,详情请参见 [官方文档](https://gohugo.io/overview/installing/)。
|
||||||
|
|
||||||
|
## 如何部署
|
||||||
|
|
||||||
|
在 [localhost:1313](http://localhost:1313) 处构建和运行网站的命令如下,如果需要停止可以使用组合键 `Ctrl+C`:
|
||||||
|
|
||||||
|
```
|
||||||
|
make server
|
||||||
|
```
|
||||||
|
|
||||||
|
完成更改后,只需创建一个 Pull Request (PR),该 PR 一经合并网站将自动更新。
|
||||||
|
|
||||||
|
## 如何贡献您的代码
|
||||||
|
|
||||||
|
Fork -> Patch -> Push -> Pull Request
|
||||||
|
|
||||||
|
## 关于我们
|
||||||
|
|
||||||
|
* [维护者信息](https://github.com/orgs/go-gitea/people)
|
||||||
|
* [代码贡献者信息](https://github.com/go-gitea/docs/graphs/contributors)
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
此项目采用 Apache-2.0 许可协议,请参见 [协议文件](LICENSE) 获取更多信息。
|
||||||
|
|
||||||
|
## 版权声明
|
||||||
|
|
||||||
|
```
|
||||||
|
Copyright (c) 2016 The Gitea Authors <https://gitea.io>
|
||||||
|
```
|
||||||
279
docs/config.yaml
Normal file
279
docs/config.yaml
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
baseurl: https://docs.gitea.io/
|
||||||
|
languageCode: en-us
|
||||||
|
title: Docs
|
||||||
|
theme: gitea
|
||||||
|
|
||||||
|
defaultContentLanguage: en-us
|
||||||
|
defaultContentLanguageInSubdir: true
|
||||||
|
enableMissingTranslationPlaceholders: true
|
||||||
|
|
||||||
|
permalinks:
|
||||||
|
post: /:year/:month/:title/
|
||||||
|
doc: /:slug/
|
||||||
|
page: /:slug/
|
||||||
|
default: /:slug/
|
||||||
|
|
||||||
|
params:
|
||||||
|
description: Git with a cup of tea
|
||||||
|
author: The Gitea Authors
|
||||||
|
website: https://docs.gitea.io
|
||||||
|
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: Website
|
||||||
|
url: https://gitea.io/en-us/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
- name: Docs
|
||||||
|
url: /en-us/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
post: active
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: Blog
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: Code
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: Downloads
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Discord Chat
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
|
|
||||||
|
languages:
|
||||||
|
en-us:
|
||||||
|
weight: 0
|
||||||
|
languageName: English
|
||||||
|
|
||||||
|
zh-cn:
|
||||||
|
weight: 1
|
||||||
|
languageName: 中文(简体)
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: 网站
|
||||||
|
url: https://gitea.io/zh-cn/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
- name: 文档
|
||||||
|
url: /zh-cn/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
post: active
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: 博客
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: 导入
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: 下载
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Discord Chat
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
|
|
||||||
|
zh-tw:
|
||||||
|
weight: 2
|
||||||
|
languageName: 中文(繁體)
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: 網站
|
||||||
|
url: https://gitea.io/zh-tw/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
- name: 文件
|
||||||
|
url: /zh-tw/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
post: active
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: 部落格
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: 程式碼
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: 下载
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Discord Chat
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
|
|
||||||
|
pt-br:
|
||||||
|
weight: 3
|
||||||
|
languageName: Português Brasileiro
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: Página inicial
|
||||||
|
url: https://gitea.io/pt-br/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
- name: Documentação
|
||||||
|
url: /pt-br/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
post: active
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: Blog
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: Código-fonte
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: Downloads
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Chat no Discord
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
|
|
||||||
|
nl-nl:
|
||||||
|
weight: 4
|
||||||
|
languageName: Nederlands
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: Website
|
||||||
|
url: https://gitea.io/nl-nl/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
- name: Docs
|
||||||
|
url: /nl-nl/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
post: active
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: Blog
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: Code
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: Downloads
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Discord Chat
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
|
|
||||||
|
fr-fr:
|
||||||
|
weight: 5
|
||||||
|
languageName: Français
|
||||||
|
menu:
|
||||||
|
page:
|
||||||
|
- name: Site
|
||||||
|
url: https://gitea.io/en-us/
|
||||||
|
weight: 10
|
||||||
|
pre: home
|
||||||
|
post: active
|
||||||
|
- name: Documentation
|
||||||
|
url: /fr-fr/
|
||||||
|
weight: 20
|
||||||
|
pre: question
|
||||||
|
- name: API
|
||||||
|
url: https://try.gitea.io/api/swagger
|
||||||
|
weight: 45
|
||||||
|
pre: plug
|
||||||
|
- name: Blog
|
||||||
|
url: https://blog.gitea.io/
|
||||||
|
weight: 30
|
||||||
|
pre: rss
|
||||||
|
- name: Code
|
||||||
|
url: https://code.gitea.io/
|
||||||
|
weight: 40
|
||||||
|
pre: code
|
||||||
|
- name: Téléchargement
|
||||||
|
url: https://dl.gitea.io/
|
||||||
|
weight: 50
|
||||||
|
pre: download
|
||||||
|
- name: GitHub
|
||||||
|
url: https://github.com/go-gitea/
|
||||||
|
weight: 60
|
||||||
|
pre: github
|
||||||
|
- name: Discord Chat
|
||||||
|
url: https://discord.gg/NsatcWJ
|
||||||
|
weight: 70
|
||||||
|
pre: comment
|
||||||
|
- name: Forum
|
||||||
|
url: https://discourse.gitea.io/
|
||||||
|
weight: 80
|
||||||
|
pre: group
|
||||||
13
docs/content/doc/advanced.en-us.md
Normal file
13
docs/content/doc/advanced.en-us.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "Advanced"
|
||||||
|
slug: "advanced"
|
||||||
|
weight: 30
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "Advanced"
|
||||||
|
weight: 40
|
||||||
|
identifier: "advanced"
|
||||||
|
---
|
||||||
13
docs/content/doc/advanced.fr-fr.md
Normal file
13
docs/content/doc/advanced.fr-fr.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2017-08-23T09:00:00+02:00"
|
||||||
|
title: "Avancé"
|
||||||
|
slug: "advanced"
|
||||||
|
weight: 30
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "Avancé"
|
||||||
|
weight: 40
|
||||||
|
identifier: "advanced"
|
||||||
|
---
|
||||||
13
docs/content/doc/advanced.zh-cn.md
Normal file
13
docs/content/doc/advanced.zh-cn.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "进阶"
|
||||||
|
slug: "advanced"
|
||||||
|
weight: 30
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "进阶"
|
||||||
|
weight: 40
|
||||||
|
identifier: "advanced"
|
||||||
|
---
|
||||||
79
docs/content/doc/advanced/api-usage.en-us.md
Normal file
79
docs/content/doc/advanced/api-usage.en-us.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
date: "2018-06-24:00:00+02:00"
|
||||||
|
title: "API Usage"
|
||||||
|
slug: "api-usage"
|
||||||
|
weight: 40
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "API Usage"
|
||||||
|
weight: 40
|
||||||
|
identifier: "api-usage"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Gitea API Usage
|
||||||
|
|
||||||
|
## Enabling/configuring API access
|
||||||
|
|
||||||
|
By default, `ENABLE_SWAGGER` is true, and
|
||||||
|
`MAX_RESPONSE_ITEMS` is set to 50. See [Config Cheat
|
||||||
|
Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/) for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
## Authentication via the API
|
||||||
|
|
||||||
|
Gitea supports these methods of API authentication:
|
||||||
|
|
||||||
|
- HTTP basic authentication
|
||||||
|
- `token=...` parameter in URL query string
|
||||||
|
- `access_token=...` parameter in URL query string
|
||||||
|
- `Authorization: token ...` header in HTTP headers
|
||||||
|
|
||||||
|
All of these methods accept the same API key token type. You can
|
||||||
|
better understand this by looking at the code -- as of this writing,
|
||||||
|
Gitea parses queries and headers to find the token in
|
||||||
|
[modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47).
|
||||||
|
|
||||||
|
You can create an API key token via your Gitea installation's web interface:
|
||||||
|
`Settings | Applications | Generate New Token`.
|
||||||
|
|
||||||
|
### More on the `Authorization:` header
|
||||||
|
|
||||||
|
For historical reasons, Gitea needs the word `token` included before
|
||||||
|
the API key token in an authorization header, like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
|
||||||
|
```
|
||||||
|
|
||||||
|
In a `curl` command, for instance, this would look like:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -X POST "http://localhost:4000/api/v1/repos/test1/test1/issues" \
|
||||||
|
-H "accept: application/json" \
|
||||||
|
-H "Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675" \
|
||||||
|
-H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i
|
||||||
|
```
|
||||||
|
|
||||||
|
As mentioned above, the token used is the same one you would use in
|
||||||
|
the `token=` string in a GET request.
|
||||||
|
|
||||||
|
## Listing your issued tokens via the API
|
||||||
|
|
||||||
|
As mentioned in
|
||||||
|
[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346),
|
||||||
|
`/users/:name/tokens` is special and requires you to authenticate
|
||||||
|
using BasicAuth, as follows:
|
||||||
|
|
||||||
|
### Using basic authentication:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl --request GET --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/yourusername/tokens
|
||||||
|
[{"name":"test","sha1":"..."},{"name":"dev","sha1":"..."}]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sudo
|
||||||
|
|
||||||
|
The API allows admin users to sudo API requests as another user. Simply add either a `sudo=` parameter or `Sudo:` request header with the username of the user to sudo.
|
||||||
71
docs/content/doc/advanced/api-usage.zh-cn.md
Normal file
71
docs/content/doc/advanced/api-usage.zh-cn.md
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
date: "2018-06-24:00:00+02:00"
|
||||||
|
title: "API 使用指南"
|
||||||
|
slug: "api-usage"
|
||||||
|
weight: 40
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "API 使用指南"
|
||||||
|
weight: 40
|
||||||
|
identifier: "api-usage"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Gitea API 使用指南
|
||||||
|
|
||||||
|
## 开启/配置 API 访问
|
||||||
|
|
||||||
|
通常情况下, `ENABLE_SWAGGER` 默认开启并且参数 `MAX_RESPONSE_ITEMS` 默认为 50。您可以从 [Config Cheat
|
||||||
|
Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/) 中获取更多配置相关信息。
|
||||||
|
|
||||||
|
## 通过 API 认证
|
||||||
|
|
||||||
|
Gitea 支持以下几种 API 认证方式:
|
||||||
|
|
||||||
|
- HTTP basic authentication 方式
|
||||||
|
- 通过指定 `token=...` URL 查询参数方式
|
||||||
|
- 通过指定 `access_token=...` URL 查询参数方式
|
||||||
|
- 通过指定 `Authorization: token ...` HTTP header 方式
|
||||||
|
|
||||||
|
以上提及的认证方法接受相同的 apiKey token 类型,您可以在编码时通过查阅代码更好地理解这一点。
|
||||||
|
Gitea 调用解析查询参数以及头部信息来获取 token 的代码可以在 [modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47) 中找到。
|
||||||
|
|
||||||
|
您可以通过您的 gitea web 界面来创建 apiKey token:
|
||||||
|
`Settings | Applications | Generate New Token`.
|
||||||
|
|
||||||
|
### 关于 `Authorization:` header
|
||||||
|
|
||||||
|
由于一些历史原因,Gitea 需要在 header 的 apiKey token 里引入前缀 `token`,类似于如下形式:
|
||||||
|
|
||||||
|
```
|
||||||
|
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
|
||||||
|
```
|
||||||
|
|
||||||
|
以 `curl` 命令为例,它会以如下形式携带在请求中:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -X POST "http://localhost:4000/api/v1/repos/test1/test1/issues" \
|
||||||
|
-H "accept: application/json" \
|
||||||
|
-H "Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675" \
|
||||||
|
-H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i
|
||||||
|
```
|
||||||
|
|
||||||
|
正如上例所示,您也可以在 GET 请求中使用同一个 token 并以 `token=` 的查询参数形式携带 token 来进行认证。
|
||||||
|
|
||||||
|
## 通过 API 列出您发布的令牌
|
||||||
|
|
||||||
|
`/users/:name/tokens` 是一个特殊的接口,需要您使用 basic authentication 进行认证,具体原因在 issue 中
|
||||||
|
[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346) 有所提及,使用方法如下所示:
|
||||||
|
|
||||||
|
### 使用 Basic authentication 认证:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl --request GET --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/yourusername/tokens
|
||||||
|
[{"name":"test","sha1":"..."},{"name":"dev","sha1":"..."}]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用 Sudo 方式请求 API
|
||||||
|
|
||||||
|
此 API 允许管理员借用其他用户身份进行 API 请求。只需在请求中指定查询参数 `sudo=` 或是指定 header 中的 `Sudo:` 为需要使用的用户 username 即可。
|
||||||
416
docs/content/doc/advanced/config-cheat-sheet.en-us.md
Normal file
416
docs/content/doc/advanced/config-cheat-sheet.en-us.md
Normal file
@@ -0,0 +1,416 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-26T16:00:00+02:00"
|
||||||
|
title: "Config Cheat Sheet"
|
||||||
|
slug: "config-cheat-sheet"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Config Cheat Sheet"
|
||||||
|
weight: 20
|
||||||
|
identifier: "config-cheat-sheet"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Configuration Cheat Sheet
|
||||||
|
|
||||||
|
This is a cheat sheet for the Gitea configuration file. It contains most settings
|
||||||
|
that can configured as well as their default values.
|
||||||
|
|
||||||
|
Any changes to the Gitea configuration file should be made in `custom/conf/app.ini`
|
||||||
|
or any corresponding location. When installing from a distribution, this will
|
||||||
|
typically be found at `/etc/gitea/conf/app.ini`.
|
||||||
|
|
||||||
|
The defaults provided here are best-effort (not built automatically). They are
|
||||||
|
accurately recorded in [app.ini.sample](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample)
|
||||||
|
(s/master/\<tag|release\>). Any string in the format `%(X)s` is a feature powered
|
||||||
|
by [ini](https://github.com/go-ini/ini/#recursive-values), for reading values recursively.
|
||||||
|
|
||||||
|
Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
|
||||||
|
|
||||||
|
**Note:** A full restart is required for Gitea configuration changes to take effect.
|
||||||
|
|
||||||
|
## Overall (`DEFAULT`)
|
||||||
|
|
||||||
|
- `APP_NAME`: **Gitea: Git with a cup of tea**: Application name, used in the page title.
|
||||||
|
- `RUN_USER`: **git**: The user Gitea will run as. This should be a dedicated system
|
||||||
|
(non-user) account. Setting this incorrectly will cause Gitea to not start.
|
||||||
|
- `RUN_MODE`: **dev**: For performance and other purposes, change this to `prod` when
|
||||||
|
deployed to a production environment. The installation process will set this to `prod`
|
||||||
|
automatically. \[prod, dev, test\]
|
||||||
|
|
||||||
|
## Repository (`repository`)
|
||||||
|
|
||||||
|
- `ROOT`: **~/gitea-repositories/**: Root path for storing all repository data. It must be
|
||||||
|
an absolute path.
|
||||||
|
- `SCRIPT_TYPE`: **bash**: The script type this server supports. Usually this is `bash`,
|
||||||
|
but some users report that only `sh` is available.
|
||||||
|
- `ANSI_CHARSET`: **\<empty\>**: The default charset for an unrecognized charset.
|
||||||
|
- `FORCE_PRIVATE`: **false**: Force every new repository to be private.
|
||||||
|
- `DEFAULT_PRIVATE`: **last**: Default private when creating a new repository.
|
||||||
|
\[last, private, public\]
|
||||||
|
- `MAX_CREATION_LIMIT`: **-1**: Global maximum creation limit of repositories per user,
|
||||||
|
`-1` means no limit.
|
||||||
|
- `PULL_REQUEST_QUEUE_LENGTH`: **1000**: Length of pull request patch test queue, make it
|
||||||
|
as large as possible. Use caution when editing this value.
|
||||||
|
- `MIRROR_QUEUE_LENGTH`: **1000**: Patch test queue length, increase if pull request patch
|
||||||
|
testing starts hanging.
|
||||||
|
- `PREFERRED_LICENSES`: **Apache License 2.0,MIT License**: Preferred Licenses to place at
|
||||||
|
the top of the list. Name must match file name in conf/license or custom/conf/license.
|
||||||
|
- `DISABLE_HTTP_GIT`: **false**: Disable the ability to interact with repositories over the
|
||||||
|
HTTP protocol.
|
||||||
|
- `USE_COMPAT_SSH_URI`: **false**: Force ssh:// clone url instead of scp-style uri when
|
||||||
|
default SSH port is used.
|
||||||
|
- `ACCESS_CONTROL_ALLOW_ORIGIN`: **\<empty\>**: Value for Access-Control-Allow-Origin header,
|
||||||
|
default is not to present. **WARNING**: This maybe harmful to you website if you do not
|
||||||
|
give it a right value.
|
||||||
|
- `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: Close an issue if a commit on a non default branch marks it as closed.
|
||||||
|
|
||||||
|
### Repository - Pull Request (`repository.pull-request`)
|
||||||
|
- `WORK_IN_PROGRESS_PREFIXES`: **WIP:,\[WIP\]**: List of prefixes used in Pull Request
|
||||||
|
title to mark them as Work In Progress
|
||||||
|
|
||||||
|
### Repository - Issue (`repository.issue`)
|
||||||
|
- `LOCK_REASONS`: **Too heated,Off-topic,Resolved,Spam**: A list of reasons why a Pull Request or Issue can be locked
|
||||||
|
|
||||||
|
## UI (`ui`)
|
||||||
|
|
||||||
|
- `EXPLORE_PAGING_NUM`: **20**: Number of repositories that are shown in one explore page.
|
||||||
|
- `ISSUE_PAGING_NUM`: **10**: Number of issues that are shown in one page (for all pages that list issues).
|
||||||
|
- `FEED_MAX_COMMIT_NUM`: **5**: Number of maximum commits shown in one activity feed.
|
||||||
|
- `GRAPH_MAX_COMMIT_NUM`: **100**: Number of maximum commits shown in the commit graph.
|
||||||
|
- `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install.
|
||||||
|
- `THEMES`: **gitea,arc-green**: All available themes. Allow users select personalized themes
|
||||||
|
regardless of the value of `DEFAULT_THEME`.
|
||||||
|
|
||||||
|
### UI - Admin (`ui.admin`)
|
||||||
|
|
||||||
|
- `USER_PAGING_NUM`: **50**: Number of users that are shown in one page.
|
||||||
|
- `REPO_PAGING_NUM`: **50**: Number of repos that are shown in one page.
|
||||||
|
- `NOTICE_PAGING_NUM`: **25**: Number of notices that are shown in one page.
|
||||||
|
- `ORG_PAGING_NUM`: **50**: Number of organizations that are shown in one page.
|
||||||
|
|
||||||
|
## Markdown (`markdown`)
|
||||||
|
|
||||||
|
- `ENABLE_HARD_LINE_BREAK`: **false**: Enable Markdown's hard line break extension.
|
||||||
|
|
||||||
|
## Server (`server`)
|
||||||
|
|
||||||
|
- `PROTOCOL`: **http**: \[http, https, fcgi, unix\]
|
||||||
|
- `DOMAIN`: **localhost**: Domain name of this server.
|
||||||
|
- `ROOT_URL`: **%(PROTOCOL)s://%(DOMAIN)s:%(HTTP\_PORT)s/**:
|
||||||
|
Overwrite the automatically generated public URL.
|
||||||
|
This is useful if the internal and the external URL don't match (e.g. in Docker).
|
||||||
|
- `HTTP_ADDR`: **0.0.0.0**: HTTP listen address.
|
||||||
|
- If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket
|
||||||
|
defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings.
|
||||||
|
- If `PROTOCOL` is set to `unix`, this should be the name of the Unix socket file to use.
|
||||||
|
- `HTTP_PORT`: **3000**: HTTP listen port.
|
||||||
|
- If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket
|
||||||
|
defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings.
|
||||||
|
- `UNIX_SOCKET_PERMISSION`: **666**: Permissions for the Unix socket.
|
||||||
|
- `LOCAL_ROOT_URL`: **%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/**: Local
|
||||||
|
(DMZ) URL for Gitea workers (such as SSH update) accessing web service. In
|
||||||
|
most cases you do not need to change the default value. Alter it only if
|
||||||
|
your SSH server node is not the same as HTTP node. Do not set this variable
|
||||||
|
if `PROTOCOL` is set to `unix`.
|
||||||
|
- `DISABLE_SSH`: **false**: Disable SSH feature when it's not available.
|
||||||
|
- `START_SSH_SERVER`: **false**: When enabled, use the built-in SSH server.
|
||||||
|
- `SSH_DOMAIN`: **%(DOMAIN)s**: Domain name of this server, used for displayed clone URL.
|
||||||
|
- `SSH_PORT`: **22**: SSH port displayed in clone URL.
|
||||||
|
- `SSH_LISTEN_PORT`: **%(SSH\_PORT)s**: Port for the built-in SSH server.
|
||||||
|
- `OFFLINE_MODE`: **false**: Disables use of CDN for static files and Gravatar for profile pictures.
|
||||||
|
- `DISABLE_ROUTER_LOG`: **false**: Mute printing of the router log.
|
||||||
|
- `CERT_FILE`: **custom/https/cert.pem**: Cert file path used for HTTPS.
|
||||||
|
- `KEY_FILE`: **custom/https/key.pem**: Key file path used for HTTPS.
|
||||||
|
- `STATIC_ROOT_PATH`: **./**: Upper level of template and static files path.
|
||||||
|
- `ENABLE_GZIP`: **false**: Enables application-level GZIP support.
|
||||||
|
- `LANDING_PAGE`: **home**: Landing page for unauthenticated users \[home, explore\].
|
||||||
|
- `LFS_START_SERVER`: **false**: Enables git-lfs support.
|
||||||
|
- `LFS_CONTENT_PATH`: **./data/lfs**: Where to store LFS files.
|
||||||
|
- `LFS_JWT_SECRET`: **\<empty\>**: LFS authentication secret, change this a unique string.
|
||||||
|
- `LFS_HTTP_AUTH_EXPIRY`: **20m**: LFS authentication validity period in time.Duration, pushes taking longer than this may fail.
|
||||||
|
- `REDIRECT_OTHER_PORT`: **false**: If true and `PROTOCOL` is https, allows redirecting http requests on `PORT_TO_REDIRECT` to the https port Gitea listens on.
|
||||||
|
- `PORT_TO_REDIRECT`: **80**: Port for the http redirection service to listen on. Used when `REDIRECT_OTHER_PORT` is true.
|
||||||
|
- `ENABLE_LETSENCRYPT`: **false**: If enabled you must set `DOMAIN` to valid internet facing domain (ensure DNS is set and port 80 is accessible by letsencrypt validation server).
|
||||||
|
By using Lets Encrypt **you must consent** to their [terms of service](https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf).
|
||||||
|
- `LETSENCRYPT_ACCEPTTOS`: **false**: This is an explicit check that you accept the terms of service for Let's Encrypt.
|
||||||
|
- `LETSENCRYPT_DIRECTORY`: **https**: Directory that Letsencrypt will use to cache information such as certs and private keys.
|
||||||
|
- `LETSENCRYPT_EMAIL`: **email@example.com**: Email used by Letsencrypt to notify about problems with issued certificates. (No default)
|
||||||
|
|
||||||
|
## Database (`database`)
|
||||||
|
|
||||||
|
- `DB_TYPE`: **mysql**: The database type in use \[mysql, postgres, mssql, sqlite3\].
|
||||||
|
- `HOST`: **127.0.0.1:3306**: Database host address and port.
|
||||||
|
- `NAME`: **gitea**: Database name.
|
||||||
|
- `USER`: **root**: Database username.
|
||||||
|
- `PASSWD`: **\<empty\>**: Database user password. Use \`your password\` for quoting if you use special characters in the password.
|
||||||
|
- `SSL_MODE`: **disable**: For PostgreSQL and MySQL only.
|
||||||
|
- `PATH`: **data/gitea.db**: For SQLite3 only, the database file path.
|
||||||
|
- `LOG_SQL`: **true**: Log the executed SQL.
|
||||||
|
- `DB_RETRIES`: **10**: How many ORM init / DB connect attempts allowed.
|
||||||
|
- `DB_RETRY_BACKOFF`: **3s**: time.Duration to wait before trying another ORM init / DB connect attempt, if failure occured.
|
||||||
|
|
||||||
|
## Indexer (`indexer`)
|
||||||
|
|
||||||
|
- `ISSUE_INDEXER_TYPE`: **bleve**: Issue indexer type, currently support: bleve or db, if it's db, below issue indexer item will be invalid.
|
||||||
|
- `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: Index file used for issue search.
|
||||||
|
- `ISSUE_INDEXER_QUEUE_TYPE`: **levelqueue**: Issue indexer queue, currently support: channel or levelqueue
|
||||||
|
- `ISSUE_INDEXER_QUEUE_DIR`: **indexers/issues.queue**: When ISSUE_INDEXER_QUEUE_TYPE is levelqueue, this will be the queue will be saved path
|
||||||
|
- `ISSUE_INDEXER_QUEUE_BATCH_NUMBER`: **20**: Batch queue number
|
||||||
|
|
||||||
|
- `REPO_INDEXER_ENABLED`: **false**: Enables code search (uses a lot of disk space, about 6 times more than the repository size).
|
||||||
|
- `REPO_INDEXER_PATH`: **indexers/repos.bleve**: Index file used for code search.
|
||||||
|
- `UPDATE_BUFFER_LEN`: **20**: Buffer length of index request.
|
||||||
|
- `MAX_FILE_SIZE`: **1048576**: Maximum size in bytes of files to be indexed.
|
||||||
|
|
||||||
|
## Security (`security`)
|
||||||
|
|
||||||
|
- `INSTALL_LOCK`: **false**: Disallow access to the install page.
|
||||||
|
- `SECRET_KEY`: **\<random at every install\>**: Global secret key. This should be changed.
|
||||||
|
- `LOGIN_REMEMBER_DAYS`: **7**: Cookie lifetime, in days.
|
||||||
|
- `COOKIE_USERNAME`: **gitea\_awesome**: Name of the cookie used to store the current username.
|
||||||
|
- `COOKIE_REMEMBER_NAME`: **gitea\_incredible**: Name of cookie used to store authentication
|
||||||
|
information.
|
||||||
|
- `REVERSE_PROXY_AUTHENTICATION_USER`: **X-WEBAUTH-USER**: Header name for reverse proxy
|
||||||
|
authentication.
|
||||||
|
- `REVERSE_PROXY_AUTHENTICATION_EMAIL`: **X-WEBAUTH-EMAIL**: Header name for reverse proxy
|
||||||
|
authentication provided email.
|
||||||
|
- `DISABLE_GIT_HOOKS`: **false**: Set to `true` to prevent all users (including admin) from creating custom
|
||||||
|
git hooks.
|
||||||
|
- `IMPORT_LOCAL_PATHS`: **false**: Set to `false` to prevent all users (including admin) from importing local path on server.
|
||||||
|
|
||||||
|
## OpenID (`openid`)
|
||||||
|
|
||||||
|
- `ENABLE_OPENID_SIGNIN`: **false**: Allow authentication in via OpenID.
|
||||||
|
- `ENABLE_OPENID_SIGNUP`: **! DISABLE\_REGISTRATION**: Allow registering via OpenID.
|
||||||
|
- `WHITELISTED_URIS`: **\<empty\>**: If non-empty, list of POSIX regex patterns matching
|
||||||
|
OpenID URI's to permit.
|
||||||
|
- `BLACKLISTED_URIS`: **\<empty\>**: If non-empty, list of POSIX regex patterns matching
|
||||||
|
OpenID URI's to block.
|
||||||
|
|
||||||
|
## Service (`service`)
|
||||||
|
|
||||||
|
- `ACTIVE_CODE_LIVE_MINUTES`: **180**: Time limit (min) to confirm account/email registration.
|
||||||
|
- `RESET_PASSWD_CODE_LIVE_MINUTES`: **180**: Time limit (min) to confirm forgot password reset
|
||||||
|
process.
|
||||||
|
- `REGISTER_EMAIL_CONFIRM`: **false**: Enable this to ask for mail confirmation of registration.
|
||||||
|
Requires `Mailer` to be enabled.
|
||||||
|
- `DISABLE_REGISTRATION`: **false**: Disable registration, after which only admin can create
|
||||||
|
accounts for users.
|
||||||
|
- `REQUIRE_SIGNIN_VIEW`: **false**: Enable this to force users to log in to view any page.
|
||||||
|
- `ENABLE_NOTIFY_MAIL`: **false**: Enable this to send e-mail to watchers of a repository when
|
||||||
|
something happens, like creating issues. Requires `Mailer` to be enabled.
|
||||||
|
- `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: Enable this to allow reverse proxy authentication.
|
||||||
|
- `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: Enable this to allow auto-registration
|
||||||
|
for reverse authentication.
|
||||||
|
- `ENABLE_REVERSE_PROXY_EMAIL`: **false**: Enable this to allow to auto-registration with a
|
||||||
|
provided email rather than a generated email.
|
||||||
|
- `ENABLE_CAPTCHA`: **false**: Enable this to use captcha validation for registration.
|
||||||
|
- `CAPTCHA_TYPE`: **image**: \[image, recaptcha\]
|
||||||
|
- `RECAPTCHA_SECRET`: **""**: Go to https://www.google.com/recaptcha/admin to get a secret for recaptcha.
|
||||||
|
- `RECAPTCHA_SITEKEY`: **""**: Go to https://www.google.com/recaptcha/admin to get a sitekey for recaptcha.
|
||||||
|
- `DEFAULT_ENABLE_DEPENDENCIES`: **true**: Enable this to have dependencies enabled by default.
|
||||||
|
- `ENABLE_USER_HEATMAP`: **true**: Enable this to display the heatmap on users profiles.
|
||||||
|
- `EMAIL_DOMAIN_WHITELIST`: **\<empty\>**: If non-empty, list of domain names that can only be used to register
|
||||||
|
on this instance.
|
||||||
|
- `SHOW_REGISTRATION_BUTTON`: **! DISABLE\_REGISTRATION**: Show Registration Button
|
||||||
|
- `AUTO_WATCH_NEW_REPOS`: **true**: Enable this to let all organisation users watch new repos when they are created
|
||||||
|
- `DEFAULT_ORG_VISIBILITY`: **public**: Set default visibility mode for organisations, either "public", "limited" or "private".
|
||||||
|
|
||||||
|
## Webhook (`webhook`)
|
||||||
|
|
||||||
|
- `QUEUE_LENGTH`: **1000**: Hook task queue length. Use caution when editing this value.
|
||||||
|
- `DELIVER_TIMEOUT`: **5**: Delivery timeout (sec) for shooting webhooks.
|
||||||
|
- `SKIP_TLS_VERIFY`: **false**: Allow insecure certification.
|
||||||
|
- `PAGING_NUM`: **10**: Number of webhook history events that are shown in one page.
|
||||||
|
|
||||||
|
## Mailer (`mailer`)
|
||||||
|
|
||||||
|
- `ENABLED`: **false**: Enable to use a mail service.
|
||||||
|
- `DISABLE_HELO`: **\<empty\>**: Disable HELO operation.
|
||||||
|
- `HELO_HOSTNAME`: **\<empty\>**: Custom hostname for HELO operation.
|
||||||
|
- `HOST`: **\<empty\>**: SMTP mail host address and port (example: smtp.gitea.io:587).
|
||||||
|
- `FROM`: **\<empty\>**: Mail from address, RFC 5322. This can be just an email address, or
|
||||||
|
the "Name" \<email@example.com\> format.
|
||||||
|
- `USER`: **\<empty\>**: Username of mailing user (usually the sender's e-mail address).
|
||||||
|
- `PASSWD`: **\<empty\>**: Password of mailing user. Use \`your password\` for quoting if you use special characters in the password.
|
||||||
|
- `SKIP_VERIFY`: **\<empty\>**: Do not verify the self-signed certificates.
|
||||||
|
- **Note:** Gitea only supports SMTP with STARTTLS.
|
||||||
|
- `MAILER_TYPE`: **smtp**: \[smtp, sendmail, dummy\]
|
||||||
|
- **smtp** Use SMTP to send mail
|
||||||
|
- **sendmail** Use the operating system's `sendmail` command instead of SMTP.
|
||||||
|
This is common on linux systems.
|
||||||
|
- **dummy** Send email messages to the log as a testing phase.
|
||||||
|
- Note that enabling sendmail will ignore all other `mailer` settings except `ENABLED`,
|
||||||
|
`FROM` and `SENDMAIL_PATH`.
|
||||||
|
- Enabling dummy will ignore all settings except `ENABLED` and `FROM`.
|
||||||
|
- `SENDMAIL_PATH`: **sendmail**: The location of sendmail on the operating system (can be
|
||||||
|
command or full path).
|
||||||
|
- ``IS_TLS_ENABLED`` : **false** : Decide if SMTP connections should use TLS.
|
||||||
|
|
||||||
|
## Cache (`cache`)
|
||||||
|
|
||||||
|
- `ADAPTER`: **memory**: Cache engine adapter, either `memory`, `redis`, or `memcache`.
|
||||||
|
- `INTERVAL`: **60**: Garbage Collection interval (sec), for memory cache only.
|
||||||
|
- `HOST`: **\<empty\>**: Connection string for `redis` and `memcache`.
|
||||||
|
- Redis: `network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180`
|
||||||
|
- Memache: `127.0.0.1:9090;127.0.0.1:9091`
|
||||||
|
|
||||||
|
## Session (`session`)
|
||||||
|
|
||||||
|
- `PROVIDER`: **memory**: Session engine provider \[memory, file, redis, mysql, couchbase, memcache, nodb, postgres\].
|
||||||
|
- `PROVIDER_CONFIG`: **data/sessions**: For file, the root path; for others, the connection string.
|
||||||
|
- `COOKIE_SECURE`: **false**: Enable this to force using HTTPS for all session access.
|
||||||
|
- `COOKIE_NAME`: **i\_like\_gitea**: The name of the cookie used for the session ID.
|
||||||
|
- `GC_INTERVAL_TIME`: **86400**: GC interval in seconds.
|
||||||
|
|
||||||
|
## Picture (`picture`)
|
||||||
|
|
||||||
|
- `GRAVATAR_SOURCE`: **gravatar**: Can be `gravatar`, `duoshuo` or anything like
|
||||||
|
`http://cn.gravatar.com/avatar/`.
|
||||||
|
- `DISABLE_GRAVATAR`: **false**: Enable this to use local avatars only.
|
||||||
|
- `ENABLE_FEDERATED_AVATAR`: **false**: Enable support for federated avatars (see
|
||||||
|
[http://www.libravatar.org](http://www.libravatar.org)).
|
||||||
|
- `AVATAR_UPLOAD_PATH`: **data/avatars**: Path to store local and cached files.
|
||||||
|
|
||||||
|
## Attachment (`attachment`)
|
||||||
|
|
||||||
|
- `ENABLED`: **true**: Enable this to allow uploading attachments.
|
||||||
|
- `PATH`: **data/attachments**: Path to store attachments.
|
||||||
|
- `ALLOWED_TYPES`: **see app.ini.sample**: Allowed MIME types, e.g. `image/jpeg|image/png`.
|
||||||
|
Use `*/*` for all types.
|
||||||
|
- `MAX_SIZE`: **4**: Maximum size (MB).
|
||||||
|
- `MAX_FILES`: **5**: Maximum number of attachments that can be uploaded at once.
|
||||||
|
|
||||||
|
## Log (`log`)
|
||||||
|
|
||||||
|
- `ROOT_PATH`: **\<empty\>**: Root path for log files.
|
||||||
|
- `MODE`: **console**: Logging mode. For multiple modes, use a comma to separate values.
|
||||||
|
- `LEVEL`: **Trace**: General log level. \[Trace, Debug, Info, Warn, Error, Critical\]
|
||||||
|
- `REDIRECT_MACARON_LOG`: **false**: Redirects the Macaron log to the Gitea logger.
|
||||||
|
|
||||||
|
## Cron (`cron`)
|
||||||
|
|
||||||
|
- `ENABLED`: **true**: Run cron tasks periodically.
|
||||||
|
- `RUN_AT_START`: **false**: Run cron tasks at application start-up.
|
||||||
|
|
||||||
|
### Cron - Cleanup old repository archives (`cron.archive_cleanup`)
|
||||||
|
|
||||||
|
- `ENABLED`: **true**: Enable service.
|
||||||
|
- `RUN_AT_START`: **true**: Run tasks at start up time (if ENABLED).
|
||||||
|
- `SCHEDULE`: **@every 24h**: Cron syntax for scheduling repository archive cleanup, e.g. `@every 1h`.
|
||||||
|
- `OLDER_THAN`: **24h**: Archives created more than `OLDER_THAN` ago are subject to deletion, e.g. `12h`.
|
||||||
|
|
||||||
|
### Cron - Update Mirrors (`cron.update_mirrors`)
|
||||||
|
|
||||||
|
- `SCHEDULE`: **@every 10m**: Cron syntax for scheduling update mirrors, e.g. `@every 3h`.
|
||||||
|
|
||||||
|
### Cron - Repository Health Check (`cron.repo_health_check`)
|
||||||
|
|
||||||
|
- `SCHEDULE`: **every 24h**: Cron syntax for scheduling repository health check.
|
||||||
|
- `TIMEOUT`: **60s**: Time duration syntax for health check execution timeout.
|
||||||
|
- `ARGS`: **\<empty\>**: Arguments for command `git fsck`, e.g. `--unreachable --tags`. See more on http://git-scm.com/docs/git-fsck
|
||||||
|
|
||||||
|
### Cron - Repository Statistics Check (`cron.check_repo_stats`)
|
||||||
|
|
||||||
|
- `RUN_AT_START`: **true**: Run repository statistics check at start time.
|
||||||
|
- `SCHEDULE`: **@every 24h**: Cron syntax for scheduling repository statistics check.
|
||||||
|
|
||||||
|
## Git (`git`)
|
||||||
|
|
||||||
|
- `MAX_GIT_DIFF_LINES`: **100**: Max number of lines allowed of a single file in diff view.
|
||||||
|
- `MAX_GIT_DIFF_LINE_CHARACTERS`: **5000**: Max character count per line highlighted in diff view.
|
||||||
|
- `MAX_GIT_DIFF_FILES`: **100**: Max number of files shown in diff view.
|
||||||
|
- `GC_ARGS`: **\<empty\>**: Arguments for command `git gc`, e.g. `--aggressive --auto`. See more on http://git-scm.com/docs/git-gc/
|
||||||
|
|
||||||
|
## Git - Timeout settings (`git.timeout`)
|
||||||
|
- `DEFAUlT`: **360**: Git operations default timeout seconds.
|
||||||
|
- `MIGRATE`: **600**: Migrate external repositories timeout seconds.
|
||||||
|
- `MIRROR`: **300**: Mirror external repositories timeout seconds.
|
||||||
|
- `CLONE`: **300**: Git clone from internal repositories timeout seconds.
|
||||||
|
- `PULL`: **300**: Git pull from internal repositories timeout seconds.
|
||||||
|
- `GC`: **60**: Git repository GC timeout seconds.
|
||||||
|
|
||||||
|
## Metrics (`metrics`)
|
||||||
|
|
||||||
|
- `ENABLED`: **false**: Enables /metrics endpoint for prometheus.
|
||||||
|
- `TOKEN`: **\<empty\>**: You need to specify the token, if you want to include in the authorization the metrics . The same token need to be used in prometheus parameters `bearer_token` or `bearer_token_file`.
|
||||||
|
|
||||||
|
## API (`api`)
|
||||||
|
|
||||||
|
- `ENABLE_SWAGGER`: **true**: Enables /api/swagger, /api/v1/swagger etc. endpoints. True or false; default is true.
|
||||||
|
- `MAX_RESPONSE_ITEMS`: **50**: Max number of items in a page.
|
||||||
|
- `DEFAULT_PAGING_NUM`: **30**: Default paging number of api.
|
||||||
|
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Default and maximum number of items per page for git trees api.
|
||||||
|
|
||||||
|
## OAuth2 (`oauth2`)
|
||||||
|
|
||||||
|
- `ENABLED`: **true**: Enables OAuth2 provider.
|
||||||
|
- `ACCESS_TOKEN_EXPIRATION_TIME`: **3600**: Lifetime of an OAuth2 access token in seconds
|
||||||
|
- `REFRESH_TOKEN_EXPIRATION_TIME`: **730**: Lifetime of an OAuth2 access token in hours
|
||||||
|
- `INVALIDATE_REFRESH_TOKEN`: **false**: Check if refresh token got already used
|
||||||
|
- `JWT_SECRET`: **\<empty\>**: OAuth2 authentication secret for access and refresh tokens, change this a unique string.
|
||||||
|
|
||||||
|
## i18n (`i18n`)
|
||||||
|
|
||||||
|
- `LANGS`: **en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE,ko-KR**: List of locales shown in language selector
|
||||||
|
- `NAMES`: **English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,français,Nederlands,latviešu,русский,日本語,español,português do Brasil,polski,български,italiano,suomi,Türkçe,čeština,српски,svenska,한국어**: Visible names corresponding to the locales
|
||||||
|
|
||||||
|
### i18n - Datepicker Language (`i18n.datelang`)
|
||||||
|
Maps locales to the languages used by the datepicker plugin
|
||||||
|
|
||||||
|
- `en-US`: **en**
|
||||||
|
- `zh-CN`: **zh**
|
||||||
|
- `zh-HK`: **zh-HK**
|
||||||
|
- `zh-TW`: **zh-TW**
|
||||||
|
- `de-DE`: **de**
|
||||||
|
- `fr-FR`: **fr**
|
||||||
|
- `nl-NL`: **nl**
|
||||||
|
- `lv-LV`: **lv**
|
||||||
|
- `ru-RU`: **ru**
|
||||||
|
- `ja-JP`: **ja**
|
||||||
|
- `es-ES`: **es**
|
||||||
|
- `pt-BR`: **pt-BR**
|
||||||
|
- `pl-PL`: **pl**
|
||||||
|
- `bg-BG`: **bg**
|
||||||
|
- `it-IT`: **it**
|
||||||
|
- `fi-FI`: **fi**
|
||||||
|
- `tr-TR`: **tr**
|
||||||
|
- `cs-CZ`: **cs-CZ**
|
||||||
|
- `sr-SP`: **sr**
|
||||||
|
- `sv-SE`: **sv**
|
||||||
|
- `ko-KR`: **ko**
|
||||||
|
|
||||||
|
## U2F (`U2F`)
|
||||||
|
- `APP_ID`: **`ROOT_URL`**: Declares the facet of the application. Requires HTTPS.
|
||||||
|
- `TRUSTED_FACETS`: List of additional facets which are trusted. This is not support by all browsers.
|
||||||
|
|
||||||
|
## Markup (`markup`)
|
||||||
|
|
||||||
|
Gitea can support Markup using external tools. The example below will add a markup named `asciidoc`.
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[markup.asciidoc]
|
||||||
|
ENABLED = false
|
||||||
|
FILE_EXTENSIONS = .adoc,.asciidoc
|
||||||
|
RENDER_COMMAND = "asciidoc --out-file=- -"
|
||||||
|
IS_INPUT_FILE = false
|
||||||
|
```
|
||||||
|
|
||||||
|
- ENABLED: **false** Enable markup support.
|
||||||
|
- FILE\_EXTENSIONS: **\<empty\>** List of file extensions that should be rendered by an external
|
||||||
|
command. Multiple extentions needs a comma as splitter.
|
||||||
|
- RENDER\_COMMAND: External command to render all matching extensions.
|
||||||
|
- IS\_INPUT\_FILE: **false** Input is not a standard input but a file param followed `RENDER_COMMAND`.
|
||||||
|
|
||||||
|
Two special environment variables are passed to the render command:
|
||||||
|
- `GITEA_PREFIX_SRC`, which contains the current URL prefix in the `src` path tree. To be used as prefix for links.
|
||||||
|
- `GITEA_PREFIX_RAW`, which contains the current URL prefix in the `raw` path tree. To be used as prefix for image paths.
|
||||||
|
|
||||||
|
## Other (`other`)
|
||||||
|
|
||||||
|
- `SHOW_FOOTER_BRANDING`: **false**: Show Gitea branding in the footer.
|
||||||
|
- `SHOW_FOOTER_VERSION`: **true**: Show Gitea version information in the footer.
|
||||||
|
- `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: Show time of template execution in the footer.
|
||||||
242
docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
Normal file
242
docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-26T16:00:00+02:00"
|
||||||
|
title: "配置说明"
|
||||||
|
slug: "config-cheat-sheet"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "配置说明"
|
||||||
|
weight: 20
|
||||||
|
identifier: "config-cheat-sheet"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 配置说明
|
||||||
|
|
||||||
|
这是针对Gitea配置文件的说明,你可以了解Gitea的强大配置。需要说明的是,你的所有改变请修改 `custom/conf/app.ini` 文件而不是源文件。所有默认值可以通过 [app.ini.sample](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample) 查看到。如果你发现 `%(X)s` 这样的内容,请查看 [ini](https://github.com/go-ini/ini/#recursive-values) 这里的说明。标注了 :exclamation: 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。
|
||||||
|
|
||||||
|
## Overall (`DEFAULT`)
|
||||||
|
|
||||||
|
- `APP_NAME`: 应用名称,改成你希望的名字。
|
||||||
|
- `RUN_USER`: 运行Gitea的用户,推荐使用 `git`;如果在你自己的个人电脑使用改成你自己的用户名。如果设置不正确,Gitea可能崩溃。
|
||||||
|
- `RUN_MODE`: 从性能考虑,如果在产品级的服务上改成 `prod`。如果您使用安装向导安装的那么会自动设置为 `prod`。
|
||||||
|
|
||||||
|
## Repository (`repository`)
|
||||||
|
|
||||||
|
- `ROOT`: 存放git工程的根目录。这里必须填绝对路径,默认值是 `~/<username>/gitea-repositories`。
|
||||||
|
- `SCRIPT_TYPE`: 服务器支持的Shell类型,通常是 `bash`,但有些服务器也有可能是 `sh`。
|
||||||
|
- `ANSI_CHARSET`: 默认字符编码。
|
||||||
|
- `FORCE_PRIVATE`: 强制所有git工程必须私有。
|
||||||
|
- `DEFAULT_PRIVATE`: 默认创建的git工程为私有。 可以是`last`, `private` 或 `public`。默认值是 `last`表示用户最后创建的Repo的选择。
|
||||||
|
- `MAX_CREATION_LIMIT`: 全局最大每个用户创建的git工程数目, `-1` 表示没限制。
|
||||||
|
- `PULL_REQUEST_QUEUE_LENGTH`: 小心:合并请求测试队列的长度,尽量放大。
|
||||||
|
|
||||||
|
## UI (`ui`)
|
||||||
|
|
||||||
|
- `EXPLORE_PAGING_NUM`: 探索页面每页显示的仓库数量。
|
||||||
|
- `ISSUE_PAGING_NUM`: 工单页面每页显示的工单数量。
|
||||||
|
- `FEED_MAX_COMMIT_NUM`: 活动流页面显示的最大提交树木。
|
||||||
|
|
||||||
|
### UI - Admin (`ui.admin`)
|
||||||
|
|
||||||
|
- `USER_PAGING_NUM`: 用户管理页面每页显示的用户数量。
|
||||||
|
- `REPO_PAGING_NUM`: 仓库管理页面每页显示的仓库数量。
|
||||||
|
- `NOTICE_PAGING_NUM`: 系统提示页面每页显示的提示数量。
|
||||||
|
- `ORG_PAGING_NUM`: 组织管理页面每页显示的组织数量。
|
||||||
|
|
||||||
|
## Markdown (`markdown`)
|
||||||
|
|
||||||
|
- `ENABLE_HARD_LINE_BREAK`: 是否启用硬换行扩展。
|
||||||
|
|
||||||
|
## Server (`server`)
|
||||||
|
|
||||||
|
- `PROTOCOL`: 可选 `http` 或 `https`。
|
||||||
|
- `DOMAIN`: 服务器域名。
|
||||||
|
- `ROOT_URL`: Gitea服务器的对外 URL。
|
||||||
|
- `HTTP_ADDR`: HTTP 监听地址。
|
||||||
|
- `HTTP_PORT`: HTTP 监听端口。
|
||||||
|
- `DISABLE_SSH`: 是否禁用SSH。
|
||||||
|
- `START_SSH_SERVER`: 是否启用内部SSH服务器。
|
||||||
|
- `SSH_PORT`: SSH端口,默认为 `22`。
|
||||||
|
- `OFFLINE_MODE`: 针对静态和头像文件禁用 CDN。
|
||||||
|
- `DISABLE_ROUTER_LOG`: 关闭日志中的路由日志。
|
||||||
|
- `CERT_FILE`: 启用HTTPS的证书文件。
|
||||||
|
- `KEY_FILE`: 启用HTTPS的密钥文件。
|
||||||
|
- `STATIC_ROOT_PATH`: 存放模板和静态文件的根目录,默认是 Gitea 的根目录。
|
||||||
|
- `ENABLE_GZIP`: 启用应用级别的 GZIP 压缩。
|
||||||
|
- `LANDING_PAGE`: 未登录用户的默认页面,可选 `home` 或 `explore`。
|
||||||
|
- `LFS_START_SERVER`: 是否启用 git-lfs 支持. 可以为 `true` 或 `false`, 默认是 `false`。
|
||||||
|
- `LFS_CONTENT_PATH`: 存放 lfs 命令上传的文件的地方,默认是 `data/lfs`。
|
||||||
|
- `LFS_JWT_SECRET`: LFS 认证密钥,改成自己的。
|
||||||
|
|
||||||
|
## Database (`database`)
|
||||||
|
|
||||||
|
- `DB_TYPE`: 数据库类型,可选 `mysql`, `postgres`, `mssql`, `tidb` 或 `sqlite3`。
|
||||||
|
- `HOST`: 数据库服务器地址和端口。
|
||||||
|
- `NAME`: 数据库名称。
|
||||||
|
- `USER`: 数据库用户名。
|
||||||
|
- `PASSWD`: 数据库用户密码。
|
||||||
|
- `SSL_MODE`: PostgreSQL数据库是否启用SSL模式。
|
||||||
|
- `PATH`: Tidb 或者 SQLite3 数据文件存放路径。
|
||||||
|
- `LOG_SQL`: **true**: 显示生成的SQL,默认为真。
|
||||||
|
|
||||||
|
|
||||||
|
## Indexer (`indexer`)
|
||||||
|
|
||||||
|
- `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持 `bleve` 或 `db`,当为 `db` 时其它工单索引项可不用设置。
|
||||||
|
- `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: 工单索引文件存放路径,当索引类型为 `bleve` 时有效。
|
||||||
|
- `ISSUE_INDEXER_QUEUE_TYPE`: **levelqueue**: 工单索引队列类型,当前支持 `channel` 或 `levelqueue`。
|
||||||
|
- `ISSUE_INDEXER_QUEUE_DIR`: **indexers/issues.queue**: 当 `ISSUE_INDEXER_QUEUE_TYPE` 为 `levelqueue` 时,保存索引队列的磁盘路径。
|
||||||
|
- `ISSUE_INDEXER_QUEUE_BATCH_NUMBER`: **20**: 队列处理中批量提交数量。
|
||||||
|
|
||||||
|
- `REPO_INDEXER_ENABLED`: **false**: 是否启用代码搜索(启用后会占用比较大的磁盘空间)。
|
||||||
|
- `REPO_INDEXER_PATH`: **indexers/repos.bleve**: 用于代码搜索的索引文件路径。
|
||||||
|
- `UPDATE_BUFFER_LEN`: **20**: 代码索引请求的缓冲区长度。
|
||||||
|
- `MAX_FILE_SIZE`: **1048576**: 进行解析的源代码文件的最大长度,小于该值时才会索引。
|
||||||
|
|
||||||
|
## Security (`security`)
|
||||||
|
|
||||||
|
- `INSTALL_LOCK`: 是否允许运行安装向导,(跟管理员账号有关,十分重要)。
|
||||||
|
- `SECRET_KEY`: 全局服务器安全密钥 **最好改成你自己的** (当你运行安装向导的时候会被设置为一个随机值)。
|
||||||
|
- `LOGIN_REMEMBER_DAYS`: Cookie 保存时间,单位天。
|
||||||
|
- `COOKIE_USERNAME`: 保存用户名的 cookie 名称。
|
||||||
|
- `COOKIE_REMEMBER_NAME`: 保存自动登录信息的 cookie 名称。
|
||||||
|
- `REVERSE_PROXY_AUTHENTICATION_USER`: 反向代理认证的 HTTP 头名称。
|
||||||
|
|
||||||
|
## Service (`service`)
|
||||||
|
|
||||||
|
- `ACTIVE_CODE_LIVE_MINUTES`: 登陆验证码失效时间,单位分钟。
|
||||||
|
- `RESET_PASSWD_CODE_LIVE_MINUTES`: 重置密码失效时间,单位分钟。
|
||||||
|
- `REGISTER_EMAIL_CONFIRM`: 启用注册邮件激活,前提是 `Mailer` 已经启用。
|
||||||
|
- `DISABLE_REGISTRATION`: 禁用注册,启用后只能用管理员添加用户。
|
||||||
|
- `SHOW_REGISTRATION_BUTTON`: 是否显示注册按钮。
|
||||||
|
- `REQUIRE_SIGNIN_VIEW`: 是否所有页面都必须登录后才可访问。
|
||||||
|
- `ENABLE_CACHE_AVATAR`: 是否缓存来自 Gravatar 的头像。
|
||||||
|
- `ENABLE_NOTIFY_MAIL`: 是否发送工单创建等提醒邮件,需要 `Mailer` 被激活。
|
||||||
|
- `ENABLE_REVERSE_PROXY_AUTHENTICATION`: 允许反向代理认证,更多细节见:https://github.com/gogits/gogs/issues/165
|
||||||
|
- `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: 允许通过反向认证做自动注册。
|
||||||
|
- `ENABLE_CAPTCHA`: 注册时使用图片验证码。
|
||||||
|
|
||||||
|
## Webhook (`webhook`)
|
||||||
|
|
||||||
|
- `QUEUE_LENGTH`: 说明: Hook 任务队列长度。
|
||||||
|
- `DELIVER_TIMEOUT`: 请求webhooks的超时时间,单位秒。
|
||||||
|
- `SKIP_TLS_VERIFY`: 是否允许不安全的证书。
|
||||||
|
- `PAGING_NUM`: 每页显示的Webhook 历史数量。
|
||||||
|
|
||||||
|
## Mailer (`mailer`)
|
||||||
|
|
||||||
|
- `ENABLED`: 是否启用邮件服务。
|
||||||
|
- `DISABLE_HELO`: 禁用 HELO 命令。
|
||||||
|
- `HELO_HOSTNAME`: 自定义主机名来回应 HELO 命令。
|
||||||
|
- `HOST`: SMTP 主机地址和端口 (例如:smtp.gitea.io:587)。
|
||||||
|
- `FROM`: 邮件发送地址,RFC 5322. 这里可以填一个邮件地址或者 "Name" \<email@example.com\> 格式。
|
||||||
|
- `USER`: 用户名(通常就是邮件地址)。
|
||||||
|
- `PASSWD`: 密码。
|
||||||
|
- `SKIP_VERIFY`: 忽略证书验证。
|
||||||
|
|
||||||
|
说明:实际上 Gitea 仅仅支持基于 STARTTLS 的 SMTP。
|
||||||
|
|
||||||
|
## Cache (`cache`)
|
||||||
|
|
||||||
|
- `ADAPTER`: 缓存引擎,可以为 `memory`, `redis` 或 `memcache`。
|
||||||
|
- `INTERVAL`: 只对内存缓存有效,GC间隔,单位秒。
|
||||||
|
- `HOST`: 针对redis和memcache有效,主机地址和端口。
|
||||||
|
- Redis: `network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180`
|
||||||
|
- Memache: `127.0.0.1:9090;127.0.0.1:9091`
|
||||||
|
|
||||||
|
## Session (`session`)
|
||||||
|
|
||||||
|
- `PROVIDER`: Session 内容存储方式,可选 `memory`, `file`, `redis` 或 `mysql`。
|
||||||
|
- `PROVIDER_CONFIG`: 如果是文件,那么这里填根目录;其他的要填主机地址和端口。
|
||||||
|
- `COOKIE_SECURE`: 强制使用 HTTPS 作为session访问。
|
||||||
|
- `GC_INTERVAL_TIME`: Session失效时间。
|
||||||
|
|
||||||
|
## Picture (`picture`)
|
||||||
|
|
||||||
|
- `GRAVATAR_SOURCE`: 头像来源,可以是 `gravatar`, `duoshuo` 或者类似 `http://cn.gravatar.com/avatar/` 的来源
|
||||||
|
- `DISABLE_GRAVATAR`: 开启则只使用内部头像。
|
||||||
|
- `ENABLE_FEDERATED_AVATAR`: 启用头像联盟支持 (参见 http://www.libravatar.org)
|
||||||
|
|
||||||
|
## Attachment (`attachment`)
|
||||||
|
|
||||||
|
- `ENABLED`: 是否允许用户上传附件。
|
||||||
|
- `PATH`: 附件存储路径
|
||||||
|
- `ALLOWED_TYPES`: 允许上传的附件类型。比如:`image/jpeg|image/png`,用 `*/*` 表示允许任何类型。
|
||||||
|
- `MAX_SIZE`: 附件最大限制,单位 MB,比如: `4`。
|
||||||
|
- `MAX_FILES`: 一次最多上传的附件数量,比如: `5`。
|
||||||
|
|
||||||
|
## Log (`log`)
|
||||||
|
|
||||||
|
- `ROOT_PATH`: 日志文件根目录。
|
||||||
|
- `MODE`: 日志记录模式,默认是为 `console`。如果要写到多个通道,用逗号分隔
|
||||||
|
- `LEVEL`: 日志级别,默认为`Trace`。
|
||||||
|
|
||||||
|
## Cron (`cron`)
|
||||||
|
|
||||||
|
- `ENABLED`: 是否在后台运行定期任务。
|
||||||
|
- `RUN_AT_START`: 是否启动时自动运行。
|
||||||
|
|
||||||
|
### Cron - Update Mirrors (`cron.update_mirrors`)
|
||||||
|
|
||||||
|
- `SCHEDULE`: 自动同步镜像仓库的Cron语法,比如:`@every 1h`。
|
||||||
|
|
||||||
|
### Cron - Repository Health Check (`cron.repo_health_check`)
|
||||||
|
|
||||||
|
- `SCHEDULE`: 仓库健康监测的Cron语法,比如:`@every 24h`。
|
||||||
|
- `TIMEOUT`: 仓库健康监测的超时时间,比如:`60s`.
|
||||||
|
- `ARGS`: 执行 `git fsck` 命令的参数,比如:`--unreachable --tags`。
|
||||||
|
|
||||||
|
### Cron - Repository Statistics Check (`cron.check_repo_stats`)
|
||||||
|
|
||||||
|
- `RUN_AT_START`: 是否启动时自动运行仓库统计。
|
||||||
|
- `SCHEDULE`: 藏亏统计时的Cron 语法,比如:`@every 24h`.
|
||||||
|
|
||||||
|
## Git (`git`)
|
||||||
|
|
||||||
|
- `MAX_GIT_DIFF_LINES`: 比较视图中,一个文件最多显示行数。
|
||||||
|
- `MAX_GIT_DIFF_LINE_CHARACTERS`: 比较视图中一行最大字符数。
|
||||||
|
- `MAX_GIT_DIFF_FILES`: 比较视图中的最大现实文件数目。
|
||||||
|
- `GC_ARGS`: 执行 `git gc` 命令的参数, 比如: `--aggressive --auto`。
|
||||||
|
|
||||||
|
## Git - 超时设置 (`git.timeout`)
|
||||||
|
|
||||||
|
- `DEFAUlT`: **360**: Git操作默认超时时间,单位秒
|
||||||
|
- `MIGRATE`: **600**: 迁移外部仓库时的超时时间,单位秒
|
||||||
|
- `MIRROR`: **300**: 镜像外部仓库的超时时间,单位秒
|
||||||
|
- `CLONE`: **300**: 内部仓库间克隆的超时时间,单位秒
|
||||||
|
- `PULL`: **300**: 内部仓库间拉取的超时时间,单位秒
|
||||||
|
- `GC`: **60**: git仓库GC的超时时间,单位秒
|
||||||
|
|
||||||
|
## API (`api`)
|
||||||
|
|
||||||
|
- `ENABLE_SWAGGER`: **true**: 是否启用swagger路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false; 默认是 true.
|
||||||
|
- `MAX_RESPONSE_ITEMS`: **50**: 一个页面最大的项目数。
|
||||||
|
- `DEFAULT_PAGING_NUM`: **30**: API中默认分页条数。
|
||||||
|
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: GIT TREES API每页的默认和最大项数.
|
||||||
|
|
||||||
|
## Markup (`markup`)
|
||||||
|
|
||||||
|
外部渲染工具支持,你可以用你熟悉的文档渲染工具. 比如一下将新增一个名字为 `asciidoc` 的渲染工具which is followed `markup.` ini section. And there are some config items below.
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[markup.asciidoc]
|
||||||
|
ENABLED = false
|
||||||
|
FILE_EXTENSIONS = .adoc,.asciidoc
|
||||||
|
RENDER_COMMAND = "asciidoc --out-file=- -"
|
||||||
|
IS_INPUT_FILE = false
|
||||||
|
```
|
||||||
|
|
||||||
|
- ENABLED: 是否启用,默认为false。
|
||||||
|
- FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。
|
||||||
|
- RENDER_COMMAND: 工具的命令行命令及参数。
|
||||||
|
- IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Other (`other`)
|
||||||
|
|
||||||
|
- `SHOW_FOOTER_BRANDING`: 为真则在页面底部显示Gitea的字样。
|
||||||
|
- `SHOW_FOOTER_VERSION`: 为真则在页面底部显示Gitea的版本。
|
||||||
137
docs/content/doc/advanced/customizing-gitea.en-us.md
Normal file
137
docs/content/doc/advanced/customizing-gitea.en-us.md
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
---
|
||||||
|
date: "2017-04-15T14:56:00+02:00"
|
||||||
|
title: "Customizing Gitea"
|
||||||
|
slug: "customizing-gitea"
|
||||||
|
weight: 9
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Customizing Gitea"
|
||||||
|
weight: 9
|
||||||
|
identifier: "customizing-gitea"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Customizing Gitea
|
||||||
|
|
||||||
|
Customizing Gitea is typically done using the `custom` folder. This is the central
|
||||||
|
place to override configuration settings, templates, etc.
|
||||||
|
|
||||||
|
If Gitea is deployed from binary, all default paths will be relative to the Gitea
|
||||||
|
binary. If installed from a distribution, these paths will likely be modified to
|
||||||
|
the Linux Filesystem Standard. Gitea will create required folders, including `custom/`.
|
||||||
|
Application settings are configured in `custom/conf/app.ini`. Distributions may
|
||||||
|
provide a symlink for `custom` using `/etc/gitea/`.
|
||||||
|
|
||||||
|
- [Quick Cheat Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/)
|
||||||
|
- [Complete List](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample)
|
||||||
|
|
||||||
|
If the `custom` folder can't be found next to the binary, check the `GITEA_CUSTOM`
|
||||||
|
environment variable; this can be used to override the default path to something else.
|
||||||
|
`GITEA_CUSTOM` might, for example, be set by an init script.
|
||||||
|
|
||||||
|
- [List of Environment Variables](https://docs.gitea.io/en-us/specific-variables/)
|
||||||
|
|
||||||
|
**Note:** Gitea must perform a full restart to see configuration changes.
|
||||||
|
|
||||||
|
## Customizing /robots.txt
|
||||||
|
|
||||||
|
To make Gitea serve a custom `/robots.txt` (default: empty 404), create a file called
|
||||||
|
`robots.txt` in the `custom` folder with [expected contents](http://www.robotstxt.org/).
|
||||||
|
|
||||||
|
## Serving custom public files
|
||||||
|
|
||||||
|
To make Gitea serve custom public files (like pages and images), use the folder
|
||||||
|
`custom/public/` as the webroot. Symbolic links will be followed.
|
||||||
|
|
||||||
|
For example, a file `image.png` stored in `custom/public/`, can be accessed with
|
||||||
|
the url `http://gitea.domain.tld/image.png`.
|
||||||
|
|
||||||
|
## Changing the default avatar
|
||||||
|
|
||||||
|
Place the png image at the following path: `custom/public/img/avatar\_default.png`
|
||||||
|
|
||||||
|
## Customizing Gitea pages
|
||||||
|
|
||||||
|
The `custom/templates` folder allows changing every single page of Gitea. Templates
|
||||||
|
to override can be found in the [`templates`](https://github.com/go-gitea/gitea/tree/master/templates) directory of Gitea source. Override by
|
||||||
|
making a copy of the file under `custom/templates` using a full path structure
|
||||||
|
matching source.
|
||||||
|
|
||||||
|
Any statement contained inside `{{` and `}}` are Gitea's template syntax and
|
||||||
|
shouldn't be touched without fully understanding these components.
|
||||||
|
|
||||||
|
### Adding links and tabs
|
||||||
|
|
||||||
|
If all you want is to add extra links to the top navigation bar, or extra tabs to the repository view, you can put them in `extra_links.tmpl` and `extra_tabs.tmpl` inside your `custom/templates/custom/` directory.
|
||||||
|
|
||||||
|
For instance, let's say you are in Germany and must add the famously legally-required "Impressum"/about page, listing who is responsible for the site's content:
|
||||||
|
just place it under your "custom/public/" directory (for instance `custom/public/impressum.html`) and put a link to it in `custom/templates/custom/extra_links.tmpl`.
|
||||||
|
|
||||||
|
To match the current style, the link should have the class name "item", and you can use `{{AppSubUrl}}` to get the base URL:
|
||||||
|
`<a class="item" href="{{AppSubUrl}}/impressum.html">Impressum</a>`
|
||||||
|
|
||||||
|
You can add new tabs in the same way, putting them in `extra_tabs.tmpl`.
|
||||||
|
The exact HTML needed to match the style of other tabs is in the file
|
||||||
|
`templates/repo/header.tmpl`
|
||||||
|
([source in GitHub](https://github.com/go-gitea/gitea/blob/master/templates/repo/header.tmpl))
|
||||||
|
|
||||||
|
### Other additions to the page
|
||||||
|
|
||||||
|
Apart from `extra_links.tmpl` and `extra_tabs.tmpl`, there are other useful templates you can put in your `custom/templates/custom/` directory:
|
||||||
|
|
||||||
|
- `header.tmpl`, just before the end of the `<head>` tag where you can add custom CSS files for instance.
|
||||||
|
- `body_outer_pre.tmpl`, right after the start of `<body>`.
|
||||||
|
- `body_inner_pre.tmpl`, before the top navigation bar, but already inside the main container `<div class="full height">`.
|
||||||
|
- `body_inner_post.tmpl`, before the end of the main container.
|
||||||
|
- `body_outer_post.tmpl`, before the bottom `<footer>` element.
|
||||||
|
- `footer.tmpl`, right before the end of the `<body>` tag, a good place for additional Javascript.
|
||||||
|
|
||||||
|
## Adding Analytics to Gitea
|
||||||
|
|
||||||
|
Google Analytics, Matomo (previously Piwik), and other analytics services can be added to Gitea. To add the tracking code, refer to the `Other additions to the page` section of this document, and add the JavaScript to the `custom/templates/custom/header.tmpl` file.
|
||||||
|
|
||||||
|
## Customizing gitignores, labels, licenses, locales, and readmes.
|
||||||
|
|
||||||
|
Place custom files in corresponding sub-folder under `custom/options`.
|
||||||
|
|
||||||
|
**NOTE:** The files should not have a file extension, e.g. `Labels` rather than `Labels.txt`
|
||||||
|
|
||||||
|
### gitignores
|
||||||
|
|
||||||
|
To add custom .gitignore, add a file with existing [.gitignore rules](https://git-scm.com/docs/gitignore) in it to `custom/options/gitignore`
|
||||||
|
|
||||||
|
### Labels
|
||||||
|
|
||||||
|
To add a custom label set, add a file that follows the [label format](https://github.com/go-gitea/gitea/blob/master/options/label/Default) to `custom/options/label`
|
||||||
|
`#hex-color label name ; label description`
|
||||||
|
|
||||||
|
### Licenses
|
||||||
|
|
||||||
|
To add a custom license, add a file with the license text to `custom/options/license`
|
||||||
|
|
||||||
|
### Locales
|
||||||
|
|
||||||
|
Locales are managed via our [crowdin](https://crowdin.com/project/gitea).
|
||||||
|
You can override a locale by placing an altered locale file in `custom/options/locale`.
|
||||||
|
Gitea's default locale files can be found in the [`options/locale`](https://github.com/go-gitea/gitea/tree/master/options/locale) source folder and these should be used as examples for your changes.
|
||||||
|
|
||||||
|
To add a completely new locale, as well as placing the file in the above location, you will need to add the new lang and name to the `[i18n]` section in your `app.ini`. Keep in mind that Gitea will use those settings as **overrides**, so if you want to keep the other languages as well you will need to copy/paste the default values and add your own to them.
|
||||||
|
|
||||||
|
```
|
||||||
|
[i18n]
|
||||||
|
LANGS = en-US,foo-BAR
|
||||||
|
NAMES = English,FooBar
|
||||||
|
```
|
||||||
|
|
||||||
|
Locales may change between versions, so keeping track of your customized locales is highly encouraged.
|
||||||
|
|
||||||
|
### Readmes
|
||||||
|
|
||||||
|
To add a custom Readme, add a markdown formatted file (without an `.md` extension) to `custom/options/readme`
|
||||||
|
|
||||||
|
## Customizing the look of Gitea
|
||||||
|
|
||||||
|
As of version 1.6.0 Gitea has built-in themes. The two built-in themes are, the default theme `gitea`, and a dark theme `arc-green`. To change the look of your Gitea install change the value of `DEFAULT_THEME` in the [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) section of `app.ini` to another one of the available options.
|
||||||
|
As of version 1.8.0 Gitea also has per-user themes. The list of themes a user can choose from can be configured with the `THEMES` value in the [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) section of `app.ini` (defaults to `gitea` and `arc-green`, light and dark respectively)
|
||||||
88
docs/content/doc/advanced/customizing-gitea.zh-cn.md
Normal file
88
docs/content/doc/advanced/customizing-gitea.zh-cn.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
date: "2017-04-15T14:56:00+02:00"
|
||||||
|
title: "自定义 Gitea 配置"
|
||||||
|
slug: "customizing-gitea"
|
||||||
|
weight: 9
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "自定义 Gitea 配置"
|
||||||
|
weight: 9
|
||||||
|
identifier: "customizing-gitea"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 自定义 Gitea 配置
|
||||||
|
|
||||||
|
Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板等默认配置。
|
||||||
|
|
||||||
|
如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件;如果从发行版安装,则可能会将这些路径修改为Linux文件系统标准。Gitea
|
||||||
|
将会自动创建包括 `custom/` 在内的必要应用目录,应用本身的配置存放在
|
||||||
|
`custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式为 `custom` 设置一个符号链接,查看配置详情请移步:
|
||||||
|
|
||||||
|
- [快速备忘单](https://docs.gitea.io/en-us/config-cheat-sheet/)
|
||||||
|
- [完整配置清单](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample)
|
||||||
|
|
||||||
|
如果您在 binary 同目录下无法找到 `custom` 文件夹,请检查您的 `GITEA_CUSTOM`
|
||||||
|
环境变量配置, 因为它可能被配置到了其他地方(可能被一些启动脚本设置指定了目录)。
|
||||||
|
|
||||||
|
- [环境变量清单](https://docs.gitea.io/en-us/specific-variables/)
|
||||||
|
|
||||||
|
**注:** 必须完全重启 Gitea 以使配置生效。
|
||||||
|
|
||||||
|
## 使用自定义 /robots.txt
|
||||||
|
|
||||||
|
将 [想要展示的内容](http://www.robotstxt.org/) 存放在 `custom` 目录中的
|
||||||
|
`robots.txt` 文件来让 Gitea 使用自定义的`/robots.txt` (默认:空 404)。
|
||||||
|
|
||||||
|
## 使用自定义的公共文件
|
||||||
|
|
||||||
|
将自定义的公共文件(比如页面和图片)作为 webroot 放在 `custom/public/` 中来让 Gitea 提供这些自定义内容(符号链接将被追踪)。
|
||||||
|
|
||||||
|
举例说明:`image.png` 存放在 `custom/public/`中,那么它可以通过链接 http://gitea.domain.tld/image.png 访问。
|
||||||
|
|
||||||
|
## 修改默认头像
|
||||||
|
|
||||||
|
替换以下目录中的 png 图片: `custom/public/img/avatar\_default.png`
|
||||||
|
|
||||||
|
## 自定义 Gitea 页面
|
||||||
|
|
||||||
|
您可以改变 Gitea `custom/templates` 的每个单页面。您可以在 Gitea 源码的 `templates` 目录中找到用于覆盖的模板文件,应用将根据
|
||||||
|
`custom/templates` 目录下的路径结构进行匹配和覆盖。
|
||||||
|
|
||||||
|
包含在 `{{` 和 `}}` 中的任何语句都是 Gitea 的模板语法,如果您不完全理解这些组件,不建议您对它们进行修改。
|
||||||
|
|
||||||
|
### 添加链接和页签
|
||||||
|
|
||||||
|
如果您只是想添加额外的链接到顶部导航栏或额外的选项卡到存储库视图,您可以将它们放在您 `custom/templates/custom/` 目录下的 `extra_links.tmpl` 和 `extra_tabs.tmpl` 文件中。
|
||||||
|
|
||||||
|
举例说明:假设您需要在网站放置一个静态的“关于”页面,您只需将该页面放在您的
|
||||||
|
"custom/public/"目录下(比如 `custom/public/impressum.html`)并且将它与 `custom/templates/custom/extra_links.tmpl` 链接起来即可。
|
||||||
|
|
||||||
|
这个链接应当使用一个名为“item”的 class 来匹配当前样式,您可以使用 `{{AppSubUrl}}` 来获取 base URL:
|
||||||
|
`<a class="item" href="{{AppSubUrl}}/impressum.html">Impressum</a>`
|
||||||
|
|
||||||
|
同理,您可以将页签添加到 `extra_tabs.tmpl` 中,使用同样的方式来添加页签。它的具体样式需要与
|
||||||
|
`templates/repo/header.tmpl` 中已有的其他选项卡的样式匹配
|
||||||
|
([source in GitHub](https://github.com/go-gitea/gitea/blob/master/templates/repo/header.tmpl))
|
||||||
|
|
||||||
|
### 页面的其他新增内容
|
||||||
|
|
||||||
|
除了 `extra_links.tmpl` 和 `extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目录中存放一些其他有用的模板,例如:
|
||||||
|
|
||||||
|
- `header.tmpl`,在 `<head>` 标记结束之前的模板,例如添加自定义CSS文件
|
||||||
|
- `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板
|
||||||
|
- `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">`
|
||||||
|
- `body_inner_post.tmpl`,在主 container 结束处的模板
|
||||||
|
- `body_outer_post.tmpl`,在底部 `<footer>` 元素之前.
|
||||||
|
- `footer.tmpl`,在 `<body>` 标签结束处的模板,可以在这里填写一些附加的 Javascript 脚本。
|
||||||
|
|
||||||
|
## 自定义 gitignores,labels, licenses, locales 以及 readmes
|
||||||
|
|
||||||
|
将自定义文件放在 `custom/options` 下相应子的文件夹中即可
|
||||||
|
|
||||||
|
## 更改 Gitea 外观
|
||||||
|
|
||||||
|
Gitea 目前由两种内置主题,分别为默认 `gitea` 主题和深色主题 `arc-green`,您可以通过修改
|
||||||
|
`app.ini` [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) 部分的 `DEFAULT_THEME` 的值来变更至一个可用的 Gitea 外观。
|
||||||
70
docs/content/doc/advanced/external-renderers.en-us.md
Normal file
70
docs/content/doc/advanced/external-renderers.en-us.md
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
date: "2018-11-23:00:00+02:00"
|
||||||
|
title: "External renderers"
|
||||||
|
slug: "external-renderers"
|
||||||
|
weight: 40
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "External renderers"
|
||||||
|
weight: 40
|
||||||
|
identifier: "external-renderers"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Custom files rendering configuration
|
||||||
|
|
||||||
|
Gitea supports custom file renderings (i.e., Jupyter notebooks, asciidoc, etc.) through external binaries,
|
||||||
|
it is just a matter of:
|
||||||
|
* installing external binaries
|
||||||
|
* add some configuration to your `app.ini` file
|
||||||
|
* restart your Gitea instance
|
||||||
|
|
||||||
|
## Installing external binaries
|
||||||
|
|
||||||
|
In order to get file rendering through external binaries, their associated packages must be installed.
|
||||||
|
If you're using a Docker image, your `Dockerfile` should contain something along this lines:
|
||||||
|
|
||||||
|
```
|
||||||
|
FROM gitea/gitea:1.6.0
|
||||||
|
[...]
|
||||||
|
|
||||||
|
COPY custom/app.ini /data/gitea/conf/app.ini
|
||||||
|
[...]
|
||||||
|
|
||||||
|
RUN apk --no-cache add asciidoctor freetype freetype-dev gcc g++ libpng python-dev py-pip python3-dev py3-pip
|
||||||
|
# install any other package you need for your external renderers
|
||||||
|
|
||||||
|
RUN pip3 install --upgrade pip
|
||||||
|
RUN pip3 install -U setuptools
|
||||||
|
RUN pip3 install jupyter matplotlib docutils
|
||||||
|
# add above any other python package you may need to install
|
||||||
|
```
|
||||||
|
|
||||||
|
## `app.ini` file configuration
|
||||||
|
|
||||||
|
add one `[markup.XXXXX]` section per external renderer on your custom `app.ini`:
|
||||||
|
|
||||||
|
```
|
||||||
|
[markup.asciidoc]
|
||||||
|
ENABLED = true
|
||||||
|
FILE_EXTENSIONS = .adoc,.asciidoc
|
||||||
|
RENDER_COMMAND = "asciidoctor --out-file=- -"
|
||||||
|
; Input is not a standard input but a file
|
||||||
|
IS_INPUT_FILE = false
|
||||||
|
|
||||||
|
[markup.jupyter]
|
||||||
|
ENABLED = true
|
||||||
|
FILE_EXTENSIONS = .ipynb
|
||||||
|
RENDER_COMMAND = "jupyter nbconvert --stdout --to html --template basic "
|
||||||
|
IS_INPUT_FILE = true
|
||||||
|
|
||||||
|
[markup.restructuredtext]
|
||||||
|
ENABLED = true
|
||||||
|
FILE_EXTENSIONS = .rst
|
||||||
|
RENDER_COMMAND = rst2html.py
|
||||||
|
IS_INPUT_FILE = false
|
||||||
|
```
|
||||||
|
|
||||||
|
Once your configuration changes have been made, restart Gitea to have changes take effect.
|
||||||
296
docs/content/doc/advanced/hacking-on-gitea.en-us.md
Normal file
296
docs/content/doc/advanced/hacking-on-gitea.en-us.md
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "Hacking on Gitea"
|
||||||
|
slug: "hacking-on-gitea"
|
||||||
|
weight: 10
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Hacking on Gitea"
|
||||||
|
weight: 10
|
||||||
|
identifier: "hacking-on-gitea"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hacking on Gitea
|
||||||
|
|
||||||
|
## Installing go and setting the GOPATH
|
||||||
|
|
||||||
|
You should [install go](https://golang.org/doc/install) and set up your go
|
||||||
|
environment correctly. In particular, it is recommended to set the `$GOPATH`
|
||||||
|
environment variable and to add the go bin directory or directories
|
||||||
|
`${GOPATH//://bin:}/bin` to the `$PATH`. See the Go wiki entry for
|
||||||
|
[GOPATH](https://github.com/golang/go/wiki/GOPATH).
|
||||||
|
|
||||||
|
You will also need make.
|
||||||
|
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>(See here how to get Make)</a>
|
||||||
|
|
||||||
|
**Note**: When executing make tasks that require external tools, like
|
||||||
|
`make misspell-check`, Gitea will automatically download and build these as
|
||||||
|
necessary. To be able to use these you must have the `"$GOPATH"/bin` directory
|
||||||
|
on the executable path. If you don't add the go bin directory to the
|
||||||
|
executable path you will have to manage this yourself.
|
||||||
|
|
||||||
|
**Note 2**: Go version 1.9 or higher is required; however, it is important
|
||||||
|
to note that our continuous integration will check that the formatting of the
|
||||||
|
source code is not changed by `gofmt` using `make fmt-check`. Unfortunately,
|
||||||
|
the results of `gofmt` can differ by the version of `go`. It is therefore
|
||||||
|
recommended to install the version of go that our continuous integration is
|
||||||
|
running. At the time of writing this is Go version 1.12; however, this can be
|
||||||
|
checked by looking at the
|
||||||
|
[master `.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml)
|
||||||
|
(At the time of writing
|
||||||
|
[line 67](https://github.com/go-gitea/gitea/blob/8917d66571a95f3da232a0c27bc1300210d10fde/.drone.yml#L67)
|
||||||
|
is the relevant line - but this may change.)
|
||||||
|
|
||||||
|
## Downloading and cloning the Gitea source code
|
||||||
|
|
||||||
|
Go is quite opinionated about where it expects its source code, and simply
|
||||||
|
cloning the Gitea repository to an arbitrary path is likely to lead to
|
||||||
|
problems - the fixing of which is out of scope for this document. Further, some
|
||||||
|
internal packages are referenced using their respective GitHub URL and at
|
||||||
|
present we use `vendor/` directories.
|
||||||
|
|
||||||
|
The recommended method of obtaining the source code is by using the `go get` command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get -d code.gitea.io/gitea
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
```
|
||||||
|
|
||||||
|
This will clone the Gitea source code to: `"$GOPATH/src/code.gitea.io/gitea"`, or if `$GOPATH`
|
||||||
|
is not set `"$HOME/go/src/code.gitea.io/gitea"`.
|
||||||
|
|
||||||
|
## Forking Gitea
|
||||||
|
|
||||||
|
As stated above, you cannot clone Gitea to an arbitrary path. Download the master Gitea source
|
||||||
|
code as above. Then, fork the [Gitea repository](https://github.com/go-gitea/gitea) on GitHub,
|
||||||
|
and either switch the git remote origin for your fork or add your fork as another remote:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Rename original Gitea origin to upstream
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
git remote rename origin upstream
|
||||||
|
git remote add origin "git@github.com:$GITHUB_USERNAME/gitea.git"
|
||||||
|
git fetch --all --prune
|
||||||
|
```
|
||||||
|
|
||||||
|
or:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add new remote for our fork
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
git remote add "$FORK_NAME" "git@github.com:$GITHUB_USERNAME/gitea.git"
|
||||||
|
git fetch --all --prune
|
||||||
|
```
|
||||||
|
|
||||||
|
To be able to create pull requests, the forked repository should be added as a remote
|
||||||
|
to the Gitea sources. Otherwise, changes can't be pushed.
|
||||||
|
|
||||||
|
## Building Gitea (Basic)
|
||||||
|
|
||||||
|
Take a look at our
|
||||||
|
<a href='{{< relref "doc/installation/from-source.en-us.md" >}}'>instructions</a>
|
||||||
|
for <a href='{{< relref "doc/installation/from-source.en-us.md" >}}'>building
|
||||||
|
from source</a>.
|
||||||
|
|
||||||
|
The simplest recommended way to build from source is:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make generate build
|
||||||
|
```
|
||||||
|
|
||||||
|
However, there are a number of additional make tasks you should be aware of.
|
||||||
|
These are documented below but you can look at our
|
||||||
|
[`Makefile`](https://github.com/go-gitea/gitea/blob/master/Makefile) for more,
|
||||||
|
and look at our
|
||||||
|
[`.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml) to see
|
||||||
|
how our continuous integration works.
|
||||||
|
|
||||||
|
### Formatting, linting, vetting and spell-check
|
||||||
|
|
||||||
|
Our continous integration will reject PRs that are not properly formatted, fail
|
||||||
|
linting, vet or spell-check.
|
||||||
|
|
||||||
|
You should format your code with `go fmt` using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fmt
|
||||||
|
```
|
||||||
|
|
||||||
|
and can test whether your changes would match the results with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fmt-check # which runs make fmt internally
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: The results of `go fmt` are dependent on the version of `go` present.
|
||||||
|
You should run the same version of go that is on the continuous integration
|
||||||
|
server as mentioned above. `make fmt-check` will only check if your `go` would
|
||||||
|
format differently - this may be different from the CI server version.
|
||||||
|
|
||||||
|
You should lint, vet and spell-check with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make vet lint misspell-check
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating the stylesheets
|
||||||
|
|
||||||
|
To generate the stylsheets, you will need [Node.js](https://nodejs.org/) at version 8.0 or above.
|
||||||
|
|
||||||
|
At present we use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our stylesheets. Do
|
||||||
|
**not** edit the files in `public/css/` directly, as they are generated from
|
||||||
|
`lessc` from the files in `public/less/`.
|
||||||
|
|
||||||
|
If you wish to work on the stylesheets, you will need to install `lessc` the
|
||||||
|
less compiler and `postcss`. The recommended way to do this is using `npm install`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then edit the less stylesheets and regenerate the stylesheets using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-stylesheets
|
||||||
|
```
|
||||||
|
|
||||||
|
You should commit both the changes to the css and the less files when making
|
||||||
|
PRs.
|
||||||
|
|
||||||
|
### Updating the API
|
||||||
|
|
||||||
|
When creating new API routes or modifying existing API routes, you **MUST**
|
||||||
|
update and/or create [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
|
||||||
|
documentation for these using [go-swagger](https://goswagger.io/) comments.
|
||||||
|
The structure of these comments is described in the [specification](https://goswagger.io/use/spec.html#annotation-syntax).
|
||||||
|
If you want more information about the Swagger structure, you can look at the
|
||||||
|
[Swagger 2.0 Documentation](https://swagger.io/docs/specification/2-0/basic-structure/)
|
||||||
|
or compare with a previous PR adding a new API endpoint, e.g. [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
|
||||||
|
|
||||||
|
You should be careful not to break the API for downstream users which depend
|
||||||
|
on a stable API. In general, this means additions are acceptable, but deletions
|
||||||
|
or fundamental changes to the API will be rejected.
|
||||||
|
|
||||||
|
Once you have created or changed an API endpoint, please regenerate the Swagger
|
||||||
|
documentation using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-swagger
|
||||||
|
```
|
||||||
|
|
||||||
|
You should validate your generated Swagger file and spell-check it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make swagger-validate mispell-check
|
||||||
|
```
|
||||||
|
|
||||||
|
You should commit the changed swagger JSON file. The continous integration
|
||||||
|
server will check that this has been done using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make swagger-check
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: Please note you should use the Swagger 2.0 documentation, not the
|
||||||
|
OpenAPI 3 documentation.
|
||||||
|
|
||||||
|
### Creating new configuration options
|
||||||
|
|
||||||
|
When creating new configuration options, it is not enough to add them to the
|
||||||
|
`modules/setting` files. You should add information to `custom/conf/app.ini`
|
||||||
|
and to the
|
||||||
|
<a href='{{ relref "doc/advanced/config-cheat-sheet.en-us.md"}}'>configuration cheat sheet</a>
|
||||||
|
found in `docs/content/doc/advanced/config-cheat-sheet.en-us.md`
|
||||||
|
|
||||||
|
### Changing the logo
|
||||||
|
|
||||||
|
When changing the Gitea logo SVG, you will need to run and commit the results
|
||||||
|
of:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-images
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create the necessary Gitea favicon and others.
|
||||||
|
|
||||||
|
### Database Migrations
|
||||||
|
|
||||||
|
If you make breaking changes to any of the database persisted structs in the
|
||||||
|
`models/` directory, you will need to make a new migration. These can be found
|
||||||
|
in `models/migrations/`. You can ensure that your migrations work for the main
|
||||||
|
database types using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make test-sqlite-migration # with sqlite switched for the appropriate database
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
There are two types of test run by Gitea: Unit tests and Integration Tests.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make test # Runs the unit tests
|
||||||
|
```
|
||||||
|
|
||||||
|
Unit tests will not and cannot completely test Gitea alone. Therefore, we
|
||||||
|
have written integration tests; however, these are database dependent.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make generate build test-sqlite
|
||||||
|
```
|
||||||
|
|
||||||
|
will run the integration tests in an sqlite environment. Other database tests
|
||||||
|
are available but may need adjustment to the local environment.
|
||||||
|
|
||||||
|
Look at
|
||||||
|
[`integrations/README.md`](https://github.com/go-gitea/gitea/blob/master/integrations/README.md)
|
||||||
|
for more information and how to run a single test.
|
||||||
|
|
||||||
|
Our continuous integration will test the code passes its unit tests and that
|
||||||
|
all supported databases will pass integration test in a Docker environment.
|
||||||
|
Migration from several recent versions of Gitea will also be tested.
|
||||||
|
|
||||||
|
Please submit your PR with additional tests and integration tests as
|
||||||
|
appropriate.
|
||||||
|
|
||||||
|
## Documentation for the website
|
||||||
|
|
||||||
|
Documentation for the website is found in `docs/`. If you change this you
|
||||||
|
can test your changes to ensure that they pass continuous integration using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea/docs"
|
||||||
|
make trans-copy clean build
|
||||||
|
```
|
||||||
|
|
||||||
|
You will require a copy of [Hugo](https://gohugo.io/) to run this task. Please
|
||||||
|
note: this may generate a number of untracked git objects, which will need to
|
||||||
|
be cleaned up.
|
||||||
|
|
||||||
|
## Visual Studio Code
|
||||||
|
|
||||||
|
A `launch.json` and `tasks.json` are provided within `contrib/ide/vscode` for
|
||||||
|
Visual Studio Code. Look at
|
||||||
|
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/master/contrib/ide/README.md)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
## Submitting PRs
|
||||||
|
|
||||||
|
Once you're happy with your changes, push them up and open a pull request. It
|
||||||
|
is recommended that you allow Gitea Managers and Owners to modify your PR
|
||||||
|
branches as we will need to update it to master before merging and/or may be
|
||||||
|
able to help fix issues directly.
|
||||||
|
|
||||||
|
Any PR requires two approvals from the Gitea maintainers and needs to pass the
|
||||||
|
continous integration. Take a look at our
|
||||||
|
[`CONTRIBUTING.md`](https://github.com/go-gitea/gitea/blob/master/CONTRIBUTING.md)
|
||||||
|
document.
|
||||||
|
|
||||||
|
If you need more help pop on to [Discord](https://discord.gg/gitea) #Develop
|
||||||
|
and chat there.
|
||||||
|
|
||||||
|
That's it! You are ready to hack on Gitea.
|
||||||
43
docs/content/doc/advanced/hacking-on-gitea.zh-cn.md
Normal file
43
docs/content/doc/advanced/hacking-on-gitea.zh-cn.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "加入 Gitea 开源"
|
||||||
|
slug: "hacking-on-gitea"
|
||||||
|
weight: 10
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "加入 Gitea 开源"
|
||||||
|
weight: 10
|
||||||
|
identifier: "hacking-on-gitea"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hacking on Gitea
|
||||||
|
|
||||||
|
首先你需要一些运行环境,这和 [从源代码安装]({{< relref "from-source.zh-cn.md" >}}) 相同,如果你还没有设置好,可以先阅读那个章节。
|
||||||
|
|
||||||
|
如果你想为 Gitea 贡献代码,你需要 Fork 这个项目并且以 `master` 为开发分支。Gitea 使用 Govendor
|
||||||
|
来管理依赖,因此所有依赖项都被工具自动 copy 在 vendor 子目录下。用下面的命令来下载源码:
|
||||||
|
|
||||||
|
```
|
||||||
|
go get -d code.gitea.io/gitea
|
||||||
|
```
|
||||||
|
|
||||||
|
然后你可以在 Github 上 fork [Gitea 项目](https://github.com/go-gitea/gitea),之后可以通过下面的命令进入源码目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd $GOPATH/src/code.gitea.io/gitea
|
||||||
|
```
|
||||||
|
|
||||||
|
要创建 pull requests 你还需要在源码中新增一个 remote 指向你 Fork 的地址,直接推送到 origin 的话会告诉你没有写权限:
|
||||||
|
|
||||||
|
```
|
||||||
|
git remote rename origin upstream
|
||||||
|
git remote add origin git@github.com:<USERNAME>/gitea.git
|
||||||
|
git fetch --all --prune
|
||||||
|
```
|
||||||
|
|
||||||
|
然后你就可以开始开发了。你可以看一下 `Makefile` 的内容。`make test` 可以运行测试程序, `make build` 将生成一个 `gitea` 可运行文件在根目录。如果你的提交比较复杂,尽量多写一些单元测试代码。
|
||||||
|
|
||||||
|
好了,到这里你已经设置好了所有的开发 Gitea 所需的环境。欢迎成为 Gitea 的 Contributor。
|
||||||
46
docs/content/doc/advanced/make.en-us.md
Normal file
46
docs/content/doc/advanced/make.en-us.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
date: "2017-01-14T11:00:00-02:00"
|
||||||
|
title: "Make"
|
||||||
|
slug: "make"
|
||||||
|
weight: 10
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Make"
|
||||||
|
weight: 30
|
||||||
|
identifier: "make"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Make
|
||||||
|
|
||||||
|
Gitea makes heavy use of Make to automate tasks and improve development. This
|
||||||
|
guide covers how to install Make.
|
||||||
|
|
||||||
|
### On Linux
|
||||||
|
|
||||||
|
Install with the package manager.
|
||||||
|
|
||||||
|
On Ubuntu/Debian:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install make
|
||||||
|
```
|
||||||
|
|
||||||
|
On Fedora/RHEL/CentOS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo yum install make
|
||||||
|
```
|
||||||
|
|
||||||
|
### On Windows
|
||||||
|
|
||||||
|
One of these three distributions of Make will run on Windows:
|
||||||
|
|
||||||
|
- [Single binary build](http://www.equation.com/servlet/equation.cmd?fa=make). Copy somewhere and add to `PATH`.
|
||||||
|
- [32-bits version](ftp://ftp.equation.com/make/32/make.exe)
|
||||||
|
- [64-bits version](ftp://ftp.equation.com/make/64/make.exe)
|
||||||
|
- [MinGW](http://www.mingw.org/) includes a build.
|
||||||
|
- The binary is called `mingw32-make.exe` instead of `make.exe`. Add the `bin` folder to `PATH`.
|
||||||
|
- [Chocolatey package](https://chocolatey.org/packages/make). Run `choco install make`
|
||||||
44
docs/content/doc/advanced/make.fr-fr.md
Normal file
44
docs/content/doc/advanced/make.fr-fr.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
date: "2017-08-23T09:00:00+02:00"
|
||||||
|
title: "Make"
|
||||||
|
slug: "make"
|
||||||
|
weight: 10
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Make"
|
||||||
|
weight: 30
|
||||||
|
identifier: "make"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Make
|
||||||
|
|
||||||
|
Gitea fait largement usage de Make pour automatiser les tâches et avoir un développement plus rapide. Ce guide explique comment installer Make.
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
Vous pouvez installer Make avec votre gestionnaire de paquetages
|
||||||
|
|
||||||
|
Depuis Ubuntu/Debian:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install build-essential
|
||||||
|
```
|
||||||
|
|
||||||
|
Depuis Fedora/RHEL/CentOS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo yum install make
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
Si vous utilisez Windows, vous pouvez télécharger une des versions suivantes de Make:
|
||||||
|
|
||||||
|
- [Simple binaire](http://www.equation.com/servlet/equation.cmd?fa=make). Copiez le quelque part et mettez à jour `PATH`.
|
||||||
|
- [32-bits version](ftp://ftp.equation.com/make/32/make.exe)
|
||||||
|
- [64-bits version](ftp://ftp.equation.com/make/64/make.exe)
|
||||||
|
- [MinGW](http://www.mingw.org/) includes a build. The binary is called `mingw32-make.exe` instead of `make.exe`. Add the `bin` folder to your `PATH`.
|
||||||
|
- [Chocolatey package](https://chocolatey.org/packages/make). Run `choco install make`
|
||||||
45
docs/content/doc/advanced/make.zh-cn.md
Normal file
45
docs/content/doc/advanced/make.zh-cn.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
date: "2017-01-14T11:00:00-02:00"
|
||||||
|
title: "Make 安装"
|
||||||
|
slug: "make"
|
||||||
|
weight: 10
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Make 安装"
|
||||||
|
weight: 30
|
||||||
|
identifier: "make"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 安装 Make
|
||||||
|
|
||||||
|
Gitea 大量使用了 Make 工具来自动执行任务并改进开发,本文将介绍如何安装 Make。
|
||||||
|
|
||||||
|
### 在 Linux 环境下
|
||||||
|
|
||||||
|
可以使用包管理工具来安装 Make。
|
||||||
|
|
||||||
|
Ubuntu/Debian 环境,执行以下命令:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install make
|
||||||
|
```
|
||||||
|
|
||||||
|
Fedora/RHEL/CentOS,执行以下命令:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo yum install make
|
||||||
|
```
|
||||||
|
|
||||||
|
### 在 Windows 环境下
|
||||||
|
|
||||||
|
您可以参照以下三种方案在 Windows 环境安装 Make:
|
||||||
|
|
||||||
|
- 直接使用 [exe文件](http://www.equation.com/servlet/equation.cmd?fa=make):将适合您系统的exe文件拷贝到某处并添加至环境变量 `PATH` 中。
|
||||||
|
- [32 位版本](ftp://ftp.equation.com/make/32/make.exe)
|
||||||
|
- [64 位版本](ftp://ftp.equation.com/make/64/make.exe)
|
||||||
|
- 使用 [MinGW](http://www.mingw.org/) 工具:
|
||||||
|
- 此处使用二进制文件 `mingw32-make.exe` 替代前面提到的 `make.exe`文件。同样您需要将包含此exe文件的 `bin` 目录添加至环境变量 `PATH`中。
|
||||||
|
- 通过 [Chocolatey](https://chocolatey.org/packages/make) 安装: 执行 `choco install make` 命令即可。
|
||||||
68
docs/content/doc/advanced/specific-variables.en-us.md
Normal file
68
docs/content/doc/advanced/specific-variables.en-us.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
date: "2017-04-08T11:34:00+02:00"
|
||||||
|
title: "Specific variables"
|
||||||
|
slug: "specific-variables"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Specific variables"
|
||||||
|
weight: 20
|
||||||
|
identifier: "specific-variables"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Specific variables
|
||||||
|
|
||||||
|
This is an inventory of Gitea environment variables. They change Gitea behaviour.
|
||||||
|
|
||||||
|
Initialize them before Gitea command to be effective, for example:
|
||||||
|
|
||||||
|
```
|
||||||
|
GITEA_CUSTOM=/home/gitea/custom ./gitea web
|
||||||
|
```
|
||||||
|
|
||||||
|
## From Go language
|
||||||
|
|
||||||
|
As Gitea is written in Go, it uses some Go variables, such as:
|
||||||
|
|
||||||
|
* `GOOS`
|
||||||
|
* `GOARCH`
|
||||||
|
* [`GOPATH`](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable)
|
||||||
|
|
||||||
|
For documentation about each of the variables available, refer to the
|
||||||
|
[official Go documentation](https://golang.org/cmd/go/#hdr-Environment_variables).
|
||||||
|
|
||||||
|
## Gitea files
|
||||||
|
|
||||||
|
* `GITEA_WORK_DIR`: Absolute path of working directory.
|
||||||
|
* `GITEA_CUSTOM`: Gitea uses `GITEA_WORK_DIR`/custom folder by default. Use this variable
|
||||||
|
to change *custom* directory.
|
||||||
|
* `GOGS_WORK_DIR`: Deprecated, use `GITEA_WORK_DIR`
|
||||||
|
* `GOGS_CUSTOM`: Deprecated, use `GITEA_CUSTOM`
|
||||||
|
|
||||||
|
## Operating system specifics
|
||||||
|
|
||||||
|
* `USER`: System user that Gitea will run as. Used for some repository access strings.
|
||||||
|
* `USERNAME`: if no `USER` found, Gitea will use `USERNAME`
|
||||||
|
* `HOME`: User home directory path. The `USERPROFILE` environment variable is used in Windows.
|
||||||
|
|
||||||
|
### Only on Windows
|
||||||
|
|
||||||
|
* `USERPROFILE`: User home directory path. If empty, uses `HOMEDRIVE` + `HOMEPATH`
|
||||||
|
* `HOMEDRIVE`: Main drive path used to access the home directory (C:)
|
||||||
|
* `HOMEPATH`: Home relative path in the given home drive path
|
||||||
|
|
||||||
|
## Macaron (framework used by Gitea)
|
||||||
|
|
||||||
|
* `HOST`: Host Macaron will listen on
|
||||||
|
* `PORT`: Port Macaron will listen on
|
||||||
|
* `MACARON_ENV`: global variable to provide special functionality for development environments
|
||||||
|
vs. production environments. If MACARON_ENV is set to "" or "development", then templates will
|
||||||
|
be recompiled on every request. For more performance, set the MACARON_ENV environment variable
|
||||||
|
to "production".
|
||||||
|
|
||||||
|
## Miscellaneous
|
||||||
|
|
||||||
|
* `SKIP_MINWINSVC`: If set to 1, do not run as a service on Windows.
|
||||||
62
docs/content/doc/advanced/specific-variables.zh-cn.md
Normal file
62
docs/content/doc/advanced/specific-variables.zh-cn.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
date: "2017-04-08T11:34:00+02:00"
|
||||||
|
title: "环境变量清单"
|
||||||
|
slug: "specific-variables"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "环境变量清单"
|
||||||
|
weight: 20
|
||||||
|
identifier: "specific-variables"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 环境变量清单
|
||||||
|
|
||||||
|
这里是用来控制 Gitea 行为表现的的环境变量清单,您需要在执行如下 Gitea 启动命令前设置它们来确保配置生效:
|
||||||
|
|
||||||
|
```
|
||||||
|
GITEA_CUSTOM=/home/gitea/custom ./gitea web
|
||||||
|
```
|
||||||
|
|
||||||
|
## Go 的配置
|
||||||
|
|
||||||
|
因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数:
|
||||||
|
|
||||||
|
* `GOOS`
|
||||||
|
* `GOARCH`
|
||||||
|
* [`GOPATH`](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable)
|
||||||
|
|
||||||
|
您可以在[官方文档](https://golang.org/cmd/go/#hdr-Environment_variables)中查阅这些配置参数的详细信息。
|
||||||
|
|
||||||
|
## Gitea 的文件目录
|
||||||
|
|
||||||
|
* `GITEA_WORK_DIR`:工作目录的绝对路径
|
||||||
|
* `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目录 `GITEA_WORK_DIR`/custom,您可以使用这个参数来配置 *custom* 目录
|
||||||
|
* `GOGS_WORK_DIR`: 已废弃,请使用 `GITEA_WORK_DIR` 替代
|
||||||
|
* `GOGS_CUSTOM`: 已废弃,请使用 `GITEA_CUSTOM` 替代
|
||||||
|
|
||||||
|
## 操作系统配置
|
||||||
|
|
||||||
|
* `USER`:Gitea 运行时使用的系统用户,它将作为一些 repository 的访问地址的一部分
|
||||||
|
* `USERNAME`: 如果没有配置 `USER`, Gitea 将使用 `USERNAME`
|
||||||
|
* `HOME`: 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量
|
||||||
|
|
||||||
|
### 仅限于 Windows 的配置
|
||||||
|
|
||||||
|
* `USERPROFILE`: 用户的主目录,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH`
|
||||||
|
* `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径(C盘)
|
||||||
|
* `HOMEPATH`:在指定主驱动器下的 home 目录相对路径
|
||||||
|
|
||||||
|
## Macaron(Gitea 使用的 web 框架)
|
||||||
|
|
||||||
|
* `HOST`:Macaron 监听的主机地址
|
||||||
|
* `PORT`:Macaron 监听的端口地址
|
||||||
|
* `MACARON_ENV`:为开发环境和生产环境提供特殊功能性配置的全局变量,当 MACARON_ENV 设置为 "" 或 "development"
|
||||||
|
时,每次请求都会重编译页面模板。为了提高性能表现,可将它设置为 "production"。
|
||||||
|
|
||||||
|
## Miscellaneous
|
||||||
|
|
||||||
|
* `SKIP_MINWINSVC`:如果设置为 1,在 Windows 上不会以 service 的形式运行。
|
||||||
36
docs/content/doc/advanced/third-party-tools.en-us.md
Normal file
36
docs/content/doc/advanced/third-party-tools.en-us.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
date: "2018-05-22T11:00:00+00:00"
|
||||||
|
title: "Advanced: Third Party Tools"
|
||||||
|
slug: "third-party-tools"
|
||||||
|
weight: 50
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "advanced"
|
||||||
|
name: "Third Party Tools"
|
||||||
|
weight: 50
|
||||||
|
identifier: "third-party-tools"
|
||||||
|
---
|
||||||
|
|
||||||
|
# List of third-party tools
|
||||||
|
**NOTE:** These tools are not endorsed by Gitea. They are listed here for convenience only.
|
||||||
|
|
||||||
|
*This is by no means a complete list, so feel free to ask about adding more!*
|
||||||
|
|
||||||
|
### Continuous Integration
|
||||||
|
[BuildKite Connector](https://github.com/techknowlogick/gitea-buildkite-connector)
|
||||||
|
[Jenkins Plugin](https://github.com/jenkinsci/gitea-plugin)
|
||||||
|
[Using Gitea with Drone](https://docs.drone.io/installation/gitea/)
|
||||||
|
|
||||||
|
|
||||||
|
### Migrating
|
||||||
|
[Installation script for Gitea](https://git.coolaj86.com/coolaj86/gitea-installer.sh)
|
||||||
|
[GitHub Migrator](https://gitea.com/gitea/migrator)
|
||||||
|
|
||||||
|
|
||||||
|
### Mobile
|
||||||
|
[GitNex for Android](https://gitlab.com/mmarif4u/gitnex)
|
||||||
|
|
||||||
|
### Editor Extensions
|
||||||
|
- [Gitea Extension for Visual Studio](https://github.com/maikebing/Gitea.VisualStudio) Download from [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=MysticBoy.GiteaExtensionforVisualStudio)
|
||||||
13
docs/content/doc/features.en-us.md
Normal file
13
docs/content/doc/features.en-us.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "Features"
|
||||||
|
slug: "features"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "Features"
|
||||||
|
weight: 30
|
||||||
|
identifier: "features"
|
||||||
|
---
|
||||||
13
docs/content/doc/features.zh-cn.md
Normal file
13
docs/content/doc/features.zh-cn.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "特性"
|
||||||
|
slug: "features"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "特性"
|
||||||
|
weight: 30
|
||||||
|
identifier: "features"
|
||||||
|
---
|
||||||
13
docs/content/doc/features.zh-tw.md
Normal file
13
docs/content/doc/features.zh-tw.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "功能"
|
||||||
|
slug: "features"
|
||||||
|
weight: 20
|
||||||
|
toc: false
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
name: "功能"
|
||||||
|
weight: 30
|
||||||
|
identifier: "features"
|
||||||
|
---
|
||||||
218
docs/content/doc/features/authentication.en-us.md
Normal file
218
docs/content/doc/features/authentication.en-us.md
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "Authentication"
|
||||||
|
slug: "authentication"
|
||||||
|
weight: 10
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "features"
|
||||||
|
name: "Authentication"
|
||||||
|
weight: 10
|
||||||
|
identifier: "authentication"
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
name: Authentication
|
||||||
|
---
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
|
||||||
|
## LDAP (Lightweight Directory Access Protocol)
|
||||||
|
|
||||||
|
Both the LDAP via BindDN and the simple auth LDAP share the following fields:
|
||||||
|
|
||||||
|
- Authorization Name **(required)**
|
||||||
|
- A name to assign to the new method of authorization.
|
||||||
|
|
||||||
|
- Host **(required)**
|
||||||
|
- The address where the LDAP server can be reached.
|
||||||
|
- Example: `mydomain.com`
|
||||||
|
|
||||||
|
- Port **(required)**
|
||||||
|
- The port to use when connecting to the server.
|
||||||
|
- Example: `389` for LDAP or `636` for LDAP SSL
|
||||||
|
|
||||||
|
- Enable TLS Encryption (optional)
|
||||||
|
- Whether to use TLS when connecting to the LDAP server.
|
||||||
|
|
||||||
|
- Admin Filter (optional)
|
||||||
|
- An LDAP filter specifying if a user should be given administrator
|
||||||
|
privileges. If a user account passes the filter, the user will be
|
||||||
|
privileged as an administrator.
|
||||||
|
- Example: `(objectClass=adminAccount)`
|
||||||
|
- Example for Microsoft Active Directory (AD): `(memberOf=CN=admin-group,OU=example,DC=example,DC=org)`
|
||||||
|
|
||||||
|
- Username attribute (optional)
|
||||||
|
- The attribute of the user's LDAP record containing the user name. Given
|
||||||
|
attribute value will be used for new Gitea account user name after first
|
||||||
|
successful sign-in. Leave empty to use login name given on sign-in form.
|
||||||
|
- This is useful when supplied login name is matched against multiple
|
||||||
|
attributes, but only single specific attribute should be used for Gitea
|
||||||
|
account name, see "User Filter".
|
||||||
|
- Example: `uid`
|
||||||
|
- Example for Microsoft Active Directory (AD): `sAMAccountName`
|
||||||
|
|
||||||
|
- First name attribute (optional)
|
||||||
|
- The attribute of the user's LDAP record containing the user's first name.
|
||||||
|
This will be used to populate their account information.
|
||||||
|
- Example: `givenName`
|
||||||
|
|
||||||
|
- Surname attribute (optional)
|
||||||
|
- The attribute of the user's LDAP record containing the user's surname.
|
||||||
|
This will be used to populate their account information.
|
||||||
|
- Example: `sn`
|
||||||
|
|
||||||
|
- E-mail attribute **(required)**
|
||||||
|
- The attribute of the user's LDAP record containing the user's email
|
||||||
|
address. This will be used to populate their account information.
|
||||||
|
- Example: `mail`
|
||||||
|
|
||||||
|
**LDAP via BindDN** adds the following fields:
|
||||||
|
|
||||||
|
- Bind DN (optional)
|
||||||
|
- The DN to bind to the LDAP server with when searching for the user. This
|
||||||
|
may be left blank to perform an anonymous search.
|
||||||
|
- Example: `cn=Search,dc=mydomain,dc=com`
|
||||||
|
|
||||||
|
- Bind Password (optional)
|
||||||
|
- The password for the Bind DN specified above, if any. _Note: The password
|
||||||
|
is stored in plaintext at the server. As such, ensure that the Bind DN
|
||||||
|
has as few privileges as possible._
|
||||||
|
|
||||||
|
- User Search Base **(required)**
|
||||||
|
- The LDAP base at which user accounts will be searched for.
|
||||||
|
- Example: `ou=Users,dc=mydomain,dc=com`
|
||||||
|
|
||||||
|
- User Filter **(required)**
|
||||||
|
- An LDAP filter declaring how to find the user record that is attempting to
|
||||||
|
authenticate. The `%s` matching parameter will be substituted with login
|
||||||
|
name given on sign-in form.
|
||||||
|
- Example: `(&(objectClass=posixAccount)(uid=%s))`
|
||||||
|
- Example for Microsoft Active Directory (AD): `(&(objectCategory=Person)(memberOf=CN=user-group,OU=example,DC=example,DC=org)(sAMAccountName=%s)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))`
|
||||||
|
- To substitute more than once, `%[1]s` should be used instead, e.g. when
|
||||||
|
matching supplied login name against multiple attributes such as user
|
||||||
|
identifier, email or even phone number.
|
||||||
|
- Example: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))`
|
||||||
|
- Enable user synchronization
|
||||||
|
- This option enables a periodic task that synchronizes the Gitea users with
|
||||||
|
the LDAP server. The default period is every 24 hours but that can be
|
||||||
|
changed in the app.ini file. See the *cron.sync_external_users* section in
|
||||||
|
the [sample
|
||||||
|
app.ini](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample)
|
||||||
|
for detailed comments about that section. The *User Search Base* and *User
|
||||||
|
Filter* settings described above will limit which users can use Gitea and
|
||||||
|
which users will be synchronized. When initially run the task will create
|
||||||
|
all LDAP users that match the given settings so take care if working with
|
||||||
|
large Enterprise LDAP directories.
|
||||||
|
|
||||||
|
**LDAP using simple auth** adds the following fields:
|
||||||
|
|
||||||
|
- User DN **(required)**
|
||||||
|
- A template to use as the user's DN. The `%s` matching parameter will be
|
||||||
|
substituted with login name given on sign-in form.
|
||||||
|
- Example: `cn=%s,ou=Users,dc=mydomain,dc=com`
|
||||||
|
- Example: `uid=%s,ou=Users,dc=mydomain,dc=com`
|
||||||
|
|
||||||
|
- User Search Base (optional)
|
||||||
|
- The LDAP base at which user accounts will be searched for.
|
||||||
|
- Example: `ou=Users,dc=mydomain,dc=com`
|
||||||
|
|
||||||
|
- User Filter **(required)**
|
||||||
|
- An LDAP filter declaring when a user should be allowed to log in. The `%s`
|
||||||
|
matching parameter will be substituted with login name given on sign-in
|
||||||
|
form.
|
||||||
|
- Example: `(&(objectClass=posixAccount)(cn=%s))`
|
||||||
|
- Example: `(&(objectClass=posixAccount)(uid=%s))`
|
||||||
|
|
||||||
|
**Verify group membership in LDAP** uses the following fields:
|
||||||
|
|
||||||
|
* Group Search Base (optional)
|
||||||
|
* The LDAP DN used for groups.
|
||||||
|
* Example: `ou=group,dc=mydomain,dc=com`
|
||||||
|
|
||||||
|
* Group Name Filter (optional)
|
||||||
|
* An LDAP filter declaring how to find valid groups in the above DN.
|
||||||
|
* Example: `(|(cn=gitea_users)(cn=admins))`
|
||||||
|
|
||||||
|
* User Attribute in Group (optional)
|
||||||
|
* Which user LDAP attribute is listed in the group.
|
||||||
|
* Example: `uid`
|
||||||
|
|
||||||
|
* Group Attribute for User (optional)
|
||||||
|
* Which group LDAP attribute contains an array above user attribute names.
|
||||||
|
* Example: `memberUid`
|
||||||
|
|
||||||
|
## PAM (Pluggable Authentication Module)
|
||||||
|
|
||||||
|
To configure PAM, set the 'PAM Service Name' to a filename in `/etc/pam.d/`. To
|
||||||
|
work with normal Linux passwords, the user running Gitea must have read access
|
||||||
|
to `/etc/shadow`.
|
||||||
|
|
||||||
|
## SMTP (Simple Mail Transfer Protocol)
|
||||||
|
|
||||||
|
This option allows Gitea to log in to an SMTP host as a Gitea user. To
|
||||||
|
configure this, set the fields below:
|
||||||
|
|
||||||
|
- Authentication Name **(required)**
|
||||||
|
- A name to assign to the new method of authorization.
|
||||||
|
|
||||||
|
- SMTP Authentication Type **(required)**
|
||||||
|
- Type of authentication to use to connect to SMTP host, PLAIN or LOGIN.
|
||||||
|
|
||||||
|
- Host **(required)**
|
||||||
|
- The address where the SMTP host can be reached.
|
||||||
|
- Example: `smtp.mydomain.com`
|
||||||
|
|
||||||
|
- Port **(required)**
|
||||||
|
- The port to use when connecting to the server.
|
||||||
|
- Example: `587`
|
||||||
|
|
||||||
|
- Allowed Domains
|
||||||
|
- Restrict what domains can log in if using a public SMTP host or SMTP host
|
||||||
|
with multiple domains.
|
||||||
|
- Example: `gitea.io,mydomain.com,mydomain2.com`
|
||||||
|
|
||||||
|
- Enable TLS Encryption
|
||||||
|
- Enable TLS encryption on authentication.
|
||||||
|
|
||||||
|
- Skip TLS Verify
|
||||||
|
- Disable TLS verify on authentication.
|
||||||
|
|
||||||
|
- This authentication is activate
|
||||||
|
- Enable or disable this auth.
|
||||||
|
|
||||||
|
## FreeIPA
|
||||||
|
|
||||||
|
- In order to log in to Gitea using FreeIPA credentials, a bind account needs to
|
||||||
|
be created for Gitea:
|
||||||
|
|
||||||
|
- On the FreeIPA server, create a `gitea.ldif` file, replacing `dc=example,dc=com`
|
||||||
|
with your DN, and provide an appropriately secure password:
|
||||||
|
```
|
||||||
|
dn: uid=gitea,cn=sysaccounts,cn=etc,dc=example,dc=com
|
||||||
|
changetype: add
|
||||||
|
objectclass: account
|
||||||
|
objectclass: simplesecurityobject
|
||||||
|
uid: gitea
|
||||||
|
userPassword: secure password
|
||||||
|
passwordExpirationTime: 20380119031407Z
|
||||||
|
nsIdleTimeout: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
- Import the LDIF (change localhost to an IPA server if needed). A prompt for
|
||||||
|
Directory Manager password will be presented:
|
||||||
|
```
|
||||||
|
ldapmodify -h localhost -p 389 -x -D \
|
||||||
|
"cn=Directory Manager" -W -f gitea.ldif
|
||||||
|
```
|
||||||
|
- Add an IPA group for gitea\_users :
|
||||||
|
```
|
||||||
|
ipa group-add --desc="Gitea Users" gitea_users
|
||||||
|
```
|
||||||
|
- Note: For errors about IPA credentials, run `kinit admin` and provide the
|
||||||
|
domain admin account password.
|
||||||
|
|
||||||
|
- Log in to Gitea as an Administrator and click on "Authentication" under Admin Panel.
|
||||||
|
Then click `Add New Source` and fill in the details, changing all where appropriate.
|
||||||
18
docs/content/doc/features/authentication.zh-cn.md
Normal file
18
docs/content/doc/features/authentication.zh-cn.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
date: "2016-12-01T16:00:00+02:00"
|
||||||
|
title: "认证"
|
||||||
|
slug: "authentication"
|
||||||
|
weight: 10
|
||||||
|
toc: true
|
||||||
|
draft: false
|
||||||
|
menu:
|
||||||
|
sidebar:
|
||||||
|
parent: "features"
|
||||||
|
name: "认证"
|
||||||
|
weight: 10
|
||||||
|
identifier: "authentication"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 认证
|
||||||
|
|
||||||
|
## TBD
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user