##// END OF EJS Templates
release: merge back stable branch into default
marcink -
r4469:9d632087 merge default
parent child Browse files
Show More
@@ -0,0 +1,42 b''
1 |RCE| 4.20.1 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2020-07-27
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14
15 General
16 ^^^^^^^
17
18 - Permissions: rename write+ to write or higher for more explicit meaning.
19
20
21 Security
22 ^^^^^^^^
23
24
25
26 Performance
27 ^^^^^^^^^^^
28
29
30
31 Fixes
32 ^^^^^
33
34 - Files: fixed creation of new files for empty repos.
35 - Notifications: properly inject the custom email headers into templates.
36 - Store file integration: fixed support for nested subdirs.
37
38
39 Upgrade notes
40 ^^^^^^^^^^^^^
41
42 - Un-scheduled release addressing problems in 4.20.X releases.
@@ -1,68 +1,70 b''
1 1bd3e92b7e2e2d2024152b34bb88dff1db544a71 v4.0.0
1 1bd3e92b7e2e2d2024152b34bb88dff1db544a71 v4.0.0
2 170c5398320ea6cddd50955e88d408794c21d43a v4.0.1
2 170c5398320ea6cddd50955e88d408794c21d43a v4.0.1
3 c3fe200198f5aa34cf2e4066df2881a9cefe3704 v4.1.0
3 c3fe200198f5aa34cf2e4066df2881a9cefe3704 v4.1.0
4 7fd5c850745e2ea821fb4406af5f4bff9b0a7526 v4.1.1
4 7fd5c850745e2ea821fb4406af5f4bff9b0a7526 v4.1.1
5 41c87da28a179953df86061d817bc35533c66dd2 v4.1.2
5 41c87da28a179953df86061d817bc35533c66dd2 v4.1.2
6 baaf9f5bcea3bae0ef12ae20c8b270482e62abb6 v4.2.0
6 baaf9f5bcea3bae0ef12ae20c8b270482e62abb6 v4.2.0
7 32a70c7e56844a825f61df496ee5eaf8c3c4e189 v4.2.1
7 32a70c7e56844a825f61df496ee5eaf8c3c4e189 v4.2.1
8 fa695cdb411d294679ac081d595ac654e5613b03 v4.3.0
8 fa695cdb411d294679ac081d595ac654e5613b03 v4.3.0
9 0e4dc11b58cad833c513fe17bac39e6850edf959 v4.3.1
9 0e4dc11b58cad833c513fe17bac39e6850edf959 v4.3.1
10 8a876f48f5cb1d018b837db28ff928500cb32cfb v4.4.0
10 8a876f48f5cb1d018b837db28ff928500cb32cfb v4.4.0
11 8dd86b410b1aac086ffdfc524ef300f896af5047 v4.4.1
11 8dd86b410b1aac086ffdfc524ef300f896af5047 v4.4.1
12 d2514226abc8d3b4f6fb57765f47d1b6fb360a05 v4.4.2
12 d2514226abc8d3b4f6fb57765f47d1b6fb360a05 v4.4.2
13 27d783325930af6dad2741476c0d0b1b7c8415c2 v4.5.0
13 27d783325930af6dad2741476c0d0b1b7c8415c2 v4.5.0
14 7f2016f352abcbdba4a19d4039c386e9629449da v4.5.1
14 7f2016f352abcbdba4a19d4039c386e9629449da v4.5.1
15 416fec799314c70a5c780fb28b3357b08869333a v4.5.2
15 416fec799314c70a5c780fb28b3357b08869333a v4.5.2
16 27c3b85fafc83143e6678fbc3da69e1615bcac55 v4.6.0
16 27c3b85fafc83143e6678fbc3da69e1615bcac55 v4.6.0
17 5ad13deb9118c2a5243d4032d4d9cc174e5872db v4.6.1
17 5ad13deb9118c2a5243d4032d4d9cc174e5872db v4.6.1
18 2be921e01fa24bb102696ada596f87464c3666f6 v4.7.0
18 2be921e01fa24bb102696ada596f87464c3666f6 v4.7.0
19 7198bdec29c2872c974431d55200d0398354cdb1 v4.7.1
19 7198bdec29c2872c974431d55200d0398354cdb1 v4.7.1
20 bd1c8d230fe741c2dfd7100a0ef39fd0774fd581 v4.7.2
20 bd1c8d230fe741c2dfd7100a0ef39fd0774fd581 v4.7.2
21 9731914f89765d9628dc4dddc84bc9402aa124c8 v4.8.0
21 9731914f89765d9628dc4dddc84bc9402aa124c8 v4.8.0
22 c5a2b7d0e4bbdebc4a62d7b624befe375207b659 v4.9.0
22 c5a2b7d0e4bbdebc4a62d7b624befe375207b659 v4.9.0
23 d9aa3b27ac9f7e78359775c75fedf7bfece232f1 v4.9.1
23 d9aa3b27ac9f7e78359775c75fedf7bfece232f1 v4.9.1
24 4ba4d74981cec5d6b28b158f875a2540952c2f74 v4.10.0
24 4ba4d74981cec5d6b28b158f875a2540952c2f74 v4.10.0
25 0a6821cbd6b0b3c21503002f88800679fa35ab63 v4.10.1
25 0a6821cbd6b0b3c21503002f88800679fa35ab63 v4.10.1
26 434ad90ec8d621f4416074b84f6e9ce03964defb v4.10.2
26 434ad90ec8d621f4416074b84f6e9ce03964defb v4.10.2
27 68baee10e698da2724c6e0f698c03a6abb993bf2 v4.10.3
27 68baee10e698da2724c6e0f698c03a6abb993bf2 v4.10.3
28 00821d3afd1dce3f4767cc353f84a17f7d5218a1 v4.10.4
28 00821d3afd1dce3f4767cc353f84a17f7d5218a1 v4.10.4
29 22f6744ad8cc274311825f63f953e4dee2ea5cb9 v4.10.5
29 22f6744ad8cc274311825f63f953e4dee2ea5cb9 v4.10.5
30 96eb24bea2f5f9258775245e3f09f6fa0a4dda01 v4.10.6
30 96eb24bea2f5f9258775245e3f09f6fa0a4dda01 v4.10.6
31 3121217a812c956d7dd5a5875821bd73e8002a32 v4.11.0
31 3121217a812c956d7dd5a5875821bd73e8002a32 v4.11.0
32 fa98b454715ac5b912f39e84af54345909a2a805 v4.11.1
32 fa98b454715ac5b912f39e84af54345909a2a805 v4.11.1
33 3982abcfdcc229a723cebe52d3a9bcff10bba08e v4.11.2
33 3982abcfdcc229a723cebe52d3a9bcff10bba08e v4.11.2
34 33195f145db9172f0a8f1487e09207178a6ab065 v4.11.3
34 33195f145db9172f0a8f1487e09207178a6ab065 v4.11.3
35 194c74f33e32bbae6fc4d71ec5a999cff3c13605 v4.11.4
35 194c74f33e32bbae6fc4d71ec5a999cff3c13605 v4.11.4
36 8fbd8b0c3ddc2fa4ac9e4ca16942a03eb593df2d v4.11.5
36 8fbd8b0c3ddc2fa4ac9e4ca16942a03eb593df2d v4.11.5
37 f0609aa5d5d05a1ca2f97c3995542236131c9d8a v4.11.6
37 f0609aa5d5d05a1ca2f97c3995542236131c9d8a v4.11.6
38 b5b30547d90d2e088472a70c84878f429ffbf40d v4.12.0
38 b5b30547d90d2e088472a70c84878f429ffbf40d v4.12.0
39 9072253aa8894d20c00b4a43dc61c2168c1eff94 v4.12.1
39 9072253aa8894d20c00b4a43dc61c2168c1eff94 v4.12.1
40 6a517543ea9ef9987d74371bd2a315eb0b232dc9 v4.12.2
40 6a517543ea9ef9987d74371bd2a315eb0b232dc9 v4.12.2
41 7fc0731b024c3114be87865eda7ab621cc957e32 v4.12.3
41 7fc0731b024c3114be87865eda7ab621cc957e32 v4.12.3
42 6d531c0b068c6eda62dddceedc9f845ecb6feb6f v4.12.4
42 6d531c0b068c6eda62dddceedc9f845ecb6feb6f v4.12.4
43 3d6bf2d81b1564830eb5e83396110d2a9a93eb1e v4.13.0
43 3d6bf2d81b1564830eb5e83396110d2a9a93eb1e v4.13.0
44 5468fc89e708bd90e413cd0d54350017abbdbc0e v4.13.1
44 5468fc89e708bd90e413cd0d54350017abbdbc0e v4.13.1
45 610d621550521c314ee97b3d43473ac0bcf06fb8 v4.13.2
45 610d621550521c314ee97b3d43473ac0bcf06fb8 v4.13.2
46 7dc62c090881fb5d03268141e71e0940d7c3295d v4.13.3
46 7dc62c090881fb5d03268141e71e0940d7c3295d v4.13.3
47 9151328c1c46b72ba6f00d7640d9141e75aa1ca2 v4.14.0
47 9151328c1c46b72ba6f00d7640d9141e75aa1ca2 v4.14.0
48 a47eeac5dfa41fa6779d90452affba4091c3ade8 v4.14.1
48 a47eeac5dfa41fa6779d90452affba4091c3ade8 v4.14.1
49 4b34ce0d2c3c10510626b3b65044939bb7a2cddf v4.15.0
49 4b34ce0d2c3c10510626b3b65044939bb7a2cddf v4.15.0
50 14502561d22e6b70613674cd675ae9a604b7989f v4.15.1
50 14502561d22e6b70613674cd675ae9a604b7989f v4.15.1
51 4aaa40b605b01af78a9f6882eca561c54b525ef0 v4.15.2
51 4aaa40b605b01af78a9f6882eca561c54b525ef0 v4.15.2
52 797744642eca86640ed20bef2cd77445780abaec v4.16.0
52 797744642eca86640ed20bef2cd77445780abaec v4.16.0
53 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1
53 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1
54 5d8057df561c4b6b81b6401aed7d2f911e6e77f7 v4.16.2
54 5d8057df561c4b6b81b6401aed7d2f911e6e77f7 v4.16.2
55 13acfc008896ef4c62546bab5074e8f6f89b4fa7 v4.17.0
55 13acfc008896ef4c62546bab5074e8f6f89b4fa7 v4.17.0
56 45b9b610976f483877142fe75321808ce9ebac59 v4.17.1
56 45b9b610976f483877142fe75321808ce9ebac59 v4.17.1
57 ad5bd0c4bd322fdbd04bb825a3d027e08f7a3901 v4.17.2
57 ad5bd0c4bd322fdbd04bb825a3d027e08f7a3901 v4.17.2
58 037f5794b55a6236d68f6485a485372dde6566e0 v4.17.3
58 037f5794b55a6236d68f6485a485372dde6566e0 v4.17.3
59 83bc3100cfd6094c1d04f475ddb299b7dc3d0b33 v4.17.4
59 83bc3100cfd6094c1d04f475ddb299b7dc3d0b33 v4.17.4
60 e3de8c95baf8cc9109ca56aee8193a2cb6a54c8a v4.17.4
60 e3de8c95baf8cc9109ca56aee8193a2cb6a54c8a v4.17.4
61 f37a3126570477543507f0bc9d245ce75546181a v4.18.0
61 f37a3126570477543507f0bc9d245ce75546181a v4.18.0
62 71d8791463e87b64c1a18475de330ee600d37561 v4.18.1
62 71d8791463e87b64c1a18475de330ee600d37561 v4.18.1
63 4bd6b75dac1d25c64885d4d49385e5533f21c525 v4.18.2
63 4bd6b75dac1d25c64885d4d49385e5533f21c525 v4.18.2
64 12ed92fe57f2e9fc7b71dc0b65e26c2da5c7085f v4.18.3
64 12ed92fe57f2e9fc7b71dc0b65e26c2da5c7085f v4.18.3
65 ddef396a6567117de531d67d44c739cbbfc3eebb v4.19.0
65 ddef396a6567117de531d67d44c739cbbfc3eebb v4.19.0
66 c0c65acd73914bf4368222d510afe1161ab8c07c v4.19.1
66 c0c65acd73914bf4368222d510afe1161ab8c07c v4.19.1
67 7ac623a4a2405917e2af660d645ded662011e40d v4.19.2
67 7ac623a4a2405917e2af660d645ded662011e40d v4.19.2
68 ef7ffda65eeb90c3ba88590a6cb816ef9b0bc232 v4.19.3
68 ef7ffda65eeb90c3ba88590a6cb816ef9b0bc232 v4.19.3
69 3e635489bb7961df93b01e42454ad1a8730ae968 v4.20.0
70 7e2eb896a02ca7cd2cd9f0f853ef3dac3f0039e3 v4.20.1
@@ -1,145 +1,146 b''
1 .. _rhodecode-release-notes-ref:
1 .. _rhodecode-release-notes-ref:
2
2
3 Release Notes
3 Release Notes
4 =============
4 =============
5
5
6 |RCE| 4.x Versions
6 |RCE| 4.x Versions
7 ------------------
7 ------------------
8
8
9 .. toctree::
9 .. toctree::
10 :maxdepth: 1
10 :maxdepth: 1
11
11
12 release-notes-4.20.1.rst
12 release-notes-4.20.0.rst
13 release-notes-4.20.0.rst
13 release-notes-4.19.3.rst
14 release-notes-4.19.3.rst
14 release-notes-4.19.2.rst
15 release-notes-4.19.2.rst
15 release-notes-4.19.1.rst
16 release-notes-4.19.1.rst
16 release-notes-4.19.0.rst
17 release-notes-4.19.0.rst
17 release-notes-4.18.3.rst
18 release-notes-4.18.3.rst
18 release-notes-4.18.2.rst
19 release-notes-4.18.2.rst
19 release-notes-4.18.1.rst
20 release-notes-4.18.1.rst
20 release-notes-4.18.0.rst
21 release-notes-4.18.0.rst
21 release-notes-4.17.4.rst
22 release-notes-4.17.4.rst
22 release-notes-4.17.3.rst
23 release-notes-4.17.3.rst
23 release-notes-4.17.2.rst
24 release-notes-4.17.2.rst
24 release-notes-4.17.1.rst
25 release-notes-4.17.1.rst
25 release-notes-4.17.0.rst
26 release-notes-4.17.0.rst
26 release-notes-4.16.2.rst
27 release-notes-4.16.2.rst
27 release-notes-4.16.1.rst
28 release-notes-4.16.1.rst
28 release-notes-4.16.0.rst
29 release-notes-4.16.0.rst
29 release-notes-4.15.2.rst
30 release-notes-4.15.2.rst
30 release-notes-4.15.1.rst
31 release-notes-4.15.1.rst
31 release-notes-4.15.0.rst
32 release-notes-4.15.0.rst
32 release-notes-4.14.1.rst
33 release-notes-4.14.1.rst
33 release-notes-4.14.0.rst
34 release-notes-4.14.0.rst
34 release-notes-4.13.3.rst
35 release-notes-4.13.3.rst
35 release-notes-4.13.2.rst
36 release-notes-4.13.2.rst
36 release-notes-4.13.1.rst
37 release-notes-4.13.1.rst
37 release-notes-4.13.0.rst
38 release-notes-4.13.0.rst
38 release-notes-4.12.4.rst
39 release-notes-4.12.4.rst
39 release-notes-4.12.3.rst
40 release-notes-4.12.3.rst
40 release-notes-4.12.2.rst
41 release-notes-4.12.2.rst
41 release-notes-4.12.1.rst
42 release-notes-4.12.1.rst
42 release-notes-4.12.0.rst
43 release-notes-4.12.0.rst
43 release-notes-4.11.6.rst
44 release-notes-4.11.6.rst
44 release-notes-4.11.5.rst
45 release-notes-4.11.5.rst
45 release-notes-4.11.4.rst
46 release-notes-4.11.4.rst
46 release-notes-4.11.3.rst
47 release-notes-4.11.3.rst
47 release-notes-4.11.2.rst
48 release-notes-4.11.2.rst
48 release-notes-4.11.1.rst
49 release-notes-4.11.1.rst
49 release-notes-4.11.0.rst
50 release-notes-4.11.0.rst
50 release-notes-4.10.6.rst
51 release-notes-4.10.6.rst
51 release-notes-4.10.5.rst
52 release-notes-4.10.5.rst
52 release-notes-4.10.4.rst
53 release-notes-4.10.4.rst
53 release-notes-4.10.3.rst
54 release-notes-4.10.3.rst
54 release-notes-4.10.2.rst
55 release-notes-4.10.2.rst
55 release-notes-4.10.1.rst
56 release-notes-4.10.1.rst
56 release-notes-4.10.0.rst
57 release-notes-4.10.0.rst
57 release-notes-4.9.1.rst
58 release-notes-4.9.1.rst
58 release-notes-4.9.0.rst
59 release-notes-4.9.0.rst
59 release-notes-4.8.0.rst
60 release-notes-4.8.0.rst
60 release-notes-4.7.2.rst
61 release-notes-4.7.2.rst
61 release-notes-4.7.1.rst
62 release-notes-4.7.1.rst
62 release-notes-4.7.0.rst
63 release-notes-4.7.0.rst
63 release-notes-4.6.1.rst
64 release-notes-4.6.1.rst
64 release-notes-4.6.0.rst
65 release-notes-4.6.0.rst
65 release-notes-4.5.2.rst
66 release-notes-4.5.2.rst
66 release-notes-4.5.1.rst
67 release-notes-4.5.1.rst
67 release-notes-4.5.0.rst
68 release-notes-4.5.0.rst
68 release-notes-4.4.2.rst
69 release-notes-4.4.2.rst
69 release-notes-4.4.1.rst
70 release-notes-4.4.1.rst
70 release-notes-4.4.0.rst
71 release-notes-4.4.0.rst
71 release-notes-4.3.1.rst
72 release-notes-4.3.1.rst
72 release-notes-4.3.0.rst
73 release-notes-4.3.0.rst
73 release-notes-4.2.1.rst
74 release-notes-4.2.1.rst
74 release-notes-4.2.0.rst
75 release-notes-4.2.0.rst
75 release-notes-4.1.2.rst
76 release-notes-4.1.2.rst
76 release-notes-4.1.1.rst
77 release-notes-4.1.1.rst
77 release-notes-4.1.0.rst
78 release-notes-4.1.0.rst
78 release-notes-4.0.1.rst
79 release-notes-4.0.1.rst
79 release-notes-4.0.0.rst
80 release-notes-4.0.0.rst
80
81
81 |RCE| 3.x Versions
82 |RCE| 3.x Versions
82 ------------------
83 ------------------
83
84
84 .. toctree::
85 .. toctree::
85 :maxdepth: 1
86 :maxdepth: 1
86
87
87 release-notes-3.8.4.rst
88 release-notes-3.8.4.rst
88 release-notes-3.8.3.rst
89 release-notes-3.8.3.rst
89 release-notes-3.8.2.rst
90 release-notes-3.8.2.rst
90 release-notes-3.8.1.rst
91 release-notes-3.8.1.rst
91 release-notes-3.8.0.rst
92 release-notes-3.8.0.rst
92 release-notes-3.7.1.rst
93 release-notes-3.7.1.rst
93 release-notes-3.7.0.rst
94 release-notes-3.7.0.rst
94 release-notes-3.6.1.rst
95 release-notes-3.6.1.rst
95 release-notes-3.6.0.rst
96 release-notes-3.6.0.rst
96 release-notes-3.5.2.rst
97 release-notes-3.5.2.rst
97 release-notes-3.5.1.rst
98 release-notes-3.5.1.rst
98 release-notes-3.5.0.rst
99 release-notes-3.5.0.rst
99 release-notes-3.4.1.rst
100 release-notes-3.4.1.rst
100 release-notes-3.4.0.rst
101 release-notes-3.4.0.rst
101 release-notes-3.3.4.rst
102 release-notes-3.3.4.rst
102 release-notes-3.3.3.rst
103 release-notes-3.3.3.rst
103 release-notes-3.3.2.rst
104 release-notes-3.3.2.rst
104 release-notes-3.3.1.rst
105 release-notes-3.3.1.rst
105 release-notes-3.3.0.rst
106 release-notes-3.3.0.rst
106 release-notes-3.2.3.rst
107 release-notes-3.2.3.rst
107 release-notes-3.2.2.rst
108 release-notes-3.2.2.rst
108 release-notes-3.2.1.rst
109 release-notes-3.2.1.rst
109 release-notes-3.2.0.rst
110 release-notes-3.2.0.rst
110 release-notes-3.1.1.rst
111 release-notes-3.1.1.rst
111 release-notes-3.1.0.rst
112 release-notes-3.1.0.rst
112 release-notes-3.0.2.rst
113 release-notes-3.0.2.rst
113 release-notes-3.0.1.rst
114 release-notes-3.0.1.rst
114 release-notes-3.0.0.rst
115 release-notes-3.0.0.rst
115
116
116 |RCE| 2.x Versions
117 |RCE| 2.x Versions
117 ------------------
118 ------------------
118
119
119 .. toctree::
120 .. toctree::
120 :maxdepth: 1
121 :maxdepth: 1
121
122
122 release-notes-2.2.8.rst
123 release-notes-2.2.8.rst
123 release-notes-2.2.7.rst
124 release-notes-2.2.7.rst
124 release-notes-2.2.6.rst
125 release-notes-2.2.6.rst
125 release-notes-2.2.5.rst
126 release-notes-2.2.5.rst
126 release-notes-2.2.4.rst
127 release-notes-2.2.4.rst
127 release-notes-2.2.3.rst
128 release-notes-2.2.3.rst
128 release-notes-2.2.2.rst
129 release-notes-2.2.2.rst
129 release-notes-2.2.1.rst
130 release-notes-2.2.1.rst
130 release-notes-2.2.0.rst
131 release-notes-2.2.0.rst
131 release-notes-2.1.0.rst
132 release-notes-2.1.0.rst
132 release-notes-2.0.2.rst
133 release-notes-2.0.2.rst
133 release-notes-2.0.1.rst
134 release-notes-2.0.1.rst
134 release-notes-2.0.0.rst
135 release-notes-2.0.0.rst
135
136
136 |RCE| 1.x Versions
137 |RCE| 1.x Versions
137 ------------------
138 ------------------
138
139
139 .. toctree::
140 .. toctree::
140 :maxdepth: 1
141 :maxdepth: 1
141
142
142 release-notes-1.7.2.rst
143 release-notes-1.7.2.rst
143 release-notes-1.7.1.rst
144 release-notes-1.7.1.rst
144 release-notes-1.7.0.rst
145 release-notes-1.7.0.rst
145 release-notes-1.6.0.rst
146 release-notes-1.6.0.rst
@@ -1,1618 +1,1631 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2020 RhodeCode GmbH
3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import itertools
21 import itertools
22 import logging
22 import logging
23 import os
23 import os
24 import shutil
24 import shutil
25 import tempfile
25 import tempfile
26 import collections
26 import collections
27 import urllib
27 import urllib
28 import pathlib2
28 import pathlib2
29
29
30 from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
30 from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
31 from pyramid.view import view_config
31 from pyramid.view import view_config
32 from pyramid.renderers import render
32 from pyramid.renderers import render
33 from pyramid.response import Response
33 from pyramid.response import Response
34
34
35 import rhodecode
35 import rhodecode
36 from rhodecode.apps._base import RepoAppView
36 from rhodecode.apps._base import RepoAppView
37
37
38
38
39 from rhodecode.lib import diffs, helpers as h, rc_cache
39 from rhodecode.lib import diffs, helpers as h, rc_cache
40 from rhodecode.lib import audit_logger
40 from rhodecode.lib import audit_logger
41 from rhodecode.lib.view_utils import parse_path_ref
41 from rhodecode.lib.view_utils import parse_path_ref
42 from rhodecode.lib.exceptions import NonRelativePathError
42 from rhodecode.lib.exceptions import NonRelativePathError
43 from rhodecode.lib.codeblocks import (
43 from rhodecode.lib.codeblocks import (
44 filenode_as_lines_tokens, filenode_as_annotated_lines_tokens)
44 filenode_as_lines_tokens, filenode_as_annotated_lines_tokens)
45 from rhodecode.lib.utils2 import (
45 from rhodecode.lib.utils2 import (
46 convert_line_endings, detect_mode, safe_str, str2bool, safe_int, sha1, safe_unicode)
46 convert_line_endings, detect_mode, safe_str, str2bool, safe_int, sha1, safe_unicode)
47 from rhodecode.lib.auth import (
47 from rhodecode.lib.auth import (
48 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
48 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
49 from rhodecode.lib.vcs import path as vcspath
49 from rhodecode.lib.vcs import path as vcspath
50 from rhodecode.lib.vcs.backends.base import EmptyCommit
50 from rhodecode.lib.vcs.backends.base import EmptyCommit
51 from rhodecode.lib.vcs.conf import settings
51 from rhodecode.lib.vcs.conf import settings
52 from rhodecode.lib.vcs.nodes import FileNode
52 from rhodecode.lib.vcs.nodes import FileNode
53 from rhodecode.lib.vcs.exceptions import (
53 from rhodecode.lib.vcs.exceptions import (
54 RepositoryError, CommitDoesNotExistError, EmptyRepositoryError,
54 RepositoryError, CommitDoesNotExistError, EmptyRepositoryError,
55 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,
55 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,
56 NodeDoesNotExistError, CommitError, NodeError)
56 NodeDoesNotExistError, CommitError, NodeError)
57
57
58 from rhodecode.model.scm import ScmModel
58 from rhodecode.model.scm import ScmModel
59 from rhodecode.model.db import Repository
59 from rhodecode.model.db import Repository
60
60
61 log = logging.getLogger(__name__)
61 log = logging.getLogger(__name__)
62
62
63
63
64 class RepoFilesView(RepoAppView):
64 class RepoFilesView(RepoAppView):
65
65
66 @staticmethod
66 @staticmethod
67 def adjust_file_path_for_svn(f_path, repo):
67 def adjust_file_path_for_svn(f_path, repo):
68 """
68 """
69 Computes the relative path of `f_path`.
69 Computes the relative path of `f_path`.
70
70
71 This is mainly based on prefix matching of the recognized tags and
71 This is mainly based on prefix matching of the recognized tags and
72 branches in the underlying repository.
72 branches in the underlying repository.
73 """
73 """
74 tags_and_branches = itertools.chain(
74 tags_and_branches = itertools.chain(
75 repo.branches.iterkeys(),
75 repo.branches.iterkeys(),
76 repo.tags.iterkeys())
76 repo.tags.iterkeys())
77 tags_and_branches = sorted(tags_and_branches, key=len, reverse=True)
77 tags_and_branches = sorted(tags_and_branches, key=len, reverse=True)
78
78
79 for name in tags_and_branches:
79 for name in tags_and_branches:
80 if f_path.startswith('{}/'.format(name)):
80 if f_path.startswith('{}/'.format(name)):
81 f_path = vcspath.relpath(f_path, name)
81 f_path = vcspath.relpath(f_path, name)
82 break
82 break
83 return f_path
83 return f_path
84
84
85 def load_default_context(self):
85 def load_default_context(self):
86 c = self._get_local_tmpl_context(include_app_defaults=True)
86 c = self._get_local_tmpl_context(include_app_defaults=True)
87 c.rhodecode_repo = self.rhodecode_vcs_repo
87 c.rhodecode_repo = self.rhodecode_vcs_repo
88 c.enable_downloads = self.db_repo.enable_downloads
88 c.enable_downloads = self.db_repo.enable_downloads
89 return c
89 return c
90
90
91 def _ensure_not_locked(self, commit_id='tip'):
91 def _ensure_not_locked(self, commit_id='tip'):
92 _ = self.request.translate
92 _ = self.request.translate
93
93
94 repo = self.db_repo
94 repo = self.db_repo
95 if repo.enable_locking and repo.locked[0]:
95 if repo.enable_locking and repo.locked[0]:
96 h.flash(_('This repository has been locked by %s on %s')
96 h.flash(_('This repository has been locked by %s on %s')
97 % (h.person_by_id(repo.locked[0]),
97 % (h.person_by_id(repo.locked[0]),
98 h.format_date(h.time_to_datetime(repo.locked[1]))),
98 h.format_date(h.time_to_datetime(repo.locked[1]))),
99 'warning')
99 'warning')
100 files_url = h.route_path(
100 files_url = h.route_path(
101 'repo_files:default_path',
101 'repo_files:default_path',
102 repo_name=self.db_repo_name, commit_id=commit_id)
102 repo_name=self.db_repo_name, commit_id=commit_id)
103 raise HTTPFound(files_url)
103 raise HTTPFound(files_url)
104
104
105 def forbid_non_head(self, is_head, f_path, commit_id='tip', json_mode=False):
105 def forbid_non_head(self, is_head, f_path, commit_id='tip', json_mode=False):
106 _ = self.request.translate
106 _ = self.request.translate
107
107
108 if not is_head:
108 if not is_head:
109 message = _('Cannot modify file. '
109 message = _('Cannot modify file. '
110 'Given commit `{}` is not head of a branch.').format(commit_id)
110 'Given commit `{}` is not head of a branch.').format(commit_id)
111 h.flash(message, category='warning')
111 h.flash(message, category='warning')
112
112
113 if json_mode:
113 if json_mode:
114 return message
114 return message
115
115
116 files_url = h.route_path(
116 files_url = h.route_path(
117 'repo_files', repo_name=self.db_repo_name, commit_id=commit_id,
117 'repo_files', repo_name=self.db_repo_name, commit_id=commit_id,
118 f_path=f_path)
118 f_path=f_path)
119 raise HTTPFound(files_url)
119 raise HTTPFound(files_url)
120
120
121 def check_branch_permission(self, branch_name, commit_id='tip', json_mode=False):
121 def check_branch_permission(self, branch_name, commit_id='tip', json_mode=False):
122 _ = self.request.translate
122 _ = self.request.translate
123
123
124 rule, branch_perm = self._rhodecode_user.get_rule_and_branch_permission(
124 rule, branch_perm = self._rhodecode_user.get_rule_and_branch_permission(
125 self.db_repo_name, branch_name)
125 self.db_repo_name, branch_name)
126 if branch_perm and branch_perm not in ['branch.push', 'branch.push_force']:
126 if branch_perm and branch_perm not in ['branch.push', 'branch.push_force']:
127 message = _('Branch `{}` changes forbidden by rule {}.').format(
127 message = _('Branch `{}` changes forbidden by rule {}.').format(
128 h.escape(branch_name), h.escape(rule))
128 h.escape(branch_name), h.escape(rule))
129 h.flash(message, 'warning')
129 h.flash(message, 'warning')
130
130
131 if json_mode:
131 if json_mode:
132 return message
132 return message
133
133
134 files_url = h.route_path(
134 files_url = h.route_path(
135 'repo_files:default_path', repo_name=self.db_repo_name, commit_id=commit_id)
135 'repo_files:default_path', repo_name=self.db_repo_name, commit_id=commit_id)
136
136
137 raise HTTPFound(files_url)
137 raise HTTPFound(files_url)
138
138
139 def _get_commit_and_path(self):
139 def _get_commit_and_path(self):
140 default_commit_id = self.db_repo.landing_ref_name
140 default_commit_id = self.db_repo.landing_ref_name
141 default_f_path = '/'
141 default_f_path = '/'
142
142
143 commit_id = self.request.matchdict.get(
143 commit_id = self.request.matchdict.get(
144 'commit_id', default_commit_id)
144 'commit_id', default_commit_id)
145 f_path = self._get_f_path(self.request.matchdict, default_f_path)
145 f_path = self._get_f_path(self.request.matchdict, default_f_path)
146 return commit_id, f_path
146 return commit_id, f_path
147
147
148 def _get_default_encoding(self, c):
148 def _get_default_encoding(self, c):
149 enc_list = getattr(c, 'default_encodings', [])
149 enc_list = getattr(c, 'default_encodings', [])
150 return enc_list[0] if enc_list else 'UTF-8'
150 return enc_list[0] if enc_list else 'UTF-8'
151
151
152 def _get_commit_or_redirect(self, commit_id, redirect_after=True):
152 def _get_commit_or_redirect(self, commit_id, redirect_after=True):
153 """
153 """
154 This is a safe way to get commit. If an error occurs it redirects to
154 This is a safe way to get commit. If an error occurs it redirects to
155 tip with proper message
155 tip with proper message
156
156
157 :param commit_id: id of commit to fetch
157 :param commit_id: id of commit to fetch
158 :param redirect_after: toggle redirection
158 :param redirect_after: toggle redirection
159 """
159 """
160 _ = self.request.translate
160 _ = self.request.translate
161
161
162 try:
162 try:
163 return self.rhodecode_vcs_repo.get_commit(commit_id)
163 return self.rhodecode_vcs_repo.get_commit(commit_id)
164 except EmptyRepositoryError:
164 except EmptyRepositoryError:
165 if not redirect_after:
165 if not redirect_after:
166 return None
166 return None
167
167
168 _url = h.route_path(
168 _url = h.route_path(
169 'repo_files_add_file',
169 'repo_files_add_file',
170 repo_name=self.db_repo_name, commit_id=0, f_path='')
170 repo_name=self.db_repo_name, commit_id=0, f_path='')
171
171
172 if h.HasRepoPermissionAny(
172 if h.HasRepoPermissionAny(
173 'repository.write', 'repository.admin')(self.db_repo_name):
173 'repository.write', 'repository.admin')(self.db_repo_name):
174 add_new = h.link_to(
174 add_new = h.link_to(
175 _('Click here to add a new file.'), _url, class_="alert-link")
175 _('Click here to add a new file.'), _url, class_="alert-link")
176 else:
176 else:
177 add_new = ""
177 add_new = ""
178
178
179 h.flash(h.literal(
179 h.flash(h.literal(
180 _('There are no files yet. %s') % add_new), category='warning')
180 _('There are no files yet. %s') % add_new), category='warning')
181 raise HTTPFound(
181 raise HTTPFound(
182 h.route_path('repo_summary', repo_name=self.db_repo_name))
182 h.route_path('repo_summary', repo_name=self.db_repo_name))
183
183
184 except (CommitDoesNotExistError, LookupError) as e:
184 except (CommitDoesNotExistError, LookupError) as e:
185 msg = _('No such commit exists for this repository. Commit: {}').format(commit_id)
185 msg = _('No such commit exists for this repository. Commit: {}').format(commit_id)
186 h.flash(msg, category='error')
186 h.flash(msg, category='error')
187 raise HTTPNotFound()
187 raise HTTPNotFound()
188 except RepositoryError as e:
188 except RepositoryError as e:
189 h.flash(safe_str(h.escape(e)), category='error')
189 h.flash(safe_str(h.escape(e)), category='error')
190 raise HTTPNotFound()
190 raise HTTPNotFound()
191
191
192 def _get_filenode_or_redirect(self, commit_obj, path):
192 def _get_filenode_or_redirect(self, commit_obj, path):
193 """
193 """
194 Returns file_node, if error occurs or given path is directory,
194 Returns file_node, if error occurs or given path is directory,
195 it'll redirect to top level path
195 it'll redirect to top level path
196 """
196 """
197 _ = self.request.translate
197 _ = self.request.translate
198
198
199 try:
199 try:
200 file_node = commit_obj.get_node(path)
200 file_node = commit_obj.get_node(path)
201 if file_node.is_dir():
201 if file_node.is_dir():
202 raise RepositoryError('The given path is a directory')
202 raise RepositoryError('The given path is a directory')
203 except CommitDoesNotExistError:
203 except CommitDoesNotExistError:
204 log.exception('No such commit exists for this repository')
204 log.exception('No such commit exists for this repository')
205 h.flash(_('No such commit exists for this repository'), category='error')
205 h.flash(_('No such commit exists for this repository'), category='error')
206 raise HTTPNotFound()
206 raise HTTPNotFound()
207 except RepositoryError as e:
207 except RepositoryError as e:
208 log.warning('Repository error while fetching filenode `%s`. Err:%s', path, e)
208 log.warning('Repository error while fetching filenode `%s`. Err:%s', path, e)
209 h.flash(safe_str(h.escape(e)), category='error')
209 h.flash(safe_str(h.escape(e)), category='error')
210 raise HTTPNotFound()
210 raise HTTPNotFound()
211
211
212 return file_node
212 return file_node
213
213
214 def _is_valid_head(self, commit_id, repo):
214 def _is_valid_head(self, commit_id, repo, landing_ref):
215 branch_name = sha_commit_id = ''
215 branch_name = sha_commit_id = ''
216 is_head = False
216 is_head = False
217 log.debug('Checking if commit_id `%s` is a head for %s.', commit_id, repo)
217 log.debug('Checking if commit_id `%s` is a head for %s.', commit_id, repo)
218
218
219 for _branch_name, branch_commit_id in repo.branches.items():
219 for _branch_name, branch_commit_id in repo.branches.items():
220 # simple case we pass in branch name, it's a HEAD
220 # simple case we pass in branch name, it's a HEAD
221 if commit_id == _branch_name:
221 if commit_id == _branch_name:
222 is_head = True
222 is_head = True
223 branch_name = _branch_name
223 branch_name = _branch_name
224 sha_commit_id = branch_commit_id
224 sha_commit_id = branch_commit_id
225 break
225 break
226 # case when we pass in full sha commit_id, which is a head
226 # case when we pass in full sha commit_id, which is a head
227 elif commit_id == branch_commit_id:
227 elif commit_id == branch_commit_id:
228 is_head = True
228 is_head = True
229 branch_name = _branch_name
229 branch_name = _branch_name
230 sha_commit_id = branch_commit_id
230 sha_commit_id = branch_commit_id
231 break
231 break
232
232
233 if h.is_svn(repo) and not repo.is_empty():
233 if h.is_svn(repo) and not repo.is_empty():
234 # Note: Subversion only has one head.
234 # Note: Subversion only has one head.
235 if commit_id == repo.get_commit(commit_idx=-1).raw_id:
235 if commit_id == repo.get_commit(commit_idx=-1).raw_id:
236 is_head = True
236 is_head = True
237 return branch_name, sha_commit_id, is_head
237 return branch_name, sha_commit_id, is_head
238
238
239 # checked branches, means we only need to try to get the branch/commit_sha
239 # checked branches, means we only need to try to get the branch/commit_sha
240 if not repo.is_empty():
240 if repo.is_empty():
241 is_head = True
242 branch_name = landing_ref
243 sha_commit_id = EmptyCommit().raw_id
244 else:
241 commit = repo.get_commit(commit_id=commit_id)
245 commit = repo.get_commit(commit_id=commit_id)
242 if commit:
246 if commit:
243 branch_name = commit.branch
247 branch_name = commit.branch
244 sha_commit_id = commit.raw_id
248 sha_commit_id = commit.raw_id
245
249
246 return branch_name, sha_commit_id, is_head
250 return branch_name, sha_commit_id, is_head
247
251
248 def _get_tree_at_commit(self, c, commit_id, f_path, full_load=False, at_rev=None):
252 def _get_tree_at_commit(self, c, commit_id, f_path, full_load=False, at_rev=None):
249
253
250 repo_id = self.db_repo.repo_id
254 repo_id = self.db_repo.repo_id
251 force_recache = self.get_recache_flag()
255 force_recache = self.get_recache_flag()
252
256
253 cache_seconds = safe_int(
257 cache_seconds = safe_int(
254 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
258 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
255 cache_on = not force_recache and cache_seconds > 0
259 cache_on = not force_recache and cache_seconds > 0
256 log.debug(
260 log.debug(
257 'Computing FILE TREE for repo_id %s commit_id `%s` and path `%s`'
261 'Computing FILE TREE for repo_id %s commit_id `%s` and path `%s`'
258 'with caching: %s[TTL: %ss]' % (
262 'with caching: %s[TTL: %ss]' % (
259 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
263 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
260
264
261 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
265 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
262 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
266 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
263
267
264 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
268 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
265 def compute_file_tree(ver, _name_hash, _repo_id, _commit_id, _f_path, _full_load, _at_rev):
269 def compute_file_tree(ver, _name_hash, _repo_id, _commit_id, _f_path, _full_load, _at_rev):
266 log.debug('Generating cached file tree at ver:%s for repo_id: %s, %s, %s',
270 log.debug('Generating cached file tree at ver:%s for repo_id: %s, %s, %s',
267 ver, _repo_id, _commit_id, _f_path)
271 ver, _repo_id, _commit_id, _f_path)
268
272
269 c.full_load = _full_load
273 c.full_load = _full_load
270 return render(
274 return render(
271 'rhodecode:templates/files/files_browser_tree.mako',
275 'rhodecode:templates/files/files_browser_tree.mako',
272 self._get_template_context(c), self.request, _at_rev)
276 self._get_template_context(c), self.request, _at_rev)
273
277
274 return compute_file_tree(
278 return compute_file_tree(
275 rc_cache.FILE_TREE_CACHE_VER, self.db_repo.repo_name_hash,
279 rc_cache.FILE_TREE_CACHE_VER, self.db_repo.repo_name_hash,
276 self.db_repo.repo_id, commit_id, f_path, full_load, at_rev)
280 self.db_repo.repo_id, commit_id, f_path, full_load, at_rev)
277
281
278 def _get_archive_spec(self, fname):
282 def _get_archive_spec(self, fname):
279 log.debug('Detecting archive spec for: `%s`', fname)
283 log.debug('Detecting archive spec for: `%s`', fname)
280
284
281 fileformat = None
285 fileformat = None
282 ext = None
286 ext = None
283 content_type = None
287 content_type = None
284 for a_type, content_type, extension in settings.ARCHIVE_SPECS:
288 for a_type, content_type, extension in settings.ARCHIVE_SPECS:
285
289
286 if fname.endswith(extension):
290 if fname.endswith(extension):
287 fileformat = a_type
291 fileformat = a_type
288 log.debug('archive is of type: %s', fileformat)
292 log.debug('archive is of type: %s', fileformat)
289 ext = extension
293 ext = extension
290 break
294 break
291
295
292 if not fileformat:
296 if not fileformat:
293 raise ValueError()
297 raise ValueError()
294
298
295 # left over part of whole fname is the commit
299 # left over part of whole fname is the commit
296 commit_id = fname[:-len(ext)]
300 commit_id = fname[:-len(ext)]
297
301
298 return commit_id, ext, fileformat, content_type
302 return commit_id, ext, fileformat, content_type
299
303
300 def create_pure_path(self, *parts):
304 def create_pure_path(self, *parts):
301 # Split paths and sanitize them, removing any ../ etc
305 # Split paths and sanitize them, removing any ../ etc
302 sanitized_path = [
306 sanitized_path = [
303 x for x in pathlib2.PurePath(*parts).parts
307 x for x in pathlib2.PurePath(*parts).parts
304 if x not in ['.', '..']]
308 if x not in ['.', '..']]
305
309
306 pure_path = pathlib2.PurePath(*sanitized_path)
310 pure_path = pathlib2.PurePath(*sanitized_path)
307 return pure_path
311 return pure_path
308
312
309 def _is_lf_enabled(self, target_repo):
313 def _is_lf_enabled(self, target_repo):
310 lf_enabled = False
314 lf_enabled = False
311
315
312 lf_key_for_vcs_map = {
316 lf_key_for_vcs_map = {
313 'hg': 'extensions_largefiles',
317 'hg': 'extensions_largefiles',
314 'git': 'vcs_git_lfs_enabled'
318 'git': 'vcs_git_lfs_enabled'
315 }
319 }
316
320
317 lf_key_for_vcs = lf_key_for_vcs_map.get(target_repo.repo_type)
321 lf_key_for_vcs = lf_key_for_vcs_map.get(target_repo.repo_type)
318
322
319 if lf_key_for_vcs:
323 if lf_key_for_vcs:
320 lf_enabled = self._get_repo_setting(target_repo, lf_key_for_vcs)
324 lf_enabled = self._get_repo_setting(target_repo, lf_key_for_vcs)
321
325
322 return lf_enabled
326 return lf_enabled
323
327
324 @LoginRequired()
328 @LoginRequired()
325 @HasRepoPermissionAnyDecorator(
329 @HasRepoPermissionAnyDecorator(
326 'repository.read', 'repository.write', 'repository.admin')
330 'repository.read', 'repository.write', 'repository.admin')
327 @view_config(
331 @view_config(
328 route_name='repo_archivefile', request_method='GET',
332 route_name='repo_archivefile', request_method='GET',
329 renderer=None)
333 renderer=None)
330 def repo_archivefile(self):
334 def repo_archivefile(self):
331 # archive cache config
335 # archive cache config
332 from rhodecode import CONFIG
336 from rhodecode import CONFIG
333 _ = self.request.translate
337 _ = self.request.translate
334 self.load_default_context()
338 self.load_default_context()
335 default_at_path = '/'
339 default_at_path = '/'
336 fname = self.request.matchdict['fname']
340 fname = self.request.matchdict['fname']
337 subrepos = self.request.GET.get('subrepos') == 'true'
341 subrepos = self.request.GET.get('subrepos') == 'true'
338 at_path = self.request.GET.get('at_path') or default_at_path
342 at_path = self.request.GET.get('at_path') or default_at_path
339
343
340 if not self.db_repo.enable_downloads:
344 if not self.db_repo.enable_downloads:
341 return Response(_('Downloads disabled'))
345 return Response(_('Downloads disabled'))
342
346
343 try:
347 try:
344 commit_id, ext, fileformat, content_type = \
348 commit_id, ext, fileformat, content_type = \
345 self._get_archive_spec(fname)
349 self._get_archive_spec(fname)
346 except ValueError:
350 except ValueError:
347 return Response(_('Unknown archive type for: `{}`').format(
351 return Response(_('Unknown archive type for: `{}`').format(
348 h.escape(fname)))
352 h.escape(fname)))
349
353
350 try:
354 try:
351 commit = self.rhodecode_vcs_repo.get_commit(commit_id)
355 commit = self.rhodecode_vcs_repo.get_commit(commit_id)
352 except CommitDoesNotExistError:
356 except CommitDoesNotExistError:
353 return Response(_('Unknown commit_id {}').format(
357 return Response(_('Unknown commit_id {}').format(
354 h.escape(commit_id)))
358 h.escape(commit_id)))
355 except EmptyRepositoryError:
359 except EmptyRepositoryError:
356 return Response(_('Empty repository'))
360 return Response(_('Empty repository'))
357
361
358 try:
362 try:
359 at_path = commit.get_node(at_path).path or default_at_path
363 at_path = commit.get_node(at_path).path or default_at_path
360 except Exception:
364 except Exception:
361 return Response(_('No node at path {} for this repository').format(at_path))
365 return Response(_('No node at path {} for this repository').format(at_path))
362
366
363 path_sha = sha1(at_path)[:8]
367 path_sha = sha1(at_path)[:8]
364
368
365 # original backward compat name of archive
369 # original backward compat name of archive
366 clean_name = safe_str(self.db_repo_name.replace('/', '_'))
370 clean_name = safe_str(self.db_repo_name.replace('/', '_'))
367 short_sha = safe_str(commit.short_id)
371 short_sha = safe_str(commit.short_id)
368
372
369 if at_path == default_at_path:
373 if at_path == default_at_path:
370 archive_name = '{}-{}{}{}'.format(
374 archive_name = '{}-{}{}{}'.format(
371 clean_name,
375 clean_name,
372 '-sub' if subrepos else '',
376 '-sub' if subrepos else '',
373 short_sha,
377 short_sha,
374 ext)
378 ext)
375 # custom path and new name
379 # custom path and new name
376 else:
380 else:
377 archive_name = '{}-{}{}-{}{}'.format(
381 archive_name = '{}-{}{}-{}{}'.format(
378 clean_name,
382 clean_name,
379 '-sub' if subrepos else '',
383 '-sub' if subrepos else '',
380 short_sha,
384 short_sha,
381 path_sha,
385 path_sha,
382 ext)
386 ext)
383
387
384 use_cached_archive = False
388 use_cached_archive = False
385 archive_cache_enabled = CONFIG.get(
389 archive_cache_enabled = CONFIG.get(
386 'archive_cache_dir') and not self.request.GET.get('no_cache')
390 'archive_cache_dir') and not self.request.GET.get('no_cache')
387 cached_archive_path = None
391 cached_archive_path = None
388
392
389 if archive_cache_enabled:
393 if archive_cache_enabled:
390 # check if we it's ok to write
394 # check if we it's ok to write
391 if not os.path.isdir(CONFIG['archive_cache_dir']):
395 if not os.path.isdir(CONFIG['archive_cache_dir']):
392 os.makedirs(CONFIG['archive_cache_dir'])
396 os.makedirs(CONFIG['archive_cache_dir'])
393 cached_archive_path = os.path.join(
397 cached_archive_path = os.path.join(
394 CONFIG['archive_cache_dir'], archive_name)
398 CONFIG['archive_cache_dir'], archive_name)
395 if os.path.isfile(cached_archive_path):
399 if os.path.isfile(cached_archive_path):
396 log.debug('Found cached archive in %s', cached_archive_path)
400 log.debug('Found cached archive in %s', cached_archive_path)
397 fd, archive = None, cached_archive_path
401 fd, archive = None, cached_archive_path
398 use_cached_archive = True
402 use_cached_archive = True
399 else:
403 else:
400 log.debug('Archive %s is not yet cached', archive_name)
404 log.debug('Archive %s is not yet cached', archive_name)
401
405
402 if not use_cached_archive:
406 if not use_cached_archive:
403 # generate new archive
407 # generate new archive
404 fd, archive = tempfile.mkstemp()
408 fd, archive = tempfile.mkstemp()
405 log.debug('Creating new temp archive in %s', archive)
409 log.debug('Creating new temp archive in %s', archive)
406 try:
410 try:
407 commit.archive_repo(archive, kind=fileformat, subrepos=subrepos,
411 commit.archive_repo(archive, kind=fileformat, subrepos=subrepos,
408 archive_at_path=at_path)
412 archive_at_path=at_path)
409 except ImproperArchiveTypeError:
413 except ImproperArchiveTypeError:
410 return _('Unknown archive type')
414 return _('Unknown archive type')
411 if archive_cache_enabled:
415 if archive_cache_enabled:
412 # if we generated the archive and we have cache enabled
416 # if we generated the archive and we have cache enabled
413 # let's use this for future
417 # let's use this for future
414 log.debug('Storing new archive in %s', cached_archive_path)
418 log.debug('Storing new archive in %s', cached_archive_path)
415 shutil.move(archive, cached_archive_path)
419 shutil.move(archive, cached_archive_path)
416 archive = cached_archive_path
420 archive = cached_archive_path
417
421
418 # store download action
422 # store download action
419 audit_logger.store_web(
423 audit_logger.store_web(
420 'repo.archive.download', action_data={
424 'repo.archive.download', action_data={
421 'user_agent': self.request.user_agent,
425 'user_agent': self.request.user_agent,
422 'archive_name': archive_name,
426 'archive_name': archive_name,
423 'archive_spec': fname,
427 'archive_spec': fname,
424 'archive_cached': use_cached_archive},
428 'archive_cached': use_cached_archive},
425 user=self._rhodecode_user,
429 user=self._rhodecode_user,
426 repo=self.db_repo,
430 repo=self.db_repo,
427 commit=True
431 commit=True
428 )
432 )
429
433
430 def get_chunked_archive(archive_path):
434 def get_chunked_archive(archive_path):
431 with open(archive_path, 'rb') as stream:
435 with open(archive_path, 'rb') as stream:
432 while True:
436 while True:
433 data = stream.read(16 * 1024)
437 data = stream.read(16 * 1024)
434 if not data:
438 if not data:
435 if fd: # fd means we used temporary file
439 if fd: # fd means we used temporary file
436 os.close(fd)
440 os.close(fd)
437 if not archive_cache_enabled:
441 if not archive_cache_enabled:
438 log.debug('Destroying temp archive %s', archive_path)
442 log.debug('Destroying temp archive %s', archive_path)
439 os.remove(archive_path)
443 os.remove(archive_path)
440 break
444 break
441 yield data
445 yield data
442
446
443 response = Response(app_iter=get_chunked_archive(archive))
447 response = Response(app_iter=get_chunked_archive(archive))
444 response.content_disposition = str(
448 response.content_disposition = str(
445 'attachment; filename=%s' % archive_name)
449 'attachment; filename=%s' % archive_name)
446 response.content_type = str(content_type)
450 response.content_type = str(content_type)
447
451
448 return response
452 return response
449
453
450 def _get_file_node(self, commit_id, f_path):
454 def _get_file_node(self, commit_id, f_path):
451 if commit_id not in ['', None, 'None', '0' * 12, '0' * 40]:
455 if commit_id not in ['', None, 'None', '0' * 12, '0' * 40]:
452 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
456 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
453 try:
457 try:
454 node = commit.get_node(f_path)
458 node = commit.get_node(f_path)
455 if node.is_dir():
459 if node.is_dir():
456 raise NodeError('%s path is a %s not a file'
460 raise NodeError('%s path is a %s not a file'
457 % (node, type(node)))
461 % (node, type(node)))
458 except NodeDoesNotExistError:
462 except NodeDoesNotExistError:
459 commit = EmptyCommit(
463 commit = EmptyCommit(
460 commit_id=commit_id,
464 commit_id=commit_id,
461 idx=commit.idx,
465 idx=commit.idx,
462 repo=commit.repository,
466 repo=commit.repository,
463 alias=commit.repository.alias,
467 alias=commit.repository.alias,
464 message=commit.message,
468 message=commit.message,
465 author=commit.author,
469 author=commit.author,
466 date=commit.date)
470 date=commit.date)
467 node = FileNode(f_path, '', commit=commit)
471 node = FileNode(f_path, '', commit=commit)
468 else:
472 else:
469 commit = EmptyCommit(
473 commit = EmptyCommit(
470 repo=self.rhodecode_vcs_repo,
474 repo=self.rhodecode_vcs_repo,
471 alias=self.rhodecode_vcs_repo.alias)
475 alias=self.rhodecode_vcs_repo.alias)
472 node = FileNode(f_path, '', commit=commit)
476 node = FileNode(f_path, '', commit=commit)
473 return node
477 return node
474
478
475 @LoginRequired()
479 @LoginRequired()
476 @HasRepoPermissionAnyDecorator(
480 @HasRepoPermissionAnyDecorator(
477 'repository.read', 'repository.write', 'repository.admin')
481 'repository.read', 'repository.write', 'repository.admin')
478 @view_config(
482 @view_config(
479 route_name='repo_files_diff', request_method='GET',
483 route_name='repo_files_diff', request_method='GET',
480 renderer=None)
484 renderer=None)
481 def repo_files_diff(self):
485 def repo_files_diff(self):
482 c = self.load_default_context()
486 c = self.load_default_context()
483 f_path = self._get_f_path(self.request.matchdict)
487 f_path = self._get_f_path(self.request.matchdict)
484 diff1 = self.request.GET.get('diff1', '')
488 diff1 = self.request.GET.get('diff1', '')
485 diff2 = self.request.GET.get('diff2', '')
489 diff2 = self.request.GET.get('diff2', '')
486
490
487 path1, diff1 = parse_path_ref(diff1, default_path=f_path)
491 path1, diff1 = parse_path_ref(diff1, default_path=f_path)
488
492
489 ignore_whitespace = str2bool(self.request.GET.get('ignorews'))
493 ignore_whitespace = str2bool(self.request.GET.get('ignorews'))
490 line_context = self.request.GET.get('context', 3)
494 line_context = self.request.GET.get('context', 3)
491
495
492 if not any((diff1, diff2)):
496 if not any((diff1, diff2)):
493 h.flash(
497 h.flash(
494 'Need query parameter "diff1" or "diff2" to generate a diff.',
498 'Need query parameter "diff1" or "diff2" to generate a diff.',
495 category='error')
499 category='error')
496 raise HTTPBadRequest()
500 raise HTTPBadRequest()
497
501
498 c.action = self.request.GET.get('diff')
502 c.action = self.request.GET.get('diff')
499 if c.action not in ['download', 'raw']:
503 if c.action not in ['download', 'raw']:
500 compare_url = h.route_path(
504 compare_url = h.route_path(
501 'repo_compare',
505 'repo_compare',
502 repo_name=self.db_repo_name,
506 repo_name=self.db_repo_name,
503 source_ref_type='rev',
507 source_ref_type='rev',
504 source_ref=diff1,
508 source_ref=diff1,
505 target_repo=self.db_repo_name,
509 target_repo=self.db_repo_name,
506 target_ref_type='rev',
510 target_ref_type='rev',
507 target_ref=diff2,
511 target_ref=diff2,
508 _query=dict(f_path=f_path))
512 _query=dict(f_path=f_path))
509 # redirect to new view if we render diff
513 # redirect to new view if we render diff
510 raise HTTPFound(compare_url)
514 raise HTTPFound(compare_url)
511
515
512 try:
516 try:
513 node1 = self._get_file_node(diff1, path1)
517 node1 = self._get_file_node(diff1, path1)
514 node2 = self._get_file_node(diff2, f_path)
518 node2 = self._get_file_node(diff2, f_path)
515 except (RepositoryError, NodeError):
519 except (RepositoryError, NodeError):
516 log.exception("Exception while trying to get node from repository")
520 log.exception("Exception while trying to get node from repository")
517 raise HTTPFound(
521 raise HTTPFound(
518 h.route_path('repo_files', repo_name=self.db_repo_name,
522 h.route_path('repo_files', repo_name=self.db_repo_name,
519 commit_id='tip', f_path=f_path))
523 commit_id='tip', f_path=f_path))
520
524
521 if all(isinstance(node.commit, EmptyCommit)
525 if all(isinstance(node.commit, EmptyCommit)
522 for node in (node1, node2)):
526 for node in (node1, node2)):
523 raise HTTPNotFound()
527 raise HTTPNotFound()
524
528
525 c.commit_1 = node1.commit
529 c.commit_1 = node1.commit
526 c.commit_2 = node2.commit
530 c.commit_2 = node2.commit
527
531
528 if c.action == 'download':
532 if c.action == 'download':
529 _diff = diffs.get_gitdiff(node1, node2,
533 _diff = diffs.get_gitdiff(node1, node2,
530 ignore_whitespace=ignore_whitespace,
534 ignore_whitespace=ignore_whitespace,
531 context=line_context)
535 context=line_context)
532 diff = diffs.DiffProcessor(_diff, format='gitdiff')
536 diff = diffs.DiffProcessor(_diff, format='gitdiff')
533
537
534 response = Response(self.path_filter.get_raw_patch(diff))
538 response = Response(self.path_filter.get_raw_patch(diff))
535 response.content_type = 'text/plain'
539 response.content_type = 'text/plain'
536 response.content_disposition = (
540 response.content_disposition = (
537 'attachment; filename=%s_%s_vs_%s.diff' % (f_path, diff1, diff2)
541 'attachment; filename=%s_%s_vs_%s.diff' % (f_path, diff1, diff2)
538 )
542 )
539 charset = self._get_default_encoding(c)
543 charset = self._get_default_encoding(c)
540 if charset:
544 if charset:
541 response.charset = charset
545 response.charset = charset
542 return response
546 return response
543
547
544 elif c.action == 'raw':
548 elif c.action == 'raw':
545 _diff = diffs.get_gitdiff(node1, node2,
549 _diff = diffs.get_gitdiff(node1, node2,
546 ignore_whitespace=ignore_whitespace,
550 ignore_whitespace=ignore_whitespace,
547 context=line_context)
551 context=line_context)
548 diff = diffs.DiffProcessor(_diff, format='gitdiff')
552 diff = diffs.DiffProcessor(_diff, format='gitdiff')
549
553
550 response = Response(self.path_filter.get_raw_patch(diff))
554 response = Response(self.path_filter.get_raw_patch(diff))
551 response.content_type = 'text/plain'
555 response.content_type = 'text/plain'
552 charset = self._get_default_encoding(c)
556 charset = self._get_default_encoding(c)
553 if charset:
557 if charset:
554 response.charset = charset
558 response.charset = charset
555 return response
559 return response
556
560
557 # in case we ever end up here
561 # in case we ever end up here
558 raise HTTPNotFound()
562 raise HTTPNotFound()
559
563
560 @LoginRequired()
564 @LoginRequired()
561 @HasRepoPermissionAnyDecorator(
565 @HasRepoPermissionAnyDecorator(
562 'repository.read', 'repository.write', 'repository.admin')
566 'repository.read', 'repository.write', 'repository.admin')
563 @view_config(
567 @view_config(
564 route_name='repo_files_diff_2way_redirect', request_method='GET',
568 route_name='repo_files_diff_2way_redirect', request_method='GET',
565 renderer=None)
569 renderer=None)
566 def repo_files_diff_2way_redirect(self):
570 def repo_files_diff_2way_redirect(self):
567 """
571 """
568 Kept only to make OLD links work
572 Kept only to make OLD links work
569 """
573 """
570 f_path = self._get_f_path_unchecked(self.request.matchdict)
574 f_path = self._get_f_path_unchecked(self.request.matchdict)
571 diff1 = self.request.GET.get('diff1', '')
575 diff1 = self.request.GET.get('diff1', '')
572 diff2 = self.request.GET.get('diff2', '')
576 diff2 = self.request.GET.get('diff2', '')
573
577
574 if not any((diff1, diff2)):
578 if not any((diff1, diff2)):
575 h.flash(
579 h.flash(
576 'Need query parameter "diff1" or "diff2" to generate a diff.',
580 'Need query parameter "diff1" or "diff2" to generate a diff.',
577 category='error')
581 category='error')
578 raise HTTPBadRequest()
582 raise HTTPBadRequest()
579
583
580 compare_url = h.route_path(
584 compare_url = h.route_path(
581 'repo_compare',
585 'repo_compare',
582 repo_name=self.db_repo_name,
586 repo_name=self.db_repo_name,
583 source_ref_type='rev',
587 source_ref_type='rev',
584 source_ref=diff1,
588 source_ref=diff1,
585 target_ref_type='rev',
589 target_ref_type='rev',
586 target_ref=diff2,
590 target_ref=diff2,
587 _query=dict(f_path=f_path, diffmode='sideside',
591 _query=dict(f_path=f_path, diffmode='sideside',
588 target_repo=self.db_repo_name,))
592 target_repo=self.db_repo_name,))
589 raise HTTPFound(compare_url)
593 raise HTTPFound(compare_url)
590
594
591 @LoginRequired()
595 @LoginRequired()
592 @view_config(
596 @view_config(
593 route_name='repo_files:default_commit', request_method='GET',
597 route_name='repo_files:default_commit', request_method='GET',
594 renderer=None)
598 renderer=None)
595 def repo_files_default(self):
599 def repo_files_default(self):
596 c = self.load_default_context()
600 c = self.load_default_context()
597 ref_name = c.rhodecode_db_repo.landing_ref_name
601 ref_name = c.rhodecode_db_repo.landing_ref_name
598 landing_url = h.repo_files_by_ref_url(
602 landing_url = h.repo_files_by_ref_url(
599 c.rhodecode_db_repo.repo_name,
603 c.rhodecode_db_repo.repo_name,
600 c.rhodecode_db_repo.repo_type,
604 c.rhodecode_db_repo.repo_type,
601 f_path='',
605 f_path='',
602 ref_name=ref_name,
606 ref_name=ref_name,
603 commit_id='tip',
607 commit_id='tip',
604 query=dict(at=ref_name)
608 query=dict(at=ref_name)
605 )
609 )
606
610
607 raise HTTPFound(landing_url)
611 raise HTTPFound(landing_url)
608
612
609 @LoginRequired()
613 @LoginRequired()
610 @HasRepoPermissionAnyDecorator(
614 @HasRepoPermissionAnyDecorator(
611 'repository.read', 'repository.write', 'repository.admin')
615 'repository.read', 'repository.write', 'repository.admin')
612 @view_config(
616 @view_config(
613 route_name='repo_files', request_method='GET',
617 route_name='repo_files', request_method='GET',
614 renderer=None)
618 renderer=None)
615 @view_config(
619 @view_config(
616 route_name='repo_files:default_path', request_method='GET',
620 route_name='repo_files:default_path', request_method='GET',
617 renderer=None)
621 renderer=None)
618 @view_config(
622 @view_config(
619 route_name='repo_files:rendered', request_method='GET',
623 route_name='repo_files:rendered', request_method='GET',
620 renderer=None)
624 renderer=None)
621 @view_config(
625 @view_config(
622 route_name='repo_files:annotated', request_method='GET',
626 route_name='repo_files:annotated', request_method='GET',
623 renderer=None)
627 renderer=None)
624 def repo_files(self):
628 def repo_files(self):
625 c = self.load_default_context()
629 c = self.load_default_context()
626
630
627 view_name = getattr(self.request.matched_route, 'name', None)
631 view_name = getattr(self.request.matched_route, 'name', None)
628
632
629 c.annotate = view_name == 'repo_files:annotated'
633 c.annotate = view_name == 'repo_files:annotated'
630 # default is false, but .rst/.md files later are auto rendered, we can
634 # default is false, but .rst/.md files later are auto rendered, we can
631 # overwrite auto rendering by setting this GET flag
635 # overwrite auto rendering by setting this GET flag
632 c.renderer = view_name == 'repo_files:rendered' or \
636 c.renderer = view_name == 'repo_files:rendered' or \
633 not self.request.GET.get('no-render', False)
637 not self.request.GET.get('no-render', False)
634
638
635 commit_id, f_path = self._get_commit_and_path()
639 commit_id, f_path = self._get_commit_and_path()
636
640
637 c.commit = self._get_commit_or_redirect(commit_id)
641 c.commit = self._get_commit_or_redirect(commit_id)
638 c.branch = self.request.GET.get('branch', None)
642 c.branch = self.request.GET.get('branch', None)
639 c.f_path = f_path
643 c.f_path = f_path
640 at_rev = self.request.GET.get('at')
644 at_rev = self.request.GET.get('at')
641
645
642 # prev link
646 # prev link
643 try:
647 try:
644 prev_commit = c.commit.prev(c.branch)
648 prev_commit = c.commit.prev(c.branch)
645 c.prev_commit = prev_commit
649 c.prev_commit = prev_commit
646 c.url_prev = h.route_path(
650 c.url_prev = h.route_path(
647 'repo_files', repo_name=self.db_repo_name,
651 'repo_files', repo_name=self.db_repo_name,
648 commit_id=prev_commit.raw_id, f_path=f_path)
652 commit_id=prev_commit.raw_id, f_path=f_path)
649 if c.branch:
653 if c.branch:
650 c.url_prev += '?branch=%s' % c.branch
654 c.url_prev += '?branch=%s' % c.branch
651 except (CommitDoesNotExistError, VCSError):
655 except (CommitDoesNotExistError, VCSError):
652 c.url_prev = '#'
656 c.url_prev = '#'
653 c.prev_commit = EmptyCommit()
657 c.prev_commit = EmptyCommit()
654
658
655 # next link
659 # next link
656 try:
660 try:
657 next_commit = c.commit.next(c.branch)
661 next_commit = c.commit.next(c.branch)
658 c.next_commit = next_commit
662 c.next_commit = next_commit
659 c.url_next = h.route_path(
663 c.url_next = h.route_path(
660 'repo_files', repo_name=self.db_repo_name,
664 'repo_files', repo_name=self.db_repo_name,
661 commit_id=next_commit.raw_id, f_path=f_path)
665 commit_id=next_commit.raw_id, f_path=f_path)
662 if c.branch:
666 if c.branch:
663 c.url_next += '?branch=%s' % c.branch
667 c.url_next += '?branch=%s' % c.branch
664 except (CommitDoesNotExistError, VCSError):
668 except (CommitDoesNotExistError, VCSError):
665 c.url_next = '#'
669 c.url_next = '#'
666 c.next_commit = EmptyCommit()
670 c.next_commit = EmptyCommit()
667
671
668 # files or dirs
672 # files or dirs
669 try:
673 try:
670 c.file = c.commit.get_node(f_path)
674 c.file = c.commit.get_node(f_path)
671 c.file_author = True
675 c.file_author = True
672 c.file_tree = ''
676 c.file_tree = ''
673
677
674 # load file content
678 # load file content
675 if c.file.is_file():
679 if c.file.is_file():
676 c.lf_node = {}
680 c.lf_node = {}
677
681
678 has_lf_enabled = self._is_lf_enabled(self.db_repo)
682 has_lf_enabled = self._is_lf_enabled(self.db_repo)
679 if has_lf_enabled:
683 if has_lf_enabled:
680 c.lf_node = c.file.get_largefile_node()
684 c.lf_node = c.file.get_largefile_node()
681
685
682 c.file_source_page = 'true'
686 c.file_source_page = 'true'
683 c.file_last_commit = c.file.last_commit
687 c.file_last_commit = c.file.last_commit
684
688
685 c.file_size_too_big = c.file.size > c.visual.cut_off_limit_file
689 c.file_size_too_big = c.file.size > c.visual.cut_off_limit_file
686
690
687 if not (c.file_size_too_big or c.file.is_binary):
691 if not (c.file_size_too_big or c.file.is_binary):
688 if c.annotate: # annotation has precedence over renderer
692 if c.annotate: # annotation has precedence over renderer
689 c.annotated_lines = filenode_as_annotated_lines_tokens(
693 c.annotated_lines = filenode_as_annotated_lines_tokens(
690 c.file
694 c.file
691 )
695 )
692 else:
696 else:
693 c.renderer = (
697 c.renderer = (
694 c.renderer and h.renderer_from_filename(c.file.path)
698 c.renderer and h.renderer_from_filename(c.file.path)
695 )
699 )
696 if not c.renderer:
700 if not c.renderer:
697 c.lines = filenode_as_lines_tokens(c.file)
701 c.lines = filenode_as_lines_tokens(c.file)
698
702
699 _branch_name, _sha_commit_id, is_head = self._is_valid_head(
703 _branch_name, _sha_commit_id, is_head = \
700 commit_id, self.rhodecode_vcs_repo)
704 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
705 landing_ref=self.db_repo.landing_ref_name)
701 c.on_branch_head = is_head
706 c.on_branch_head = is_head
702
707
703 branch = c.commit.branch if (
708 branch = c.commit.branch if (
704 c.commit.branch and '/' not in c.commit.branch) else None
709 c.commit.branch and '/' not in c.commit.branch) else None
705 c.branch_or_raw_id = branch or c.commit.raw_id
710 c.branch_or_raw_id = branch or c.commit.raw_id
706 c.branch_name = c.commit.branch or h.short_id(c.commit.raw_id)
711 c.branch_name = c.commit.branch or h.short_id(c.commit.raw_id)
707
712
708 author = c.file_last_commit.author
713 author = c.file_last_commit.author
709 c.authors = [[
714 c.authors = [[
710 h.email(author),
715 h.email(author),
711 h.person(author, 'username_or_name_or_email'),
716 h.person(author, 'username_or_name_or_email'),
712 1
717 1
713 ]]
718 ]]
714
719
715 else: # load tree content at path
720 else: # load tree content at path
716 c.file_source_page = 'false'
721 c.file_source_page = 'false'
717 c.authors = []
722 c.authors = []
718 # this loads a simple tree without metadata to speed things up
723 # this loads a simple tree without metadata to speed things up
719 # later via ajax we call repo_nodetree_full and fetch whole
724 # later via ajax we call repo_nodetree_full and fetch whole
720 c.file_tree = self._get_tree_at_commit(c, c.commit.raw_id, f_path, at_rev=at_rev)
725 c.file_tree = self._get_tree_at_commit(c, c.commit.raw_id, f_path, at_rev=at_rev)
721
726
722 c.readme_data, c.readme_file = \
727 c.readme_data, c.readme_file = \
723 self._get_readme_data(self.db_repo, c.visual.default_renderer,
728 self._get_readme_data(self.db_repo, c.visual.default_renderer,
724 c.commit.raw_id, f_path)
729 c.commit.raw_id, f_path)
725
730
726 except RepositoryError as e:
731 except RepositoryError as e:
727 h.flash(safe_str(h.escape(e)), category='error')
732 h.flash(safe_str(h.escape(e)), category='error')
728 raise HTTPNotFound()
733 raise HTTPNotFound()
729
734
730 if self.request.environ.get('HTTP_X_PJAX'):
735 if self.request.environ.get('HTTP_X_PJAX'):
731 html = render('rhodecode:templates/files/files_pjax.mako',
736 html = render('rhodecode:templates/files/files_pjax.mako',
732 self._get_template_context(c), self.request)
737 self._get_template_context(c), self.request)
733 else:
738 else:
734 html = render('rhodecode:templates/files/files.mako',
739 html = render('rhodecode:templates/files/files.mako',
735 self._get_template_context(c), self.request)
740 self._get_template_context(c), self.request)
736 return Response(html)
741 return Response(html)
737
742
738 @HasRepoPermissionAnyDecorator(
743 @HasRepoPermissionAnyDecorator(
739 'repository.read', 'repository.write', 'repository.admin')
744 'repository.read', 'repository.write', 'repository.admin')
740 @view_config(
745 @view_config(
741 route_name='repo_files:annotated_previous', request_method='GET',
746 route_name='repo_files:annotated_previous', request_method='GET',
742 renderer=None)
747 renderer=None)
743 def repo_files_annotated_previous(self):
748 def repo_files_annotated_previous(self):
744 self.load_default_context()
749 self.load_default_context()
745
750
746 commit_id, f_path = self._get_commit_and_path()
751 commit_id, f_path = self._get_commit_and_path()
747 commit = self._get_commit_or_redirect(commit_id)
752 commit = self._get_commit_or_redirect(commit_id)
748 prev_commit_id = commit.raw_id
753 prev_commit_id = commit.raw_id
749 line_anchor = self.request.GET.get('line_anchor')
754 line_anchor = self.request.GET.get('line_anchor')
750 is_file = False
755 is_file = False
751 try:
756 try:
752 _file = commit.get_node(f_path)
757 _file = commit.get_node(f_path)
753 is_file = _file.is_file()
758 is_file = _file.is_file()
754 except (NodeDoesNotExistError, CommitDoesNotExistError, VCSError):
759 except (NodeDoesNotExistError, CommitDoesNotExistError, VCSError):
755 pass
760 pass
756
761
757 if is_file:
762 if is_file:
758 history = commit.get_path_history(f_path)
763 history = commit.get_path_history(f_path)
759 prev_commit_id = history[1].raw_id \
764 prev_commit_id = history[1].raw_id \
760 if len(history) > 1 else prev_commit_id
765 if len(history) > 1 else prev_commit_id
761 prev_url = h.route_path(
766 prev_url = h.route_path(
762 'repo_files:annotated', repo_name=self.db_repo_name,
767 'repo_files:annotated', repo_name=self.db_repo_name,
763 commit_id=prev_commit_id, f_path=f_path,
768 commit_id=prev_commit_id, f_path=f_path,
764 _anchor='L{}'.format(line_anchor))
769 _anchor='L{}'.format(line_anchor))
765
770
766 raise HTTPFound(prev_url)
771 raise HTTPFound(prev_url)
767
772
768 @LoginRequired()
773 @LoginRequired()
769 @HasRepoPermissionAnyDecorator(
774 @HasRepoPermissionAnyDecorator(
770 'repository.read', 'repository.write', 'repository.admin')
775 'repository.read', 'repository.write', 'repository.admin')
771 @view_config(
776 @view_config(
772 route_name='repo_nodetree_full', request_method='GET',
777 route_name='repo_nodetree_full', request_method='GET',
773 renderer=None, xhr=True)
778 renderer=None, xhr=True)
774 @view_config(
779 @view_config(
775 route_name='repo_nodetree_full:default_path', request_method='GET',
780 route_name='repo_nodetree_full:default_path', request_method='GET',
776 renderer=None, xhr=True)
781 renderer=None, xhr=True)
777 def repo_nodetree_full(self):
782 def repo_nodetree_full(self):
778 """
783 """
779 Returns rendered html of file tree that contains commit date,
784 Returns rendered html of file tree that contains commit date,
780 author, commit_id for the specified combination of
785 author, commit_id for the specified combination of
781 repo, commit_id and file path
786 repo, commit_id and file path
782 """
787 """
783 c = self.load_default_context()
788 c = self.load_default_context()
784
789
785 commit_id, f_path = self._get_commit_and_path()
790 commit_id, f_path = self._get_commit_and_path()
786 commit = self._get_commit_or_redirect(commit_id)
791 commit = self._get_commit_or_redirect(commit_id)
787 try:
792 try:
788 dir_node = commit.get_node(f_path)
793 dir_node = commit.get_node(f_path)
789 except RepositoryError as e:
794 except RepositoryError as e:
790 return Response('error: {}'.format(h.escape(safe_str(e))))
795 return Response('error: {}'.format(h.escape(safe_str(e))))
791
796
792 if dir_node.is_file():
797 if dir_node.is_file():
793 return Response('')
798 return Response('')
794
799
795 c.file = dir_node
800 c.file = dir_node
796 c.commit = commit
801 c.commit = commit
797 at_rev = self.request.GET.get('at')
802 at_rev = self.request.GET.get('at')
798
803
799 html = self._get_tree_at_commit(
804 html = self._get_tree_at_commit(
800 c, commit.raw_id, dir_node.path, full_load=True, at_rev=at_rev)
805 c, commit.raw_id, dir_node.path, full_load=True, at_rev=at_rev)
801
806
802 return Response(html)
807 return Response(html)
803
808
804 def _get_attachement_headers(self, f_path):
809 def _get_attachement_headers(self, f_path):
805 f_name = safe_str(f_path.split(Repository.NAME_SEP)[-1])
810 f_name = safe_str(f_path.split(Repository.NAME_SEP)[-1])
806 safe_path = f_name.replace('"', '\\"')
811 safe_path = f_name.replace('"', '\\"')
807 encoded_path = urllib.quote(f_name)
812 encoded_path = urllib.quote(f_name)
808
813
809 return "attachment; " \
814 return "attachment; " \
810 "filename=\"{}\"; " \
815 "filename=\"{}\"; " \
811 "filename*=UTF-8\'\'{}".format(safe_path, encoded_path)
816 "filename*=UTF-8\'\'{}".format(safe_path, encoded_path)
812
817
813 @LoginRequired()
818 @LoginRequired()
814 @HasRepoPermissionAnyDecorator(
819 @HasRepoPermissionAnyDecorator(
815 'repository.read', 'repository.write', 'repository.admin')
820 'repository.read', 'repository.write', 'repository.admin')
816 @view_config(
821 @view_config(
817 route_name='repo_file_raw', request_method='GET',
822 route_name='repo_file_raw', request_method='GET',
818 renderer=None)
823 renderer=None)
819 def repo_file_raw(self):
824 def repo_file_raw(self):
820 """
825 """
821 Action for show as raw, some mimetypes are "rendered",
826 Action for show as raw, some mimetypes are "rendered",
822 those include images, icons.
827 those include images, icons.
823 """
828 """
824 c = self.load_default_context()
829 c = self.load_default_context()
825
830
826 commit_id, f_path = self._get_commit_and_path()
831 commit_id, f_path = self._get_commit_and_path()
827 commit = self._get_commit_or_redirect(commit_id)
832 commit = self._get_commit_or_redirect(commit_id)
828 file_node = self._get_filenode_or_redirect(commit, f_path)
833 file_node = self._get_filenode_or_redirect(commit, f_path)
829
834
830 raw_mimetype_mapping = {
835 raw_mimetype_mapping = {
831 # map original mimetype to a mimetype used for "show as raw"
836 # map original mimetype to a mimetype used for "show as raw"
832 # you can also provide a content-disposition to override the
837 # you can also provide a content-disposition to override the
833 # default "attachment" disposition.
838 # default "attachment" disposition.
834 # orig_type: (new_type, new_dispo)
839 # orig_type: (new_type, new_dispo)
835
840
836 # show images inline:
841 # show images inline:
837 # Do not re-add SVG: it is unsafe and permits XSS attacks. One can
842 # Do not re-add SVG: it is unsafe and permits XSS attacks. One can
838 # for example render an SVG with javascript inside or even render
843 # for example render an SVG with javascript inside or even render
839 # HTML.
844 # HTML.
840 'image/x-icon': ('image/x-icon', 'inline'),
845 'image/x-icon': ('image/x-icon', 'inline'),
841 'image/png': ('image/png', 'inline'),
846 'image/png': ('image/png', 'inline'),
842 'image/gif': ('image/gif', 'inline'),
847 'image/gif': ('image/gif', 'inline'),
843 'image/jpeg': ('image/jpeg', 'inline'),
848 'image/jpeg': ('image/jpeg', 'inline'),
844 'application/pdf': ('application/pdf', 'inline'),
849 'application/pdf': ('application/pdf', 'inline'),
845 }
850 }
846
851
847 mimetype = file_node.mimetype
852 mimetype = file_node.mimetype
848 try:
853 try:
849 mimetype, disposition = raw_mimetype_mapping[mimetype]
854 mimetype, disposition = raw_mimetype_mapping[mimetype]
850 except KeyError:
855 except KeyError:
851 # we don't know anything special about this, handle it safely
856 # we don't know anything special about this, handle it safely
852 if file_node.is_binary:
857 if file_node.is_binary:
853 # do same as download raw for binary files
858 # do same as download raw for binary files
854 mimetype, disposition = 'application/octet-stream', 'attachment'
859 mimetype, disposition = 'application/octet-stream', 'attachment'
855 else:
860 else:
856 # do not just use the original mimetype, but force text/plain,
861 # do not just use the original mimetype, but force text/plain,
857 # otherwise it would serve text/html and that might be unsafe.
862 # otherwise it would serve text/html and that might be unsafe.
858 # Note: underlying vcs library fakes text/plain mimetype if the
863 # Note: underlying vcs library fakes text/plain mimetype if the
859 # mimetype can not be determined and it thinks it is not
864 # mimetype can not be determined and it thinks it is not
860 # binary.This might lead to erroneous text display in some
865 # binary.This might lead to erroneous text display in some
861 # cases, but helps in other cases, like with text files
866 # cases, but helps in other cases, like with text files
862 # without extension.
867 # without extension.
863 mimetype, disposition = 'text/plain', 'inline'
868 mimetype, disposition = 'text/plain', 'inline'
864
869
865 if disposition == 'attachment':
870 if disposition == 'attachment':
866 disposition = self._get_attachement_headers(f_path)
871 disposition = self._get_attachement_headers(f_path)
867
872
868 stream_content = file_node.stream_bytes()
873 stream_content = file_node.stream_bytes()
869
874
870 response = Response(app_iter=stream_content)
875 response = Response(app_iter=stream_content)
871 response.content_disposition = disposition
876 response.content_disposition = disposition
872 response.content_type = mimetype
877 response.content_type = mimetype
873
878
874 charset = self._get_default_encoding(c)
879 charset = self._get_default_encoding(c)
875 if charset:
880 if charset:
876 response.charset = charset
881 response.charset = charset
877
882
878 return response
883 return response
879
884
880 @LoginRequired()
885 @LoginRequired()
881 @HasRepoPermissionAnyDecorator(
886 @HasRepoPermissionAnyDecorator(
882 'repository.read', 'repository.write', 'repository.admin')
887 'repository.read', 'repository.write', 'repository.admin')
883 @view_config(
888 @view_config(
884 route_name='repo_file_download', request_method='GET',
889 route_name='repo_file_download', request_method='GET',
885 renderer=None)
890 renderer=None)
886 @view_config(
891 @view_config(
887 route_name='repo_file_download:legacy', request_method='GET',
892 route_name='repo_file_download:legacy', request_method='GET',
888 renderer=None)
893 renderer=None)
889 def repo_file_download(self):
894 def repo_file_download(self):
890 c = self.load_default_context()
895 c = self.load_default_context()
891
896
892 commit_id, f_path = self._get_commit_and_path()
897 commit_id, f_path = self._get_commit_and_path()
893 commit = self._get_commit_or_redirect(commit_id)
898 commit = self._get_commit_or_redirect(commit_id)
894 file_node = self._get_filenode_or_redirect(commit, f_path)
899 file_node = self._get_filenode_or_redirect(commit, f_path)
895
900
896 if self.request.GET.get('lf'):
901 if self.request.GET.get('lf'):
897 # only if lf get flag is passed, we download this file
902 # only if lf get flag is passed, we download this file
898 # as LFS/Largefile
903 # as LFS/Largefile
899 lf_node = file_node.get_largefile_node()
904 lf_node = file_node.get_largefile_node()
900 if lf_node:
905 if lf_node:
901 # overwrite our pointer with the REAL large-file
906 # overwrite our pointer with the REAL large-file
902 file_node = lf_node
907 file_node = lf_node
903
908
904 disposition = self._get_attachement_headers(f_path)
909 disposition = self._get_attachement_headers(f_path)
905
910
906 stream_content = file_node.stream_bytes()
911 stream_content = file_node.stream_bytes()
907
912
908 response = Response(app_iter=stream_content)
913 response = Response(app_iter=stream_content)
909 response.content_disposition = disposition
914 response.content_disposition = disposition
910 response.content_type = file_node.mimetype
915 response.content_type = file_node.mimetype
911
916
912 charset = self._get_default_encoding(c)
917 charset = self._get_default_encoding(c)
913 if charset:
918 if charset:
914 response.charset = charset
919 response.charset = charset
915
920
916 return response
921 return response
917
922
918 def _get_nodelist_at_commit(self, repo_name, repo_id, commit_id, f_path):
923 def _get_nodelist_at_commit(self, repo_name, repo_id, commit_id, f_path):
919
924
920 cache_seconds = safe_int(
925 cache_seconds = safe_int(
921 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
926 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
922 cache_on = cache_seconds > 0
927 cache_on = cache_seconds > 0
923 log.debug(
928 log.debug(
924 'Computing FILE SEARCH for repo_id %s commit_id `%s` and path `%s`'
929 'Computing FILE SEARCH for repo_id %s commit_id `%s` and path `%s`'
925 'with caching: %s[TTL: %ss]' % (
930 'with caching: %s[TTL: %ss]' % (
926 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
931 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
927
932
928 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
933 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
929 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
934 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
930
935
931 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
936 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
932 def compute_file_search(_name_hash, _repo_id, _commit_id, _f_path):
937 def compute_file_search(_name_hash, _repo_id, _commit_id, _f_path):
933 log.debug('Generating cached nodelist for repo_id:%s, %s, %s',
938 log.debug('Generating cached nodelist for repo_id:%s, %s, %s',
934 _repo_id, commit_id, f_path)
939 _repo_id, commit_id, f_path)
935 try:
940 try:
936 _d, _f = ScmModel().get_quick_filter_nodes(repo_name, _commit_id, _f_path)
941 _d, _f = ScmModel().get_quick_filter_nodes(repo_name, _commit_id, _f_path)
937 except (RepositoryError, CommitDoesNotExistError, Exception) as e:
942 except (RepositoryError, CommitDoesNotExistError, Exception) as e:
938 log.exception(safe_str(e))
943 log.exception(safe_str(e))
939 h.flash(safe_str(h.escape(e)), category='error')
944 h.flash(safe_str(h.escape(e)), category='error')
940 raise HTTPFound(h.route_path(
945 raise HTTPFound(h.route_path(
941 'repo_files', repo_name=self.db_repo_name,
946 'repo_files', repo_name=self.db_repo_name,
942 commit_id='tip', f_path='/'))
947 commit_id='tip', f_path='/'))
943
948
944 return _d + _f
949 return _d + _f
945
950
946 result = compute_file_search(self.db_repo.repo_name_hash, self.db_repo.repo_id,
951 result = compute_file_search(self.db_repo.repo_name_hash, self.db_repo.repo_id,
947 commit_id, f_path)
952 commit_id, f_path)
948 return filter(lambda n: self.path_filter.path_access_allowed(n['name']), result)
953 return filter(lambda n: self.path_filter.path_access_allowed(n['name']), result)
949
954
950 @LoginRequired()
955 @LoginRequired()
951 @HasRepoPermissionAnyDecorator(
956 @HasRepoPermissionAnyDecorator(
952 'repository.read', 'repository.write', 'repository.admin')
957 'repository.read', 'repository.write', 'repository.admin')
953 @view_config(
958 @view_config(
954 route_name='repo_files_nodelist', request_method='GET',
959 route_name='repo_files_nodelist', request_method='GET',
955 renderer='json_ext', xhr=True)
960 renderer='json_ext', xhr=True)
956 def repo_nodelist(self):
961 def repo_nodelist(self):
957 self.load_default_context()
962 self.load_default_context()
958
963
959 commit_id, f_path = self._get_commit_and_path()
964 commit_id, f_path = self._get_commit_and_path()
960 commit = self._get_commit_or_redirect(commit_id)
965 commit = self._get_commit_or_redirect(commit_id)
961
966
962 metadata = self._get_nodelist_at_commit(
967 metadata = self._get_nodelist_at_commit(
963 self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path)
968 self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path)
964 return {'nodes': metadata}
969 return {'nodes': metadata}
965
970
966 def _create_references(self, branches_or_tags, symbolic_reference, f_path, ref_type):
971 def _create_references(self, branches_or_tags, symbolic_reference, f_path, ref_type):
967 items = []
972 items = []
968 for name, commit_id in branches_or_tags.items():
973 for name, commit_id in branches_or_tags.items():
969 sym_ref = symbolic_reference(commit_id, name, f_path, ref_type)
974 sym_ref = symbolic_reference(commit_id, name, f_path, ref_type)
970 items.append((sym_ref, name, ref_type))
975 items.append((sym_ref, name, ref_type))
971 return items
976 return items
972
977
973 def _symbolic_reference(self, commit_id, name, f_path, ref_type):
978 def _symbolic_reference(self, commit_id, name, f_path, ref_type):
974 return commit_id
979 return commit_id
975
980
976 def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type):
981 def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type):
977 return commit_id
982 return commit_id
978
983
979 # NOTE(dan): old code we used in "diff" mode compare
984 # NOTE(dan): old code we used in "diff" mode compare
980 new_f_path = vcspath.join(name, f_path)
985 new_f_path = vcspath.join(name, f_path)
981 return u'%s@%s' % (new_f_path, commit_id)
986 return u'%s@%s' % (new_f_path, commit_id)
982
987
983 def _get_node_history(self, commit_obj, f_path, commits=None):
988 def _get_node_history(self, commit_obj, f_path, commits=None):
984 """
989 """
985 get commit history for given node
990 get commit history for given node
986
991
987 :param commit_obj: commit to calculate history
992 :param commit_obj: commit to calculate history
988 :param f_path: path for node to calculate history for
993 :param f_path: path for node to calculate history for
989 :param commits: if passed don't calculate history and take
994 :param commits: if passed don't calculate history and take
990 commits defined in this list
995 commits defined in this list
991 """
996 """
992 _ = self.request.translate
997 _ = self.request.translate
993
998
994 # calculate history based on tip
999 # calculate history based on tip
995 tip = self.rhodecode_vcs_repo.get_commit()
1000 tip = self.rhodecode_vcs_repo.get_commit()
996 if commits is None:
1001 if commits is None:
997 pre_load = ["author", "branch"]
1002 pre_load = ["author", "branch"]
998 try:
1003 try:
999 commits = tip.get_path_history(f_path, pre_load=pre_load)
1004 commits = tip.get_path_history(f_path, pre_load=pre_load)
1000 except (NodeDoesNotExistError, CommitError):
1005 except (NodeDoesNotExistError, CommitError):
1001 # this node is not present at tip!
1006 # this node is not present at tip!
1002 commits = commit_obj.get_path_history(f_path, pre_load=pre_load)
1007 commits = commit_obj.get_path_history(f_path, pre_load=pre_load)
1003
1008
1004 history = []
1009 history = []
1005 commits_group = ([], _("Changesets"))
1010 commits_group = ([], _("Changesets"))
1006 for commit in commits:
1011 for commit in commits:
1007 branch = ' (%s)' % commit.branch if commit.branch else ''
1012 branch = ' (%s)' % commit.branch if commit.branch else ''
1008 n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch)
1013 n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch)
1009 commits_group[0].append((commit.raw_id, n_desc, 'sha'))
1014 commits_group[0].append((commit.raw_id, n_desc, 'sha'))
1010 history.append(commits_group)
1015 history.append(commits_group)
1011
1016
1012 symbolic_reference = self._symbolic_reference
1017 symbolic_reference = self._symbolic_reference
1013
1018
1014 if self.rhodecode_vcs_repo.alias == 'svn':
1019 if self.rhodecode_vcs_repo.alias == 'svn':
1015 adjusted_f_path = RepoFilesView.adjust_file_path_for_svn(
1020 adjusted_f_path = RepoFilesView.adjust_file_path_for_svn(
1016 f_path, self.rhodecode_vcs_repo)
1021 f_path, self.rhodecode_vcs_repo)
1017 if adjusted_f_path != f_path:
1022 if adjusted_f_path != f_path:
1018 log.debug(
1023 log.debug(
1019 'Recognized svn tag or branch in file "%s", using svn '
1024 'Recognized svn tag or branch in file "%s", using svn '
1020 'specific symbolic references', f_path)
1025 'specific symbolic references', f_path)
1021 f_path = adjusted_f_path
1026 f_path = adjusted_f_path
1022 symbolic_reference = self._symbolic_reference_svn
1027 symbolic_reference = self._symbolic_reference_svn
1023
1028
1024 branches = self._create_references(
1029 branches = self._create_references(
1025 self.rhodecode_vcs_repo.branches, symbolic_reference, f_path, 'branch')
1030 self.rhodecode_vcs_repo.branches, symbolic_reference, f_path, 'branch')
1026 branches_group = (branches, _("Branches"))
1031 branches_group = (branches, _("Branches"))
1027
1032
1028 tags = self._create_references(
1033 tags = self._create_references(
1029 self.rhodecode_vcs_repo.tags, symbolic_reference, f_path, 'tag')
1034 self.rhodecode_vcs_repo.tags, symbolic_reference, f_path, 'tag')
1030 tags_group = (tags, _("Tags"))
1035 tags_group = (tags, _("Tags"))
1031
1036
1032 history.append(branches_group)
1037 history.append(branches_group)
1033 history.append(tags_group)
1038 history.append(tags_group)
1034
1039
1035 return history, commits
1040 return history, commits
1036
1041
1037 @LoginRequired()
1042 @LoginRequired()
1038 @HasRepoPermissionAnyDecorator(
1043 @HasRepoPermissionAnyDecorator(
1039 'repository.read', 'repository.write', 'repository.admin')
1044 'repository.read', 'repository.write', 'repository.admin')
1040 @view_config(
1045 @view_config(
1041 route_name='repo_file_history', request_method='GET',
1046 route_name='repo_file_history', request_method='GET',
1042 renderer='json_ext')
1047 renderer='json_ext')
1043 def repo_file_history(self):
1048 def repo_file_history(self):
1044 self.load_default_context()
1049 self.load_default_context()
1045
1050
1046 commit_id, f_path = self._get_commit_and_path()
1051 commit_id, f_path = self._get_commit_and_path()
1047 commit = self._get_commit_or_redirect(commit_id)
1052 commit = self._get_commit_or_redirect(commit_id)
1048 file_node = self._get_filenode_or_redirect(commit, f_path)
1053 file_node = self._get_filenode_or_redirect(commit, f_path)
1049
1054
1050 if file_node.is_file():
1055 if file_node.is_file():
1051 file_history, _hist = self._get_node_history(commit, f_path)
1056 file_history, _hist = self._get_node_history(commit, f_path)
1052
1057
1053 res = []
1058 res = []
1054 for section_items, section in file_history:
1059 for section_items, section in file_history:
1055 items = []
1060 items = []
1056 for obj_id, obj_text, obj_type in section_items:
1061 for obj_id, obj_text, obj_type in section_items:
1057 at_rev = ''
1062 at_rev = ''
1058 if obj_type in ['branch', 'bookmark', 'tag']:
1063 if obj_type in ['branch', 'bookmark', 'tag']:
1059 at_rev = obj_text
1064 at_rev = obj_text
1060 entry = {
1065 entry = {
1061 'id': obj_id,
1066 'id': obj_id,
1062 'text': obj_text,
1067 'text': obj_text,
1063 'type': obj_type,
1068 'type': obj_type,
1064 'at_rev': at_rev
1069 'at_rev': at_rev
1065 }
1070 }
1066
1071
1067 items.append(entry)
1072 items.append(entry)
1068
1073
1069 res.append({
1074 res.append({
1070 'text': section,
1075 'text': section,
1071 'children': items
1076 'children': items
1072 })
1077 })
1073
1078
1074 data = {
1079 data = {
1075 'more': False,
1080 'more': False,
1076 'results': res
1081 'results': res
1077 }
1082 }
1078 return data
1083 return data
1079
1084
1080 log.warning('Cannot fetch history for directory')
1085 log.warning('Cannot fetch history for directory')
1081 raise HTTPBadRequest()
1086 raise HTTPBadRequest()
1082
1087
1083 @LoginRequired()
1088 @LoginRequired()
1084 @HasRepoPermissionAnyDecorator(
1089 @HasRepoPermissionAnyDecorator(
1085 'repository.read', 'repository.write', 'repository.admin')
1090 'repository.read', 'repository.write', 'repository.admin')
1086 @view_config(
1091 @view_config(
1087 route_name='repo_file_authors', request_method='GET',
1092 route_name='repo_file_authors', request_method='GET',
1088 renderer='rhodecode:templates/files/file_authors_box.mako')
1093 renderer='rhodecode:templates/files/file_authors_box.mako')
1089 def repo_file_authors(self):
1094 def repo_file_authors(self):
1090 c = self.load_default_context()
1095 c = self.load_default_context()
1091
1096
1092 commit_id, f_path = self._get_commit_and_path()
1097 commit_id, f_path = self._get_commit_and_path()
1093 commit = self._get_commit_or_redirect(commit_id)
1098 commit = self._get_commit_or_redirect(commit_id)
1094 file_node = self._get_filenode_or_redirect(commit, f_path)
1099 file_node = self._get_filenode_or_redirect(commit, f_path)
1095
1100
1096 if not file_node.is_file():
1101 if not file_node.is_file():
1097 raise HTTPBadRequest()
1102 raise HTTPBadRequest()
1098
1103
1099 c.file_last_commit = file_node.last_commit
1104 c.file_last_commit = file_node.last_commit
1100 if self.request.GET.get('annotate') == '1':
1105 if self.request.GET.get('annotate') == '1':
1101 # use _hist from annotation if annotation mode is on
1106 # use _hist from annotation if annotation mode is on
1102 commit_ids = set(x[1] for x in file_node.annotate)
1107 commit_ids = set(x[1] for x in file_node.annotate)
1103 _hist = (
1108 _hist = (
1104 self.rhodecode_vcs_repo.get_commit(commit_id)
1109 self.rhodecode_vcs_repo.get_commit(commit_id)
1105 for commit_id in commit_ids)
1110 for commit_id in commit_ids)
1106 else:
1111 else:
1107 _f_history, _hist = self._get_node_history(commit, f_path)
1112 _f_history, _hist = self._get_node_history(commit, f_path)
1108 c.file_author = False
1113 c.file_author = False
1109
1114
1110 unique = collections.OrderedDict()
1115 unique = collections.OrderedDict()
1111 for commit in _hist:
1116 for commit in _hist:
1112 author = commit.author
1117 author = commit.author
1113 if author not in unique:
1118 if author not in unique:
1114 unique[commit.author] = [
1119 unique[commit.author] = [
1115 h.email(author),
1120 h.email(author),
1116 h.person(author, 'username_or_name_or_email'),
1121 h.person(author, 'username_or_name_or_email'),
1117 1 # counter
1122 1 # counter
1118 ]
1123 ]
1119
1124
1120 else:
1125 else:
1121 # increase counter
1126 # increase counter
1122 unique[commit.author][2] += 1
1127 unique[commit.author][2] += 1
1123
1128
1124 c.authors = [val for val in unique.values()]
1129 c.authors = [val for val in unique.values()]
1125
1130
1126 return self._get_template_context(c)
1131 return self._get_template_context(c)
1127
1132
1128 @LoginRequired()
1133 @LoginRequired()
1129 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1134 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1130 @view_config(
1135 @view_config(
1131 route_name='repo_files_check_head', request_method='POST',
1136 route_name='repo_files_check_head', request_method='POST',
1132 renderer='json_ext', xhr=True)
1137 renderer='json_ext', xhr=True)
1133 def repo_files_check_head(self):
1138 def repo_files_check_head(self):
1134 self.load_default_context()
1139 self.load_default_context()
1135
1140
1136 commit_id, f_path = self._get_commit_and_path()
1141 commit_id, f_path = self._get_commit_and_path()
1137 _branch_name, _sha_commit_id, is_head = \
1142 _branch_name, _sha_commit_id, is_head = \
1138 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1143 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1144 landing_ref=self.db_repo.landing_ref_name)
1139
1145
1140 new_path = self.request.POST.get('path')
1146 new_path = self.request.POST.get('path')
1141 operation = self.request.POST.get('operation')
1147 operation = self.request.POST.get('operation')
1142 path_exist = ''
1148 path_exist = ''
1143
1149
1144 if new_path and operation in ['create', 'upload']:
1150 if new_path and operation in ['create', 'upload']:
1145 new_f_path = os.path.join(f_path.lstrip('/'), new_path)
1151 new_f_path = os.path.join(f_path.lstrip('/'), new_path)
1146 try:
1152 try:
1147 commit_obj = self.rhodecode_vcs_repo.get_commit(commit_id)
1153 commit_obj = self.rhodecode_vcs_repo.get_commit(commit_id)
1148 # NOTE(dan): construct whole path without leading /
1154 # NOTE(dan): construct whole path without leading /
1149 file_node = commit_obj.get_node(new_f_path)
1155 file_node = commit_obj.get_node(new_f_path)
1150 if file_node is not None:
1156 if file_node is not None:
1151 path_exist = new_f_path
1157 path_exist = new_f_path
1152 except EmptyRepositoryError:
1158 except EmptyRepositoryError:
1153 pass
1159 pass
1154 except Exception:
1160 except Exception:
1155 pass
1161 pass
1156
1162
1157 return {
1163 return {
1158 'branch': _branch_name,
1164 'branch': _branch_name,
1159 'sha': _sha_commit_id,
1165 'sha': _sha_commit_id,
1160 'is_head': is_head,
1166 'is_head': is_head,
1161 'path_exists': path_exist
1167 'path_exists': path_exist
1162 }
1168 }
1163
1169
1164 @LoginRequired()
1170 @LoginRequired()
1165 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1171 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1166 @view_config(
1172 @view_config(
1167 route_name='repo_files_remove_file', request_method='GET',
1173 route_name='repo_files_remove_file', request_method='GET',
1168 renderer='rhodecode:templates/files/files_delete.mako')
1174 renderer='rhodecode:templates/files/files_delete.mako')
1169 def repo_files_remove_file(self):
1175 def repo_files_remove_file(self):
1170 _ = self.request.translate
1176 _ = self.request.translate
1171 c = self.load_default_context()
1177 c = self.load_default_context()
1172 commit_id, f_path = self._get_commit_and_path()
1178 commit_id, f_path = self._get_commit_and_path()
1173
1179
1174 self._ensure_not_locked()
1180 self._ensure_not_locked()
1175 _branch_name, _sha_commit_id, is_head = \
1181 _branch_name, _sha_commit_id, is_head = \
1176 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1182 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1183 landing_ref=self.db_repo.landing_ref_name)
1177
1184
1178 self.forbid_non_head(is_head, f_path)
1185 self.forbid_non_head(is_head, f_path)
1179 self.check_branch_permission(_branch_name)
1186 self.check_branch_permission(_branch_name)
1180
1187
1181 c.commit = self._get_commit_or_redirect(commit_id)
1188 c.commit = self._get_commit_or_redirect(commit_id)
1182 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1189 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1183
1190
1184 c.default_message = _(
1191 c.default_message = _(
1185 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1192 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1186 c.f_path = f_path
1193 c.f_path = f_path
1187
1194
1188 return self._get_template_context(c)
1195 return self._get_template_context(c)
1189
1196
1190 @LoginRequired()
1197 @LoginRequired()
1191 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1198 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1192 @CSRFRequired()
1199 @CSRFRequired()
1193 @view_config(
1200 @view_config(
1194 route_name='repo_files_delete_file', request_method='POST',
1201 route_name='repo_files_delete_file', request_method='POST',
1195 renderer=None)
1202 renderer=None)
1196 def repo_files_delete_file(self):
1203 def repo_files_delete_file(self):
1197 _ = self.request.translate
1204 _ = self.request.translate
1198
1205
1199 c = self.load_default_context()
1206 c = self.load_default_context()
1200 commit_id, f_path = self._get_commit_and_path()
1207 commit_id, f_path = self._get_commit_and_path()
1201
1208
1202 self._ensure_not_locked()
1209 self._ensure_not_locked()
1203 _branch_name, _sha_commit_id, is_head = \
1210 _branch_name, _sha_commit_id, is_head = \
1204 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1211 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1212 landing_ref=self.db_repo.landing_ref_name)
1205
1213
1206 self.forbid_non_head(is_head, f_path)
1214 self.forbid_non_head(is_head, f_path)
1207 self.check_branch_permission(_branch_name)
1215 self.check_branch_permission(_branch_name)
1208
1216
1209 c.commit = self._get_commit_or_redirect(commit_id)
1217 c.commit = self._get_commit_or_redirect(commit_id)
1210 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1218 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1211
1219
1212 c.default_message = _(
1220 c.default_message = _(
1213 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1221 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1214 c.f_path = f_path
1222 c.f_path = f_path
1215 node_path = f_path
1223 node_path = f_path
1216 author = self._rhodecode_db_user.full_contact
1224 author = self._rhodecode_db_user.full_contact
1217 message = self.request.POST.get('message') or c.default_message
1225 message = self.request.POST.get('message') or c.default_message
1218 try:
1226 try:
1219 nodes = {
1227 nodes = {
1220 node_path: {
1228 node_path: {
1221 'content': ''
1229 'content': ''
1222 }
1230 }
1223 }
1231 }
1224 ScmModel().delete_nodes(
1232 ScmModel().delete_nodes(
1225 user=self._rhodecode_db_user.user_id, repo=self.db_repo,
1233 user=self._rhodecode_db_user.user_id, repo=self.db_repo,
1226 message=message,
1234 message=message,
1227 nodes=nodes,
1235 nodes=nodes,
1228 parent_commit=c.commit,
1236 parent_commit=c.commit,
1229 author=author,
1237 author=author,
1230 )
1238 )
1231
1239
1232 h.flash(
1240 h.flash(
1233 _('Successfully deleted file `{}`').format(
1241 _('Successfully deleted file `{}`').format(
1234 h.escape(f_path)), category='success')
1242 h.escape(f_path)), category='success')
1235 except Exception:
1243 except Exception:
1236 log.exception('Error during commit operation')
1244 log.exception('Error during commit operation')
1237 h.flash(_('Error occurred during commit'), category='error')
1245 h.flash(_('Error occurred during commit'), category='error')
1238 raise HTTPFound(
1246 raise HTTPFound(
1239 h.route_path('repo_commit', repo_name=self.db_repo_name,
1247 h.route_path('repo_commit', repo_name=self.db_repo_name,
1240 commit_id='tip'))
1248 commit_id='tip'))
1241
1249
1242 @LoginRequired()
1250 @LoginRequired()
1243 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1251 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1244 @view_config(
1252 @view_config(
1245 route_name='repo_files_edit_file', request_method='GET',
1253 route_name='repo_files_edit_file', request_method='GET',
1246 renderer='rhodecode:templates/files/files_edit.mako')
1254 renderer='rhodecode:templates/files/files_edit.mako')
1247 def repo_files_edit_file(self):
1255 def repo_files_edit_file(self):
1248 _ = self.request.translate
1256 _ = self.request.translate
1249 c = self.load_default_context()
1257 c = self.load_default_context()
1250 commit_id, f_path = self._get_commit_and_path()
1258 commit_id, f_path = self._get_commit_and_path()
1251
1259
1252 self._ensure_not_locked()
1260 self._ensure_not_locked()
1253 _branch_name, _sha_commit_id, is_head = \
1261 _branch_name, _sha_commit_id, is_head = \
1254 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1262 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1263 landing_ref=self.db_repo.landing_ref_name)
1255
1264
1256 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1265 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1257 self.check_branch_permission(_branch_name, commit_id=commit_id)
1266 self.check_branch_permission(_branch_name, commit_id=commit_id)
1258
1267
1259 c.commit = self._get_commit_or_redirect(commit_id)
1268 c.commit = self._get_commit_or_redirect(commit_id)
1260 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1269 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1261
1270
1262 if c.file.is_binary:
1271 if c.file.is_binary:
1263 files_url = h.route_path(
1272 files_url = h.route_path(
1264 'repo_files',
1273 'repo_files',
1265 repo_name=self.db_repo_name,
1274 repo_name=self.db_repo_name,
1266 commit_id=c.commit.raw_id, f_path=f_path)
1275 commit_id=c.commit.raw_id, f_path=f_path)
1267 raise HTTPFound(files_url)
1276 raise HTTPFound(files_url)
1268
1277
1269 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1278 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1270 c.f_path = f_path
1279 c.f_path = f_path
1271
1280
1272 return self._get_template_context(c)
1281 return self._get_template_context(c)
1273
1282
1274 @LoginRequired()
1283 @LoginRequired()
1275 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1284 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1276 @CSRFRequired()
1285 @CSRFRequired()
1277 @view_config(
1286 @view_config(
1278 route_name='repo_files_update_file', request_method='POST',
1287 route_name='repo_files_update_file', request_method='POST',
1279 renderer=None)
1288 renderer=None)
1280 def repo_files_update_file(self):
1289 def repo_files_update_file(self):
1281 _ = self.request.translate
1290 _ = self.request.translate
1282 c = self.load_default_context()
1291 c = self.load_default_context()
1283 commit_id, f_path = self._get_commit_and_path()
1292 commit_id, f_path = self._get_commit_and_path()
1284
1293
1285 self._ensure_not_locked()
1294 self._ensure_not_locked()
1286
1295
1287 c.commit = self._get_commit_or_redirect(commit_id)
1296 c.commit = self._get_commit_or_redirect(commit_id)
1288 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1297 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1289
1298
1290 if c.file.is_binary:
1299 if c.file.is_binary:
1291 raise HTTPFound(h.route_path('repo_files', repo_name=self.db_repo_name,
1300 raise HTTPFound(h.route_path('repo_files', repo_name=self.db_repo_name,
1292 commit_id=c.commit.raw_id, f_path=f_path))
1301 commit_id=c.commit.raw_id, f_path=f_path))
1293
1302
1294 _branch_name, _sha_commit_id, is_head = \
1303 _branch_name, _sha_commit_id, is_head = \
1295 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1304 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1305 landing_ref=self.db_repo.landing_ref_name)
1296
1306
1297 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1307 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1298 self.check_branch_permission(_branch_name, commit_id=commit_id)
1308 self.check_branch_permission(_branch_name, commit_id=commit_id)
1299
1309
1300 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1310 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1301 c.f_path = f_path
1311 c.f_path = f_path
1302
1312
1303 old_content = c.file.content
1313 old_content = c.file.content
1304 sl = old_content.splitlines(1)
1314 sl = old_content.splitlines(1)
1305 first_line = sl[0] if sl else ''
1315 first_line = sl[0] if sl else ''
1306
1316
1307 r_post = self.request.POST
1317 r_post = self.request.POST
1308 # line endings: 0 - Unix, 1 - Mac, 2 - DOS
1318 # line endings: 0 - Unix, 1 - Mac, 2 - DOS
1309 line_ending_mode = detect_mode(first_line, 0)
1319 line_ending_mode = detect_mode(first_line, 0)
1310 content = convert_line_endings(r_post.get('content', ''), line_ending_mode)
1320 content = convert_line_endings(r_post.get('content', ''), line_ending_mode)
1311
1321
1312 message = r_post.get('message') or c.default_message
1322 message = r_post.get('message') or c.default_message
1313 org_node_path = c.file.unicode_path
1323 org_node_path = c.file.unicode_path
1314 filename = r_post['filename']
1324 filename = r_post['filename']
1315
1325
1316 root_path = c.file.dir_path
1326 root_path = c.file.dir_path
1317 pure_path = self.create_pure_path(root_path, filename)
1327 pure_path = self.create_pure_path(root_path, filename)
1318 node_path = safe_unicode(bytes(pure_path))
1328 node_path = safe_unicode(bytes(pure_path))
1319
1329
1320 default_redirect_url = h.route_path('repo_commit', repo_name=self.db_repo_name,
1330 default_redirect_url = h.route_path('repo_commit', repo_name=self.db_repo_name,
1321 commit_id=commit_id)
1331 commit_id=commit_id)
1322 if content == old_content and node_path == org_node_path:
1332 if content == old_content and node_path == org_node_path:
1323 h.flash(_('No changes detected on {}').format(h.escape(org_node_path)),
1333 h.flash(_('No changes detected on {}').format(h.escape(org_node_path)),
1324 category='warning')
1334 category='warning')
1325 raise HTTPFound(default_redirect_url)
1335 raise HTTPFound(default_redirect_url)
1326
1336
1327 try:
1337 try:
1328 mapping = {
1338 mapping = {
1329 org_node_path: {
1339 org_node_path: {
1330 'org_filename': org_node_path,
1340 'org_filename': org_node_path,
1331 'filename': node_path,
1341 'filename': node_path,
1332 'content': content,
1342 'content': content,
1333 'lexer': '',
1343 'lexer': '',
1334 'op': 'mod',
1344 'op': 'mod',
1335 'mode': c.file.mode
1345 'mode': c.file.mode
1336 }
1346 }
1337 }
1347 }
1338
1348
1339 commit = ScmModel().update_nodes(
1349 commit = ScmModel().update_nodes(
1340 user=self._rhodecode_db_user.user_id,
1350 user=self._rhodecode_db_user.user_id,
1341 repo=self.db_repo,
1351 repo=self.db_repo,
1342 message=message,
1352 message=message,
1343 nodes=mapping,
1353 nodes=mapping,
1344 parent_commit=c.commit,
1354 parent_commit=c.commit,
1345 )
1355 )
1346
1356
1347 h.flash(_('Successfully committed changes to file `{}`').format(
1357 h.flash(_('Successfully committed changes to file `{}`').format(
1348 h.escape(f_path)), category='success')
1358 h.escape(f_path)), category='success')
1349 default_redirect_url = h.route_path(
1359 default_redirect_url = h.route_path(
1350 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1360 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1351
1361
1352 except Exception:
1362 except Exception:
1353 log.exception('Error occurred during commit')
1363 log.exception('Error occurred during commit')
1354 h.flash(_('Error occurred during commit'), category='error')
1364 h.flash(_('Error occurred during commit'), category='error')
1355
1365
1356 raise HTTPFound(default_redirect_url)
1366 raise HTTPFound(default_redirect_url)
1357
1367
1358 @LoginRequired()
1368 @LoginRequired()
1359 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1369 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1360 @view_config(
1370 @view_config(
1361 route_name='repo_files_add_file', request_method='GET',
1371 route_name='repo_files_add_file', request_method='GET',
1362 renderer='rhodecode:templates/files/files_add.mako')
1372 renderer='rhodecode:templates/files/files_add.mako')
1363 @view_config(
1373 @view_config(
1364 route_name='repo_files_upload_file', request_method='GET',
1374 route_name='repo_files_upload_file', request_method='GET',
1365 renderer='rhodecode:templates/files/files_upload.mako')
1375 renderer='rhodecode:templates/files/files_upload.mako')
1366 def repo_files_add_file(self):
1376 def repo_files_add_file(self):
1367 _ = self.request.translate
1377 _ = self.request.translate
1368 c = self.load_default_context()
1378 c = self.load_default_context()
1369 commit_id, f_path = self._get_commit_and_path()
1379 commit_id, f_path = self._get_commit_and_path()
1370
1380
1371 self._ensure_not_locked()
1381 self._ensure_not_locked()
1372
1382
1373 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1383 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1374 if c.commit is None:
1384 if c.commit is None:
1375 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1385 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1376
1386
1377 if self.rhodecode_vcs_repo.is_empty():
1387 if self.rhodecode_vcs_repo.is_empty():
1378 # for empty repository we cannot check for current branch, we rely on
1388 # for empty repository we cannot check for current branch, we rely on
1379 # c.commit.branch instead
1389 # c.commit.branch instead
1380 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1390 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1381 else:
1391 else:
1382 _branch_name, _sha_commit_id, is_head = \
1392 _branch_name, _sha_commit_id, is_head = \
1383 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1393 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1394 landing_ref=self.db_repo.landing_ref_name)
1384
1395
1385 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1396 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1386 self.check_branch_permission(_branch_name, commit_id=commit_id)
1397 self.check_branch_permission(_branch_name, commit_id=commit_id)
1387
1398
1388 c.default_message = (_('Added file via RhodeCode Enterprise'))
1399 c.default_message = (_('Added file via RhodeCode Enterprise'))
1389 c.f_path = f_path.lstrip('/') # ensure not relative path
1400 c.f_path = f_path.lstrip('/') # ensure not relative path
1390
1401
1391 return self._get_template_context(c)
1402 return self._get_template_context(c)
1392
1403
1393 @LoginRequired()
1404 @LoginRequired()
1394 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1405 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1395 @CSRFRequired()
1406 @CSRFRequired()
1396 @view_config(
1407 @view_config(
1397 route_name='repo_files_create_file', request_method='POST',
1408 route_name='repo_files_create_file', request_method='POST',
1398 renderer=None)
1409 renderer=None)
1399 def repo_files_create_file(self):
1410 def repo_files_create_file(self):
1400 _ = self.request.translate
1411 _ = self.request.translate
1401 c = self.load_default_context()
1412 c = self.load_default_context()
1402 commit_id, f_path = self._get_commit_and_path()
1413 commit_id, f_path = self._get_commit_and_path()
1403
1414
1404 self._ensure_not_locked()
1415 self._ensure_not_locked()
1405
1416
1406 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1417 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1407 if c.commit is None:
1418 if c.commit is None:
1408 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1419 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1409
1420
1410 # calculate redirect URL
1421 # calculate redirect URL
1411 if self.rhodecode_vcs_repo.is_empty():
1422 if self.rhodecode_vcs_repo.is_empty():
1412 default_redirect_url = h.route_path(
1423 default_redirect_url = h.route_path(
1413 'repo_summary', repo_name=self.db_repo_name)
1424 'repo_summary', repo_name=self.db_repo_name)
1414 else:
1425 else:
1415 default_redirect_url = h.route_path(
1426 default_redirect_url = h.route_path(
1416 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1427 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1417
1428
1418 if self.rhodecode_vcs_repo.is_empty():
1429 if self.rhodecode_vcs_repo.is_empty():
1419 # for empty repository we cannot check for current branch, we rely on
1430 # for empty repository we cannot check for current branch, we rely on
1420 # c.commit.branch instead
1431 # c.commit.branch instead
1421 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1432 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1422 else:
1433 else:
1423 _branch_name, _sha_commit_id, is_head = \
1434 _branch_name, _sha_commit_id, is_head = \
1424 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1435 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1436 landing_ref=self.db_repo.landing_ref_name)
1425
1437
1426 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1438 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1427 self.check_branch_permission(_branch_name, commit_id=commit_id)
1439 self.check_branch_permission(_branch_name, commit_id=commit_id)
1428
1440
1429 c.default_message = (_('Added file via RhodeCode Enterprise'))
1441 c.default_message = (_('Added file via RhodeCode Enterprise'))
1430 c.f_path = f_path
1442 c.f_path = f_path
1431
1443
1432 r_post = self.request.POST
1444 r_post = self.request.POST
1433 message = r_post.get('message') or c.default_message
1445 message = r_post.get('message') or c.default_message
1434 filename = r_post.get('filename')
1446 filename = r_post.get('filename')
1435 unix_mode = 0
1447 unix_mode = 0
1436 content = convert_line_endings(r_post.get('content', ''), unix_mode)
1448 content = convert_line_endings(r_post.get('content', ''), unix_mode)
1437
1449
1438 if not filename:
1450 if not filename:
1439 # If there's no commit, redirect to repo summary
1451 # If there's no commit, redirect to repo summary
1440 if type(c.commit) is EmptyCommit:
1452 if type(c.commit) is EmptyCommit:
1441 redirect_url = h.route_path(
1453 redirect_url = h.route_path(
1442 'repo_summary', repo_name=self.db_repo_name)
1454 'repo_summary', repo_name=self.db_repo_name)
1443 else:
1455 else:
1444 redirect_url = default_redirect_url
1456 redirect_url = default_redirect_url
1445 h.flash(_('No filename specified'), category='warning')
1457 h.flash(_('No filename specified'), category='warning')
1446 raise HTTPFound(redirect_url)
1458 raise HTTPFound(redirect_url)
1447
1459
1448 root_path = f_path
1460 root_path = f_path
1449 pure_path = self.create_pure_path(root_path, filename)
1461 pure_path = self.create_pure_path(root_path, filename)
1450 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1462 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1451
1463
1452 author = self._rhodecode_db_user.full_contact
1464 author = self._rhodecode_db_user.full_contact
1453 nodes = {
1465 nodes = {
1454 node_path: {
1466 node_path: {
1455 'content': content
1467 'content': content
1456 }
1468 }
1457 }
1469 }
1458
1470
1459 try:
1471 try:
1460
1472
1461 commit = ScmModel().create_nodes(
1473 commit = ScmModel().create_nodes(
1462 user=self._rhodecode_db_user.user_id,
1474 user=self._rhodecode_db_user.user_id,
1463 repo=self.db_repo,
1475 repo=self.db_repo,
1464 message=message,
1476 message=message,
1465 nodes=nodes,
1477 nodes=nodes,
1466 parent_commit=c.commit,
1478 parent_commit=c.commit,
1467 author=author,
1479 author=author,
1468 )
1480 )
1469
1481
1470 h.flash(_('Successfully committed new file `{}`').format(
1482 h.flash(_('Successfully committed new file `{}`').format(
1471 h.escape(node_path)), category='success')
1483 h.escape(node_path)), category='success')
1472
1484
1473 default_redirect_url = h.route_path(
1485 default_redirect_url = h.route_path(
1474 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1486 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1475
1487
1476 except NonRelativePathError:
1488 except NonRelativePathError:
1477 log.exception('Non Relative path found')
1489 log.exception('Non Relative path found')
1478 h.flash(_('The location specified must be a relative path and must not '
1490 h.flash(_('The location specified must be a relative path and must not '
1479 'contain .. in the path'), category='warning')
1491 'contain .. in the path'), category='warning')
1480 raise HTTPFound(default_redirect_url)
1492 raise HTTPFound(default_redirect_url)
1481 except (NodeError, NodeAlreadyExistsError) as e:
1493 except (NodeError, NodeAlreadyExistsError) as e:
1482 h.flash(_(h.escape(e)), category='error')
1494 h.flash(_(h.escape(e)), category='error')
1483 except Exception:
1495 except Exception:
1484 log.exception('Error occurred during commit')
1496 log.exception('Error occurred during commit')
1485 h.flash(_('Error occurred during commit'), category='error')
1497 h.flash(_('Error occurred during commit'), category='error')
1486
1498
1487 raise HTTPFound(default_redirect_url)
1499 raise HTTPFound(default_redirect_url)
1488
1500
1489 @LoginRequired()
1501 @LoginRequired()
1490 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1502 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1491 @CSRFRequired()
1503 @CSRFRequired()
1492 @view_config(
1504 @view_config(
1493 route_name='repo_files_upload_file', request_method='POST',
1505 route_name='repo_files_upload_file', request_method='POST',
1494 renderer='json_ext')
1506 renderer='json_ext')
1495 def repo_files_upload_file(self):
1507 def repo_files_upload_file(self):
1496 _ = self.request.translate
1508 _ = self.request.translate
1497 c = self.load_default_context()
1509 c = self.load_default_context()
1498 commit_id, f_path = self._get_commit_and_path()
1510 commit_id, f_path = self._get_commit_and_path()
1499
1511
1500 self._ensure_not_locked()
1512 self._ensure_not_locked()
1501
1513
1502 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1514 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1503 if c.commit is None:
1515 if c.commit is None:
1504 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1516 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1505
1517
1506 # calculate redirect URL
1518 # calculate redirect URL
1507 if self.rhodecode_vcs_repo.is_empty():
1519 if self.rhodecode_vcs_repo.is_empty():
1508 default_redirect_url = h.route_path(
1520 default_redirect_url = h.route_path(
1509 'repo_summary', repo_name=self.db_repo_name)
1521 'repo_summary', repo_name=self.db_repo_name)
1510 else:
1522 else:
1511 default_redirect_url = h.route_path(
1523 default_redirect_url = h.route_path(
1512 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1524 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1513
1525
1514 if self.rhodecode_vcs_repo.is_empty():
1526 if self.rhodecode_vcs_repo.is_empty():
1515 # for empty repository we cannot check for current branch, we rely on
1527 # for empty repository we cannot check for current branch, we rely on
1516 # c.commit.branch instead
1528 # c.commit.branch instead
1517 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1529 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1518 else:
1530 else:
1519 _branch_name, _sha_commit_id, is_head = \
1531 _branch_name, _sha_commit_id, is_head = \
1520 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1532 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1533 landing_ref=self.db_repo.landing_ref_name)
1521
1534
1522 error = self.forbid_non_head(is_head, f_path, json_mode=True)
1535 error = self.forbid_non_head(is_head, f_path, json_mode=True)
1523 if error:
1536 if error:
1524 return {
1537 return {
1525 'error': error,
1538 'error': error,
1526 'redirect_url': default_redirect_url
1539 'redirect_url': default_redirect_url
1527 }
1540 }
1528 error = self.check_branch_permission(_branch_name, json_mode=True)
1541 error = self.check_branch_permission(_branch_name, json_mode=True)
1529 if error:
1542 if error:
1530 return {
1543 return {
1531 'error': error,
1544 'error': error,
1532 'redirect_url': default_redirect_url
1545 'redirect_url': default_redirect_url
1533 }
1546 }
1534
1547
1535 c.default_message = (_('Uploaded file via RhodeCode Enterprise'))
1548 c.default_message = (_('Uploaded file via RhodeCode Enterprise'))
1536 c.f_path = f_path
1549 c.f_path = f_path
1537
1550
1538 r_post = self.request.POST
1551 r_post = self.request.POST
1539
1552
1540 message = c.default_message
1553 message = c.default_message
1541 user_message = r_post.getall('message')
1554 user_message = r_post.getall('message')
1542 if isinstance(user_message, list) and user_message:
1555 if isinstance(user_message, list) and user_message:
1543 # we take the first from duplicated results if it's not empty
1556 # we take the first from duplicated results if it's not empty
1544 message = user_message[0] if user_message[0] else message
1557 message = user_message[0] if user_message[0] else message
1545
1558
1546 nodes = {}
1559 nodes = {}
1547
1560
1548 for file_obj in r_post.getall('files_upload') or []:
1561 for file_obj in r_post.getall('files_upload') or []:
1549 content = file_obj.file
1562 content = file_obj.file
1550 filename = file_obj.filename
1563 filename = file_obj.filename
1551
1564
1552 root_path = f_path
1565 root_path = f_path
1553 pure_path = self.create_pure_path(root_path, filename)
1566 pure_path = self.create_pure_path(root_path, filename)
1554 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1567 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1555
1568
1556 nodes[node_path] = {
1569 nodes[node_path] = {
1557 'content': content
1570 'content': content
1558 }
1571 }
1559
1572
1560 if not nodes:
1573 if not nodes:
1561 error = 'missing files'
1574 error = 'missing files'
1562 return {
1575 return {
1563 'error': error,
1576 'error': error,
1564 'redirect_url': default_redirect_url
1577 'redirect_url': default_redirect_url
1565 }
1578 }
1566
1579
1567 author = self._rhodecode_db_user.full_contact
1580 author = self._rhodecode_db_user.full_contact
1568
1581
1569 try:
1582 try:
1570 commit = ScmModel().create_nodes(
1583 commit = ScmModel().create_nodes(
1571 user=self._rhodecode_db_user.user_id,
1584 user=self._rhodecode_db_user.user_id,
1572 repo=self.db_repo,
1585 repo=self.db_repo,
1573 message=message,
1586 message=message,
1574 nodes=nodes,
1587 nodes=nodes,
1575 parent_commit=c.commit,
1588 parent_commit=c.commit,
1576 author=author,
1589 author=author,
1577 )
1590 )
1578 if len(nodes) == 1:
1591 if len(nodes) == 1:
1579 flash_message = _('Successfully committed {} new files').format(len(nodes))
1592 flash_message = _('Successfully committed {} new files').format(len(nodes))
1580 else:
1593 else:
1581 flash_message = _('Successfully committed 1 new file')
1594 flash_message = _('Successfully committed 1 new file')
1582
1595
1583 h.flash(flash_message, category='success')
1596 h.flash(flash_message, category='success')
1584
1597
1585 default_redirect_url = h.route_path(
1598 default_redirect_url = h.route_path(
1586 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1599 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1587
1600
1588 except NonRelativePathError:
1601 except NonRelativePathError:
1589 log.exception('Non Relative path found')
1602 log.exception('Non Relative path found')
1590 error = _('The location specified must be a relative path and must not '
1603 error = _('The location specified must be a relative path and must not '
1591 'contain .. in the path')
1604 'contain .. in the path')
1592 h.flash(error, category='warning')
1605 h.flash(error, category='warning')
1593
1606
1594 return {
1607 return {
1595 'error': error,
1608 'error': error,
1596 'redirect_url': default_redirect_url
1609 'redirect_url': default_redirect_url
1597 }
1610 }
1598 except (NodeError, NodeAlreadyExistsError) as e:
1611 except (NodeError, NodeAlreadyExistsError) as e:
1599 error = h.escape(e)
1612 error = h.escape(e)
1600 h.flash(error, category='error')
1613 h.flash(error, category='error')
1601
1614
1602 return {
1615 return {
1603 'error': error,
1616 'error': error,
1604 'redirect_url': default_redirect_url
1617 'redirect_url': default_redirect_url
1605 }
1618 }
1606 except Exception:
1619 except Exception:
1607 log.exception('Error occurred during commit')
1620 log.exception('Error occurred during commit')
1608 error = _('Error occurred during commit')
1621 error = _('Error occurred during commit')
1609 h.flash(error, category='error')
1622 h.flash(error, category='error')
1610 return {
1623 return {
1611 'error': error,
1624 'error': error,
1612 'redirect_url': default_redirect_url
1625 'redirect_url': default_redirect_url
1613 }
1626 }
1614
1627
1615 return {
1628 return {
1616 'error': None,
1629 'error': None,
1617 'redirect_url': default_redirect_url
1630 'redirect_url': default_redirect_url
1618 }
1631 }
@@ -1,140 +1,140 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2020 RhodeCode GmbH
3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import logging
21 import logging
22
22
23 from pyramid.httpexceptions import HTTPFound
23 from pyramid.httpexceptions import HTTPFound
24 from pyramid.view import view_config
24 from pyramid.view import view_config
25
25
26 from rhodecode.apps._base import RepoAppView
26 from rhodecode.apps._base import RepoAppView
27 from rhodecode.lib import helpers as h
27 from rhodecode.lib import helpers as h
28 from rhodecode.lib import audit_logger
28 from rhodecode.lib import audit_logger
29 from rhodecode.lib.auth import (
29 from rhodecode.lib.auth import (
30 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
30 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
31 from rhodecode.lib.utils2 import str2bool
31 from rhodecode.lib.utils2 import str2bool
32 from rhodecode.model.db import User
32 from rhodecode.model.db import User
33 from rhodecode.model.forms import RepoPermsForm
33 from rhodecode.model.forms import RepoPermsForm
34 from rhodecode.model.meta import Session
34 from rhodecode.model.meta import Session
35 from rhodecode.model.permission import PermissionModel
35 from rhodecode.model.permission import PermissionModel
36 from rhodecode.model.repo import RepoModel
36 from rhodecode.model.repo import RepoModel
37
37
38 log = logging.getLogger(__name__)
38 log = logging.getLogger(__name__)
39
39
40
40
41 class RepoSettingsPermissionsView(RepoAppView):
41 class RepoSettingsPermissionsView(RepoAppView):
42
42
43 def load_default_context(self):
43 def load_default_context(self):
44 c = self._get_local_tmpl_context()
44 c = self._get_local_tmpl_context()
45 return c
45 return c
46
46
47 @LoginRequired()
47 @LoginRequired()
48 @HasRepoPermissionAnyDecorator('repository.admin')
48 @HasRepoPermissionAnyDecorator('repository.admin')
49 @view_config(
49 @view_config(
50 route_name='edit_repo_perms', request_method='GET',
50 route_name='edit_repo_perms', request_method='GET',
51 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
51 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
52 def edit_permissions(self):
52 def edit_permissions(self):
53 _ = self.request.translate
53 _ = self.request.translate
54 c = self.load_default_context()
54 c = self.load_default_context()
55 c.active = 'permissions'
55 c.active = 'permissions'
56 if self.request.GET.get('branch_permissions'):
56 if self.request.GET.get('branch_permissions'):
57 h.flash(_('Explicitly add user or user group with write+ '
57 h.flash(_('Explicitly add user or user group with write or higher '
58 'permission to modify their branch permissions.'),
58 'permission to modify their branch permissions.'),
59 category='notice')
59 category='notice')
60 return self._get_template_context(c)
60 return self._get_template_context(c)
61
61
62 @LoginRequired()
62 @LoginRequired()
63 @HasRepoPermissionAnyDecorator('repository.admin')
63 @HasRepoPermissionAnyDecorator('repository.admin')
64 @CSRFRequired()
64 @CSRFRequired()
65 @view_config(
65 @view_config(
66 route_name='edit_repo_perms', request_method='POST',
66 route_name='edit_repo_perms', request_method='POST',
67 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
67 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
68 def edit_permissions_update(self):
68 def edit_permissions_update(self):
69 _ = self.request.translate
69 _ = self.request.translate
70 c = self.load_default_context()
70 c = self.load_default_context()
71 c.active = 'permissions'
71 c.active = 'permissions'
72 data = self.request.POST
72 data = self.request.POST
73 # store private flag outside of HTML to verify if we can modify
73 # store private flag outside of HTML to verify if we can modify
74 # default user permissions, prevents submission of FAKE post data
74 # default user permissions, prevents submission of FAKE post data
75 # into the form for private repos
75 # into the form for private repos
76 data['repo_private'] = self.db_repo.private
76 data['repo_private'] = self.db_repo.private
77 form = RepoPermsForm(self.request.translate)().to_python(data)
77 form = RepoPermsForm(self.request.translate)().to_python(data)
78 changes = RepoModel().update_permissions(
78 changes = RepoModel().update_permissions(
79 self.db_repo_name, form['perm_additions'], form['perm_updates'],
79 self.db_repo_name, form['perm_additions'], form['perm_updates'],
80 form['perm_deletions'])
80 form['perm_deletions'])
81
81
82 action_data = {
82 action_data = {
83 'added': changes['added'],
83 'added': changes['added'],
84 'updated': changes['updated'],
84 'updated': changes['updated'],
85 'deleted': changes['deleted'],
85 'deleted': changes['deleted'],
86 }
86 }
87 audit_logger.store_web(
87 audit_logger.store_web(
88 'repo.edit.permissions', action_data=action_data,
88 'repo.edit.permissions', action_data=action_data,
89 user=self._rhodecode_user, repo=self.db_repo)
89 user=self._rhodecode_user, repo=self.db_repo)
90
90
91 Session().commit()
91 Session().commit()
92 h.flash(_('Repository access permissions updated'), category='success')
92 h.flash(_('Repository access permissions updated'), category='success')
93
93
94 affected_user_ids = None
94 affected_user_ids = None
95 if changes.get('default_user_changed', False):
95 if changes.get('default_user_changed', False):
96 # if we change the default user, we need to flush everyone permissions
96 # if we change the default user, we need to flush everyone permissions
97 affected_user_ids = User.get_all_user_ids()
97 affected_user_ids = User.get_all_user_ids()
98 PermissionModel().flush_user_permission_caches(
98 PermissionModel().flush_user_permission_caches(
99 changes, affected_user_ids=affected_user_ids)
99 changes, affected_user_ids=affected_user_ids)
100
100
101 raise HTTPFound(
101 raise HTTPFound(
102 h.route_path('edit_repo_perms', repo_name=self.db_repo_name))
102 h.route_path('edit_repo_perms', repo_name=self.db_repo_name))
103
103
104 @LoginRequired()
104 @LoginRequired()
105 @HasRepoPermissionAnyDecorator('repository.admin')
105 @HasRepoPermissionAnyDecorator('repository.admin')
106 @CSRFRequired()
106 @CSRFRequired()
107 @view_config(
107 @view_config(
108 route_name='edit_repo_perms_set_private', request_method='POST',
108 route_name='edit_repo_perms_set_private', request_method='POST',
109 renderer='json_ext')
109 renderer='json_ext')
110 def edit_permissions_set_private_repo(self):
110 def edit_permissions_set_private_repo(self):
111 _ = self.request.translate
111 _ = self.request.translate
112 self.load_default_context()
112 self.load_default_context()
113
113
114 private_flag = str2bool(self.request.POST.get('private'))
114 private_flag = str2bool(self.request.POST.get('private'))
115
115
116 try:
116 try:
117 repo = RepoModel().get(self.db_repo.repo_id)
117 repo = RepoModel().get(self.db_repo.repo_id)
118 repo.private = private_flag
118 repo.private = private_flag
119 Session().add(repo)
119 Session().add(repo)
120 RepoModel().grant_user_permission(
120 RepoModel().grant_user_permission(
121 repo=self.db_repo, user=User.DEFAULT_USER, perm='repository.none'
121 repo=self.db_repo, user=User.DEFAULT_USER, perm='repository.none'
122 )
122 )
123
123
124 Session().commit()
124 Session().commit()
125
125
126 h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name),
126 h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name),
127 category='success')
127 category='success')
128 # NOTE(dan): we change repo private mode we need to notify all USERS
128 # NOTE(dan): we change repo private mode we need to notify all USERS
129 affected_user_ids = User.get_all_user_ids()
129 affected_user_ids = User.get_all_user_ids()
130 PermissionModel().trigger_permission_flush(affected_user_ids)
130 PermissionModel().trigger_permission_flush(affected_user_ids)
131
131
132 except Exception:
132 except Exception:
133 log.exception("Exception during update of repository")
133 log.exception("Exception during update of repository")
134 h.flash(_('Error occurred during update of repository {}').format(
134 h.flash(_('Error occurred during update of repository {}').format(
135 self.db_repo_name), category='error')
135 self.db_repo_name), category='error')
136
136
137 return {
137 return {
138 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name),
138 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name),
139 'private': private_flag
139 'private': private_flag
140 }
140 }
@@ -1,1631 +1,1637 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2020 RhodeCode GmbH
3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import logging
21 import logging
22 import collections
22 import collections
23
23
24 import formencode
24 import formencode
25 import formencode.htmlfill
25 import formencode.htmlfill
26 import peppercorn
26 import peppercorn
27 from pyramid.httpexceptions import (
27 from pyramid.httpexceptions import (
28 HTTPFound, HTTPNotFound, HTTPForbidden, HTTPBadRequest, HTTPConflict)
28 HTTPFound, HTTPNotFound, HTTPForbidden, HTTPBadRequest, HTTPConflict)
29 from pyramid.view import view_config
29 from pyramid.view import view_config
30 from pyramid.renderers import render
30 from pyramid.renderers import render
31
31
32 from rhodecode.apps._base import RepoAppView, DataGridAppView
32 from rhodecode.apps._base import RepoAppView, DataGridAppView
33
33
34 from rhodecode.lib import helpers as h, diffs, codeblocks, channelstream
34 from rhodecode.lib import helpers as h, diffs, codeblocks, channelstream
35 from rhodecode.lib.base import vcs_operation_context
35 from rhodecode.lib.base import vcs_operation_context
36 from rhodecode.lib.diffs import load_cached_diff, cache_diff, diff_cache_exist
36 from rhodecode.lib.diffs import load_cached_diff, cache_diff, diff_cache_exist
37 from rhodecode.lib.exceptions import CommentVersionMismatch
37 from rhodecode.lib.exceptions import CommentVersionMismatch
38 from rhodecode.lib.ext_json import json
38 from rhodecode.lib.ext_json import json
39 from rhodecode.lib.auth import (
39 from rhodecode.lib.auth import (
40 LoginRequired, HasRepoPermissionAny, HasRepoPermissionAnyDecorator,
40 LoginRequired, HasRepoPermissionAny, HasRepoPermissionAnyDecorator,
41 NotAnonymous, CSRFRequired)
41 NotAnonymous, CSRFRequired)
42 from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode
42 from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode
43 from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason
43 from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason
44 from rhodecode.lib.vcs.exceptions import (
44 from rhodecode.lib.vcs.exceptions import (
45 CommitDoesNotExistError, RepositoryRequirementError, EmptyRepositoryError)
45 CommitDoesNotExistError, RepositoryRequirementError, EmptyRepositoryError)
46 from rhodecode.model.changeset_status import ChangesetStatusModel
46 from rhodecode.model.changeset_status import ChangesetStatusModel
47 from rhodecode.model.comment import CommentsModel
47 from rhodecode.model.comment import CommentsModel
48 from rhodecode.model.db import (
48 from rhodecode.model.db import (
49 func, or_, PullRequest, ChangesetComment, ChangesetStatus, Repository)
49 func, or_, PullRequest, ChangesetComment, ChangesetStatus, Repository)
50 from rhodecode.model.forms import PullRequestForm
50 from rhodecode.model.forms import PullRequestForm
51 from rhodecode.model.meta import Session
51 from rhodecode.model.meta import Session
52 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
52 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
53 from rhodecode.model.scm import ScmModel
53 from rhodecode.model.scm import ScmModel
54
54
55 log = logging.getLogger(__name__)
55 log = logging.getLogger(__name__)
56
56
57
57
58 class RepoPullRequestsView(RepoAppView, DataGridAppView):
58 class RepoPullRequestsView(RepoAppView, DataGridAppView):
59
59
60 def load_default_context(self):
60 def load_default_context(self):
61 c = self._get_local_tmpl_context(include_app_defaults=True)
61 c = self._get_local_tmpl_context(include_app_defaults=True)
62 c.REVIEW_STATUS_APPROVED = ChangesetStatus.STATUS_APPROVED
62 c.REVIEW_STATUS_APPROVED = ChangesetStatus.STATUS_APPROVED
63 c.REVIEW_STATUS_REJECTED = ChangesetStatus.STATUS_REJECTED
63 c.REVIEW_STATUS_REJECTED = ChangesetStatus.STATUS_REJECTED
64 # backward compat., we use for OLD PRs a plain renderer
64 # backward compat., we use for OLD PRs a plain renderer
65 c.renderer = 'plain'
65 c.renderer = 'plain'
66 return c
66 return c
67
67
68 def _get_pull_requests_list(
68 def _get_pull_requests_list(
69 self, repo_name, source, filter_type, opened_by, statuses):
69 self, repo_name, source, filter_type, opened_by, statuses):
70
70
71 draw, start, limit = self._extract_chunk(self.request)
71 draw, start, limit = self._extract_chunk(self.request)
72 search_q, order_by, order_dir = self._extract_ordering(self.request)
72 search_q, order_by, order_dir = self._extract_ordering(self.request)
73 _render = self.request.get_partial_renderer(
73 _render = self.request.get_partial_renderer(
74 'rhodecode:templates/data_table/_dt_elements.mako')
74 'rhodecode:templates/data_table/_dt_elements.mako')
75
75
76 # pagination
76 # pagination
77
77
78 if filter_type == 'awaiting_review':
78 if filter_type == 'awaiting_review':
79 pull_requests = PullRequestModel().get_awaiting_review(
79 pull_requests = PullRequestModel().get_awaiting_review(
80 repo_name, search_q=search_q, source=source, opened_by=opened_by,
80 repo_name, search_q=search_q, source=source, opened_by=opened_by,
81 statuses=statuses, offset=start, length=limit,
81 statuses=statuses, offset=start, length=limit,
82 order_by=order_by, order_dir=order_dir)
82 order_by=order_by, order_dir=order_dir)
83 pull_requests_total_count = PullRequestModel().count_awaiting_review(
83 pull_requests_total_count = PullRequestModel().count_awaiting_review(
84 repo_name, search_q=search_q, source=source, statuses=statuses,
84 repo_name, search_q=search_q, source=source, statuses=statuses,
85 opened_by=opened_by)
85 opened_by=opened_by)
86 elif filter_type == 'awaiting_my_review':
86 elif filter_type == 'awaiting_my_review':
87 pull_requests = PullRequestModel().get_awaiting_my_review(
87 pull_requests = PullRequestModel().get_awaiting_my_review(
88 repo_name, search_q=search_q, source=source, opened_by=opened_by,
88 repo_name, search_q=search_q, source=source, opened_by=opened_by,
89 user_id=self._rhodecode_user.user_id, statuses=statuses,
89 user_id=self._rhodecode_user.user_id, statuses=statuses,
90 offset=start, length=limit, order_by=order_by,
90 offset=start, length=limit, order_by=order_by,
91 order_dir=order_dir)
91 order_dir=order_dir)
92 pull_requests_total_count = PullRequestModel().count_awaiting_my_review(
92 pull_requests_total_count = PullRequestModel().count_awaiting_my_review(
93 repo_name, search_q=search_q, source=source, user_id=self._rhodecode_user.user_id,
93 repo_name, search_q=search_q, source=source, user_id=self._rhodecode_user.user_id,
94 statuses=statuses, opened_by=opened_by)
94 statuses=statuses, opened_by=opened_by)
95 else:
95 else:
96 pull_requests = PullRequestModel().get_all(
96 pull_requests = PullRequestModel().get_all(
97 repo_name, search_q=search_q, source=source, opened_by=opened_by,
97 repo_name, search_q=search_q, source=source, opened_by=opened_by,
98 statuses=statuses, offset=start, length=limit,
98 statuses=statuses, offset=start, length=limit,
99 order_by=order_by, order_dir=order_dir)
99 order_by=order_by, order_dir=order_dir)
100 pull_requests_total_count = PullRequestModel().count_all(
100 pull_requests_total_count = PullRequestModel().count_all(
101 repo_name, search_q=search_q, source=source, statuses=statuses,
101 repo_name, search_q=search_q, source=source, statuses=statuses,
102 opened_by=opened_by)
102 opened_by=opened_by)
103
103
104 data = []
104 data = []
105 comments_model = CommentsModel()
105 comments_model = CommentsModel()
106 for pr in pull_requests:
106 for pr in pull_requests:
107 comments = comments_model.get_all_comments(
107 comments = comments_model.get_all_comments(
108 self.db_repo.repo_id, pull_request=pr)
108 self.db_repo.repo_id, pull_request=pr)
109
109
110 data.append({
110 data.append({
111 'name': _render('pullrequest_name',
111 'name': _render('pullrequest_name',
112 pr.pull_request_id, pr.pull_request_state,
112 pr.pull_request_id, pr.pull_request_state,
113 pr.work_in_progress, pr.target_repo.repo_name),
113 pr.work_in_progress, pr.target_repo.repo_name),
114 'name_raw': pr.pull_request_id,
114 'name_raw': pr.pull_request_id,
115 'status': _render('pullrequest_status',
115 'status': _render('pullrequest_status',
116 pr.calculated_review_status()),
116 pr.calculated_review_status()),
117 'title': _render('pullrequest_title', pr.title, pr.description),
117 'title': _render('pullrequest_title', pr.title, pr.description),
118 'description': h.escape(pr.description),
118 'description': h.escape(pr.description),
119 'updated_on': _render('pullrequest_updated_on',
119 'updated_on': _render('pullrequest_updated_on',
120 h.datetime_to_time(pr.updated_on)),
120 h.datetime_to_time(pr.updated_on)),
121 'updated_on_raw': h.datetime_to_time(pr.updated_on),
121 'updated_on_raw': h.datetime_to_time(pr.updated_on),
122 'created_on': _render('pullrequest_updated_on',
122 'created_on': _render('pullrequest_updated_on',
123 h.datetime_to_time(pr.created_on)),
123 h.datetime_to_time(pr.created_on)),
124 'created_on_raw': h.datetime_to_time(pr.created_on),
124 'created_on_raw': h.datetime_to_time(pr.created_on),
125 'state': pr.pull_request_state,
125 'state': pr.pull_request_state,
126 'author': _render('pullrequest_author',
126 'author': _render('pullrequest_author',
127 pr.author.full_contact, ),
127 pr.author.full_contact, ),
128 'author_raw': pr.author.full_name,
128 'author_raw': pr.author.full_name,
129 'comments': _render('pullrequest_comments', len(comments)),
129 'comments': _render('pullrequest_comments', len(comments)),
130 'comments_raw': len(comments),
130 'comments_raw': len(comments),
131 'closed': pr.is_closed(),
131 'closed': pr.is_closed(),
132 })
132 })
133
133
134 data = ({
134 data = ({
135 'draw': draw,
135 'draw': draw,
136 'data': data,
136 'data': data,
137 'recordsTotal': pull_requests_total_count,
137 'recordsTotal': pull_requests_total_count,
138 'recordsFiltered': pull_requests_total_count,
138 'recordsFiltered': pull_requests_total_count,
139 })
139 })
140 return data
140 return data
141
141
142 @LoginRequired()
142 @LoginRequired()
143 @HasRepoPermissionAnyDecorator(
143 @HasRepoPermissionAnyDecorator(
144 'repository.read', 'repository.write', 'repository.admin')
144 'repository.read', 'repository.write', 'repository.admin')
145 @view_config(
145 @view_config(
146 route_name='pullrequest_show_all', request_method='GET',
146 route_name='pullrequest_show_all', request_method='GET',
147 renderer='rhodecode:templates/pullrequests/pullrequests.mako')
147 renderer='rhodecode:templates/pullrequests/pullrequests.mako')
148 def pull_request_list(self):
148 def pull_request_list(self):
149 c = self.load_default_context()
149 c = self.load_default_context()
150
150
151 req_get = self.request.GET
151 req_get = self.request.GET
152 c.source = str2bool(req_get.get('source'))
152 c.source = str2bool(req_get.get('source'))
153 c.closed = str2bool(req_get.get('closed'))
153 c.closed = str2bool(req_get.get('closed'))
154 c.my = str2bool(req_get.get('my'))
154 c.my = str2bool(req_get.get('my'))
155 c.awaiting_review = str2bool(req_get.get('awaiting_review'))
155 c.awaiting_review = str2bool(req_get.get('awaiting_review'))
156 c.awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
156 c.awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
157
157
158 c.active = 'open'
158 c.active = 'open'
159 if c.my:
159 if c.my:
160 c.active = 'my'
160 c.active = 'my'
161 if c.closed:
161 if c.closed:
162 c.active = 'closed'
162 c.active = 'closed'
163 if c.awaiting_review and not c.source:
163 if c.awaiting_review and not c.source:
164 c.active = 'awaiting'
164 c.active = 'awaiting'
165 if c.source and not c.awaiting_review:
165 if c.source and not c.awaiting_review:
166 c.active = 'source'
166 c.active = 'source'
167 if c.awaiting_my_review:
167 if c.awaiting_my_review:
168 c.active = 'awaiting_my'
168 c.active = 'awaiting_my'
169
169
170 return self._get_template_context(c)
170 return self._get_template_context(c)
171
171
172 @LoginRequired()
172 @LoginRequired()
173 @HasRepoPermissionAnyDecorator(
173 @HasRepoPermissionAnyDecorator(
174 'repository.read', 'repository.write', 'repository.admin')
174 'repository.read', 'repository.write', 'repository.admin')
175 @view_config(
175 @view_config(
176 route_name='pullrequest_show_all_data', request_method='GET',
176 route_name='pullrequest_show_all_data', request_method='GET',
177 renderer='json_ext', xhr=True)
177 renderer='json_ext', xhr=True)
178 def pull_request_list_data(self):
178 def pull_request_list_data(self):
179 self.load_default_context()
179 self.load_default_context()
180
180
181 # additional filters
181 # additional filters
182 req_get = self.request.GET
182 req_get = self.request.GET
183 source = str2bool(req_get.get('source'))
183 source = str2bool(req_get.get('source'))
184 closed = str2bool(req_get.get('closed'))
184 closed = str2bool(req_get.get('closed'))
185 my = str2bool(req_get.get('my'))
185 my = str2bool(req_get.get('my'))
186 awaiting_review = str2bool(req_get.get('awaiting_review'))
186 awaiting_review = str2bool(req_get.get('awaiting_review'))
187 awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
187 awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
188
188
189 filter_type = 'awaiting_review' if awaiting_review \
189 filter_type = 'awaiting_review' if awaiting_review \
190 else 'awaiting_my_review' if awaiting_my_review \
190 else 'awaiting_my_review' if awaiting_my_review \
191 else None
191 else None
192
192
193 opened_by = None
193 opened_by = None
194 if my:
194 if my:
195 opened_by = [self._rhodecode_user.user_id]
195 opened_by = [self._rhodecode_user.user_id]
196
196
197 statuses = [PullRequest.STATUS_NEW, PullRequest.STATUS_OPEN]
197 statuses = [PullRequest.STATUS_NEW, PullRequest.STATUS_OPEN]
198 if closed:
198 if closed:
199 statuses = [PullRequest.STATUS_CLOSED]
199 statuses = [PullRequest.STATUS_CLOSED]
200
200
201 data = self._get_pull_requests_list(
201 data = self._get_pull_requests_list(
202 repo_name=self.db_repo_name, source=source,
202 repo_name=self.db_repo_name, source=source,
203 filter_type=filter_type, opened_by=opened_by, statuses=statuses)
203 filter_type=filter_type, opened_by=opened_by, statuses=statuses)
204
204
205 return data
205 return data
206
206
207 def _is_diff_cache_enabled(self, target_repo):
207 def _is_diff_cache_enabled(self, target_repo):
208 caching_enabled = self._get_general_setting(
208 caching_enabled = self._get_general_setting(
209 target_repo, 'rhodecode_diff_cache')
209 target_repo, 'rhodecode_diff_cache')
210 log.debug('Diff caching enabled: %s', caching_enabled)
210 log.debug('Diff caching enabled: %s', caching_enabled)
211 return caching_enabled
211 return caching_enabled
212
212
213 def _get_diffset(self, source_repo_name, source_repo,
213 def _get_diffset(self, source_repo_name, source_repo,
214 ancestor_commit,
214 ancestor_commit,
215 source_ref_id, target_ref_id,
215 source_ref_id, target_ref_id,
216 target_commit, source_commit, diff_limit, file_limit,
216 target_commit, source_commit, diff_limit, file_limit,
217 fulldiff, hide_whitespace_changes, diff_context, use_ancestor=True):
217 fulldiff, hide_whitespace_changes, diff_context, use_ancestor=True):
218
218
219 if use_ancestor:
219 if use_ancestor:
220 # we might want to not use it for versions
220 # we might want to not use it for versions
221 target_ref_id = ancestor_commit.raw_id
221 target_ref_id = ancestor_commit.raw_id
222
222
223 vcs_diff = PullRequestModel().get_diff(
223 vcs_diff = PullRequestModel().get_diff(
224 source_repo, source_ref_id, target_ref_id,
224 source_repo, source_ref_id, target_ref_id,
225 hide_whitespace_changes, diff_context)
225 hide_whitespace_changes, diff_context)
226
226
227 diff_processor = diffs.DiffProcessor(
227 diff_processor = diffs.DiffProcessor(
228 vcs_diff, format='newdiff', diff_limit=diff_limit,
228 vcs_diff, format='newdiff', diff_limit=diff_limit,
229 file_limit=file_limit, show_full_diff=fulldiff)
229 file_limit=file_limit, show_full_diff=fulldiff)
230
230
231 _parsed = diff_processor.prepare()
231 _parsed = diff_processor.prepare()
232
232
233 diffset = codeblocks.DiffSet(
233 diffset = codeblocks.DiffSet(
234 repo_name=self.db_repo_name,
234 repo_name=self.db_repo_name,
235 source_repo_name=source_repo_name,
235 source_repo_name=source_repo_name,
236 source_node_getter=codeblocks.diffset_node_getter(target_commit),
236 source_node_getter=codeblocks.diffset_node_getter(target_commit),
237 target_node_getter=codeblocks.diffset_node_getter(source_commit),
237 target_node_getter=codeblocks.diffset_node_getter(source_commit),
238 )
238 )
239 diffset = self.path_filter.render_patchset_filtered(
239 diffset = self.path_filter.render_patchset_filtered(
240 diffset, _parsed, target_commit.raw_id, source_commit.raw_id)
240 diffset, _parsed, target_commit.raw_id, source_commit.raw_id)
241
241
242 return diffset
242 return diffset
243
243
244 def _get_range_diffset(self, source_scm, source_repo,
244 def _get_range_diffset(self, source_scm, source_repo,
245 commit1, commit2, diff_limit, file_limit,
245 commit1, commit2, diff_limit, file_limit,
246 fulldiff, hide_whitespace_changes, diff_context):
246 fulldiff, hide_whitespace_changes, diff_context):
247 vcs_diff = source_scm.get_diff(
247 vcs_diff = source_scm.get_diff(
248 commit1, commit2,
248 commit1, commit2,
249 ignore_whitespace=hide_whitespace_changes,
249 ignore_whitespace=hide_whitespace_changes,
250 context=diff_context)
250 context=diff_context)
251
251
252 diff_processor = diffs.DiffProcessor(
252 diff_processor = diffs.DiffProcessor(
253 vcs_diff, format='newdiff', diff_limit=diff_limit,
253 vcs_diff, format='newdiff', diff_limit=diff_limit,
254 file_limit=file_limit, show_full_diff=fulldiff)
254 file_limit=file_limit, show_full_diff=fulldiff)
255
255
256 _parsed = diff_processor.prepare()
256 _parsed = diff_processor.prepare()
257
257
258 diffset = codeblocks.DiffSet(
258 diffset = codeblocks.DiffSet(
259 repo_name=source_repo.repo_name,
259 repo_name=source_repo.repo_name,
260 source_node_getter=codeblocks.diffset_node_getter(commit1),
260 source_node_getter=codeblocks.diffset_node_getter(commit1),
261 target_node_getter=codeblocks.diffset_node_getter(commit2))
261 target_node_getter=codeblocks.diffset_node_getter(commit2))
262
262
263 diffset = self.path_filter.render_patchset_filtered(
263 diffset = self.path_filter.render_patchset_filtered(
264 diffset, _parsed, commit1.raw_id, commit2.raw_id)
264 diffset, _parsed, commit1.raw_id, commit2.raw_id)
265
265
266 return diffset
266 return diffset
267
267
268 @LoginRequired()
268 @LoginRequired()
269 @HasRepoPermissionAnyDecorator(
269 @HasRepoPermissionAnyDecorator(
270 'repository.read', 'repository.write', 'repository.admin')
270 'repository.read', 'repository.write', 'repository.admin')
271 @view_config(
271 @view_config(
272 route_name='pullrequest_show', request_method='GET',
272 route_name='pullrequest_show', request_method='GET',
273 renderer='rhodecode:templates/pullrequests/pullrequest_show.mako')
273 renderer='rhodecode:templates/pullrequests/pullrequest_show.mako')
274 def pull_request_show(self):
274 def pull_request_show(self):
275 _ = self.request.translate
275 _ = self.request.translate
276 c = self.load_default_context()
276 c = self.load_default_context()
277
277
278 pull_request = PullRequest.get_or_404(
278 pull_request = PullRequest.get_or_404(
279 self.request.matchdict['pull_request_id'])
279 self.request.matchdict['pull_request_id'])
280 pull_request_id = pull_request.pull_request_id
280 pull_request_id = pull_request.pull_request_id
281
281
282 c.state_progressing = pull_request.is_state_changing()
282 c.state_progressing = pull_request.is_state_changing()
283
283
284 _new_state = {
284 _new_state = {
285 'created': PullRequest.STATE_CREATED,
285 'created': PullRequest.STATE_CREATED,
286 }.get(self.request.GET.get('force_state'))
286 }.get(self.request.GET.get('force_state'))
287
287
288 if c.is_super_admin and _new_state:
288 if c.is_super_admin and _new_state:
289 with pull_request.set_state(PullRequest.STATE_UPDATING, final_state=_new_state):
289 with pull_request.set_state(PullRequest.STATE_UPDATING, final_state=_new_state):
290 h.flash(
290 h.flash(
291 _('Pull Request state was force changed to `{}`').format(_new_state),
291 _('Pull Request state was force changed to `{}`').format(_new_state),
292 category='success')
292 category='success')
293 Session().commit()
293 Session().commit()
294
294
295 raise HTTPFound(h.route_path(
295 raise HTTPFound(h.route_path(
296 'pullrequest_show', repo_name=self.db_repo_name,
296 'pullrequest_show', repo_name=self.db_repo_name,
297 pull_request_id=pull_request_id))
297 pull_request_id=pull_request_id))
298
298
299 version = self.request.GET.get('version')
299 version = self.request.GET.get('version')
300 from_version = self.request.GET.get('from_version') or version
300 from_version = self.request.GET.get('from_version') or version
301 merge_checks = self.request.GET.get('merge_checks')
301 merge_checks = self.request.GET.get('merge_checks')
302 c.fulldiff = str2bool(self.request.GET.get('fulldiff'))
302 c.fulldiff = str2bool(self.request.GET.get('fulldiff'))
303
303
304 # fetch global flags of ignore ws or context lines
304 # fetch global flags of ignore ws or context lines
305 diff_context = diffs.get_diff_context(self.request)
305 diff_context = diffs.get_diff_context(self.request)
306 hide_whitespace_changes = diffs.get_diff_whitespace_flag(self.request)
306 hide_whitespace_changes = diffs.get_diff_whitespace_flag(self.request)
307
307
308 force_refresh = str2bool(self.request.GET.get('force_refresh'))
308 force_refresh = str2bool(self.request.GET.get('force_refresh'))
309
309
310 (pull_request_latest,
310 (pull_request_latest,
311 pull_request_at_ver,
311 pull_request_at_ver,
312 pull_request_display_obj,
312 pull_request_display_obj,
313 at_version) = PullRequestModel().get_pr_version(
313 at_version) = PullRequestModel().get_pr_version(
314 pull_request_id, version=version)
314 pull_request_id, version=version)
315 pr_closed = pull_request_latest.is_closed()
315 pr_closed = pull_request_latest.is_closed()
316
316
317 if pr_closed and (version or from_version):
317 if pr_closed and (version or from_version):
318 # not allow to browse versions
318 # not allow to browse versions
319 raise HTTPFound(h.route_path(
319 raise HTTPFound(h.route_path(
320 'pullrequest_show', repo_name=self.db_repo_name,
320 'pullrequest_show', repo_name=self.db_repo_name,
321 pull_request_id=pull_request_id))
321 pull_request_id=pull_request_id))
322
322
323 versions = pull_request_display_obj.versions()
323 versions = pull_request_display_obj.versions()
324 # used to store per-commit range diffs
324 # used to store per-commit range diffs
325 c.changes = collections.OrderedDict()
325 c.changes = collections.OrderedDict()
326 c.range_diff_on = self.request.GET.get('range-diff') == "1"
326 c.range_diff_on = self.request.GET.get('range-diff') == "1"
327
327
328 c.at_version = at_version
328 c.at_version = at_version
329 c.at_version_num = (at_version
329 c.at_version_num = (at_version
330 if at_version and at_version != 'latest'
330 if at_version and at_version != 'latest'
331 else None)
331 else None)
332 c.at_version_pos = ChangesetComment.get_index_from_version(
332 c.at_version_pos = ChangesetComment.get_index_from_version(
333 c.at_version_num, versions)
333 c.at_version_num, versions)
334
334
335 (prev_pull_request_latest,
335 (prev_pull_request_latest,
336 prev_pull_request_at_ver,
336 prev_pull_request_at_ver,
337 prev_pull_request_display_obj,
337 prev_pull_request_display_obj,
338 prev_at_version) = PullRequestModel().get_pr_version(
338 prev_at_version) = PullRequestModel().get_pr_version(
339 pull_request_id, version=from_version)
339 pull_request_id, version=from_version)
340
340
341 c.from_version = prev_at_version
341 c.from_version = prev_at_version
342 c.from_version_num = (prev_at_version
342 c.from_version_num = (prev_at_version
343 if prev_at_version and prev_at_version != 'latest'
343 if prev_at_version and prev_at_version != 'latest'
344 else None)
344 else None)
345 c.from_version_pos = ChangesetComment.get_index_from_version(
345 c.from_version_pos = ChangesetComment.get_index_from_version(
346 c.from_version_num, versions)
346 c.from_version_num, versions)
347
347
348 # define if we're in COMPARE mode or VIEW at version mode
348 # define if we're in COMPARE mode or VIEW at version mode
349 compare = at_version != prev_at_version
349 compare = at_version != prev_at_version
350
350
351 # pull_requests repo_name we opened it against
351 # pull_requests repo_name we opened it against
352 # ie. target_repo must match
352 # ie. target_repo must match
353 if self.db_repo_name != pull_request_at_ver.target_repo.repo_name:
353 if self.db_repo_name != pull_request_at_ver.target_repo.repo_name:
354 raise HTTPNotFound()
354 raise HTTPNotFound()
355
355
356 c.shadow_clone_url = PullRequestModel().get_shadow_clone_url(
356 c.shadow_clone_url = PullRequestModel().get_shadow_clone_url(
357 pull_request_at_ver)
357 pull_request_at_ver)
358
358
359 c.pull_request = pull_request_display_obj
359 c.pull_request = pull_request_display_obj
360 c.renderer = pull_request_at_ver.description_renderer or c.renderer
360 c.renderer = pull_request_at_ver.description_renderer or c.renderer
361 c.pull_request_latest = pull_request_latest
361 c.pull_request_latest = pull_request_latest
362
362
363 if compare or (at_version and not at_version == 'latest'):
363 if compare or (at_version and not at_version == 'latest'):
364 c.allowed_to_change_status = False
364 c.allowed_to_change_status = False
365 c.allowed_to_update = False
365 c.allowed_to_update = False
366 c.allowed_to_merge = False
366 c.allowed_to_merge = False
367 c.allowed_to_delete = False
367 c.allowed_to_delete = False
368 c.allowed_to_comment = False
368 c.allowed_to_comment = False
369 c.allowed_to_close = False
369 c.allowed_to_close = False
370 else:
370 else:
371 can_change_status = PullRequestModel().check_user_change_status(
371 can_change_status = PullRequestModel().check_user_change_status(
372 pull_request_at_ver, self._rhodecode_user)
372 pull_request_at_ver, self._rhodecode_user)
373 c.allowed_to_change_status = can_change_status and not pr_closed
373 c.allowed_to_change_status = can_change_status and not pr_closed
374
374
375 c.allowed_to_update = PullRequestModel().check_user_update(
375 c.allowed_to_update = PullRequestModel().check_user_update(
376 pull_request_latest, self._rhodecode_user) and not pr_closed
376 pull_request_latest, self._rhodecode_user) and not pr_closed
377 c.allowed_to_merge = PullRequestModel().check_user_merge(
377 c.allowed_to_merge = PullRequestModel().check_user_merge(
378 pull_request_latest, self._rhodecode_user) and not pr_closed
378 pull_request_latest, self._rhodecode_user) and not pr_closed
379 c.allowed_to_delete = PullRequestModel().check_user_delete(
379 c.allowed_to_delete = PullRequestModel().check_user_delete(
380 pull_request_latest, self._rhodecode_user) and not pr_closed
380 pull_request_latest, self._rhodecode_user) and not pr_closed
381 c.allowed_to_comment = not pr_closed
381 c.allowed_to_comment = not pr_closed
382 c.allowed_to_close = c.allowed_to_merge and not pr_closed
382 c.allowed_to_close = c.allowed_to_merge and not pr_closed
383
383
384 c.forbid_adding_reviewers = False
384 c.forbid_adding_reviewers = False
385 c.forbid_author_to_review = False
385 c.forbid_author_to_review = False
386 c.forbid_commit_author_to_review = False
386 c.forbid_commit_author_to_review = False
387
387
388 if pull_request_latest.reviewer_data and \
388 if pull_request_latest.reviewer_data and \
389 'rules' in pull_request_latest.reviewer_data:
389 'rules' in pull_request_latest.reviewer_data:
390 rules = pull_request_latest.reviewer_data['rules'] or {}
390 rules = pull_request_latest.reviewer_data['rules'] or {}
391 try:
391 try:
392 c.forbid_adding_reviewers = rules.get(
392 c.forbid_adding_reviewers = rules.get(
393 'forbid_adding_reviewers')
393 'forbid_adding_reviewers')
394 c.forbid_author_to_review = rules.get(
394 c.forbid_author_to_review = rules.get(
395 'forbid_author_to_review')
395 'forbid_author_to_review')
396 c.forbid_commit_author_to_review = rules.get(
396 c.forbid_commit_author_to_review = rules.get(
397 'forbid_commit_author_to_review')
397 'forbid_commit_author_to_review')
398 except Exception:
398 except Exception:
399 pass
399 pass
400
400
401 # check merge capabilities
401 # check merge capabilities
402 _merge_check = MergeCheck.validate(
402 _merge_check = MergeCheck.validate(
403 pull_request_latest, auth_user=self._rhodecode_user,
403 pull_request_latest, auth_user=self._rhodecode_user,
404 translator=self.request.translate,
404 translator=self.request.translate,
405 force_shadow_repo_refresh=force_refresh)
405 force_shadow_repo_refresh=force_refresh)
406
406
407 c.pr_merge_errors = _merge_check.error_details
407 c.pr_merge_errors = _merge_check.error_details
408 c.pr_merge_possible = not _merge_check.failed
408 c.pr_merge_possible = not _merge_check.failed
409 c.pr_merge_message = _merge_check.merge_msg
409 c.pr_merge_message = _merge_check.merge_msg
410 c.pr_merge_source_commit = _merge_check.source_commit
410 c.pr_merge_source_commit = _merge_check.source_commit
411 c.pr_merge_target_commit = _merge_check.target_commit
411 c.pr_merge_target_commit = _merge_check.target_commit
412
412
413 c.pr_merge_info = MergeCheck.get_merge_conditions(
413 c.pr_merge_info = MergeCheck.get_merge_conditions(
414 pull_request_latest, translator=self.request.translate)
414 pull_request_latest, translator=self.request.translate)
415
415
416 c.pull_request_review_status = _merge_check.review_status
416 c.pull_request_review_status = _merge_check.review_status
417 if merge_checks:
417 if merge_checks:
418 self.request.override_renderer = \
418 self.request.override_renderer = \
419 'rhodecode:templates/pullrequests/pullrequest_merge_checks.mako'
419 'rhodecode:templates/pullrequests/pullrequest_merge_checks.mako'
420 return self._get_template_context(c)
420 return self._get_template_context(c)
421
421
422 comments_model = CommentsModel()
422 comments_model = CommentsModel()
423
423
424 # reviewers and statuses
424 # reviewers and statuses
425 c.pull_request_reviewers = pull_request_at_ver.reviewers_statuses()
425 c.pull_request_reviewers = pull_request_at_ver.reviewers_statuses()
426 allowed_reviewers = [x[0].user_id for x in c.pull_request_reviewers]
426 allowed_reviewers = [x[0].user_id for x in c.pull_request_reviewers]
427
427
428 # GENERAL COMMENTS with versions #
428 # GENERAL COMMENTS with versions #
429 q = comments_model._all_general_comments_of_pull_request(pull_request_latest)
429 q = comments_model._all_general_comments_of_pull_request(pull_request_latest)
430 q = q.order_by(ChangesetComment.comment_id.asc())
430 q = q.order_by(ChangesetComment.comment_id.asc())
431 general_comments = q
431 general_comments = q
432
432
433 # pick comments we want to render at current version
433 # pick comments we want to render at current version
434 c.comment_versions = comments_model.aggregate_comments(
434 c.comment_versions = comments_model.aggregate_comments(
435 general_comments, versions, c.at_version_num)
435 general_comments, versions, c.at_version_num)
436 c.comments = c.comment_versions[c.at_version_num]['until']
436 c.comments = c.comment_versions[c.at_version_num]['until']
437
437
438 # INLINE COMMENTS with versions #
438 # INLINE COMMENTS with versions #
439 q = comments_model._all_inline_comments_of_pull_request(pull_request_latest)
439 q = comments_model._all_inline_comments_of_pull_request(pull_request_latest)
440 q = q.order_by(ChangesetComment.comment_id.asc())
440 q = q.order_by(ChangesetComment.comment_id.asc())
441 inline_comments = q
441 inline_comments = q
442
442
443 c.inline_versions = comments_model.aggregate_comments(
443 c.inline_versions = comments_model.aggregate_comments(
444 inline_comments, versions, c.at_version_num, inline=True)
444 inline_comments, versions, c.at_version_num, inline=True)
445
445
446 # TODOs
446 # TODOs
447 c.unresolved_comments = CommentsModel() \
447 c.unresolved_comments = CommentsModel() \
448 .get_pull_request_unresolved_todos(pull_request)
448 .get_pull_request_unresolved_todos(pull_request)
449 c.resolved_comments = CommentsModel() \
449 c.resolved_comments = CommentsModel() \
450 .get_pull_request_resolved_todos(pull_request)
450 .get_pull_request_resolved_todos(pull_request)
451
451
452 # inject latest version
452 # inject latest version
453 latest_ver = PullRequest.get_pr_display_object(
453 latest_ver = PullRequest.get_pr_display_object(
454 pull_request_latest, pull_request_latest)
454 pull_request_latest, pull_request_latest)
455
455
456 c.versions = versions + [latest_ver]
456 c.versions = versions + [latest_ver]
457
457
458 # if we use version, then do not show later comments
458 # if we use version, then do not show later comments
459 # than current version
459 # than current version
460 display_inline_comments = collections.defaultdict(
460 display_inline_comments = collections.defaultdict(
461 lambda: collections.defaultdict(list))
461 lambda: collections.defaultdict(list))
462 for co in inline_comments:
462 for co in inline_comments:
463 if c.at_version_num:
463 if c.at_version_num:
464 # pick comments that are at least UPTO given version, so we
464 # pick comments that are at least UPTO given version, so we
465 # don't render comments for higher version
465 # don't render comments for higher version
466 should_render = co.pull_request_version_id and \
466 should_render = co.pull_request_version_id and \
467 co.pull_request_version_id <= c.at_version_num
467 co.pull_request_version_id <= c.at_version_num
468 else:
468 else:
469 # showing all, for 'latest'
469 # showing all, for 'latest'
470 should_render = True
470 should_render = True
471
471
472 if should_render:
472 if should_render:
473 display_inline_comments[co.f_path][co.line_no].append(co)
473 display_inline_comments[co.f_path][co.line_no].append(co)
474
474
475 # load diff data into template context, if we use compare mode then
475 # load diff data into template context, if we use compare mode then
476 # diff is calculated based on changes between versions of PR
476 # diff is calculated based on changes between versions of PR
477
477
478 source_repo = pull_request_at_ver.source_repo
478 source_repo = pull_request_at_ver.source_repo
479 source_ref_id = pull_request_at_ver.source_ref_parts.commit_id
479 source_ref_id = pull_request_at_ver.source_ref_parts.commit_id
480
480
481 target_repo = pull_request_at_ver.target_repo
481 target_repo = pull_request_at_ver.target_repo
482 target_ref_id = pull_request_at_ver.target_ref_parts.commit_id
482 target_ref_id = pull_request_at_ver.target_ref_parts.commit_id
483
483
484 if compare:
484 if compare:
485 # in compare switch the diff base to latest commit from prev version
485 # in compare switch the diff base to latest commit from prev version
486 target_ref_id = prev_pull_request_display_obj.revisions[0]
486 target_ref_id = prev_pull_request_display_obj.revisions[0]
487
487
488 # despite opening commits for bookmarks/branches/tags, we always
488 # despite opening commits for bookmarks/branches/tags, we always
489 # convert this to rev to prevent changes after bookmark or branch change
489 # convert this to rev to prevent changes after bookmark or branch change
490 c.source_ref_type = 'rev'
490 c.source_ref_type = 'rev'
491 c.source_ref = source_ref_id
491 c.source_ref = source_ref_id
492
492
493 c.target_ref_type = 'rev'
493 c.target_ref_type = 'rev'
494 c.target_ref = target_ref_id
494 c.target_ref = target_ref_id
495
495
496 c.source_repo = source_repo
496 c.source_repo = source_repo
497 c.target_repo = target_repo
497 c.target_repo = target_repo
498
498
499 c.commit_ranges = []
499 c.commit_ranges = []
500 source_commit = EmptyCommit()
500 source_commit = EmptyCommit()
501 target_commit = EmptyCommit()
501 target_commit = EmptyCommit()
502 c.missing_requirements = False
502 c.missing_requirements = False
503
503
504 source_scm = source_repo.scm_instance()
504 source_scm = source_repo.scm_instance()
505 target_scm = target_repo.scm_instance()
505 target_scm = target_repo.scm_instance()
506
506
507 shadow_scm = None
507 shadow_scm = None
508 try:
508 try:
509 shadow_scm = pull_request_latest.get_shadow_repo()
509 shadow_scm = pull_request_latest.get_shadow_repo()
510 except Exception:
510 except Exception:
511 log.debug('Failed to get shadow repo', exc_info=True)
511 log.debug('Failed to get shadow repo', exc_info=True)
512 # try first the existing source_repo, and then shadow
512 # try first the existing source_repo, and then shadow
513 # repo if we can obtain one
513 # repo if we can obtain one
514 commits_source_repo = source_scm
514 commits_source_repo = source_scm
515 if shadow_scm:
515 if shadow_scm:
516 commits_source_repo = shadow_scm
516 commits_source_repo = shadow_scm
517
517
518 c.commits_source_repo = commits_source_repo
518 c.commits_source_repo = commits_source_repo
519 c.ancestor = None # set it to None, to hide it from PR view
519 c.ancestor = None # set it to None, to hide it from PR view
520
520
521 # empty version means latest, so we keep this to prevent
521 # empty version means latest, so we keep this to prevent
522 # double caching
522 # double caching
523 version_normalized = version or 'latest'
523 version_normalized = version or 'latest'
524 from_version_normalized = from_version or 'latest'
524 from_version_normalized = from_version or 'latest'
525
525
526 cache_path = self.rhodecode_vcs_repo.get_create_shadow_cache_pr_path(target_repo)
526 cache_path = self.rhodecode_vcs_repo.get_create_shadow_cache_pr_path(target_repo)
527 cache_file_path = diff_cache_exist(
527 cache_file_path = diff_cache_exist(
528 cache_path, 'pull_request', pull_request_id, version_normalized,
528 cache_path, 'pull_request', pull_request_id, version_normalized,
529 from_version_normalized, source_ref_id, target_ref_id,
529 from_version_normalized, source_ref_id, target_ref_id,
530 hide_whitespace_changes, diff_context, c.fulldiff)
530 hide_whitespace_changes, diff_context, c.fulldiff)
531
531
532 caching_enabled = self._is_diff_cache_enabled(c.target_repo)
532 caching_enabled = self._is_diff_cache_enabled(c.target_repo)
533 force_recache = self.get_recache_flag()
533 force_recache = self.get_recache_flag()
534
534
535 cached_diff = None
535 cached_diff = None
536 if caching_enabled:
536 if caching_enabled:
537 cached_diff = load_cached_diff(cache_file_path)
537 cached_diff = load_cached_diff(cache_file_path)
538
538
539 has_proper_commit_cache = (
539 has_proper_commit_cache = (
540 cached_diff and cached_diff.get('commits')
540 cached_diff and cached_diff.get('commits')
541 and len(cached_diff.get('commits', [])) == 5
541 and len(cached_diff.get('commits', [])) == 5
542 and cached_diff.get('commits')[0]
542 and cached_diff.get('commits')[0]
543 and cached_diff.get('commits')[3])
543 and cached_diff.get('commits')[3])
544
544
545 if not force_recache and not c.range_diff_on and has_proper_commit_cache:
545 if not force_recache and not c.range_diff_on and has_proper_commit_cache:
546 diff_commit_cache = \
546 diff_commit_cache = \
547 (ancestor_commit, commit_cache, missing_requirements,
547 (ancestor_commit, commit_cache, missing_requirements,
548 source_commit, target_commit) = cached_diff['commits']
548 source_commit, target_commit) = cached_diff['commits']
549 else:
549 else:
550 # NOTE(marcink): we reach potentially unreachable errors when a PR has
550 # NOTE(marcink): we reach potentially unreachable errors when a PR has
551 # merge errors resulting in potentially hidden commits in the shadow repo.
551 # merge errors resulting in potentially hidden commits in the shadow repo.
552 maybe_unreachable = _merge_check.MERGE_CHECK in _merge_check.error_details \
552 maybe_unreachable = _merge_check.MERGE_CHECK in _merge_check.error_details \
553 and _merge_check.merge_response
553 and _merge_check.merge_response
554 maybe_unreachable = maybe_unreachable \
554 maybe_unreachable = maybe_unreachable \
555 and _merge_check.merge_response.metadata.get('unresolved_files')
555 and _merge_check.merge_response.metadata.get('unresolved_files')
556 log.debug("Using unreachable commits due to MERGE_CHECK in merge simulation")
556 log.debug("Using unreachable commits due to MERGE_CHECK in merge simulation")
557 diff_commit_cache = \
557 diff_commit_cache = \
558 (ancestor_commit, commit_cache, missing_requirements,
558 (ancestor_commit, commit_cache, missing_requirements,
559 source_commit, target_commit) = self.get_commits(
559 source_commit, target_commit) = self.get_commits(
560 commits_source_repo,
560 commits_source_repo,
561 pull_request_at_ver,
561 pull_request_at_ver,
562 source_commit,
562 source_commit,
563 source_ref_id,
563 source_ref_id,
564 source_scm,
564 source_scm,
565 target_commit,
565 target_commit,
566 target_ref_id,
566 target_ref_id,
567 target_scm,
567 target_scm,
568 maybe_unreachable=maybe_unreachable)
568 maybe_unreachable=maybe_unreachable)
569
569
570 # register our commit range
570 # register our commit range
571 for comm in commit_cache.values():
571 for comm in commit_cache.values():
572 c.commit_ranges.append(comm)
572 c.commit_ranges.append(comm)
573
573
574 c.missing_requirements = missing_requirements
574 c.missing_requirements = missing_requirements
575 c.ancestor_commit = ancestor_commit
575 c.ancestor_commit = ancestor_commit
576 c.statuses = source_repo.statuses(
576 c.statuses = source_repo.statuses(
577 [x.raw_id for x in c.commit_ranges])
577 [x.raw_id for x in c.commit_ranges])
578
578
579 # auto collapse if we have more than limit
579 # auto collapse if we have more than limit
580 collapse_limit = diffs.DiffProcessor._collapse_commits_over
580 collapse_limit = diffs.DiffProcessor._collapse_commits_over
581 c.collapse_all_commits = len(c.commit_ranges) > collapse_limit
581 c.collapse_all_commits = len(c.commit_ranges) > collapse_limit
582 c.compare_mode = compare
582 c.compare_mode = compare
583
583
584 # diff_limit is the old behavior, will cut off the whole diff
584 # diff_limit is the old behavior, will cut off the whole diff
585 # if the limit is applied otherwise will just hide the
585 # if the limit is applied otherwise will just hide the
586 # big files from the front-end
586 # big files from the front-end
587 diff_limit = c.visual.cut_off_limit_diff
587 diff_limit = c.visual.cut_off_limit_diff
588 file_limit = c.visual.cut_off_limit_file
588 file_limit = c.visual.cut_off_limit_file
589
589
590 c.missing_commits = False
590 c.missing_commits = False
591 if (c.missing_requirements
591 if (c.missing_requirements
592 or isinstance(source_commit, EmptyCommit)
592 or isinstance(source_commit, EmptyCommit)
593 or source_commit == target_commit):
593 or source_commit == target_commit):
594
594
595 c.missing_commits = True
595 c.missing_commits = True
596 else:
596 else:
597 c.inline_comments = display_inline_comments
597 c.inline_comments = display_inline_comments
598
598
599 use_ancestor = True
599 use_ancestor = True
600 if from_version_normalized != version_normalized:
600 if from_version_normalized != version_normalized:
601 use_ancestor = False
601 use_ancestor = False
602
602
603 has_proper_diff_cache = cached_diff and cached_diff.get('commits')
603 has_proper_diff_cache = cached_diff and cached_diff.get('commits')
604 if not force_recache and has_proper_diff_cache:
604 if not force_recache and has_proper_diff_cache:
605 c.diffset = cached_diff['diff']
605 c.diffset = cached_diff['diff']
606 else:
606 else:
607 c.diffset = self._get_diffset(
607 try:
608 c.source_repo.repo_name, commits_source_repo,
608 c.diffset = self._get_diffset(
609 c.ancestor_commit,
609 c.source_repo.repo_name, commits_source_repo,
610 source_ref_id, target_ref_id,
610 c.ancestor_commit,
611 target_commit, source_commit,
611 source_ref_id, target_ref_id,
612 diff_limit, file_limit, c.fulldiff,
612 target_commit, source_commit,
613 hide_whitespace_changes, diff_context,
613 diff_limit, file_limit, c.fulldiff,
614 use_ancestor=use_ancestor
614 hide_whitespace_changes, diff_context,
615 )
615 use_ancestor=use_ancestor
616
616 )
617 # save cached diff
618 if caching_enabled:
619 cache_diff(cache_file_path, c.diffset, diff_commit_cache)
620
621 c.limited_diff = c.diffset.limited_diff
622
623 # calculate removed files that are bound to comments
624 comment_deleted_files = [
625 fname for fname in display_inline_comments
626 if fname not in c.diffset.file_stats]
627
628 c.deleted_files_comments = collections.defaultdict(dict)
629 for fname, per_line_comments in display_inline_comments.items():
630 if fname in comment_deleted_files:
631 c.deleted_files_comments[fname]['stats'] = 0
632 c.deleted_files_comments[fname]['comments'] = list()
633 for lno, comments in per_line_comments.items():
634 c.deleted_files_comments[fname]['comments'].extend(comments)
635
636 # maybe calculate the range diff
637 if c.range_diff_on:
638 # TODO(marcink): set whitespace/context
639 context_lcl = 3
640 ign_whitespace_lcl = False
641
642 for commit in c.commit_ranges:
643 commit2 = commit
644 commit1 = commit.first_parent
645
646 range_diff_cache_file_path = diff_cache_exist(
647 cache_path, 'diff', commit.raw_id,
648 ign_whitespace_lcl, context_lcl, c.fulldiff)
649
650 cached_diff = None
651 if caching_enabled:
652 cached_diff = load_cached_diff(range_diff_cache_file_path)
653
654 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
655 if not force_recache and has_proper_diff_cache:
656 diffset = cached_diff['diff']
657 else:
658 diffset = self._get_range_diffset(
659 commits_source_repo, source_repo,
660 commit1, commit2, diff_limit, file_limit,
661 c.fulldiff, ign_whitespace_lcl, context_lcl
662 )
663
617
664 # save cached diff
618 # save cached diff
665 if caching_enabled:
619 if caching_enabled:
666 cache_diff(range_diff_cache_file_path, diffset, None)
620 cache_diff(cache_file_path, c.diffset, diff_commit_cache)
621 except CommitDoesNotExistError:
622 log.exception('Failed to generate diffset')
623 c.missing_commits = True
624
625 if not c.missing_commits:
626
627 c.limited_diff = c.diffset.limited_diff
628
629 # calculate removed files that are bound to comments
630 comment_deleted_files = [
631 fname for fname in display_inline_comments
632 if fname not in c.diffset.file_stats]
633
634 c.deleted_files_comments = collections.defaultdict(dict)
635 for fname, per_line_comments in display_inline_comments.items():
636 if fname in comment_deleted_files:
637 c.deleted_files_comments[fname]['stats'] = 0
638 c.deleted_files_comments[fname]['comments'] = list()
639 for lno, comments in per_line_comments.items():
640 c.deleted_files_comments[fname]['comments'].extend(comments)
641
642 # maybe calculate the range diff
643 if c.range_diff_on:
644 # TODO(marcink): set whitespace/context
645 context_lcl = 3
646 ign_whitespace_lcl = False
667
647
668 c.changes[commit.raw_id] = diffset
648 for commit in c.commit_ranges:
649 commit2 = commit
650 commit1 = commit.first_parent
651
652 range_diff_cache_file_path = diff_cache_exist(
653 cache_path, 'diff', commit.raw_id,
654 ign_whitespace_lcl, context_lcl, c.fulldiff)
655
656 cached_diff = None
657 if caching_enabled:
658 cached_diff = load_cached_diff(range_diff_cache_file_path)
659
660 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
661 if not force_recache and has_proper_diff_cache:
662 diffset = cached_diff['diff']
663 else:
664 diffset = self._get_range_diffset(
665 commits_source_repo, source_repo,
666 commit1, commit2, diff_limit, file_limit,
667 c.fulldiff, ign_whitespace_lcl, context_lcl
668 )
669
670 # save cached diff
671 if caching_enabled:
672 cache_diff(range_diff_cache_file_path, diffset, None)
673
674 c.changes[commit.raw_id] = diffset
669
675
670 # this is a hack to properly display links, when creating PR, the
676 # this is a hack to properly display links, when creating PR, the
671 # compare view and others uses different notation, and
677 # compare view and others uses different notation, and
672 # compare_commits.mako renders links based on the target_repo.
678 # compare_commits.mako renders links based on the target_repo.
673 # We need to swap that here to generate it properly on the html side
679 # We need to swap that here to generate it properly on the html side
674 c.target_repo = c.source_repo
680 c.target_repo = c.source_repo
675
681
676 c.commit_statuses = ChangesetStatus.STATUSES
682 c.commit_statuses = ChangesetStatus.STATUSES
677
683
678 c.show_version_changes = not pr_closed
684 c.show_version_changes = not pr_closed
679 if c.show_version_changes:
685 if c.show_version_changes:
680 cur_obj = pull_request_at_ver
686 cur_obj = pull_request_at_ver
681 prev_obj = prev_pull_request_at_ver
687 prev_obj = prev_pull_request_at_ver
682
688
683 old_commit_ids = prev_obj.revisions
689 old_commit_ids = prev_obj.revisions
684 new_commit_ids = cur_obj.revisions
690 new_commit_ids = cur_obj.revisions
685 commit_changes = PullRequestModel()._calculate_commit_id_changes(
691 commit_changes = PullRequestModel()._calculate_commit_id_changes(
686 old_commit_ids, new_commit_ids)
692 old_commit_ids, new_commit_ids)
687 c.commit_changes_summary = commit_changes
693 c.commit_changes_summary = commit_changes
688
694
689 # calculate the diff for commits between versions
695 # calculate the diff for commits between versions
690 c.commit_changes = []
696 c.commit_changes = []
691
697
692 def mark(cs, fw):
698 def mark(cs, fw):
693 return list(h.itertools.izip_longest([], cs, fillvalue=fw))
699 return list(h.itertools.izip_longest([], cs, fillvalue=fw))
694
700
695 for c_type, raw_id in mark(commit_changes.added, 'a') \
701 for c_type, raw_id in mark(commit_changes.added, 'a') \
696 + mark(commit_changes.removed, 'r') \
702 + mark(commit_changes.removed, 'r') \
697 + mark(commit_changes.common, 'c'):
703 + mark(commit_changes.common, 'c'):
698
704
699 if raw_id in commit_cache:
705 if raw_id in commit_cache:
700 commit = commit_cache[raw_id]
706 commit = commit_cache[raw_id]
701 else:
707 else:
702 try:
708 try:
703 commit = commits_source_repo.get_commit(raw_id)
709 commit = commits_source_repo.get_commit(raw_id)
704 except CommitDoesNotExistError:
710 except CommitDoesNotExistError:
705 # in case we fail extracting still use "dummy" commit
711 # in case we fail extracting still use "dummy" commit
706 # for display in commit diff
712 # for display in commit diff
707 commit = h.AttributeDict(
713 commit = h.AttributeDict(
708 {'raw_id': raw_id,
714 {'raw_id': raw_id,
709 'message': 'EMPTY or MISSING COMMIT'})
715 'message': 'EMPTY or MISSING COMMIT'})
710 c.commit_changes.append([c_type, commit])
716 c.commit_changes.append([c_type, commit])
711
717
712 # current user review statuses for each version
718 # current user review statuses for each version
713 c.review_versions = {}
719 c.review_versions = {}
714 if self._rhodecode_user.user_id in allowed_reviewers:
720 if self._rhodecode_user.user_id in allowed_reviewers:
715 for co in general_comments:
721 for co in general_comments:
716 if co.author.user_id == self._rhodecode_user.user_id:
722 if co.author.user_id == self._rhodecode_user.user_id:
717 status = co.status_change
723 status = co.status_change
718 if status:
724 if status:
719 _ver_pr = status[0].comment.pull_request_version_id
725 _ver_pr = status[0].comment.pull_request_version_id
720 c.review_versions[_ver_pr] = status[0]
726 c.review_versions[_ver_pr] = status[0]
721
727
722 return self._get_template_context(c)
728 return self._get_template_context(c)
723
729
724 def get_commits(
730 def get_commits(
725 self, commits_source_repo, pull_request_at_ver, source_commit,
731 self, commits_source_repo, pull_request_at_ver, source_commit,
726 source_ref_id, source_scm, target_commit, target_ref_id, target_scm,
732 source_ref_id, source_scm, target_commit, target_ref_id, target_scm,
727 maybe_unreachable=False):
733 maybe_unreachable=False):
728
734
729 commit_cache = collections.OrderedDict()
735 commit_cache = collections.OrderedDict()
730 missing_requirements = False
736 missing_requirements = False
731
737
732 try:
738 try:
733 pre_load = ["author", "date", "message", "branch", "parents"]
739 pre_load = ["author", "date", "message", "branch", "parents"]
734
740
735 pull_request_commits = pull_request_at_ver.revisions
741 pull_request_commits = pull_request_at_ver.revisions
736 log.debug('Loading %s commits from %s',
742 log.debug('Loading %s commits from %s',
737 len(pull_request_commits), commits_source_repo)
743 len(pull_request_commits), commits_source_repo)
738
744
739 for rev in pull_request_commits:
745 for rev in pull_request_commits:
740 comm = commits_source_repo.get_commit(commit_id=rev, pre_load=pre_load,
746 comm = commits_source_repo.get_commit(commit_id=rev, pre_load=pre_load,
741 maybe_unreachable=maybe_unreachable)
747 maybe_unreachable=maybe_unreachable)
742 commit_cache[comm.raw_id] = comm
748 commit_cache[comm.raw_id] = comm
743
749
744 # Order here matters, we first need to get target, and then
750 # Order here matters, we first need to get target, and then
745 # the source
751 # the source
746 target_commit = commits_source_repo.get_commit(
752 target_commit = commits_source_repo.get_commit(
747 commit_id=safe_str(target_ref_id))
753 commit_id=safe_str(target_ref_id))
748
754
749 source_commit = commits_source_repo.get_commit(
755 source_commit = commits_source_repo.get_commit(
750 commit_id=safe_str(source_ref_id), maybe_unreachable=True)
756 commit_id=safe_str(source_ref_id), maybe_unreachable=True)
751 except CommitDoesNotExistError:
757 except CommitDoesNotExistError:
752 log.warning('Failed to get commit from `{}` repo'.format(
758 log.warning('Failed to get commit from `{}` repo'.format(
753 commits_source_repo), exc_info=True)
759 commits_source_repo), exc_info=True)
754 except RepositoryRequirementError:
760 except RepositoryRequirementError:
755 log.warning('Failed to get all required data from repo', exc_info=True)
761 log.warning('Failed to get all required data from repo', exc_info=True)
756 missing_requirements = True
762 missing_requirements = True
757
763
758 pr_ancestor_id = pull_request_at_ver.common_ancestor_id
764 pr_ancestor_id = pull_request_at_ver.common_ancestor_id
759
765
760 try:
766 try:
761 ancestor_commit = source_scm.get_commit(pr_ancestor_id)
767 ancestor_commit = source_scm.get_commit(pr_ancestor_id)
762 except Exception:
768 except Exception:
763 ancestor_commit = None
769 ancestor_commit = None
764
770
765 return ancestor_commit, commit_cache, missing_requirements, source_commit, target_commit
771 return ancestor_commit, commit_cache, missing_requirements, source_commit, target_commit
766
772
767 def assure_not_empty_repo(self):
773 def assure_not_empty_repo(self):
768 _ = self.request.translate
774 _ = self.request.translate
769
775
770 try:
776 try:
771 self.db_repo.scm_instance().get_commit()
777 self.db_repo.scm_instance().get_commit()
772 except EmptyRepositoryError:
778 except EmptyRepositoryError:
773 h.flash(h.literal(_('There are no commits yet')),
779 h.flash(h.literal(_('There are no commits yet')),
774 category='warning')
780 category='warning')
775 raise HTTPFound(
781 raise HTTPFound(
776 h.route_path('repo_summary', repo_name=self.db_repo.repo_name))
782 h.route_path('repo_summary', repo_name=self.db_repo.repo_name))
777
783
778 @LoginRequired()
784 @LoginRequired()
779 @NotAnonymous()
785 @NotAnonymous()
780 @HasRepoPermissionAnyDecorator(
786 @HasRepoPermissionAnyDecorator(
781 'repository.read', 'repository.write', 'repository.admin')
787 'repository.read', 'repository.write', 'repository.admin')
782 @view_config(
788 @view_config(
783 route_name='pullrequest_new', request_method='GET',
789 route_name='pullrequest_new', request_method='GET',
784 renderer='rhodecode:templates/pullrequests/pullrequest.mako')
790 renderer='rhodecode:templates/pullrequests/pullrequest.mako')
785 def pull_request_new(self):
791 def pull_request_new(self):
786 _ = self.request.translate
792 _ = self.request.translate
787 c = self.load_default_context()
793 c = self.load_default_context()
788
794
789 self.assure_not_empty_repo()
795 self.assure_not_empty_repo()
790 source_repo = self.db_repo
796 source_repo = self.db_repo
791
797
792 commit_id = self.request.GET.get('commit')
798 commit_id = self.request.GET.get('commit')
793 branch_ref = self.request.GET.get('branch')
799 branch_ref = self.request.GET.get('branch')
794 bookmark_ref = self.request.GET.get('bookmark')
800 bookmark_ref = self.request.GET.get('bookmark')
795
801
796 try:
802 try:
797 source_repo_data = PullRequestModel().generate_repo_data(
803 source_repo_data = PullRequestModel().generate_repo_data(
798 source_repo, commit_id=commit_id,
804 source_repo, commit_id=commit_id,
799 branch=branch_ref, bookmark=bookmark_ref,
805 branch=branch_ref, bookmark=bookmark_ref,
800 translator=self.request.translate)
806 translator=self.request.translate)
801 except CommitDoesNotExistError as e:
807 except CommitDoesNotExistError as e:
802 log.exception(e)
808 log.exception(e)
803 h.flash(_('Commit does not exist'), 'error')
809 h.flash(_('Commit does not exist'), 'error')
804 raise HTTPFound(
810 raise HTTPFound(
805 h.route_path('pullrequest_new', repo_name=source_repo.repo_name))
811 h.route_path('pullrequest_new', repo_name=source_repo.repo_name))
806
812
807 default_target_repo = source_repo
813 default_target_repo = source_repo
808
814
809 if source_repo.parent and c.has_origin_repo_read_perm:
815 if source_repo.parent and c.has_origin_repo_read_perm:
810 parent_vcs_obj = source_repo.parent.scm_instance()
816 parent_vcs_obj = source_repo.parent.scm_instance()
811 if parent_vcs_obj and not parent_vcs_obj.is_empty():
817 if parent_vcs_obj and not parent_vcs_obj.is_empty():
812 # change default if we have a parent repo
818 # change default if we have a parent repo
813 default_target_repo = source_repo.parent
819 default_target_repo = source_repo.parent
814
820
815 target_repo_data = PullRequestModel().generate_repo_data(
821 target_repo_data = PullRequestModel().generate_repo_data(
816 default_target_repo, translator=self.request.translate)
822 default_target_repo, translator=self.request.translate)
817
823
818 selected_source_ref = source_repo_data['refs']['selected_ref']
824 selected_source_ref = source_repo_data['refs']['selected_ref']
819 title_source_ref = ''
825 title_source_ref = ''
820 if selected_source_ref:
826 if selected_source_ref:
821 title_source_ref = selected_source_ref.split(':', 2)[1]
827 title_source_ref = selected_source_ref.split(':', 2)[1]
822 c.default_title = PullRequestModel().generate_pullrequest_title(
828 c.default_title = PullRequestModel().generate_pullrequest_title(
823 source=source_repo.repo_name,
829 source=source_repo.repo_name,
824 source_ref=title_source_ref,
830 source_ref=title_source_ref,
825 target=default_target_repo.repo_name
831 target=default_target_repo.repo_name
826 )
832 )
827
833
828 c.default_repo_data = {
834 c.default_repo_data = {
829 'source_repo_name': source_repo.repo_name,
835 'source_repo_name': source_repo.repo_name,
830 'source_refs_json': json.dumps(source_repo_data),
836 'source_refs_json': json.dumps(source_repo_data),
831 'target_repo_name': default_target_repo.repo_name,
837 'target_repo_name': default_target_repo.repo_name,
832 'target_refs_json': json.dumps(target_repo_data),
838 'target_refs_json': json.dumps(target_repo_data),
833 }
839 }
834 c.default_source_ref = selected_source_ref
840 c.default_source_ref = selected_source_ref
835
841
836 return self._get_template_context(c)
842 return self._get_template_context(c)
837
843
838 @LoginRequired()
844 @LoginRequired()
839 @NotAnonymous()
845 @NotAnonymous()
840 @HasRepoPermissionAnyDecorator(
846 @HasRepoPermissionAnyDecorator(
841 'repository.read', 'repository.write', 'repository.admin')
847 'repository.read', 'repository.write', 'repository.admin')
842 @view_config(
848 @view_config(
843 route_name='pullrequest_repo_refs', request_method='GET',
849 route_name='pullrequest_repo_refs', request_method='GET',
844 renderer='json_ext', xhr=True)
850 renderer='json_ext', xhr=True)
845 def pull_request_repo_refs(self):
851 def pull_request_repo_refs(self):
846 self.load_default_context()
852 self.load_default_context()
847 target_repo_name = self.request.matchdict['target_repo_name']
853 target_repo_name = self.request.matchdict['target_repo_name']
848 repo = Repository.get_by_repo_name(target_repo_name)
854 repo = Repository.get_by_repo_name(target_repo_name)
849 if not repo:
855 if not repo:
850 raise HTTPNotFound()
856 raise HTTPNotFound()
851
857
852 target_perm = HasRepoPermissionAny(
858 target_perm = HasRepoPermissionAny(
853 'repository.read', 'repository.write', 'repository.admin')(
859 'repository.read', 'repository.write', 'repository.admin')(
854 target_repo_name)
860 target_repo_name)
855 if not target_perm:
861 if not target_perm:
856 raise HTTPNotFound()
862 raise HTTPNotFound()
857
863
858 return PullRequestModel().generate_repo_data(
864 return PullRequestModel().generate_repo_data(
859 repo, translator=self.request.translate)
865 repo, translator=self.request.translate)
860
866
861 @LoginRequired()
867 @LoginRequired()
862 @NotAnonymous()
868 @NotAnonymous()
863 @HasRepoPermissionAnyDecorator(
869 @HasRepoPermissionAnyDecorator(
864 'repository.read', 'repository.write', 'repository.admin')
870 'repository.read', 'repository.write', 'repository.admin')
865 @view_config(
871 @view_config(
866 route_name='pullrequest_repo_targets', request_method='GET',
872 route_name='pullrequest_repo_targets', request_method='GET',
867 renderer='json_ext', xhr=True)
873 renderer='json_ext', xhr=True)
868 def pullrequest_repo_targets(self):
874 def pullrequest_repo_targets(self):
869 _ = self.request.translate
875 _ = self.request.translate
870 filter_query = self.request.GET.get('query')
876 filter_query = self.request.GET.get('query')
871
877
872 # get the parents
878 # get the parents
873 parent_target_repos = []
879 parent_target_repos = []
874 if self.db_repo.parent:
880 if self.db_repo.parent:
875 parents_query = Repository.query() \
881 parents_query = Repository.query() \
876 .order_by(func.length(Repository.repo_name)) \
882 .order_by(func.length(Repository.repo_name)) \
877 .filter(Repository.fork_id == self.db_repo.parent.repo_id)
883 .filter(Repository.fork_id == self.db_repo.parent.repo_id)
878
884
879 if filter_query:
885 if filter_query:
880 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
886 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
881 parents_query = parents_query.filter(
887 parents_query = parents_query.filter(
882 Repository.repo_name.ilike(ilike_expression))
888 Repository.repo_name.ilike(ilike_expression))
883 parents = parents_query.limit(20).all()
889 parents = parents_query.limit(20).all()
884
890
885 for parent in parents:
891 for parent in parents:
886 parent_vcs_obj = parent.scm_instance()
892 parent_vcs_obj = parent.scm_instance()
887 if parent_vcs_obj and not parent_vcs_obj.is_empty():
893 if parent_vcs_obj and not parent_vcs_obj.is_empty():
888 parent_target_repos.append(parent)
894 parent_target_repos.append(parent)
889
895
890 # get other forks, and repo itself
896 # get other forks, and repo itself
891 query = Repository.query() \
897 query = Repository.query() \
892 .order_by(func.length(Repository.repo_name)) \
898 .order_by(func.length(Repository.repo_name)) \
893 .filter(
899 .filter(
894 or_(Repository.repo_id == self.db_repo.repo_id, # repo itself
900 or_(Repository.repo_id == self.db_repo.repo_id, # repo itself
895 Repository.fork_id == self.db_repo.repo_id) # forks of this repo
901 Repository.fork_id == self.db_repo.repo_id) # forks of this repo
896 ) \
902 ) \
897 .filter(~Repository.repo_id.in_([x.repo_id for x in parent_target_repos]))
903 .filter(~Repository.repo_id.in_([x.repo_id for x in parent_target_repos]))
898
904
899 if filter_query:
905 if filter_query:
900 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
906 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
901 query = query.filter(Repository.repo_name.ilike(ilike_expression))
907 query = query.filter(Repository.repo_name.ilike(ilike_expression))
902
908
903 limit = max(20 - len(parent_target_repos), 5) # not less then 5
909 limit = max(20 - len(parent_target_repos), 5) # not less then 5
904 target_repos = query.limit(limit).all()
910 target_repos = query.limit(limit).all()
905
911
906 all_target_repos = target_repos + parent_target_repos
912 all_target_repos = target_repos + parent_target_repos
907
913
908 repos = []
914 repos = []
909 # This checks permissions to the repositories
915 # This checks permissions to the repositories
910 for obj in ScmModel().get_repos(all_target_repos):
916 for obj in ScmModel().get_repos(all_target_repos):
911 repos.append({
917 repos.append({
912 'id': obj['name'],
918 'id': obj['name'],
913 'text': obj['name'],
919 'text': obj['name'],
914 'type': 'repo',
920 'type': 'repo',
915 'repo_id': obj['dbrepo']['repo_id'],
921 'repo_id': obj['dbrepo']['repo_id'],
916 'repo_type': obj['dbrepo']['repo_type'],
922 'repo_type': obj['dbrepo']['repo_type'],
917 'private': obj['dbrepo']['private'],
923 'private': obj['dbrepo']['private'],
918
924
919 })
925 })
920
926
921 data = {
927 data = {
922 'more': False,
928 'more': False,
923 'results': [{
929 'results': [{
924 'text': _('Repositories'),
930 'text': _('Repositories'),
925 'children': repos
931 'children': repos
926 }] if repos else []
932 }] if repos else []
927 }
933 }
928 return data
934 return data
929
935
930 @LoginRequired()
936 @LoginRequired()
931 @NotAnonymous()
937 @NotAnonymous()
932 @HasRepoPermissionAnyDecorator(
938 @HasRepoPermissionAnyDecorator(
933 'repository.read', 'repository.write', 'repository.admin')
939 'repository.read', 'repository.write', 'repository.admin')
934 @CSRFRequired()
940 @CSRFRequired()
935 @view_config(
941 @view_config(
936 route_name='pullrequest_create', request_method='POST',
942 route_name='pullrequest_create', request_method='POST',
937 renderer=None)
943 renderer=None)
938 def pull_request_create(self):
944 def pull_request_create(self):
939 _ = self.request.translate
945 _ = self.request.translate
940 self.assure_not_empty_repo()
946 self.assure_not_empty_repo()
941 self.load_default_context()
947 self.load_default_context()
942
948
943 controls = peppercorn.parse(self.request.POST.items())
949 controls = peppercorn.parse(self.request.POST.items())
944
950
945 try:
951 try:
946 form = PullRequestForm(
952 form = PullRequestForm(
947 self.request.translate, self.db_repo.repo_id)()
953 self.request.translate, self.db_repo.repo_id)()
948 _form = form.to_python(controls)
954 _form = form.to_python(controls)
949 except formencode.Invalid as errors:
955 except formencode.Invalid as errors:
950 if errors.error_dict.get('revisions'):
956 if errors.error_dict.get('revisions'):
951 msg = 'Revisions: %s' % errors.error_dict['revisions']
957 msg = 'Revisions: %s' % errors.error_dict['revisions']
952 elif errors.error_dict.get('pullrequest_title'):
958 elif errors.error_dict.get('pullrequest_title'):
953 msg = errors.error_dict.get('pullrequest_title')
959 msg = errors.error_dict.get('pullrequest_title')
954 else:
960 else:
955 msg = _('Error creating pull request: {}').format(errors)
961 msg = _('Error creating pull request: {}').format(errors)
956 log.exception(msg)
962 log.exception(msg)
957 h.flash(msg, 'error')
963 h.flash(msg, 'error')
958
964
959 # would rather just go back to form ...
965 # would rather just go back to form ...
960 raise HTTPFound(
966 raise HTTPFound(
961 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
967 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
962
968
963 source_repo = _form['source_repo']
969 source_repo = _form['source_repo']
964 source_ref = _form['source_ref']
970 source_ref = _form['source_ref']
965 target_repo = _form['target_repo']
971 target_repo = _form['target_repo']
966 target_ref = _form['target_ref']
972 target_ref = _form['target_ref']
967 commit_ids = _form['revisions'][::-1]
973 commit_ids = _form['revisions'][::-1]
968 common_ancestor_id = _form['common_ancestor']
974 common_ancestor_id = _form['common_ancestor']
969
975
970 # find the ancestor for this pr
976 # find the ancestor for this pr
971 source_db_repo = Repository.get_by_repo_name(_form['source_repo'])
977 source_db_repo = Repository.get_by_repo_name(_form['source_repo'])
972 target_db_repo = Repository.get_by_repo_name(_form['target_repo'])
978 target_db_repo = Repository.get_by_repo_name(_form['target_repo'])
973
979
974 if not (source_db_repo or target_db_repo):
980 if not (source_db_repo or target_db_repo):
975 h.flash(_('source_repo or target repo not found'), category='error')
981 h.flash(_('source_repo or target repo not found'), category='error')
976 raise HTTPFound(
982 raise HTTPFound(
977 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
983 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
978
984
979 # re-check permissions again here
985 # re-check permissions again here
980 # source_repo we must have read permissions
986 # source_repo we must have read permissions
981
987
982 source_perm = HasRepoPermissionAny(
988 source_perm = HasRepoPermissionAny(
983 'repository.read', 'repository.write', 'repository.admin')(
989 'repository.read', 'repository.write', 'repository.admin')(
984 source_db_repo.repo_name)
990 source_db_repo.repo_name)
985 if not source_perm:
991 if not source_perm:
986 msg = _('Not Enough permissions to source repo `{}`.'.format(
992 msg = _('Not Enough permissions to source repo `{}`.'.format(
987 source_db_repo.repo_name))
993 source_db_repo.repo_name))
988 h.flash(msg, category='error')
994 h.flash(msg, category='error')
989 # copy the args back to redirect
995 # copy the args back to redirect
990 org_query = self.request.GET.mixed()
996 org_query = self.request.GET.mixed()
991 raise HTTPFound(
997 raise HTTPFound(
992 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
998 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
993 _query=org_query))
999 _query=org_query))
994
1000
995 # target repo we must have read permissions, and also later on
1001 # target repo we must have read permissions, and also later on
996 # we want to check branch permissions here
1002 # we want to check branch permissions here
997 target_perm = HasRepoPermissionAny(
1003 target_perm = HasRepoPermissionAny(
998 'repository.read', 'repository.write', 'repository.admin')(
1004 'repository.read', 'repository.write', 'repository.admin')(
999 target_db_repo.repo_name)
1005 target_db_repo.repo_name)
1000 if not target_perm:
1006 if not target_perm:
1001 msg = _('Not Enough permissions to target repo `{}`.'.format(
1007 msg = _('Not Enough permissions to target repo `{}`.'.format(
1002 target_db_repo.repo_name))
1008 target_db_repo.repo_name))
1003 h.flash(msg, category='error')
1009 h.flash(msg, category='error')
1004 # copy the args back to redirect
1010 # copy the args back to redirect
1005 org_query = self.request.GET.mixed()
1011 org_query = self.request.GET.mixed()
1006 raise HTTPFound(
1012 raise HTTPFound(
1007 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1013 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1008 _query=org_query))
1014 _query=org_query))
1009
1015
1010 source_scm = source_db_repo.scm_instance()
1016 source_scm = source_db_repo.scm_instance()
1011 target_scm = target_db_repo.scm_instance()
1017 target_scm = target_db_repo.scm_instance()
1012
1018
1013 source_commit = source_scm.get_commit(source_ref.split(':')[-1])
1019 source_commit = source_scm.get_commit(source_ref.split(':')[-1])
1014 target_commit = target_scm.get_commit(target_ref.split(':')[-1])
1020 target_commit = target_scm.get_commit(target_ref.split(':')[-1])
1015
1021
1016 ancestor = source_scm.get_common_ancestor(
1022 ancestor = source_scm.get_common_ancestor(
1017 source_commit.raw_id, target_commit.raw_id, target_scm)
1023 source_commit.raw_id, target_commit.raw_id, target_scm)
1018
1024
1019 # recalculate target ref based on ancestor
1025 # recalculate target ref based on ancestor
1020 target_ref_type, target_ref_name, __ = _form['target_ref'].split(':')
1026 target_ref_type, target_ref_name, __ = _form['target_ref'].split(':')
1021 target_ref = ':'.join((target_ref_type, target_ref_name, ancestor))
1027 target_ref = ':'.join((target_ref_type, target_ref_name, ancestor))
1022
1028
1023 get_default_reviewers_data, validate_default_reviewers = \
1029 get_default_reviewers_data, validate_default_reviewers = \
1024 PullRequestModel().get_reviewer_functions()
1030 PullRequestModel().get_reviewer_functions()
1025
1031
1026 # recalculate reviewers logic, to make sure we can validate this
1032 # recalculate reviewers logic, to make sure we can validate this
1027 reviewer_rules = get_default_reviewers_data(
1033 reviewer_rules = get_default_reviewers_data(
1028 self._rhodecode_db_user, source_db_repo,
1034 self._rhodecode_db_user, source_db_repo,
1029 source_commit, target_db_repo, target_commit)
1035 source_commit, target_db_repo, target_commit)
1030
1036
1031 given_reviewers = _form['review_members']
1037 given_reviewers = _form['review_members']
1032 reviewers = validate_default_reviewers(
1038 reviewers = validate_default_reviewers(
1033 given_reviewers, reviewer_rules)
1039 given_reviewers, reviewer_rules)
1034
1040
1035 pullrequest_title = _form['pullrequest_title']
1041 pullrequest_title = _form['pullrequest_title']
1036 title_source_ref = source_ref.split(':', 2)[1]
1042 title_source_ref = source_ref.split(':', 2)[1]
1037 if not pullrequest_title:
1043 if not pullrequest_title:
1038 pullrequest_title = PullRequestModel().generate_pullrequest_title(
1044 pullrequest_title = PullRequestModel().generate_pullrequest_title(
1039 source=source_repo,
1045 source=source_repo,
1040 source_ref=title_source_ref,
1046 source_ref=title_source_ref,
1041 target=target_repo
1047 target=target_repo
1042 )
1048 )
1043
1049
1044 description = _form['pullrequest_desc']
1050 description = _form['pullrequest_desc']
1045 description_renderer = _form['description_renderer']
1051 description_renderer = _form['description_renderer']
1046
1052
1047 try:
1053 try:
1048 pull_request = PullRequestModel().create(
1054 pull_request = PullRequestModel().create(
1049 created_by=self._rhodecode_user.user_id,
1055 created_by=self._rhodecode_user.user_id,
1050 source_repo=source_repo,
1056 source_repo=source_repo,
1051 source_ref=source_ref,
1057 source_ref=source_ref,
1052 target_repo=target_repo,
1058 target_repo=target_repo,
1053 target_ref=target_ref,
1059 target_ref=target_ref,
1054 revisions=commit_ids,
1060 revisions=commit_ids,
1055 common_ancestor_id=common_ancestor_id,
1061 common_ancestor_id=common_ancestor_id,
1056 reviewers=reviewers,
1062 reviewers=reviewers,
1057 title=pullrequest_title,
1063 title=pullrequest_title,
1058 description=description,
1064 description=description,
1059 description_renderer=description_renderer,
1065 description_renderer=description_renderer,
1060 reviewer_data=reviewer_rules,
1066 reviewer_data=reviewer_rules,
1061 auth_user=self._rhodecode_user
1067 auth_user=self._rhodecode_user
1062 )
1068 )
1063 Session().commit()
1069 Session().commit()
1064
1070
1065 h.flash(_('Successfully opened new pull request'),
1071 h.flash(_('Successfully opened new pull request'),
1066 category='success')
1072 category='success')
1067 except Exception:
1073 except Exception:
1068 msg = _('Error occurred during creation of this pull request.')
1074 msg = _('Error occurred during creation of this pull request.')
1069 log.exception(msg)
1075 log.exception(msg)
1070 h.flash(msg, category='error')
1076 h.flash(msg, category='error')
1071
1077
1072 # copy the args back to redirect
1078 # copy the args back to redirect
1073 org_query = self.request.GET.mixed()
1079 org_query = self.request.GET.mixed()
1074 raise HTTPFound(
1080 raise HTTPFound(
1075 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1081 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1076 _query=org_query))
1082 _query=org_query))
1077
1083
1078 raise HTTPFound(
1084 raise HTTPFound(
1079 h.route_path('pullrequest_show', repo_name=target_repo,
1085 h.route_path('pullrequest_show', repo_name=target_repo,
1080 pull_request_id=pull_request.pull_request_id))
1086 pull_request_id=pull_request.pull_request_id))
1081
1087
1082 @LoginRequired()
1088 @LoginRequired()
1083 @NotAnonymous()
1089 @NotAnonymous()
1084 @HasRepoPermissionAnyDecorator(
1090 @HasRepoPermissionAnyDecorator(
1085 'repository.read', 'repository.write', 'repository.admin')
1091 'repository.read', 'repository.write', 'repository.admin')
1086 @CSRFRequired()
1092 @CSRFRequired()
1087 @view_config(
1093 @view_config(
1088 route_name='pullrequest_update', request_method='POST',
1094 route_name='pullrequest_update', request_method='POST',
1089 renderer='json_ext')
1095 renderer='json_ext')
1090 def pull_request_update(self):
1096 def pull_request_update(self):
1091 pull_request = PullRequest.get_or_404(
1097 pull_request = PullRequest.get_or_404(
1092 self.request.matchdict['pull_request_id'])
1098 self.request.matchdict['pull_request_id'])
1093 _ = self.request.translate
1099 _ = self.request.translate
1094
1100
1095 self.load_default_context()
1101 self.load_default_context()
1096 redirect_url = None
1102 redirect_url = None
1097
1103
1098 if pull_request.is_closed():
1104 if pull_request.is_closed():
1099 log.debug('update: forbidden because pull request is closed')
1105 log.debug('update: forbidden because pull request is closed')
1100 msg = _(u'Cannot update closed pull requests.')
1106 msg = _(u'Cannot update closed pull requests.')
1101 h.flash(msg, category='error')
1107 h.flash(msg, category='error')
1102 return {'response': True,
1108 return {'response': True,
1103 'redirect_url': redirect_url}
1109 'redirect_url': redirect_url}
1104
1110
1105 is_state_changing = pull_request.is_state_changing()
1111 is_state_changing = pull_request.is_state_changing()
1106
1112
1107 # only owner or admin can update it
1113 # only owner or admin can update it
1108 allowed_to_update = PullRequestModel().check_user_update(
1114 allowed_to_update = PullRequestModel().check_user_update(
1109 pull_request, self._rhodecode_user)
1115 pull_request, self._rhodecode_user)
1110 if allowed_to_update:
1116 if allowed_to_update:
1111 controls = peppercorn.parse(self.request.POST.items())
1117 controls = peppercorn.parse(self.request.POST.items())
1112 force_refresh = str2bool(self.request.POST.get('force_refresh'))
1118 force_refresh = str2bool(self.request.POST.get('force_refresh'))
1113
1119
1114 if 'review_members' in controls:
1120 if 'review_members' in controls:
1115 self._update_reviewers(
1121 self._update_reviewers(
1116 pull_request, controls['review_members'],
1122 pull_request, controls['review_members'],
1117 pull_request.reviewer_data)
1123 pull_request.reviewer_data)
1118 elif str2bool(self.request.POST.get('update_commits', 'false')):
1124 elif str2bool(self.request.POST.get('update_commits', 'false')):
1119 if is_state_changing:
1125 if is_state_changing:
1120 log.debug('commits update: forbidden because pull request is in state %s',
1126 log.debug('commits update: forbidden because pull request is in state %s',
1121 pull_request.pull_request_state)
1127 pull_request.pull_request_state)
1122 msg = _(u'Cannot update pull requests commits in state other than `{}`. '
1128 msg = _(u'Cannot update pull requests commits in state other than `{}`. '
1123 u'Current state is: `{}`').format(
1129 u'Current state is: `{}`').format(
1124 PullRequest.STATE_CREATED, pull_request.pull_request_state)
1130 PullRequest.STATE_CREATED, pull_request.pull_request_state)
1125 h.flash(msg, category='error')
1131 h.flash(msg, category='error')
1126 return {'response': True,
1132 return {'response': True,
1127 'redirect_url': redirect_url}
1133 'redirect_url': redirect_url}
1128
1134
1129 self._update_commits(pull_request)
1135 self._update_commits(pull_request)
1130 if force_refresh:
1136 if force_refresh:
1131 redirect_url = h.route_path(
1137 redirect_url = h.route_path(
1132 'pullrequest_show', repo_name=self.db_repo_name,
1138 'pullrequest_show', repo_name=self.db_repo_name,
1133 pull_request_id=pull_request.pull_request_id,
1139 pull_request_id=pull_request.pull_request_id,
1134 _query={"force_refresh": 1})
1140 _query={"force_refresh": 1})
1135 elif str2bool(self.request.POST.get('edit_pull_request', 'false')):
1141 elif str2bool(self.request.POST.get('edit_pull_request', 'false')):
1136 self._edit_pull_request(pull_request)
1142 self._edit_pull_request(pull_request)
1137 else:
1143 else:
1138 raise HTTPBadRequest()
1144 raise HTTPBadRequest()
1139
1145
1140 return {'response': True,
1146 return {'response': True,
1141 'redirect_url': redirect_url}
1147 'redirect_url': redirect_url}
1142 raise HTTPForbidden()
1148 raise HTTPForbidden()
1143
1149
1144 def _edit_pull_request(self, pull_request):
1150 def _edit_pull_request(self, pull_request):
1145 _ = self.request.translate
1151 _ = self.request.translate
1146
1152
1147 try:
1153 try:
1148 PullRequestModel().edit(
1154 PullRequestModel().edit(
1149 pull_request,
1155 pull_request,
1150 self.request.POST.get('title'),
1156 self.request.POST.get('title'),
1151 self.request.POST.get('description'),
1157 self.request.POST.get('description'),
1152 self.request.POST.get('description_renderer'),
1158 self.request.POST.get('description_renderer'),
1153 self._rhodecode_user)
1159 self._rhodecode_user)
1154 except ValueError:
1160 except ValueError:
1155 msg = _(u'Cannot update closed pull requests.')
1161 msg = _(u'Cannot update closed pull requests.')
1156 h.flash(msg, category='error')
1162 h.flash(msg, category='error')
1157 return
1163 return
1158 else:
1164 else:
1159 Session().commit()
1165 Session().commit()
1160
1166
1161 msg = _(u'Pull request title & description updated.')
1167 msg = _(u'Pull request title & description updated.')
1162 h.flash(msg, category='success')
1168 h.flash(msg, category='success')
1163 return
1169 return
1164
1170
1165 def _update_commits(self, pull_request):
1171 def _update_commits(self, pull_request):
1166 _ = self.request.translate
1172 _ = self.request.translate
1167
1173
1168 with pull_request.set_state(PullRequest.STATE_UPDATING):
1174 with pull_request.set_state(PullRequest.STATE_UPDATING):
1169 resp = PullRequestModel().update_commits(
1175 resp = PullRequestModel().update_commits(
1170 pull_request, self._rhodecode_db_user)
1176 pull_request, self._rhodecode_db_user)
1171
1177
1172 if resp.executed:
1178 if resp.executed:
1173
1179
1174 if resp.target_changed and resp.source_changed:
1180 if resp.target_changed and resp.source_changed:
1175 changed = 'target and source repositories'
1181 changed = 'target and source repositories'
1176 elif resp.target_changed and not resp.source_changed:
1182 elif resp.target_changed and not resp.source_changed:
1177 changed = 'target repository'
1183 changed = 'target repository'
1178 elif not resp.target_changed and resp.source_changed:
1184 elif not resp.target_changed and resp.source_changed:
1179 changed = 'source repository'
1185 changed = 'source repository'
1180 else:
1186 else:
1181 changed = 'nothing'
1187 changed = 'nothing'
1182
1188
1183 msg = _(u'Pull request updated to "{source_commit_id}" with '
1189 msg = _(u'Pull request updated to "{source_commit_id}" with '
1184 u'{count_added} added, {count_removed} removed commits. '
1190 u'{count_added} added, {count_removed} removed commits. '
1185 u'Source of changes: {change_source}')
1191 u'Source of changes: {change_source}')
1186 msg = msg.format(
1192 msg = msg.format(
1187 source_commit_id=pull_request.source_ref_parts.commit_id,
1193 source_commit_id=pull_request.source_ref_parts.commit_id,
1188 count_added=len(resp.changes.added),
1194 count_added=len(resp.changes.added),
1189 count_removed=len(resp.changes.removed),
1195 count_removed=len(resp.changes.removed),
1190 change_source=changed)
1196 change_source=changed)
1191 h.flash(msg, category='success')
1197 h.flash(msg, category='success')
1192
1198
1193 channel = '/repo${}$/pr/{}'.format(
1199 channel = '/repo${}$/pr/{}'.format(
1194 pull_request.target_repo.repo_name, pull_request.pull_request_id)
1200 pull_request.target_repo.repo_name, pull_request.pull_request_id)
1195 message = msg + (
1201 message = msg + (
1196 ' - <a onclick="window.location.reload()">'
1202 ' - <a onclick="window.location.reload()">'
1197 '<strong>{}</strong></a>'.format(_('Reload page')))
1203 '<strong>{}</strong></a>'.format(_('Reload page')))
1198 channelstream.post_message(
1204 channelstream.post_message(
1199 channel, message, self._rhodecode_user.username,
1205 channel, message, self._rhodecode_user.username,
1200 registry=self.request.registry)
1206 registry=self.request.registry)
1201 else:
1207 else:
1202 msg = PullRequestModel.UPDATE_STATUS_MESSAGES[resp.reason]
1208 msg = PullRequestModel.UPDATE_STATUS_MESSAGES[resp.reason]
1203 warning_reasons = [
1209 warning_reasons = [
1204 UpdateFailureReason.NO_CHANGE,
1210 UpdateFailureReason.NO_CHANGE,
1205 UpdateFailureReason.WRONG_REF_TYPE,
1211 UpdateFailureReason.WRONG_REF_TYPE,
1206 ]
1212 ]
1207 category = 'warning' if resp.reason in warning_reasons else 'error'
1213 category = 'warning' if resp.reason in warning_reasons else 'error'
1208 h.flash(msg, category=category)
1214 h.flash(msg, category=category)
1209
1215
1210 @LoginRequired()
1216 @LoginRequired()
1211 @NotAnonymous()
1217 @NotAnonymous()
1212 @HasRepoPermissionAnyDecorator(
1218 @HasRepoPermissionAnyDecorator(
1213 'repository.read', 'repository.write', 'repository.admin')
1219 'repository.read', 'repository.write', 'repository.admin')
1214 @CSRFRequired()
1220 @CSRFRequired()
1215 @view_config(
1221 @view_config(
1216 route_name='pullrequest_merge', request_method='POST',
1222 route_name='pullrequest_merge', request_method='POST',
1217 renderer='json_ext')
1223 renderer='json_ext')
1218 def pull_request_merge(self):
1224 def pull_request_merge(self):
1219 """
1225 """
1220 Merge will perform a server-side merge of the specified
1226 Merge will perform a server-side merge of the specified
1221 pull request, if the pull request is approved and mergeable.
1227 pull request, if the pull request is approved and mergeable.
1222 After successful merging, the pull request is automatically
1228 After successful merging, the pull request is automatically
1223 closed, with a relevant comment.
1229 closed, with a relevant comment.
1224 """
1230 """
1225 pull_request = PullRequest.get_or_404(
1231 pull_request = PullRequest.get_or_404(
1226 self.request.matchdict['pull_request_id'])
1232 self.request.matchdict['pull_request_id'])
1227 _ = self.request.translate
1233 _ = self.request.translate
1228
1234
1229 if pull_request.is_state_changing():
1235 if pull_request.is_state_changing():
1230 log.debug('show: forbidden because pull request is in state %s',
1236 log.debug('show: forbidden because pull request is in state %s',
1231 pull_request.pull_request_state)
1237 pull_request.pull_request_state)
1232 msg = _(u'Cannot merge pull requests in state other than `{}`. '
1238 msg = _(u'Cannot merge pull requests in state other than `{}`. '
1233 u'Current state is: `{}`').format(PullRequest.STATE_CREATED,
1239 u'Current state is: `{}`').format(PullRequest.STATE_CREATED,
1234 pull_request.pull_request_state)
1240 pull_request.pull_request_state)
1235 h.flash(msg, category='error')
1241 h.flash(msg, category='error')
1236 raise HTTPFound(
1242 raise HTTPFound(
1237 h.route_path('pullrequest_show',
1243 h.route_path('pullrequest_show',
1238 repo_name=pull_request.target_repo.repo_name,
1244 repo_name=pull_request.target_repo.repo_name,
1239 pull_request_id=pull_request.pull_request_id))
1245 pull_request_id=pull_request.pull_request_id))
1240
1246
1241 self.load_default_context()
1247 self.load_default_context()
1242
1248
1243 with pull_request.set_state(PullRequest.STATE_UPDATING):
1249 with pull_request.set_state(PullRequest.STATE_UPDATING):
1244 check = MergeCheck.validate(
1250 check = MergeCheck.validate(
1245 pull_request, auth_user=self._rhodecode_user,
1251 pull_request, auth_user=self._rhodecode_user,
1246 translator=self.request.translate)
1252 translator=self.request.translate)
1247 merge_possible = not check.failed
1253 merge_possible = not check.failed
1248
1254
1249 for err_type, error_msg in check.errors:
1255 for err_type, error_msg in check.errors:
1250 h.flash(error_msg, category=err_type)
1256 h.flash(error_msg, category=err_type)
1251
1257
1252 if merge_possible:
1258 if merge_possible:
1253 log.debug("Pre-conditions checked, trying to merge.")
1259 log.debug("Pre-conditions checked, trying to merge.")
1254 extras = vcs_operation_context(
1260 extras = vcs_operation_context(
1255 self.request.environ, repo_name=pull_request.target_repo.repo_name,
1261 self.request.environ, repo_name=pull_request.target_repo.repo_name,
1256 username=self._rhodecode_db_user.username, action='push',
1262 username=self._rhodecode_db_user.username, action='push',
1257 scm=pull_request.target_repo.repo_type)
1263 scm=pull_request.target_repo.repo_type)
1258 with pull_request.set_state(PullRequest.STATE_UPDATING):
1264 with pull_request.set_state(PullRequest.STATE_UPDATING):
1259 self._merge_pull_request(
1265 self._merge_pull_request(
1260 pull_request, self._rhodecode_db_user, extras)
1266 pull_request, self._rhodecode_db_user, extras)
1261 else:
1267 else:
1262 log.debug("Pre-conditions failed, NOT merging.")
1268 log.debug("Pre-conditions failed, NOT merging.")
1263
1269
1264 raise HTTPFound(
1270 raise HTTPFound(
1265 h.route_path('pullrequest_show',
1271 h.route_path('pullrequest_show',
1266 repo_name=pull_request.target_repo.repo_name,
1272 repo_name=pull_request.target_repo.repo_name,
1267 pull_request_id=pull_request.pull_request_id))
1273 pull_request_id=pull_request.pull_request_id))
1268
1274
1269 def _merge_pull_request(self, pull_request, user, extras):
1275 def _merge_pull_request(self, pull_request, user, extras):
1270 _ = self.request.translate
1276 _ = self.request.translate
1271 merge_resp = PullRequestModel().merge_repo(pull_request, user, extras=extras)
1277 merge_resp = PullRequestModel().merge_repo(pull_request, user, extras=extras)
1272
1278
1273 if merge_resp.executed:
1279 if merge_resp.executed:
1274 log.debug("The merge was successful, closing the pull request.")
1280 log.debug("The merge was successful, closing the pull request.")
1275 PullRequestModel().close_pull_request(
1281 PullRequestModel().close_pull_request(
1276 pull_request.pull_request_id, user)
1282 pull_request.pull_request_id, user)
1277 Session().commit()
1283 Session().commit()
1278 msg = _('Pull request was successfully merged and closed.')
1284 msg = _('Pull request was successfully merged and closed.')
1279 h.flash(msg, category='success')
1285 h.flash(msg, category='success')
1280 else:
1286 else:
1281 log.debug(
1287 log.debug(
1282 "The merge was not successful. Merge response: %s", merge_resp)
1288 "The merge was not successful. Merge response: %s", merge_resp)
1283 msg = merge_resp.merge_status_message
1289 msg = merge_resp.merge_status_message
1284 h.flash(msg, category='error')
1290 h.flash(msg, category='error')
1285
1291
1286 def _update_reviewers(self, pull_request, review_members, reviewer_rules):
1292 def _update_reviewers(self, pull_request, review_members, reviewer_rules):
1287 _ = self.request.translate
1293 _ = self.request.translate
1288
1294
1289 get_default_reviewers_data, validate_default_reviewers = \
1295 get_default_reviewers_data, validate_default_reviewers = \
1290 PullRequestModel().get_reviewer_functions()
1296 PullRequestModel().get_reviewer_functions()
1291
1297
1292 try:
1298 try:
1293 reviewers = validate_default_reviewers(review_members, reviewer_rules)
1299 reviewers = validate_default_reviewers(review_members, reviewer_rules)
1294 except ValueError as e:
1300 except ValueError as e:
1295 log.error('Reviewers Validation: {}'.format(e))
1301 log.error('Reviewers Validation: {}'.format(e))
1296 h.flash(e, category='error')
1302 h.flash(e, category='error')
1297 return
1303 return
1298
1304
1299 old_calculated_status = pull_request.calculated_review_status()
1305 old_calculated_status = pull_request.calculated_review_status()
1300 PullRequestModel().update_reviewers(
1306 PullRequestModel().update_reviewers(
1301 pull_request, reviewers, self._rhodecode_user)
1307 pull_request, reviewers, self._rhodecode_user)
1302 h.flash(_('Pull request reviewers updated.'), category='success')
1308 h.flash(_('Pull request reviewers updated.'), category='success')
1303 Session().commit()
1309 Session().commit()
1304
1310
1305 # trigger status changed if change in reviewers changes the status
1311 # trigger status changed if change in reviewers changes the status
1306 calculated_status = pull_request.calculated_review_status()
1312 calculated_status = pull_request.calculated_review_status()
1307 if old_calculated_status != calculated_status:
1313 if old_calculated_status != calculated_status:
1308 PullRequestModel().trigger_pull_request_hook(
1314 PullRequestModel().trigger_pull_request_hook(
1309 pull_request, self._rhodecode_user, 'review_status_change',
1315 pull_request, self._rhodecode_user, 'review_status_change',
1310 data={'status': calculated_status})
1316 data={'status': calculated_status})
1311
1317
1312 @LoginRequired()
1318 @LoginRequired()
1313 @NotAnonymous()
1319 @NotAnonymous()
1314 @HasRepoPermissionAnyDecorator(
1320 @HasRepoPermissionAnyDecorator(
1315 'repository.read', 'repository.write', 'repository.admin')
1321 'repository.read', 'repository.write', 'repository.admin')
1316 @CSRFRequired()
1322 @CSRFRequired()
1317 @view_config(
1323 @view_config(
1318 route_name='pullrequest_delete', request_method='POST',
1324 route_name='pullrequest_delete', request_method='POST',
1319 renderer='json_ext')
1325 renderer='json_ext')
1320 def pull_request_delete(self):
1326 def pull_request_delete(self):
1321 _ = self.request.translate
1327 _ = self.request.translate
1322
1328
1323 pull_request = PullRequest.get_or_404(
1329 pull_request = PullRequest.get_or_404(
1324 self.request.matchdict['pull_request_id'])
1330 self.request.matchdict['pull_request_id'])
1325 self.load_default_context()
1331 self.load_default_context()
1326
1332
1327 pr_closed = pull_request.is_closed()
1333 pr_closed = pull_request.is_closed()
1328 allowed_to_delete = PullRequestModel().check_user_delete(
1334 allowed_to_delete = PullRequestModel().check_user_delete(
1329 pull_request, self._rhodecode_user) and not pr_closed
1335 pull_request, self._rhodecode_user) and not pr_closed
1330
1336
1331 # only owner can delete it !
1337 # only owner can delete it !
1332 if allowed_to_delete:
1338 if allowed_to_delete:
1333 PullRequestModel().delete(pull_request, self._rhodecode_user)
1339 PullRequestModel().delete(pull_request, self._rhodecode_user)
1334 Session().commit()
1340 Session().commit()
1335 h.flash(_('Successfully deleted pull request'),
1341 h.flash(_('Successfully deleted pull request'),
1336 category='success')
1342 category='success')
1337 raise HTTPFound(h.route_path('pullrequest_show_all',
1343 raise HTTPFound(h.route_path('pullrequest_show_all',
1338 repo_name=self.db_repo_name))
1344 repo_name=self.db_repo_name))
1339
1345
1340 log.warning('user %s tried to delete pull request without access',
1346 log.warning('user %s tried to delete pull request without access',
1341 self._rhodecode_user)
1347 self._rhodecode_user)
1342 raise HTTPNotFound()
1348 raise HTTPNotFound()
1343
1349
1344 @LoginRequired()
1350 @LoginRequired()
1345 @NotAnonymous()
1351 @NotAnonymous()
1346 @HasRepoPermissionAnyDecorator(
1352 @HasRepoPermissionAnyDecorator(
1347 'repository.read', 'repository.write', 'repository.admin')
1353 'repository.read', 'repository.write', 'repository.admin')
1348 @CSRFRequired()
1354 @CSRFRequired()
1349 @view_config(
1355 @view_config(
1350 route_name='pullrequest_comment_create', request_method='POST',
1356 route_name='pullrequest_comment_create', request_method='POST',
1351 renderer='json_ext')
1357 renderer='json_ext')
1352 def pull_request_comment_create(self):
1358 def pull_request_comment_create(self):
1353 _ = self.request.translate
1359 _ = self.request.translate
1354
1360
1355 pull_request = PullRequest.get_or_404(
1361 pull_request = PullRequest.get_or_404(
1356 self.request.matchdict['pull_request_id'])
1362 self.request.matchdict['pull_request_id'])
1357 pull_request_id = pull_request.pull_request_id
1363 pull_request_id = pull_request.pull_request_id
1358
1364
1359 if pull_request.is_closed():
1365 if pull_request.is_closed():
1360 log.debug('comment: forbidden because pull request is closed')
1366 log.debug('comment: forbidden because pull request is closed')
1361 raise HTTPForbidden()
1367 raise HTTPForbidden()
1362
1368
1363 allowed_to_comment = PullRequestModel().check_user_comment(
1369 allowed_to_comment = PullRequestModel().check_user_comment(
1364 pull_request, self._rhodecode_user)
1370 pull_request, self._rhodecode_user)
1365 if not allowed_to_comment:
1371 if not allowed_to_comment:
1366 log.debug(
1372 log.debug(
1367 'comment: forbidden because pull request is from forbidden repo')
1373 'comment: forbidden because pull request is from forbidden repo')
1368 raise HTTPForbidden()
1374 raise HTTPForbidden()
1369
1375
1370 c = self.load_default_context()
1376 c = self.load_default_context()
1371
1377
1372 status = self.request.POST.get('changeset_status', None)
1378 status = self.request.POST.get('changeset_status', None)
1373 text = self.request.POST.get('text')
1379 text = self.request.POST.get('text')
1374 comment_type = self.request.POST.get('comment_type')
1380 comment_type = self.request.POST.get('comment_type')
1375 resolves_comment_id = self.request.POST.get('resolves_comment_id', None)
1381 resolves_comment_id = self.request.POST.get('resolves_comment_id', None)
1376 close_pull_request = self.request.POST.get('close_pull_request')
1382 close_pull_request = self.request.POST.get('close_pull_request')
1377
1383
1378 # the logic here should work like following, if we submit close
1384 # the logic here should work like following, if we submit close
1379 # pr comment, use `close_pull_request_with_comment` function
1385 # pr comment, use `close_pull_request_with_comment` function
1380 # else handle regular comment logic
1386 # else handle regular comment logic
1381
1387
1382 if close_pull_request:
1388 if close_pull_request:
1383 # only owner or admin or person with write permissions
1389 # only owner or admin or person with write permissions
1384 allowed_to_close = PullRequestModel().check_user_update(
1390 allowed_to_close = PullRequestModel().check_user_update(
1385 pull_request, self._rhodecode_user)
1391 pull_request, self._rhodecode_user)
1386 if not allowed_to_close:
1392 if not allowed_to_close:
1387 log.debug('comment: forbidden because not allowed to close '
1393 log.debug('comment: forbidden because not allowed to close '
1388 'pull request %s', pull_request_id)
1394 'pull request %s', pull_request_id)
1389 raise HTTPForbidden()
1395 raise HTTPForbidden()
1390
1396
1391 # This also triggers `review_status_change`
1397 # This also triggers `review_status_change`
1392 comment, status = PullRequestModel().close_pull_request_with_comment(
1398 comment, status = PullRequestModel().close_pull_request_with_comment(
1393 pull_request, self._rhodecode_user, self.db_repo, message=text,
1399 pull_request, self._rhodecode_user, self.db_repo, message=text,
1394 auth_user=self._rhodecode_user)
1400 auth_user=self._rhodecode_user)
1395 Session().flush()
1401 Session().flush()
1396
1402
1397 PullRequestModel().trigger_pull_request_hook(
1403 PullRequestModel().trigger_pull_request_hook(
1398 pull_request, self._rhodecode_user, 'comment',
1404 pull_request, self._rhodecode_user, 'comment',
1399 data={'comment': comment})
1405 data={'comment': comment})
1400
1406
1401 else:
1407 else:
1402 # regular comment case, could be inline, or one with status.
1408 # regular comment case, could be inline, or one with status.
1403 # for that one we check also permissions
1409 # for that one we check also permissions
1404
1410
1405 allowed_to_change_status = PullRequestModel().check_user_change_status(
1411 allowed_to_change_status = PullRequestModel().check_user_change_status(
1406 pull_request, self._rhodecode_user)
1412 pull_request, self._rhodecode_user)
1407
1413
1408 if status and allowed_to_change_status:
1414 if status and allowed_to_change_status:
1409 message = (_('Status change %(transition_icon)s %(status)s')
1415 message = (_('Status change %(transition_icon)s %(status)s')
1410 % {'transition_icon': '>',
1416 % {'transition_icon': '>',
1411 'status': ChangesetStatus.get_status_lbl(status)})
1417 'status': ChangesetStatus.get_status_lbl(status)})
1412 text = text or message
1418 text = text or message
1413
1419
1414 comment = CommentsModel().create(
1420 comment = CommentsModel().create(
1415 text=text,
1421 text=text,
1416 repo=self.db_repo.repo_id,
1422 repo=self.db_repo.repo_id,
1417 user=self._rhodecode_user.user_id,
1423 user=self._rhodecode_user.user_id,
1418 pull_request=pull_request,
1424 pull_request=pull_request,
1419 f_path=self.request.POST.get('f_path'),
1425 f_path=self.request.POST.get('f_path'),
1420 line_no=self.request.POST.get('line'),
1426 line_no=self.request.POST.get('line'),
1421 status_change=(ChangesetStatus.get_status_lbl(status)
1427 status_change=(ChangesetStatus.get_status_lbl(status)
1422 if status and allowed_to_change_status else None),
1428 if status and allowed_to_change_status else None),
1423 status_change_type=(status
1429 status_change_type=(status
1424 if status and allowed_to_change_status else None),
1430 if status and allowed_to_change_status else None),
1425 comment_type=comment_type,
1431 comment_type=comment_type,
1426 resolves_comment_id=resolves_comment_id,
1432 resolves_comment_id=resolves_comment_id,
1427 auth_user=self._rhodecode_user
1433 auth_user=self._rhodecode_user
1428 )
1434 )
1429
1435
1430 if allowed_to_change_status:
1436 if allowed_to_change_status:
1431 # calculate old status before we change it
1437 # calculate old status before we change it
1432 old_calculated_status = pull_request.calculated_review_status()
1438 old_calculated_status = pull_request.calculated_review_status()
1433
1439
1434 # get status if set !
1440 # get status if set !
1435 if status:
1441 if status:
1436 ChangesetStatusModel().set_status(
1442 ChangesetStatusModel().set_status(
1437 self.db_repo.repo_id,
1443 self.db_repo.repo_id,
1438 status,
1444 status,
1439 self._rhodecode_user.user_id,
1445 self._rhodecode_user.user_id,
1440 comment,
1446 comment,
1441 pull_request=pull_request
1447 pull_request=pull_request
1442 )
1448 )
1443
1449
1444 Session().flush()
1450 Session().flush()
1445 # this is somehow required to get access to some relationship
1451 # this is somehow required to get access to some relationship
1446 # loaded on comment
1452 # loaded on comment
1447 Session().refresh(comment)
1453 Session().refresh(comment)
1448
1454
1449 PullRequestModel().trigger_pull_request_hook(
1455 PullRequestModel().trigger_pull_request_hook(
1450 pull_request, self._rhodecode_user, 'comment',
1456 pull_request, self._rhodecode_user, 'comment',
1451 data={'comment': comment})
1457 data={'comment': comment})
1452
1458
1453 # we now calculate the status of pull request, and based on that
1459 # we now calculate the status of pull request, and based on that
1454 # calculation we set the commits status
1460 # calculation we set the commits status
1455 calculated_status = pull_request.calculated_review_status()
1461 calculated_status = pull_request.calculated_review_status()
1456 if old_calculated_status != calculated_status:
1462 if old_calculated_status != calculated_status:
1457 PullRequestModel().trigger_pull_request_hook(
1463 PullRequestModel().trigger_pull_request_hook(
1458 pull_request, self._rhodecode_user, 'review_status_change',
1464 pull_request, self._rhodecode_user, 'review_status_change',
1459 data={'status': calculated_status})
1465 data={'status': calculated_status})
1460
1466
1461 Session().commit()
1467 Session().commit()
1462
1468
1463 data = {
1469 data = {
1464 'target_id': h.safeid(h.safe_unicode(
1470 'target_id': h.safeid(h.safe_unicode(
1465 self.request.POST.get('f_path'))),
1471 self.request.POST.get('f_path'))),
1466 }
1472 }
1467 if comment:
1473 if comment:
1468 c.co = comment
1474 c.co = comment
1469 rendered_comment = render(
1475 rendered_comment = render(
1470 'rhodecode:templates/changeset/changeset_comment_block.mako',
1476 'rhodecode:templates/changeset/changeset_comment_block.mako',
1471 self._get_template_context(c), self.request)
1477 self._get_template_context(c), self.request)
1472
1478
1473 data.update(comment.get_dict())
1479 data.update(comment.get_dict())
1474 data.update({'rendered_text': rendered_comment})
1480 data.update({'rendered_text': rendered_comment})
1475
1481
1476 return data
1482 return data
1477
1483
1478 @LoginRequired()
1484 @LoginRequired()
1479 @NotAnonymous()
1485 @NotAnonymous()
1480 @HasRepoPermissionAnyDecorator(
1486 @HasRepoPermissionAnyDecorator(
1481 'repository.read', 'repository.write', 'repository.admin')
1487 'repository.read', 'repository.write', 'repository.admin')
1482 @CSRFRequired()
1488 @CSRFRequired()
1483 @view_config(
1489 @view_config(
1484 route_name='pullrequest_comment_delete', request_method='POST',
1490 route_name='pullrequest_comment_delete', request_method='POST',
1485 renderer='json_ext')
1491 renderer='json_ext')
1486 def pull_request_comment_delete(self):
1492 def pull_request_comment_delete(self):
1487 pull_request = PullRequest.get_or_404(
1493 pull_request = PullRequest.get_or_404(
1488 self.request.matchdict['pull_request_id'])
1494 self.request.matchdict['pull_request_id'])
1489
1495
1490 comment = ChangesetComment.get_or_404(
1496 comment = ChangesetComment.get_or_404(
1491 self.request.matchdict['comment_id'])
1497 self.request.matchdict['comment_id'])
1492 comment_id = comment.comment_id
1498 comment_id = comment.comment_id
1493
1499
1494 if comment.immutable:
1500 if comment.immutable:
1495 # don't allow deleting comments that are immutable
1501 # don't allow deleting comments that are immutable
1496 raise HTTPForbidden()
1502 raise HTTPForbidden()
1497
1503
1498 if pull_request.is_closed():
1504 if pull_request.is_closed():
1499 log.debug('comment: forbidden because pull request is closed')
1505 log.debug('comment: forbidden because pull request is closed')
1500 raise HTTPForbidden()
1506 raise HTTPForbidden()
1501
1507
1502 if not comment:
1508 if not comment:
1503 log.debug('Comment with id:%s not found, skipping', comment_id)
1509 log.debug('Comment with id:%s not found, skipping', comment_id)
1504 # comment already deleted in another call probably
1510 # comment already deleted in another call probably
1505 return True
1511 return True
1506
1512
1507 if comment.pull_request.is_closed():
1513 if comment.pull_request.is_closed():
1508 # don't allow deleting comments on closed pull request
1514 # don't allow deleting comments on closed pull request
1509 raise HTTPForbidden()
1515 raise HTTPForbidden()
1510
1516
1511 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1517 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1512 super_admin = h.HasPermissionAny('hg.admin')()
1518 super_admin = h.HasPermissionAny('hg.admin')()
1513 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1519 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1514 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1520 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1515 comment_repo_admin = is_repo_admin and is_repo_comment
1521 comment_repo_admin = is_repo_admin and is_repo_comment
1516
1522
1517 if super_admin or comment_owner or comment_repo_admin:
1523 if super_admin or comment_owner or comment_repo_admin:
1518 old_calculated_status = comment.pull_request.calculated_review_status()
1524 old_calculated_status = comment.pull_request.calculated_review_status()
1519 CommentsModel().delete(comment=comment, auth_user=self._rhodecode_user)
1525 CommentsModel().delete(comment=comment, auth_user=self._rhodecode_user)
1520 Session().commit()
1526 Session().commit()
1521 calculated_status = comment.pull_request.calculated_review_status()
1527 calculated_status = comment.pull_request.calculated_review_status()
1522 if old_calculated_status != calculated_status:
1528 if old_calculated_status != calculated_status:
1523 PullRequestModel().trigger_pull_request_hook(
1529 PullRequestModel().trigger_pull_request_hook(
1524 comment.pull_request, self._rhodecode_user, 'review_status_change',
1530 comment.pull_request, self._rhodecode_user, 'review_status_change',
1525 data={'status': calculated_status})
1531 data={'status': calculated_status})
1526 return True
1532 return True
1527 else:
1533 else:
1528 log.warning('No permissions for user %s to delete comment_id: %s',
1534 log.warning('No permissions for user %s to delete comment_id: %s',
1529 self._rhodecode_db_user, comment_id)
1535 self._rhodecode_db_user, comment_id)
1530 raise HTTPNotFound()
1536 raise HTTPNotFound()
1531
1537
1532 @LoginRequired()
1538 @LoginRequired()
1533 @NotAnonymous()
1539 @NotAnonymous()
1534 @HasRepoPermissionAnyDecorator(
1540 @HasRepoPermissionAnyDecorator(
1535 'repository.read', 'repository.write', 'repository.admin')
1541 'repository.read', 'repository.write', 'repository.admin')
1536 @CSRFRequired()
1542 @CSRFRequired()
1537 @view_config(
1543 @view_config(
1538 route_name='pullrequest_comment_edit', request_method='POST',
1544 route_name='pullrequest_comment_edit', request_method='POST',
1539 renderer='json_ext')
1545 renderer='json_ext')
1540 def pull_request_comment_edit(self):
1546 def pull_request_comment_edit(self):
1541 self.load_default_context()
1547 self.load_default_context()
1542
1548
1543 pull_request = PullRequest.get_or_404(
1549 pull_request = PullRequest.get_or_404(
1544 self.request.matchdict['pull_request_id']
1550 self.request.matchdict['pull_request_id']
1545 )
1551 )
1546 comment = ChangesetComment.get_or_404(
1552 comment = ChangesetComment.get_or_404(
1547 self.request.matchdict['comment_id']
1553 self.request.matchdict['comment_id']
1548 )
1554 )
1549 comment_id = comment.comment_id
1555 comment_id = comment.comment_id
1550
1556
1551 if comment.immutable:
1557 if comment.immutable:
1552 # don't allow deleting comments that are immutable
1558 # don't allow deleting comments that are immutable
1553 raise HTTPForbidden()
1559 raise HTTPForbidden()
1554
1560
1555 if pull_request.is_closed():
1561 if pull_request.is_closed():
1556 log.debug('comment: forbidden because pull request is closed')
1562 log.debug('comment: forbidden because pull request is closed')
1557 raise HTTPForbidden()
1563 raise HTTPForbidden()
1558
1564
1559 if not comment:
1565 if not comment:
1560 log.debug('Comment with id:%s not found, skipping', comment_id)
1566 log.debug('Comment with id:%s not found, skipping', comment_id)
1561 # comment already deleted in another call probably
1567 # comment already deleted in another call probably
1562 return True
1568 return True
1563
1569
1564 if comment.pull_request.is_closed():
1570 if comment.pull_request.is_closed():
1565 # don't allow deleting comments on closed pull request
1571 # don't allow deleting comments on closed pull request
1566 raise HTTPForbidden()
1572 raise HTTPForbidden()
1567
1573
1568 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1574 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1569 super_admin = h.HasPermissionAny('hg.admin')()
1575 super_admin = h.HasPermissionAny('hg.admin')()
1570 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1576 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1571 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1577 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1572 comment_repo_admin = is_repo_admin and is_repo_comment
1578 comment_repo_admin = is_repo_admin and is_repo_comment
1573
1579
1574 if super_admin or comment_owner or comment_repo_admin:
1580 if super_admin or comment_owner or comment_repo_admin:
1575 text = self.request.POST.get('text')
1581 text = self.request.POST.get('text')
1576 version = self.request.POST.get('version')
1582 version = self.request.POST.get('version')
1577 if text == comment.text:
1583 if text == comment.text:
1578 log.warning(
1584 log.warning(
1579 'Comment(PR): '
1585 'Comment(PR): '
1580 'Trying to create new version '
1586 'Trying to create new version '
1581 'with the same comment body {}'.format(
1587 'with the same comment body {}'.format(
1582 comment_id,
1588 comment_id,
1583 )
1589 )
1584 )
1590 )
1585 raise HTTPNotFound()
1591 raise HTTPNotFound()
1586
1592
1587 if version.isdigit():
1593 if version.isdigit():
1588 version = int(version)
1594 version = int(version)
1589 else:
1595 else:
1590 log.warning(
1596 log.warning(
1591 'Comment(PR): Wrong version type {} {} '
1597 'Comment(PR): Wrong version type {} {} '
1592 'for comment {}'.format(
1598 'for comment {}'.format(
1593 version,
1599 version,
1594 type(version),
1600 type(version),
1595 comment_id,
1601 comment_id,
1596 )
1602 )
1597 )
1603 )
1598 raise HTTPNotFound()
1604 raise HTTPNotFound()
1599
1605
1600 try:
1606 try:
1601 comment_history = CommentsModel().edit(
1607 comment_history = CommentsModel().edit(
1602 comment_id=comment_id,
1608 comment_id=comment_id,
1603 text=text,
1609 text=text,
1604 auth_user=self._rhodecode_user,
1610 auth_user=self._rhodecode_user,
1605 version=version,
1611 version=version,
1606 )
1612 )
1607 except CommentVersionMismatch:
1613 except CommentVersionMismatch:
1608 raise HTTPConflict()
1614 raise HTTPConflict()
1609
1615
1610 if not comment_history:
1616 if not comment_history:
1611 raise HTTPNotFound()
1617 raise HTTPNotFound()
1612
1618
1613 Session().commit()
1619 Session().commit()
1614
1620
1615 PullRequestModel().trigger_pull_request_hook(
1621 PullRequestModel().trigger_pull_request_hook(
1616 pull_request, self._rhodecode_user, 'comment_edit',
1622 pull_request, self._rhodecode_user, 'comment_edit',
1617 data={'comment': comment})
1623 data={'comment': comment})
1618
1624
1619 return {
1625 return {
1620 'comment_history_id': comment_history.comment_history_id,
1626 'comment_history_id': comment_history.comment_history_id,
1621 'comment_id': comment.comment_id,
1627 'comment_id': comment.comment_id,
1622 'comment_version': comment_history.version,
1628 'comment_version': comment_history.version,
1623 'comment_author_username': comment_history.author.username,
1629 'comment_author_username': comment_history.author.username,
1624 'comment_author_gravatar': h.gravatar_url(comment_history.author.email, 16),
1630 'comment_author_gravatar': h.gravatar_url(comment_history.author.email, 16),
1625 'comment_created_on': h.age_component(comment_history.created_on,
1631 'comment_created_on': h.age_component(comment_history.created_on,
1626 time_is_local=True),
1632 time_is_local=True),
1627 }
1633 }
1628 else:
1634 else:
1629 log.warning('No permissions for user %s to edit comment_id: %s',
1635 log.warning('No permissions for user %s to edit comment_id: %s',
1630 self._rhodecode_db_user, comment_id)
1636 self._rhodecode_db_user, comment_id)
1631 raise HTTPNotFound()
1637 raise HTTPNotFound()
@@ -1,162 +1,162 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2020 RhodeCode GmbH
3 # Copyright (C) 2016-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import os
21 import os
22 import sys
22 import sys
23 import json
23 import json
24 import logging
24 import logging
25
25
26 from rhodecode.lib.hooks_daemon import prepare_callback_daemon
26 from rhodecode.lib.hooks_daemon import prepare_callback_daemon
27 from rhodecode.lib.vcs.conf import settings as vcs_settings
27 from rhodecode.lib.vcs.conf import settings as vcs_settings
28 from rhodecode.model.scm import ScmModel
28 from rhodecode.model.scm import ScmModel
29
29
30 log = logging.getLogger(__name__)
30 log = logging.getLogger(__name__)
31
31
32
32
33 class VcsServer(object):
33 class VcsServer(object):
34 _path = None # set executable path for hg/git/svn binary
34 _path = None # set executable path for hg/git/svn binary
35 backend = None # set in child classes
35 backend = None # set in child classes
36 tunnel = None # subprocess handling tunnel
36 tunnel = None # subprocess handling tunnel
37 write_perms = ['repository.admin', 'repository.write']
37 write_perms = ['repository.admin', 'repository.write']
38 read_perms = ['repository.read', 'repository.admin', 'repository.write']
38 read_perms = ['repository.read', 'repository.admin', 'repository.write']
39
39
40 def __init__(self, user, user_permissions, config, env):
40 def __init__(self, user, user_permissions, config, env):
41 self.user = user
41 self.user = user
42 self.user_permissions = user_permissions
42 self.user_permissions = user_permissions
43 self.config = config
43 self.config = config
44 self.env = env
44 self.env = env
45 self.stdin = sys.stdin
45 self.stdin = sys.stdin
46
46
47 self.repo_name = None
47 self.repo_name = None
48 self.repo_mode = None
48 self.repo_mode = None
49 self.store = ''
49 self.store = ''
50 self.ini_path = ''
50 self.ini_path = ''
51
51
52 def _invalidate_cache(self, repo_name):
52 def _invalidate_cache(self, repo_name):
53 """
53 """
54 Set's cache for this repository for invalidation on next access
54 Set's cache for this repository for invalidation on next access
55
55
56 :param repo_name: full repo name, also a cache key
56 :param repo_name: full repo name, also a cache key
57 """
57 """
58 ScmModel().mark_for_invalidation(repo_name)
58 ScmModel().mark_for_invalidation(repo_name)
59
59
60 def has_write_perm(self):
60 def has_write_perm(self):
61 permission = self.user_permissions.get(self.repo_name)
61 permission = self.user_permissions.get(self.repo_name)
62 if permission in ['repository.write', 'repository.admin']:
62 if permission in ['repository.write', 'repository.admin']:
63 return True
63 return True
64
64
65 return False
65 return False
66
66
67 def _check_permissions(self, action):
67 def _check_permissions(self, action):
68 permission = self.user_permissions.get(self.repo_name)
68 permission = self.user_permissions.get(self.repo_name)
69 log.debug('permission for %s on %s are: %s',
69 log.debug('permission for %s on %s are: %s',
70 self.user, self.repo_name, permission)
70 self.user, self.repo_name, permission)
71
71
72 if not permission:
72 if not permission:
73 log.error('user `%s` permissions to repo:%s are empty. Forbidding access.',
73 log.error('user `%s` permissions to repo:%s are empty. Forbidding access.',
74 self.user, self.repo_name)
74 self.user, self.repo_name)
75 return -2
75 return -2
76
76
77 if action == 'pull':
77 if action == 'pull':
78 if permission in self.read_perms:
78 if permission in self.read_perms:
79 log.info(
79 log.info(
80 'READ Permissions for User "%s" detected to repo "%s"!',
80 'READ Permissions for User "%s" detected to repo "%s"!',
81 self.user, self.repo_name)
81 self.user, self.repo_name)
82 return 0
82 return 0
83 else:
83 else:
84 if permission in self.write_perms:
84 if permission in self.write_perms:
85 log.info(
85 log.info(
86 'WRITE+ Permissions for User "%s" detected to repo "%s"!',
86 'WRITE, or Higher Permissions for User "%s" detected to repo "%s"!',
87 self.user, self.repo_name)
87 self.user, self.repo_name)
88 return 0
88 return 0
89
89
90 log.error('Cannot properly fetch or verify user `%s` permissions. '
90 log.error('Cannot properly fetch or verify user `%s` permissions. '
91 'Permissions: %s, vcs action: %s',
91 'Permissions: %s, vcs action: %s',
92 self.user, permission, action)
92 self.user, permission, action)
93 return -2
93 return -2
94
94
95 def update_environment(self, action, extras=None):
95 def update_environment(self, action, extras=None):
96
96
97 scm_data = {
97 scm_data = {
98 'ip': os.environ['SSH_CLIENT'].split()[0],
98 'ip': os.environ['SSH_CLIENT'].split()[0],
99 'username': self.user.username,
99 'username': self.user.username,
100 'user_id': self.user.user_id,
100 'user_id': self.user.user_id,
101 'action': action,
101 'action': action,
102 'repository': self.repo_name,
102 'repository': self.repo_name,
103 'scm': self.backend,
103 'scm': self.backend,
104 'config': self.ini_path,
104 'config': self.ini_path,
105 'repo_store': self.store,
105 'repo_store': self.store,
106 'make_lock': None,
106 'make_lock': None,
107 'locked_by': [None, None],
107 'locked_by': [None, None],
108 'server_url': None,
108 'server_url': None,
109 'user_agent': 'ssh-user-agent',
109 'user_agent': 'ssh-user-agent',
110 'hooks': ['push', 'pull'],
110 'hooks': ['push', 'pull'],
111 'hooks_module': 'rhodecode.lib.hooks_daemon',
111 'hooks_module': 'rhodecode.lib.hooks_daemon',
112 'is_shadow_repo': False,
112 'is_shadow_repo': False,
113 'detect_force_push': False,
113 'detect_force_push': False,
114 'check_branch_perms': False,
114 'check_branch_perms': False,
115
115
116 'SSH': True,
116 'SSH': True,
117 'SSH_PERMISSIONS': self.user_permissions.get(self.repo_name),
117 'SSH_PERMISSIONS': self.user_permissions.get(self.repo_name),
118 }
118 }
119 if extras:
119 if extras:
120 scm_data.update(extras)
120 scm_data.update(extras)
121 os.putenv("RC_SCM_DATA", json.dumps(scm_data))
121 os.putenv("RC_SCM_DATA", json.dumps(scm_data))
122
122
123 def get_root_store(self):
123 def get_root_store(self):
124 root_store = self.store
124 root_store = self.store
125 if not root_store.endswith('/'):
125 if not root_store.endswith('/'):
126 # always append trailing slash
126 # always append trailing slash
127 root_store = root_store + '/'
127 root_store = root_store + '/'
128 return root_store
128 return root_store
129
129
130 def _handle_tunnel(self, extras):
130 def _handle_tunnel(self, extras):
131 # pre-auth
131 # pre-auth
132 action = 'pull'
132 action = 'pull'
133 exit_code = self._check_permissions(action)
133 exit_code = self._check_permissions(action)
134 if exit_code:
134 if exit_code:
135 return exit_code, False
135 return exit_code, False
136
136
137 req = self.env['request']
137 req = self.env['request']
138 server_url = req.host_url + req.script_name
138 server_url = req.host_url + req.script_name
139 extras['server_url'] = server_url
139 extras['server_url'] = server_url
140
140
141 log.debug('Using %s binaries from path %s', self.backend, self._path)
141 log.debug('Using %s binaries from path %s', self.backend, self._path)
142 exit_code = self.tunnel.run(extras)
142 exit_code = self.tunnel.run(extras)
143
143
144 return exit_code, action == "push"
144 return exit_code, action == "push"
145
145
146 def run(self, tunnel_extras=None):
146 def run(self, tunnel_extras=None):
147 tunnel_extras = tunnel_extras or {}
147 tunnel_extras = tunnel_extras or {}
148 extras = {}
148 extras = {}
149 extras.update(tunnel_extras)
149 extras.update(tunnel_extras)
150
150
151 callback_daemon, extras = prepare_callback_daemon(
151 callback_daemon, extras = prepare_callback_daemon(
152 extras, protocol=vcs_settings.HOOKS_PROTOCOL,
152 extras, protocol=vcs_settings.HOOKS_PROTOCOL,
153 host=vcs_settings.HOOKS_HOST,
153 host=vcs_settings.HOOKS_HOST,
154 use_direct_calls=False)
154 use_direct_calls=False)
155
155
156 with callback_daemon:
156 with callback_daemon:
157 try:
157 try:
158 return self._handle_tunnel(extras)
158 return self._handle_tunnel(extras)
159 finally:
159 finally:
160 log.debug('Running cleanup with cache invalidation')
160 log.debug('Running cleanup with cache invalidation')
161 if self.repo_name:
161 if self.repo_name:
162 self._invalidate_cache(self.repo_name)
162 self._invalidate_cache(self.repo_name)
This diff has been collapsed as it changes many lines, (2485 lines changed) Show them Hide them
@@ -1,11328 +1,11487 b''
1 # Translations template for rhodecode-enterprise-ce.
1 # Translations template for rhodecode-enterprise-ce.
2 # Copyright (C) 2020 RhodeCode GmbH
2 # Copyright (C) 2020 RhodeCode GmbH
3 # This file is distributed under the same license as the rhodecode-enterprise-ce project.
3 # This file is distributed under the same license as the rhodecode-enterprise-ce project.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
5 #
5 #
6 #, fuzzy
6 #, fuzzy
7 msgid ""
7 msgid ""
8 msgstr ""
8 msgstr ""
9 "Project-Id-Version: rhodecode-enterprise-ce 4.19.0\n"
9 "Project-Id-Version: rhodecode-enterprise-ce 4.20.0\n"
10 "Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
10 "Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
11 "POT-Creation-Date: 2020-05-22 09:45+0000\n"
11 "POT-Creation-Date: 2020-07-20 11:46+0000\n"
12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 "Language-Team: LANGUAGE <LL@li.org>\n"
14 "Language-Team: LANGUAGE <LL@li.org>\n"
15 "MIME-Version: 1.0\n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=utf-8\n"
16 "Content-Type: text/plain; charset=utf-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
17 "Content-Transfer-Encoding: 8bit\n"
18 "Generated-By: Babel 1.3\n"
18 "Generated-By: Babel 1.3\n"
19
19
20 #: rhodecode/apps/admin/views/defaults.py:90
20 #: rhodecode/apps/admin/views/defaults.py:90
21 msgid "Default settings updated successfully"
21 msgid "Default settings updated successfully"
22 msgstr ""
22 msgstr ""
23
23
24 #: rhodecode/apps/admin/views/defaults.py:108
24 #: rhodecode/apps/admin/views/defaults.py:108
25 msgid "Error occurred during update of default values"
25 msgid "Error occurred during update of default values"
26 msgstr ""
26 msgstr ""
27
27
28 #: rhodecode/apps/admin/views/exception_tracker.py:156
28 #: rhodecode/apps/admin/views/exception_tracker.py:156
29 msgid "Removed {} Exceptions"
29 msgid "Removed {} Exceptions"
30 msgstr ""
30 msgstr ""
31
31
32 #: rhodecode/apps/admin/views/exception_tracker.py:173
32 #: rhodecode/apps/admin/views/exception_tracker.py:173
33 msgid "Removed Exception {}"
33 msgid "Removed Exception {}"
34 msgstr ""
34 msgstr ""
35
35
36 #: rhodecode/apps/admin/views/permissions.py:121
36 #: rhodecode/apps/admin/views/permissions.py:121
37 msgid "Application permissions updated successfully"
37 msgid "Application permissions updated successfully"
38 msgstr ""
38 msgstr ""
39
39
40 #: rhodecode/apps/admin/views/permissions.py:142
40 #: rhodecode/apps/admin/views/permissions.py:142
41 #: rhodecode/apps/admin/views/permissions.py:218
41 #: rhodecode/apps/admin/views/permissions.py:218
42 #: rhodecode/apps/admin/views/permissions.py:320
42 #: rhodecode/apps/admin/views/permissions.py:320
43 msgid "Error occurred during update of permissions"
43 msgid "Error occurred during update of permissions"
44 msgstr ""
44 msgstr ""
45
45
46 #: rhodecode/apps/admin/views/permissions.py:198
46 #: rhodecode/apps/admin/views/permissions.py:198
47 msgid "Object permissions updated successfully"
47 msgid "Object permissions updated successfully"
48 msgstr ""
48 msgstr ""
49
49
50 #: rhodecode/apps/admin/views/permissions.py:300
50 #: rhodecode/apps/admin/views/permissions.py:300
51 msgid "Global permissions updated successfully"
51 msgid "Global permissions updated successfully"
52 msgstr ""
52 msgstr ""
53
53
54 #: rhodecode/apps/admin/views/permissions.py:485
54 #: rhodecode/apps/admin/views/permissions.py:485
55 #: rhodecode/templates/admin/gists/gist_show.mako:50
55 #: rhodecode/templates/admin/gists/gist_show.mako:50
56 #: rhodecode/templates/admin/integrations/list.mako:172
56 #: rhodecode/templates/admin/integrations/list.mako:172
57 #: rhodecode/templates/admin/my_account/my_account_profile.mako:7
57 #: rhodecode/templates/admin/my_account/my_account_profile.mako:7
58 #: rhodecode/templates/base/issue_tracker_settings.mako:137
58 #: rhodecode/templates/base/issue_tracker_settings.mako:137
59 #: rhodecode/templates/changeset/changeset_file_comment.mako:201
60 #: rhodecode/templates/changeset/changeset_file_comment.mako:205
61 #: rhodecode/templates/changeset/changeset_file_comment.mako:209
59 #: rhodecode/templates/data_table/_dt_elements.mako:173
62 #: rhodecode/templates/data_table/_dt_elements.mako:173
60 #: rhodecode/templates/data_table/_dt_elements.mako:251
63 #: rhodecode/templates/data_table/_dt_elements.mako:251
61 #: rhodecode/templates/data_table/_dt_elements.mako:266
64 #: rhodecode/templates/data_table/_dt_elements.mako:266
62 #: rhodecode/templates/data_table/_dt_elements.mako:267
65 #: rhodecode/templates/data_table/_dt_elements.mako:267
63 #: rhodecode/templates/data_table/_dt_elements.mako:282
66 #: rhodecode/templates/data_table/_dt_elements.mako:282
64 #: rhodecode/templates/debug_style/buttons.html:128
67 #: rhodecode/templates/debug_style/buttons.html:128
65 #: rhodecode/templates/files/files_add.mako:56
68 #: rhodecode/templates/files/files_add.mako:55
66 #: rhodecode/templates/files/files_edit.mako:58
69 #: rhodecode/templates/files/files_edit.mako:57
67 #: rhodecode/templates/files/files_source.mako:29
70 #: rhodecode/templates/files/files_source.mako:39
68 #: rhodecode/templates/files/files_source.mako:42
71 #: rhodecode/templates/files/files_source.mako:52
69 #: rhodecode/templates/pullrequests/pullrequest_show.mako:74
72 #: rhodecode/templates/pullrequests/pullrequest_show.mako:74
70 #: rhodecode/templates/pullrequests/pullrequest_show.mako:302
73 #: rhodecode/templates/pullrequests/pullrequest_show.mako:302
71 #: rhodecode/templates/user_group/profile.mako:8
74 #: rhodecode/templates/user_group/profile.mako:8
72 #: rhodecode/templates/users/user_profile.mako:8
75 #: rhodecode/templates/users/user_profile.mako:8
73 msgid "Edit"
76 msgid "Edit"
74 msgstr ""
77 msgstr ""
75
78
76 #: rhodecode/apps/admin/views/permissions.py:513
79 #: rhodecode/apps/admin/views/permissions.py:513
77 msgid "Updated SSH keys file: {}"
80 msgid "Updated SSH keys file: {}"
78 msgstr ""
81 msgstr ""
79
82
80 #: rhodecode/apps/admin/views/permissions.py:516
83 #: rhodecode/apps/admin/views/permissions.py:516
81 msgid "SSH key support is disabled in .ini file"
84 msgid "SSH key support is disabled in .ini file"
82 msgstr ""
85 msgstr ""
83
86
84 #: rhodecode/apps/admin/views/repo_groups.py:328
87 #: rhodecode/apps/admin/views/repo_groups.py:342
85 #, python-format
88 #, python-format
86 msgid "Created repository group %s"
89 msgid "Created repository group %s"
87 msgstr ""
90 msgstr ""
88
91
89 #: rhodecode/apps/admin/views/repo_groups.py:346
92 #: rhodecode/apps/admin/views/repo_groups.py:360
90 #, python-format
93 #, python-format
91 msgid "Error occurred during creation of repository group %s"
94 msgid "Error occurred during creation of repository group %s"
92 msgstr ""
95 msgstr ""
93
96
94 #: rhodecode/apps/admin/views/sessions.py:92
97 #: rhodecode/apps/admin/views/sessions.py:92
95 msgid "Cleaned up old sessions"
98 msgid "Cleaned up old sessions"
96 msgstr ""
99 msgstr ""
97
100
98 #: rhodecode/apps/admin/views/sessions.py:97
101 #: rhodecode/apps/admin/views/sessions.py:97
99 msgid "Failed to cleanup up old sessions"
102 msgid "Failed to cleanup up old sessions"
100 msgstr ""
103 msgstr ""
101
104
102 #: rhodecode/apps/admin/views/settings.py:162
105 #: rhodecode/apps/admin/views/settings.py:163
103 #: rhodecode/apps/admin/views/settings.py:317
106 #: rhodecode/apps/admin/views/settings.py:319
104 #: rhodecode/apps/admin/views/settings.py:392
107 #: rhodecode/apps/admin/views/settings.py:394
105 #: rhodecode/apps/admin/views/settings.py:726
108 #: rhodecode/apps/admin/views/settings.py:727
106 #: rhodecode/apps/repository/views/repo_settings_vcs.py:124
109 #: rhodecode/apps/repository/views/repo_settings_vcs.py:124
107 msgid "Some form inputs contain invalid data."
110 msgid "Some form inputs contain invalid data."
108 msgstr ""
111 msgstr ""
109
112
110 #: rhodecode/apps/admin/views/settings.py:189
113 #: rhodecode/apps/admin/views/settings.py:190
111 #: rhodecode/apps/admin/views/settings.py:353
114 #: rhodecode/apps/admin/views/settings.py:355
112 msgid "Error occurred during updating application settings"
115 msgid "Error occurred during updating application settings"
113 msgstr ""
116 msgstr ""
114
117
115 #: rhodecode/apps/admin/views/settings.py:193
118 #: rhodecode/apps/admin/views/settings.py:194
116 #: rhodecode/apps/repository/views/repo_settings_vcs.py:143
119 #: rhodecode/apps/repository/views/repo_settings_vcs.py:143
117 msgid "Updated VCS settings"
120 msgid "Updated VCS settings"
118 msgstr ""
121 msgstr ""
119
122
120 #: rhodecode/apps/admin/views/settings.py:267
123 #: rhodecode/apps/admin/views/settings.py:269
121 #, python-format
124 #, python-format
122 msgid "Repositories successfully rescanned added: %s ; removed: %s"
125 msgid "Repositories successfully rescanned added: %s ; removed: %s"
123 msgstr ""
126 msgstr ""
124
127
125 #: rhodecode/apps/admin/views/settings.py:349
128 #: rhodecode/apps/admin/views/settings.py:351
126 msgid "Updated application settings"
129 msgid "Updated application settings"
127 msgstr ""
130 msgstr ""
128
131
129 #: rhodecode/apps/admin/views/settings.py:431
132 #: rhodecode/apps/admin/views/settings.py:433
130 msgid "Updated visualisation settings"
133 msgid "Updated visualisation settings"
131 msgstr ""
134 msgstr ""
132
135
133 #: rhodecode/apps/admin/views/settings.py:434
136 #: rhodecode/apps/admin/views/settings.py:436
134 msgid "Error occurred during updating visualisation settings"
137 msgid "Error occurred during updating visualisation settings"
135 msgstr ""
138 msgstr ""
136
139
137 #: rhodecode/apps/admin/views/settings.py:496
140 #: rhodecode/apps/admin/views/settings.py:498
138 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:127
141 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:127
139 msgid "Invalid issue tracker pattern: {}"
142 msgid "Invalid issue tracker pattern: {}"
140 msgstr ""
143 msgstr ""
141
144
142 #: rhodecode/apps/admin/views/settings.py:513
145 #: rhodecode/apps/admin/views/settings.py:515
143 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:136
146 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:136
144 msgid "Updated issue tracker entries"
147 msgid "Updated issue tracker entries"
145 msgstr ""
148 msgstr ""
146
149
147 #: rhodecode/apps/admin/views/settings.py:533
150 #: rhodecode/apps/admin/views/settings.py:535
148 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:91
151 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:91
149 msgid "Removed issue tracker entry."
152 msgid "Removed issue tracker entry."
150 msgstr ""
153 msgstr ""
151
154
152 #: rhodecode/apps/admin/views/settings.py:571
155 #: rhodecode/apps/admin/views/settings.py:573
153 msgid "Please enter email address"
156 msgid "Please enter email address"
154 msgstr ""
157 msgstr ""
155
158
156 #: rhodecode/apps/admin/views/settings.py:588
159 #: rhodecode/apps/admin/views/settings.py:589
157 msgid "Send email task created"
160 msgid "Send email task created"
158 msgstr ""
161 msgstr ""
159
162
160 #: rhodecode/apps/admin/views/settings.py:638
163 #: rhodecode/apps/admin/views/settings.py:639
161 msgid "Added new hook"
164 msgid "Added new hook"
162 msgstr ""
165 msgstr ""
163
166
164 #: rhodecode/apps/admin/views/settings.py:653
167 #: rhodecode/apps/admin/views/settings.py:654
165 msgid "Updated hooks"
168 msgid "Updated hooks"
166 msgstr ""
169 msgstr ""
167
170
168 #: rhodecode/apps/admin/views/settings.py:657
171 #: rhodecode/apps/admin/views/settings.py:658
169 msgid "Error occurred during hook creation"
172 msgid "Error occurred during hook creation"
170 msgstr ""
173 msgstr ""
171
174
172 #: rhodecode/apps/admin/views/settings.py:750
175 #: rhodecode/apps/admin/views/settings.py:751
173 msgid "Error occurred during updating labs settings"
176 msgid "Error occurred during updating labs settings"
174 msgstr ""
177 msgstr ""
175
178
176 #: rhodecode/apps/admin/views/settings.py:755
179 #: rhodecode/apps/admin/views/settings.py:756
177 msgid "Updated Labs settings"
180 msgid "Updated Labs settings"
178 msgstr ""
181 msgstr ""
179
182
180 #: rhodecode/apps/admin/views/svn_config.py:46
183 #: rhodecode/apps/admin/views/svn_config.py:46
181 msgid "Apache configuration for Subversion generated at `{}`."
184 msgid "Apache configuration for Subversion generated at `{}`."
182 msgstr ""
185 msgstr ""
183
186
184 #: rhodecode/apps/admin/views/svn_config.py:54
187 #: rhodecode/apps/admin/views/svn_config.py:54
185 msgid "Failed to generate the Apache configuration for Subversion."
188 msgid "Failed to generate the Apache configuration for Subversion."
186 msgstr ""
189 msgstr ""
187
190
188 #: rhodecode/apps/admin/views/system_info.py:79
191 #: rhodecode/apps/admin/views/system_info.py:79
189 msgid "Note: please make sure this server can access `${url}` for the update link to work"
192 msgid "Note: please make sure this server can access `${url}` for the update link to work"
190 msgstr ""
193 msgstr ""
191
194
192 #: rhodecode/apps/admin/views/system_info.py:90
195 #: rhodecode/apps/admin/views/system_info.py:90
193 msgid "Update info"
196 msgid "Update info"
194 msgstr ""
197 msgstr ""
195
198
196 #: rhodecode/apps/admin/views/system_info.py:92
199 #: rhodecode/apps/admin/views/system_info.py:92
197 msgid "Check for updates"
200 msgid "Check for updates"
198 msgstr ""
201 msgstr ""
199
202
200 #: rhodecode/apps/admin/views/system_info.py:97
203 #: rhodecode/apps/admin/views/system_info.py:97
201 msgid "RhodeCode Version"
204 msgid "RhodeCode Version"
202 msgstr ""
205 msgstr ""
203
206
204 #: rhodecode/apps/admin/views/system_info.py:98
207 #: rhodecode/apps/admin/views/system_info.py:98
205 msgid "Latest version"
208 msgid "Latest version"
206 msgstr ""
209 msgstr ""
207
210
208 #: rhodecode/apps/admin/views/system_info.py:99
211 #: rhodecode/apps/admin/views/system_info.py:99
209 msgid "RhodeCode Base URL"
212 msgid "RhodeCode Base URL"
210 msgstr ""
213 msgstr ""
211
214
212 #: rhodecode/apps/admin/views/system_info.py:100
215 #: rhodecode/apps/admin/views/system_info.py:100
213 msgid "RhodeCode Server IP"
216 msgid "RhodeCode Server IP"
214 msgstr ""
217 msgstr ""
215
218
216 #: rhodecode/apps/admin/views/system_info.py:101
219 #: rhodecode/apps/admin/views/system_info.py:101
217 msgid "RhodeCode Server ID"
220 msgid "RhodeCode Server ID"
218 msgstr ""
221 msgstr ""
219
222
220 #: rhodecode/apps/admin/views/system_info.py:102
223 #: rhodecode/apps/admin/views/system_info.py:102
221 msgid "RhodeCode Configuration"
224 msgid "RhodeCode Configuration"
222 msgstr ""
225 msgstr ""
223
226
224 #: rhodecode/apps/admin/views/system_info.py:103
227 #: rhodecode/apps/admin/views/system_info.py:103
225 msgid "RhodeCode Certificate"
228 msgid "RhodeCode Certificate"
226 msgstr ""
229 msgstr ""
227
230
228 #: rhodecode/apps/admin/views/system_info.py:104
231 #: rhodecode/apps/admin/views/system_info.py:104
229 msgid "Workers"
232 msgid "Workers"
230 msgstr ""
233 msgstr ""
231
234
232 #: rhodecode/apps/admin/views/system_info.py:105
235 #: rhodecode/apps/admin/views/system_info.py:105
233 msgid "Worker Type"
236 msgid "Worker Type"
234 msgstr ""
237 msgstr ""
235
238
236 #: rhodecode/apps/admin/views/system_info.py:109
239 #: rhodecode/apps/admin/views/system_info.py:109
237 msgid "Database"
240 msgid "Database"
238 msgstr ""
241 msgstr ""
239
242
240 #: rhodecode/apps/admin/views/system_info.py:110
243 #: rhodecode/apps/admin/views/system_info.py:110
241 msgid "Database version"
244 msgid "Database version"
242 msgstr ""
245 msgstr ""
243
246
244 #: rhodecode/apps/admin/views/system_info.py:114
247 #: rhodecode/apps/admin/views/system_info.py:114
245 msgid "Platform"
248 msgid "Platform"
246 msgstr ""
249 msgstr ""
247
250
248 #: rhodecode/apps/admin/views/system_info.py:115
251 #: rhodecode/apps/admin/views/system_info.py:115
249 msgid "Platform UUID"
252 msgid "Platform UUID"
250 msgstr ""
253 msgstr ""
251
254
252 #: rhodecode/apps/admin/views/system_info.py:116
255 #: rhodecode/apps/admin/views/system_info.py:116
253 msgid "Lang"
256 msgid "Lang"
254 msgstr ""
257 msgstr ""
255
258
256 #: rhodecode/apps/admin/views/system_info.py:117
259 #: rhodecode/apps/admin/views/system_info.py:117
257 msgid "Python version"
260 msgid "Python version"
258 msgstr ""
261 msgstr ""
259
262
260 #: rhodecode/apps/admin/views/system_info.py:118
263 #: rhodecode/apps/admin/views/system_info.py:118
261 msgid "Python path"
264 msgid "Python path"
262 msgstr ""
265 msgstr ""
263
266
264 #: rhodecode/apps/admin/views/system_info.py:122
267 #: rhodecode/apps/admin/views/system_info.py:122
265 msgid "CPU"
268 msgid "CPU"
266 msgstr ""
269 msgstr ""
267
270
268 #: rhodecode/apps/admin/views/system_info.py:123
271 #: rhodecode/apps/admin/views/system_info.py:123
269 msgid "Load"
272 msgid "Load"
270 msgstr ""
273 msgstr ""
271
274
272 #: rhodecode/apps/admin/views/system_info.py:124
275 #: rhodecode/apps/admin/views/system_info.py:124
273 msgid "Memory"
276 msgid "Memory"
274 msgstr ""
277 msgstr ""
275
278
276 #: rhodecode/apps/admin/views/system_info.py:125
279 #: rhodecode/apps/admin/views/system_info.py:125
277 msgid "Uptime"
280 msgid "Uptime"
278 msgstr ""
281 msgstr ""
279
282
280 #: rhodecode/apps/admin/views/system_info.py:129
283 #: rhodecode/apps/admin/views/system_info.py:129
281 msgid "Ulimit"
284 msgid "Ulimit"
282 msgstr ""
285 msgstr ""
283
286
284 #: rhodecode/apps/admin/views/system_info.py:132
287 #: rhodecode/apps/admin/views/system_info.py:132
285 msgid "Storage location"
288 msgid "Storage location"
286 msgstr ""
289 msgstr ""
287
290
288 #: rhodecode/apps/admin/views/system_info.py:133
291 #: rhodecode/apps/admin/views/system_info.py:133
289 msgid "Storage info"
292 msgid "Storage info"
290 msgstr ""
293 msgstr ""
291
294
292 #: rhodecode/apps/admin/views/system_info.py:134
295 #: rhodecode/apps/admin/views/system_info.py:134
293 msgid "Storage inodes"
296 msgid "Storage inodes"
294 msgstr ""
297 msgstr ""
295
298
296 #: rhodecode/apps/admin/views/system_info.py:136
299 #: rhodecode/apps/admin/views/system_info.py:136
297 msgid "Gist storage location"
300 msgid "Gist storage location"
298 msgstr ""
301 msgstr ""
299
302
300 #: rhodecode/apps/admin/views/system_info.py:137
303 #: rhodecode/apps/admin/views/system_info.py:137
301 msgid "Gist storage info"
304 msgid "Gist storage info"
302 msgstr ""
305 msgstr ""
303
306
304 #: rhodecode/apps/admin/views/system_info.py:139
307 #: rhodecode/apps/admin/views/system_info.py:139
305 msgid "Archive cache storage location"
308 msgid "Archive cache storage location"
306 msgstr ""
309 msgstr ""
307
310
308 #: rhodecode/apps/admin/views/system_info.py:140
311 #: rhodecode/apps/admin/views/system_info.py:140
309 msgid "Archive cache info"
312 msgid "Archive cache info"
310 msgstr ""
313 msgstr ""
311
314
312 #: rhodecode/apps/admin/views/system_info.py:142
315 #: rhodecode/apps/admin/views/system_info.py:142
313 msgid "Temp storage location"
316 msgid "Temp storage location"
314 msgstr ""
317 msgstr ""
315
318
316 #: rhodecode/apps/admin/views/system_info.py:143
319 #: rhodecode/apps/admin/views/system_info.py:143
317 msgid "Temp storage info"
320 msgid "Temp storage info"
318 msgstr ""
321 msgstr ""
319
322
320 #: rhodecode/apps/admin/views/system_info.py:145
323 #: rhodecode/apps/admin/views/system_info.py:145
321 msgid "Search info"
324 msgid "Search info"
322 msgstr ""
325 msgstr ""
323
326
324 #: rhodecode/apps/admin/views/system_info.py:146
327 #: rhodecode/apps/admin/views/system_info.py:146
325 msgid "Search location"
328 msgid "Search location"
326 msgstr ""
329 msgstr ""
327
330
328 #: rhodecode/apps/admin/views/system_info.py:150
331 #: rhodecode/apps/admin/views/system_info.py:150
329 msgid "VCS Backends"
332 msgid "VCS Backends"
330 msgstr ""
333 msgstr ""
331
334
332 #: rhodecode/apps/admin/views/system_info.py:151
335 #: rhodecode/apps/admin/views/system_info.py:151
333 #: rhodecode/templates/admin/settings/settings_system.mako:32
336 #: rhodecode/templates/admin/settings/settings_system.mako:32
334 msgid "VCS Server"
337 msgid "VCS Server"
335 msgstr ""
338 msgstr ""
336
339
337 #: rhodecode/apps/admin/views/system_info.py:152
340 #: rhodecode/apps/admin/views/system_info.py:152
338 msgid "GIT"
341 msgid "GIT"
339 msgstr ""
342 msgstr ""
340
343
341 #: rhodecode/apps/admin/views/system_info.py:153
344 #: rhodecode/apps/admin/views/system_info.py:153
342 msgid "HG"
345 msgid "HG"
343 msgstr ""
346 msgstr ""
344
347
345 #: rhodecode/apps/admin/views/system_info.py:154
348 #: rhodecode/apps/admin/views/system_info.py:154
346 msgid "SVN"
349 msgid "SVN"
347 msgstr ""
350 msgstr ""
348
351
349 #: rhodecode/apps/admin/views/user_groups.py:238
352 #: rhodecode/apps/admin/views/user_groups.py:238
350 #, python-format
353 #, python-format
351 msgid "Created user group %(user_group_link)s"
354 msgid "Created user group %(user_group_link)s"
352 msgstr ""
355 msgstr ""
353
356
354 #: rhodecode/apps/admin/views/user_groups.py:260
357 #: rhodecode/apps/admin/views/user_groups.py:260
355 #, python-format
358 #, python-format
356 msgid "Error occurred during creation of user group %s"
359 msgid "Error occurred during creation of user group %s"
357 msgstr ""
360 msgstr ""
358
361
359 #: rhodecode/apps/admin/views/users.py:222
362 #: rhodecode/apps/admin/views/users.py:222
360 #, python-format
363 #, python-format
361 msgid "Created user %(user_link)s"
364 msgid "Created user %(user_link)s"
362 msgstr ""
365 msgstr ""
363
366
364 #: rhodecode/apps/admin/views/users.py:243
367 #: rhodecode/apps/admin/views/users.py:243
365 #, python-format
368 #, python-format
366 msgid "Error occurred during creation of user %s"
369 msgid "Error occurred during creation of user %s"
367 msgstr ""
370 msgstr ""
368
371
369 #: rhodecode/apps/admin/views/users.py:345
372 #: rhodecode/apps/admin/views/users.py:345
370 msgid "User updated successfully"
373 msgid "User updated successfully"
371 msgstr ""
374 msgstr ""
372
375
373 #: rhodecode/apps/admin/views/users.py:363
376 #: rhodecode/apps/admin/views/users.py:363
374 #, python-format
377 #, python-format
375 msgid "Error occurred during update of user %s"
378 msgid "Error occurred during update of user %s"
376 msgstr ""
379 msgstr ""
377
380
378 #: rhodecode/apps/admin/views/users.py:394
381 #: rhodecode/apps/admin/views/users.py:394
379 #, python-format
382 #, python-format
380 msgid "Detached %s repositories"
383 msgid "Detached %s repositories"
381 msgstr ""
384 msgstr ""
382
385
383 #: rhodecode/apps/admin/views/users.py:397
386 #: rhodecode/apps/admin/views/users.py:397
384 #, python-format
387 #, python-format
385 msgid "Deleted %s repositories"
388 msgid "Deleted %s repositories"
386 msgstr ""
389 msgstr ""
387
390
388 #: rhodecode/apps/admin/views/users.py:403
391 #: rhodecode/apps/admin/views/users.py:403
389 #, python-format
392 #, python-format
390 msgid "Detached %s repository groups"
393 msgid "Detached %s repository groups"
391 msgstr ""
394 msgstr ""
392
395
393 #: rhodecode/apps/admin/views/users.py:406
396 #: rhodecode/apps/admin/views/users.py:406
394 #, python-format
397 #, python-format
395 msgid "Deleted %s repository groups"
398 msgid "Deleted %s repository groups"
396 msgstr ""
399 msgstr ""
397
400
398 #: rhodecode/apps/admin/views/users.py:412
401 #: rhodecode/apps/admin/views/users.py:412
399 #, python-format
402 #, python-format
400 msgid "Detached %s user groups"
403 msgid "Detached %s user groups"
401 msgstr ""
404 msgstr ""
402
405
403 #: rhodecode/apps/admin/views/users.py:415
406 #: rhodecode/apps/admin/views/users.py:415
404 #, python-format
407 #, python-format
405 msgid "Deleted %s user groups"
408 msgid "Deleted %s user groups"
406 msgstr ""
409 msgstr ""
407
410
408 #: rhodecode/apps/admin/views/users.py:421
411 #: rhodecode/apps/admin/views/users.py:421
409 #, python-format
412 #, python-format
410 msgid "Detached %s pull requests"
413 msgid "Detached %s pull requests"
411 msgstr ""
414 msgstr ""
412
415
413 #: rhodecode/apps/admin/views/users.py:424
416 #: rhodecode/apps/admin/views/users.py:424
414 #, python-format
417 #, python-format
415 msgid "Deleted %s pull requests"
418 msgid "Deleted %s pull requests"
416 msgstr ""
419 msgstr ""
417
420
418 #: rhodecode/apps/admin/views/users.py:430
421 #: rhodecode/apps/admin/views/users.py:430
419 #, python-format
422 #, python-format
420 msgid "Detached %s artifacts"
423 msgid "Detached %s artifacts"
421 msgstr ""
424 msgstr ""
422
425
423 #: rhodecode/apps/admin/views/users.py:433
426 #: rhodecode/apps/admin/views/users.py:433
424 #, python-format
427 #, python-format
425 msgid "Deleted %s artifacts"
428 msgid "Deleted %s artifacts"
426 msgstr ""
429 msgstr ""
427
430
428 #: rhodecode/apps/admin/views/users.py:482
431 #: rhodecode/apps/admin/views/users.py:482
429 msgid "Successfully deleted user `{}`"
432 msgid "Successfully deleted user `{}`"
430 msgstr ""
433 msgstr ""
431
434
432 #: rhodecode/apps/admin/views/users.py:489
435 #: rhodecode/apps/admin/views/users.py:489
433 msgid "An error occurred during deletion of user"
436 msgid "An error occurred during deletion of user"
434 msgstr ""
437 msgstr ""
435
438
436 #: rhodecode/apps/admin/views/users.py:558
439 #: rhodecode/apps/admin/views/users.py:558
437 msgid ""
440 msgid ""
438 "The user participates as reviewer in {} pull request and cannot be deleted. \n"
441 "The user participates as reviewer in {} pull request and cannot be deleted. \n"
439 "You can set the user to \"{}\" instead of deleting it."
442 "You can set the user to \"{}\" instead of deleting it."
440 msgstr ""
443 msgstr ""
441
444
442 #: rhodecode/apps/admin/views/users.py:564
445 #: rhodecode/apps/admin/views/users.py:564
443 msgid ""
446 msgid ""
444 "The user participates as reviewer in {} pull requests and cannot be deleted. \n"
447 "The user participates as reviewer in {} pull requests and cannot be deleted. \n"
445 "You can set the user to \"{}\" instead of deleting it."
448 "You can set the user to \"{}\" instead of deleting it."
446 msgstr ""
449 msgstr ""
447
450
448 #: rhodecode/apps/admin/views/users.py:653
451 #: rhodecode/apps/admin/views/users.py:653
449 msgid "User global permissions updated successfully"
452 msgid "User global permissions updated successfully"
450 msgstr ""
453 msgstr ""
451
454
452 #: rhodecode/apps/admin/views/users.py:671
455 #: rhodecode/apps/admin/views/users.py:671
453 #: rhodecode/apps/user_group/views/__init__.py:479
456 #: rhodecode/apps/user_group/views/__init__.py:479
454 msgid "An error occurred during permissions saving"
457 msgid "An error occurred during permissions saving"
455 msgstr ""
458 msgstr ""
456
459
457 #: rhodecode/apps/admin/views/users.py:694
460 #: rhodecode/apps/admin/views/users.py:694
458 msgid "Force password change enabled for user"
461 msgid "Force password change enabled for user"
459 msgstr ""
462 msgstr ""
460
463
461 #: rhodecode/apps/admin/views/users.py:702
464 #: rhodecode/apps/admin/views/users.py:702
462 #: rhodecode/apps/admin/views/users.py:732
465 #: rhodecode/apps/admin/views/users.py:732
463 msgid "An error occurred during password reset for user"
466 msgid "An error occurred during password reset for user"
464 msgstr ""
467 msgstr ""
465
468
466 #: rhodecode/apps/admin/views/users.py:723
469 #: rhodecode/apps/admin/views/users.py:723
467 msgid "Force password change disabled for user"
470 msgid "Force password change disabled for user"
468 msgstr ""
471 msgstr ""
469
472
470 #: rhodecode/apps/admin/views/users.py:796
473 #: rhodecode/apps/admin/views/users.py:796
471 #, python-format
474 #, python-format
472 msgid "Linked repository group `%s` as personal"
475 msgid "Linked repository group `%s` as personal"
473 msgstr ""
476 msgstr ""
474
477
475 #: rhodecode/apps/admin/views/users.py:802
478 #: rhodecode/apps/admin/views/users.py:802
476 #, python-format
479 #, python-format
477 msgid "Created repository group `%s`"
480 msgid "Created repository group `%s`"
478 msgstr ""
481 msgstr ""
479
482
480 #: rhodecode/apps/admin/views/users.py:806
483 #: rhodecode/apps/admin/views/users.py:806
481 #, python-format
484 #, python-format
482 msgid "Repository group `%s` is already taken"
485 msgid "Repository group `%s` is already taken"
483 msgstr ""
486 msgstr ""
484
487
485 #: rhodecode/apps/admin/views/users.py:811
488 #: rhodecode/apps/admin/views/users.py:811
486 msgid "An error occurred during repository group creation for user"
489 msgid "An error occurred during repository group creation for user"
487 msgstr ""
490 msgstr ""
488
491
489 #: rhodecode/apps/admin/views/users.py:834
492 #: rhodecode/apps/admin/views/users.py:834
490 #: rhodecode/apps/my_account/views/my_account.py:161
493 #: rhodecode/apps/my_account/views/my_account.py:161
491 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:22
494 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:28
492 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:27
495 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:33
493 msgid "Role"
496 msgid "Role"
494 msgstr ""
497 msgstr ""
495
498
496 #: rhodecode/apps/admin/views/users.py:892
499 #: rhodecode/apps/admin/views/users.py:892
497 #: rhodecode/apps/my_account/views/my_account.py:217
500 #: rhodecode/apps/my_account/views/my_account.py:217
498 msgid "Auth token successfully created"
501 msgid "Auth token successfully created"
499 msgstr ""
502 msgstr ""
500
503
501 #: rhodecode/apps/admin/views/users.py:921
504 #: rhodecode/apps/admin/views/users.py:921
502 #: rhodecode/apps/my_account/views/my_account.py:241
505 #: rhodecode/apps/my_account/views/my_account.py:241
503 msgid "Auth token successfully deleted"
506 msgid "Auth token successfully deleted"
504 msgstr ""
507 msgstr ""
505
508
506 #: rhodecode/apps/admin/views/users.py:997
509 #: rhodecode/apps/admin/views/users.py:997
507 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:117
510 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:117
508 msgid "Ssh Key successfully created"
511 msgid "Ssh Key successfully created"
509 msgstr ""
512 msgstr ""
510
513
511 #: rhodecode/apps/admin/views/users.py:1003
514 #: rhodecode/apps/admin/views/users.py:1003
512 #: rhodecode/apps/admin/views/users.py:1007
515 #: rhodecode/apps/admin/views/users.py:1007
513 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:123
516 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:123
514 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:127
517 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:127
515 msgid "An error occurred during ssh key saving: {}"
518 msgid "An error occurred during ssh key saving: {}"
516 msgstr ""
519 msgstr ""
517
520
518 #: rhodecode/apps/admin/views/users.py:1041
521 #: rhodecode/apps/admin/views/users.py:1041
519 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:157
522 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:157
520 msgid "Ssh key successfully deleted"
523 msgid "Ssh key successfully deleted"
521 msgstr ""
524 msgstr ""
522
525
523 #: rhodecode/apps/admin/views/users.py:1087
526 #: rhodecode/apps/admin/views/users.py:1087
524 #, python-format
527 #, python-format
525 msgid "Added new email address `%s` for user account"
528 msgid "Added new email address `%s` for user account"
526 msgstr ""
529 msgstr ""
527
530
528 #: rhodecode/apps/admin/views/users.py:1093
531 #: rhodecode/apps/admin/views/users.py:1093
529 msgid "Email `{}` is already registered for another user."
532 msgid "Email `{}` is already registered for another user."
530 msgstr ""
533 msgstr ""
531
534
532 #: rhodecode/apps/admin/views/users.py:1097
535 #: rhodecode/apps/admin/views/users.py:1097
533 msgid "An error occurred during email saving"
536 msgid "An error occurred during email saving"
534 msgstr ""
537 msgstr ""
535
538
536 #: rhodecode/apps/admin/views/users.py:1124
539 #: rhodecode/apps/admin/views/users.py:1124
537 msgid "Removed email address from user account"
540 msgid "Removed email address from user account"
538 msgstr ""
541 msgstr ""
539
542
540 #: rhodecode/apps/admin/views/users.py:1170
543 #: rhodecode/apps/admin/views/users.py:1170
541 #, python-format
544 #, python-format
542 msgid "An error occurred during ip saving:%s"
545 msgid "An error occurred during ip saving:%s"
543 msgstr ""
546 msgstr ""
544
547
545 #: rhodecode/apps/admin/views/users.py:1192
548 #: rhodecode/apps/admin/views/users.py:1192
546 msgid "An error occurred during ip saving"
549 msgid "An error occurred during ip saving"
547 msgstr ""
550 msgstr ""
548
551
549 #: rhodecode/apps/admin/views/users.py:1196
552 #: rhodecode/apps/admin/views/users.py:1196
550 #, python-format
553 #, python-format
551 msgid "Added ips %s to user whitelist"
554 msgid "Added ips %s to user whitelist"
552 msgstr ""
555 msgstr ""
553
556
554 #: rhodecode/apps/admin/views/users.py:1226
557 #: rhodecode/apps/admin/views/users.py:1226
555 msgid "Removed ip address from user whitelist"
558 msgid "Removed ip address from user whitelist"
556 msgstr ""
559 msgstr ""
557
560
558 #: rhodecode/apps/admin/views/users.py:1291
561 #: rhodecode/apps/admin/views/users.py:1291
559 msgid "Groups successfully changed"
562 msgid "Groups successfully changed"
560 msgstr ""
563 msgstr ""
561
564
562 #: rhodecode/apps/admin/views/users.py:1411
565 #: rhodecode/apps/admin/views/users.py:1411
563 msgid "Deleted {} cache keys"
566 msgid "Deleted {} cache keys"
564 msgstr ""
567 msgstr ""
565
568
566 #: rhodecode/apps/gist/views.py:57 rhodecode/model/auth_token.py:51
569 #: rhodecode/apps/gist/views.py:57 rhodecode/model/auth_token.py:51
567 msgid "forever"
570 msgid "forever"
568 msgstr ""
571 msgstr ""
569
572
570 #: rhodecode/apps/gist/views.py:58
573 #: rhodecode/apps/gist/views.py:58
571 msgid "5 minutes"
574 msgid "5 minutes"
572 msgstr ""
575 msgstr ""
573
576
574 #: rhodecode/apps/gist/views.py:59
577 #: rhodecode/apps/gist/views.py:59
575 msgid "1 hour"
578 msgid "1 hour"
576 msgstr ""
579 msgstr ""
577
580
578 #: rhodecode/apps/gist/views.py:60
581 #: rhodecode/apps/gist/views.py:60
579 msgid "1 day"
582 msgid "1 day"
580 msgstr ""
583 msgstr ""
581
584
582 #: rhodecode/apps/gist/views.py:61
585 #: rhodecode/apps/gist/views.py:61
583 msgid "1 month"
586 msgid "1 month"
584 msgstr ""
587 msgstr ""
585
588
586 #: rhodecode/apps/gist/views.py:64 rhodecode/public/js/scripts.js:46848
589 #: rhodecode/apps/gist/views.py:64 rhodecode/public/js/scripts.js:47676
587 #: rhodecode/public/js/scripts.min.js:1
590 #: rhodecode/public/js/scripts.min.js:1
588 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:35
591 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:42
589 #: rhodecode/public/js/src/rhodecode.js:625
592 #: rhodecode/public/js/src/rhodecode.js:625
590 msgid "Lifetime"
593 msgid "Lifetime"
591 msgstr ""
594 msgstr ""
592
595
593 #: rhodecode/apps/gist/views.py:66
596 #: rhodecode/apps/gist/views.py:66
594 msgid "Requires registered account"
597 msgid "Requires registered account"
595 msgstr ""
598 msgstr ""
596
599
597 #: rhodecode/apps/gist/views.py:67
600 #: rhodecode/apps/gist/views.py:67
598 msgid "Can be accessed by anonymous users"
601 msgid "Can be accessed by anonymous users"
599 msgstr ""
602 msgstr ""
600
603
601 #: rhodecode/apps/gist/views.py:218
604 #: rhodecode/apps/gist/views.py:218
602 msgid "Error occurred during gist creation"
605 msgid "Error occurred during gist creation"
603 msgstr ""
606 msgstr ""
604
607
605 #: rhodecode/apps/gist/views.py:242
608 #: rhodecode/apps/gist/views.py:242
606 #, python-format
609 #, python-format
607 msgid "Deleted gist %s"
610 msgid "Deleted gist %s"
608 msgstr ""
611 msgstr ""
609
612
610 #: rhodecode/apps/gist/views.py:330
613 #: rhodecode/apps/gist/views.py:330
611 #: rhodecode/templates/admin/gists/gist_show.mako:76
614 #: rhodecode/templates/admin/gists/gist_show.mako:76
612 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:44
615 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:50
613 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:49
616 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:55
614 #: rhodecode/templates/data_table/_dt_elements.mako:341
617 #: rhodecode/templates/data_table/_dt_elements.mako:341
615 msgid "never"
618 msgid "never"
616 msgstr ""
619 msgstr ""
617
620
618 #: rhodecode/apps/gist/views.py:336
621 #: rhodecode/apps/gist/views.py:336
619 #, python-format
622 #, python-format
620 msgid "%(expiry)s - current value"
623 msgid "%(expiry)s - current value"
621 msgstr ""
624 msgstr ""
622
625
623 #: rhodecode/apps/gist/views.py:381
626 #: rhodecode/apps/gist/views.py:381
624 msgid "Successfully updated gist content"
627 msgid "Successfully updated gist content"
625 msgstr ""
628 msgstr ""
626
629
627 #: rhodecode/apps/gist/views.py:386
630 #: rhodecode/apps/gist/views.py:386
628 msgid "Successfully updated gist data"
631 msgid "Successfully updated gist data"
629 msgstr ""
632 msgstr ""
630
633
631 #: rhodecode/apps/gist/views.py:389
634 #: rhodecode/apps/gist/views.py:389
632 msgid "Error occurred during update of gist {}: {}"
635 msgid "Error occurred during update of gist {}: {}"
633 msgstr ""
636 msgstr ""
634
637
635 #: rhodecode/apps/gist/views.py:393
638 #: rhodecode/apps/gist/views.py:393
636 #, python-format
639 #, python-format
637 msgid "Error occurred during update of gist %s"
640 msgid "Error occurred during update of gist %s"
638 msgstr ""
641 msgstr ""
639
642
640 #: rhodecode/apps/home/views.py:452
643 #: rhodecode/apps/home/views.py:452
641 #: rhodecode/apps/repository/views/repo_pull_requests.py:914
644 #: rhodecode/apps/repository/views/repo_pull_requests.py:930
642 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:209
645 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:219
643 #: rhodecode/templates/admin/repos/repo_add.mako:15
646 #: rhodecode/templates/admin/repos/repo_add.mako:15
644 #: rhodecode/templates/admin/repos/repo_add.mako:19
647 #: rhodecode/templates/admin/repos/repo_add.mako:19
645 #: rhodecode/templates/admin/users/user_edit_advanced.mako:12
648 #: rhodecode/templates/admin/users/user_edit_advanced.mako:12
646 #: rhodecode/templates/base/base.mako:107
649 #: rhodecode/templates/base/base.mako:112
647 #: rhodecode/templates/base/base.mako:126
650 #: rhodecode/templates/base/base.mako:131
648 #: rhodecode/templates/base/base.mako:1172
651 #: rhodecode/templates/base/base.mako:1192
649 msgid "Repositories"
652 msgid "Repositories"
650 msgstr ""
653 msgstr ""
651
654
652 #: rhodecode/apps/home/views.py:479
655 #: rhodecode/apps/home/views.py:479
653 #: rhodecode/templates/admin/integrations/form.mako:17
656 #: rhodecode/templates/admin/integrations/form.mako:17
654 #: rhodecode/templates/admin/integrations/list.mako:10
657 #: rhodecode/templates/admin/integrations/list.mako:10
655 #: rhodecode/templates/admin/permissions/permissions_objects.mako:31
658 #: rhodecode/templates/admin/permissions/permissions_objects.mako:31
656 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:208
659 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:218
657 msgid "Repository Groups"
660 msgid "Repository Groups"
658 msgstr ""
661 msgstr ""
659
662
660 #: rhodecode/apps/journal/views.py:133 rhodecode/apps/journal/views.py:179
663 #: rhodecode/apps/journal/views.py:133 rhodecode/apps/journal/views.py:179
661 msgid "public journal"
664 msgid "public journal"
662 msgstr ""
665 msgstr ""
663
666
664 #: rhodecode/apps/journal/views.py:137 rhodecode/apps/journal/views.py:183
667 #: rhodecode/apps/journal/views.py:137 rhodecode/apps/journal/views.py:183
665 msgid "journal"
668 msgid "journal"
666 msgstr ""
669 msgstr ""
667
670
668 #: rhodecode/apps/login/views.py:304 rhodecode/apps/login/views.py:403
671 #: rhodecode/apps/login/views.py:304 rhodecode/apps/login/views.py:403
669 msgid "Bad captcha"
672 msgid "Bad captcha"
670 msgstr ""
673 msgstr ""
671
674
672 #: rhodecode/apps/login/views.py:330
675 #: rhodecode/apps/login/views.py:330
673 msgid "You have successfully registered with RhodeCode. You can log-in now."
676 msgid "You have successfully registered with RhodeCode. You can log-in now."
674 msgstr ""
677 msgstr ""
675
678
676 #: rhodecode/apps/login/views.py:334
679 #: rhodecode/apps/login/views.py:334
677 msgid "Please use the {identity} button to log-in"
680 msgid "Please use the {identity} button to log-in"
678 msgstr ""
681 msgstr ""
679
682
680 #: rhodecode/apps/login/views.py:372
683 #: rhodecode/apps/login/views.py:372
681 msgid "If such email exists, a password reset link was sent to it."
684 msgid "If such email exists, a password reset link was sent to it."
682 msgstr ""
685 msgstr ""
683
686
684 #: rhodecode/apps/login/views.py:385
687 #: rhodecode/apps/login/views.py:385
685 msgid "Password reset has been disabled."
688 msgid "Password reset has been disabled."
686 msgstr ""
689 msgstr ""
687
690
688 #: rhodecode/apps/login/views.py:474
691 #: rhodecode/apps/login/views.py:474
689 msgid "Given reset token is invalid"
692 msgid "Given reset token is invalid"
690 msgstr ""
693 msgstr ""
691
694
692 #: rhodecode/apps/login/views.py:482
695 #: rhodecode/apps/login/views.py:482
693 msgid "Your password reset was successful, a new password has been sent to your email"
696 msgid "Your password reset was successful, a new password has been sent to your email"
694 msgstr ""
697 msgstr ""
695
698
696 #: rhodecode/apps/my_account/views/my_account.py:136
699 #: rhodecode/apps/my_account/views/my_account.py:136
697 msgid "Error occurred during update of user password"
700 msgid "Error occurred during update of user password"
698 msgstr ""
701 msgstr ""
699
702
700 #: rhodecode/apps/my_account/views/my_account.py:143
703 #: rhodecode/apps/my_account/views/my_account.py:143
701 msgid "Successfully updated password"
704 msgid "Successfully updated password"
702 msgstr ""
705 msgstr ""
703
706
704 #: rhodecode/apps/my_account/views/my_account.py:305
707 #: rhodecode/apps/my_account/views/my_account.py:305
705 msgid "Error occurred during adding email"
708 msgid "Error occurred during adding email"
706 msgstr ""
709 msgstr ""
707
710
708 #: rhodecode/apps/my_account/views/my_account.py:308
711 #: rhodecode/apps/my_account/views/my_account.py:308
709 msgid "Successfully added email"
712 msgid "Successfully added email"
710 msgstr ""
713 msgstr ""
711
714
712 #: rhodecode/apps/my_account/views/my_account.py:330
715 #: rhodecode/apps/my_account/views/my_account.py:330
713 msgid "Email successfully deleted"
716 msgid "Email successfully deleted"
714 msgstr ""
717 msgstr ""
715
718
716 #: rhodecode/apps/my_account/views/my_account.py:540
719 #: rhodecode/apps/my_account/views/my_account.py:540
717 msgid "Position {} is defined twice. Please correct this error."
720 msgid "Position {} is defined twice. Please correct this error."
718 msgstr ""
721 msgstr ""
719
722
720 #: rhodecode/apps/my_account/views/my_account.py:553
723 #: rhodecode/apps/my_account/views/my_account.py:553
721 msgid "Update Bookmarks"
724 msgid "Update Bookmarks"
722 msgstr ""
725 msgstr ""
723
726
724 #: rhodecode/apps/my_account/views/my_account.py:555
727 #: rhodecode/apps/my_account/views/my_account.py:555
725 msgid "Failed to update bookmarks. Make sure an unique position is used."
728 msgid "Failed to update bookmarks. Make sure an unique position is used."
726 msgstr ""
729 msgstr ""
727
730
728 #: rhodecode/apps/my_account/views/my_account.py:707
731 #: rhodecode/apps/my_account/views/my_account.py:707
729 msgid "Your account was updated successfully"
732 msgid "Your account was updated successfully"
730 msgstr ""
733 msgstr ""
731
734
732 #: rhodecode/apps/my_account/views/my_account.py:714
735 #: rhodecode/apps/my_account/views/my_account.py:714
733 msgid "Error occurred during update of user"
736 msgid "Error occurred during update of user"
734 msgstr ""
737 msgstr ""
735
738
736 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:57
739 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:57
737 #: rhodecode/apps/repository/views/repo_settings_advanced.py:85
740 #: rhodecode/apps/repository/views/repo_settings_advanced.py:85
738 msgid "updated commit cache"
741 msgid "updated commit cache"
739 msgstr ""
742 msgstr ""
740
743
741 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:105
744 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:105
742 #, python-format
745 #, python-format
743 msgid "Removed repository group `%s`"
746 msgid "Removed repository group `%s`"
744 msgstr ""
747 msgstr ""
745
748
746 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:109
749 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:109
747 #, python-format
750 #, python-format
748 msgid "Error occurred during deletion of repository group %s"
751 msgid "Error occurred during deletion of repository group %s"
749 msgstr ""
752 msgstr ""
750
753
751 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:75
754 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:75
752 #: rhodecode/apps/user_group/views/__init__.py:346
755 #: rhodecode/apps/user_group/views/__init__.py:346
753 msgid "Cannot change permission for yourself as admin"
756 msgid "Cannot change permission for yourself as admin"
754 msgstr ""
757 msgstr ""
755
758
756 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:99
759 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:99
757 msgid "Repository Group permissions updated"
760 msgid "Repository Group permissions updated"
758 msgstr ""
761 msgstr ""
759
762
760 #: rhodecode/apps/repo_group/views/repo_group_settings.py:174
763 #: rhodecode/apps/repo_group/views/repo_group_settings.py:174
761 msgid "Repository Group `{}` updated successfully"
764 msgid "Repository Group `{}` updated successfully"
762 msgstr ""
765 msgstr ""
763
766
764 #: rhodecode/apps/repo_group/views/repo_group_settings.py:179
767 #: rhodecode/apps/repo_group/views/repo_group_settings.py:179
765 #, python-format
768 #, python-format
766 msgid "Error occurred during update of repository group %s"
769 msgid "Error occurred during update of repository group %s"
767 msgstr ""
770 msgstr ""
768
771
769 #: rhodecode/apps/repository/views/repo_caches.py:80
772 #: rhodecode/apps/repository/views/repo_caches.py:80
770 msgid "Cache invalidation successful"
773 msgid "Cache invalidation successful"
771 msgstr ""
774 msgstr ""
772
775
773 #: rhodecode/apps/repository/views/repo_caches.py:84
776 #: rhodecode/apps/repository/views/repo_caches.py:84
774 msgid "An error occurred during cache invalidation"
777 msgid "An error occurred during cache invalidation"
775 msgstr ""
778 msgstr ""
776
779
777 #: rhodecode/apps/repository/views/repo_changelog.py:66
780 #: rhodecode/apps/repository/views/repo_changelog.py:66
778 #: rhodecode/apps/repository/views/repo_compare.py:64
781 #: rhodecode/apps/repository/views/repo_compare.py:64
779 #: rhodecode/apps/repository/views/repo_pull_requests.py:763
782 #: rhodecode/apps/repository/views/repo_pull_requests.py:779
780 msgid "There are no commits yet"
783 msgid "There are no commits yet"
781 msgstr ""
784 msgstr ""
782
785
783 #: rhodecode/apps/repository/views/repo_changelog.py:71
786 #: rhodecode/apps/repository/views/repo_changelog.py:71
784 #: rhodecode/apps/repository/views/repo_files.py:185
785 #: rhodecode/apps/repository/views/repo_files.py:205
787 #: rhodecode/apps/repository/views/repo_files.py:205
786 msgid "No such commit exists for this repository"
788 msgid "No such commit exists for this repository"
787 msgstr ""
789 msgstr ""
788
790
789 #: rhodecode/apps/repository/views/repo_checks.py:103
791 #: rhodecode/apps/repository/views/repo_checks.py:103
790 #, python-format
792 #, python-format
791 msgid "Created repository %s from %s"
793 msgid "Created repository %s from %s"
792 msgstr ""
794 msgstr ""
793
795
794 #: rhodecode/apps/repository/views/repo_checks.py:112
796 #: rhodecode/apps/repository/views/repo_checks.py:112
795 #, python-format
797 #, python-format
796 msgid "Forked repository %s as %s"
798 msgid "Forked repository %s as %s"
797 msgstr ""
799 msgstr ""
798
800
799 #: rhodecode/apps/repository/views/repo_checks.py:115
801 #: rhodecode/apps/repository/views/repo_checks.py:115
800 #, python-format
802 #, python-format
801 msgid "Created repository %s"
803 msgid "Created repository %s"
802 msgstr ""
804 msgstr ""
803
805
804 #: rhodecode/apps/repository/views/repo_commits.py:111
806 #: rhodecode/apps/repository/views/repo_commits.py:112
805 msgid "No such commit exists. Org exception: `{}`"
807 msgid "No such commit exists. Org exception: `{}`"
806 msgstr ""
808 msgstr ""
807
809
808 #: rhodecode/apps/repository/views/repo_commits.py:330
810 #: rhodecode/apps/repository/views/repo_commits.py:331
809 #: rhodecode/apps/repository/views/repo_pull_requests.py:1399
811 #: rhodecode/apps/repository/views/repo_pull_requests.py:1415
810 #, python-format
812 #, python-format
811 msgid "Status change %(transition_icon)s %(status)s"
813 msgid "Status change %(transition_icon)s %(status)s"
812 msgstr ""
814 msgstr ""
813
815
814 #: rhodecode/apps/repository/views/repo_commits.py:375
816 #: rhodecode/apps/repository/views/repo_commits.py:376
815 msgid "Changing the status of a commit associated with a closed pull request is not allowed"
817 msgid "Changing the status of a commit associated with a closed pull request is not allowed"
816 msgstr ""
818 msgstr ""
817
819
818 #: rhodecode/apps/repository/views/repo_compare.py:102
820 #: rhodecode/apps/repository/views/repo_compare.py:102
819 msgid "Select commit"
821 msgid "Select commit"
820 msgstr ""
822 msgstr ""
821
823
822 #: rhodecode/apps/repository/views/repo_compare.py:173
824 #: rhodecode/apps/repository/views/repo_compare.py:173
823 msgid "Could not find the source repo: `{}`"
825 msgid "Could not find the source repo: `{}`"
824 msgstr ""
826 msgstr ""
825
827
826 #: rhodecode/apps/repository/views/repo_compare.py:181
828 #: rhodecode/apps/repository/views/repo_compare.py:181
827 msgid "Could not find the target repo: `{}`"
829 msgid "Could not find the target repo: `{}`"
828 msgstr ""
830 msgstr ""
829
831
830 #: rhodecode/apps/repository/views/repo_compare.py:192
832 #: rhodecode/apps/repository/views/repo_compare.py:192
831 msgid "The comparison of two different kinds of remote repos is not available"
833 msgid "The comparison of two different kinds of remote repos is not available"
832 msgstr ""
834 msgstr ""
833
835
834 #: rhodecode/apps/repository/views/repo_compare.py:225
836 #: rhodecode/apps/repository/views/repo_compare.py:225
835 msgid "Could not compare repos with different large file settings"
837 msgid "Could not compare repos with different large file settings"
836 msgstr ""
838 msgstr ""
837
839
838 #: rhodecode/apps/repository/views/repo_compare.py:271
840 #: rhodecode/apps/repository/views/repo_compare.py:271
839 #, python-format
841 #, python-format
840 msgid "Repositories unrelated. Cannot compare commit %(commit1)s from repository %(repo1)s with commit %(commit2)s from repository %(repo2)s."
842 msgid "Repositories unrelated. Cannot compare commit %(commit1)s from repository %(repo1)s with commit %(commit2)s from repository %(repo2)s."
841 msgstr ""
843 msgstr ""
842
844
843 #: rhodecode/apps/repository/views/repo_feed.py:68
845 #: rhodecode/apps/repository/views/repo_feed.py:68
844 #, python-format
846 #, python-format
845 msgid "Changes on %s repository"
847 msgid "Changes on %s repository"
846 msgstr ""
848 msgstr ""
847
849
848 #: rhodecode/apps/repository/views/repo_feed.py:69
850 #: rhodecode/apps/repository/views/repo_feed.py:69
849 #, python-format
851 #, python-format
850 msgid "%s %s feed"
852 msgid "%s %s feed"
851 msgstr ""
853 msgstr ""
852
854
853 #: rhodecode/apps/repository/views/repo_files.py:96
855 #: rhodecode/apps/repository/views/repo_files.py:96
854 #, python-format
856 #, python-format
855 msgid "This repository has been locked by %s on %s"
857 msgid "This repository has been locked by %s on %s"
856 msgstr ""
858 msgstr ""
857
859
858 #: rhodecode/apps/repository/views/repo_files.py:109
860 #: rhodecode/apps/repository/views/repo_files.py:109
859 msgid "Cannot modify file. Given commit `{}` is not head of a branch."
861 msgid "Cannot modify file. Given commit `{}` is not head of a branch."
860 msgstr ""
862 msgstr ""
861
863
862 #: rhodecode/apps/repository/views/repo_files.py:127
864 #: rhodecode/apps/repository/views/repo_files.py:127
863 msgid "Branch `{}` changes forbidden by rule {}."
865 msgid "Branch `{}` changes forbidden by rule {}."
864 msgstr ""
866 msgstr ""
865
867
866 #: rhodecode/apps/repository/views/repo_files.py:175
868 #: rhodecode/apps/repository/views/repo_files.py:175
867 msgid "Click here to add a new file."
869 msgid "Click here to add a new file."
868 msgstr ""
870 msgstr ""
869
871
870 #: rhodecode/apps/repository/views/repo_files.py:180
872 #: rhodecode/apps/repository/views/repo_files.py:180
871 #, python-format
873 #, python-format
872 msgid "There are no files yet. %s"
874 msgid "There are no files yet. %s"
873 msgstr ""
875 msgstr ""
874
876
877 #: rhodecode/apps/repository/views/repo_files.py:185
878 msgid "No such commit exists for this repository. Commit: {}"
879 msgstr ""
880
875 #: rhodecode/apps/repository/views/repo_files.py:341
881 #: rhodecode/apps/repository/views/repo_files.py:341
876 msgid "Downloads disabled"
882 msgid "Downloads disabled"
877 msgstr ""
883 msgstr ""
878
884
879 #: rhodecode/apps/repository/views/repo_files.py:347
885 #: rhodecode/apps/repository/views/repo_files.py:347
880 msgid "Unknown archive type for: `{}`"
886 msgid "Unknown archive type for: `{}`"
881 msgstr ""
887 msgstr ""
882
888
883 #: rhodecode/apps/repository/views/repo_files.py:353
889 #: rhodecode/apps/repository/views/repo_files.py:353
884 msgid "Unknown commit_id {}"
890 msgid "Unknown commit_id {}"
885 msgstr ""
891 msgstr ""
886
892
887 #: rhodecode/apps/repository/views/repo_files.py:356
893 #: rhodecode/apps/repository/views/repo_files.py:356
888 msgid "Empty repository"
894 msgid "Empty repository"
889 msgstr ""
895 msgstr ""
890
896
891 #: rhodecode/apps/repository/views/repo_files.py:361
897 #: rhodecode/apps/repository/views/repo_files.py:361
892 msgid "No node at path {} for this repository"
898 msgid "No node at path {} for this repository"
893 msgstr ""
899 msgstr ""
894
900
895 #: rhodecode/apps/repository/views/repo_files.py:410
901 #: rhodecode/apps/repository/views/repo_files.py:410
896 msgid "Unknown archive type"
902 msgid "Unknown archive type"
897 msgstr ""
903 msgstr ""
898
904
899 #: rhodecode/apps/repository/views/repo_files.py:990
905 #: rhodecode/apps/repository/views/repo_files.py:1005
900 msgid "Changesets"
906 msgid "Changesets"
901 msgstr ""
907 msgstr ""
902
908
903 #: rhodecode/apps/repository/views/repo_files.py:1011
909 #: rhodecode/apps/repository/views/repo_files.py:1026
904 #: rhodecode/apps/repository/views/repo_summary.py:264
910 #: rhodecode/apps/repository/views/repo_summary.py:264
905 #: rhodecode/model/pull_request.py:1740 rhodecode/model/scm.py:995
911 #: rhodecode/model/pull_request.py:1740 rhodecode/model/scm.py:995
906 #: rhodecode/templates/base/vcs_settings.mako:235
912 #: rhodecode/templates/base/vcs_settings.mako:235
907 #: rhodecode/templates/summary/components.mako:10
913 #: rhodecode/templates/summary/components.mako:10
908 msgid "Branches"
914 msgid "Branches"
909 msgstr ""
915 msgstr ""
910
916
911 #: rhodecode/apps/repository/views/repo_files.py:1015
917 #: rhodecode/apps/repository/views/repo_files.py:1030
912 #: rhodecode/model/scm.py:1012 rhodecode/templates/base/vcs_settings.mako:260
918 #: rhodecode/model/scm.py:1012 rhodecode/templates/base/vcs_settings.mako:260
913 #: rhodecode/templates/summary/components.mako:34
919 #: rhodecode/templates/summary/components.mako:34
914 msgid "Tags"
920 msgid "Tags"
915 msgstr ""
921 msgstr ""
916
922
917 #: rhodecode/apps/repository/views/repo_files.py:1169
923 #: rhodecode/apps/repository/views/repo_files.py:1184
918 #: rhodecode/apps/repository/views/repo_files.py:1197
924 #: rhodecode/apps/repository/views/repo_files.py:1212
919 msgid "Deleted file {} via RhodeCode Enterprise"
925 msgid "Deleted file {} via RhodeCode Enterprise"
920 msgstr ""
926 msgstr ""
921
927
922 #: rhodecode/apps/repository/views/repo_files.py:1218
928 #: rhodecode/apps/repository/views/repo_files.py:1233
923 msgid "Successfully deleted file `{}`"
929 msgid "Successfully deleted file `{}`"
924 msgstr ""
930 msgstr ""
925
931
926 #: rhodecode/apps/repository/views/repo_files.py:1222
932 #: rhodecode/apps/repository/views/repo_files.py:1237
927 #: rhodecode/apps/repository/views/repo_files.py:1339
933 #: rhodecode/apps/repository/views/repo_files.py:1354
928 #: rhodecode/apps/repository/views/repo_files.py:1470
934 #: rhodecode/apps/repository/views/repo_files.py:1485
929 #: rhodecode/apps/repository/views/repo_files.py:1593
935 #: rhodecode/apps/repository/views/repo_files.py:1608
930 msgid "Error occurred during commit"
936 msgid "Error occurred during commit"
931 msgstr ""
937 msgstr ""
932
938
933 #: rhodecode/apps/repository/views/repo_files.py:1254
939 #: rhodecode/apps/repository/views/repo_files.py:1269
934 #: rhodecode/apps/repository/views/repo_files.py:1285
940 #: rhodecode/apps/repository/views/repo_files.py:1300
935 msgid "Edited file {} via RhodeCode Enterprise"
941 msgid "Edited file {} via RhodeCode Enterprise"
936 msgstr ""
942 msgstr ""
937
943
938 #: rhodecode/apps/repository/views/repo_files.py:1308
944 #: rhodecode/apps/repository/views/repo_files.py:1323
939 msgid "No changes detected on {}"
945 msgid "No changes detected on {}"
940 msgstr ""
946 msgstr ""
941
947
942 #: rhodecode/apps/repository/views/repo_files.py:1332
948 #: rhodecode/apps/repository/views/repo_files.py:1347
943 msgid "Successfully committed changes to file `{}`"
949 msgid "Successfully committed changes to file `{}`"
944 msgstr ""
950 msgstr ""
945
951
946 #: rhodecode/apps/repository/views/repo_files.py:1373
952 #: rhodecode/apps/repository/views/repo_files.py:1388
947 #: rhodecode/apps/repository/views/repo_files.py:1414
953 #: rhodecode/apps/repository/views/repo_files.py:1429
948 msgid "Added file via RhodeCode Enterprise"
954 msgid "Added file via RhodeCode Enterprise"
949 msgstr ""
955 msgstr ""
950
956
951 #: rhodecode/apps/repository/views/repo_files.py:1430
957 #: rhodecode/apps/repository/views/repo_files.py:1445
952 msgid "No filename specified"
958 msgid "No filename specified"
953 msgstr ""
959 msgstr ""
954
960
955 #: rhodecode/apps/repository/views/repo_files.py:1455
961 #: rhodecode/apps/repository/views/repo_files.py:1470
956 msgid "Successfully committed new file `{}`"
962 msgid "Successfully committed new file `{}`"
957 msgstr ""
963 msgstr ""
958
964
959 #: rhodecode/apps/repository/views/repo_files.py:1463
965 #: rhodecode/apps/repository/views/repo_files.py:1478
960 #: rhodecode/apps/repository/views/repo_files.py:1575
966 #: rhodecode/apps/repository/views/repo_files.py:1590
961 msgid "The location specified must be a relative path and must not contain .. in the path"
967 msgid "The location specified must be a relative path and must not contain .. in the path"
962 msgstr ""
968 msgstr ""
963
969
964 #: rhodecode/apps/repository/views/repo_files.py:1520
970 #: rhodecode/apps/repository/views/repo_files.py:1535
965 msgid "Uploaded file via RhodeCode Enterprise"
971 msgid "Uploaded file via RhodeCode Enterprise"
966 msgstr ""
972 msgstr ""
967
973
968 #: rhodecode/apps/repository/views/repo_files.py:1564
974 #: rhodecode/apps/repository/views/repo_files.py:1579
969 msgid "Successfully committed {} new files"
975 msgid "Successfully committed {} new files"
970 msgstr ""
976 msgstr ""
971
977
972 #: rhodecode/apps/repository/views/repo_files.py:1566
978 #: rhodecode/apps/repository/views/repo_files.py:1581
973 msgid "Successfully committed 1 new file"
979 msgid "Successfully committed 1 new file"
974 msgstr ""
980 msgstr ""
975
981
976 #: rhodecode/apps/repository/views/repo_forks.py:146
982 #: rhodecode/apps/repository/views/repo_forks.py:146
977 msgid "Compare fork"
983 msgid "Compare fork"
978 msgstr ""
984 msgstr ""
979
985
980 #: rhodecode/apps/repository/views/repo_forks.py:251
986 #: rhodecode/apps/repository/views/repo_forks.py:251
981 #, python-format
987 #, python-format
982 msgid "An error occurred during repository forking %s"
988 msgid "An error occurred during repository forking %s"
983 msgstr ""
989 msgstr ""
984
990
985 #: rhodecode/apps/repository/views/repo_permissions.py:57
991 #: rhodecode/apps/repository/views/repo_permissions.py:57
986 msgid "Explicitly add user or user group with write+ permission to modify their branch permissions."
992 msgid "Explicitly add user or user group with write+ permission to modify their branch permissions."
987 msgstr ""
993 msgstr ""
988
994
989 #: rhodecode/apps/repository/views/repo_permissions.py:92
995 #: rhodecode/apps/repository/views/repo_permissions.py:92
990 msgid "Repository access permissions updated"
996 msgid "Repository access permissions updated"
991 msgstr ""
997 msgstr ""
992
998
993 #: rhodecode/apps/repository/views/repo_permissions.py:126
999 #: rhodecode/apps/repository/views/repo_permissions.py:126
994 msgid "Repository `{}` private mode set successfully"
1000 msgid "Repository `{}` private mode set successfully"
995 msgstr ""
1001 msgstr ""
996
1002
997 #: rhodecode/apps/repository/views/repo_permissions.py:134
1003 #: rhodecode/apps/repository/views/repo_permissions.py:134
998 #: rhodecode/apps/repository/views/repo_settings.py:176
1004 #: rhodecode/apps/repository/views/repo_settings.py:176
999 msgid "Error occurred during update of repository {}"
1005 msgid "Error occurred during update of repository {}"
1000 msgstr ""
1006 msgstr ""
1001
1007
1002 #: rhodecode/apps/repository/views/repo_pull_requests.py:287
1008 #: rhodecode/apps/repository/views/repo_pull_requests.py:291
1003 msgid "Pull Request state was force changed to `{}`"
1009 msgid "Pull Request state was force changed to `{}`"
1004 msgstr ""
1010 msgstr ""
1005
1011
1006 #: rhodecode/apps/repository/views/repo_pull_requests.py:793
1012 #: rhodecode/apps/repository/views/repo_pull_requests.py:809
1007 msgid "Commit does not exist"
1013 msgid "Commit does not exist"
1008 msgstr ""
1014 msgstr ""
1009
1015
1010 #: rhodecode/apps/repository/views/repo_pull_requests.py:945
1016 #: rhodecode/apps/repository/views/repo_pull_requests.py:961
1011 msgid "Error creating pull request: {}"
1017 msgid "Error creating pull request: {}"
1012 msgstr ""
1018 msgstr ""
1013
1019
1014 #: rhodecode/apps/repository/views/repo_pull_requests.py:965
1020 #: rhodecode/apps/repository/views/repo_pull_requests.py:981
1015 msgid "source_repo or target repo not found"
1021 msgid "source_repo or target repo not found"
1016 msgstr ""
1022 msgstr ""
1017
1023
1018 #: rhodecode/apps/repository/views/repo_pull_requests.py:976
1024 #: rhodecode/apps/repository/views/repo_pull_requests.py:992
1019 msgid "Not Enough permissions to source repo `{}`."
1025 msgid "Not Enough permissions to source repo `{}`."
1020 msgstr ""
1026 msgstr ""
1021
1027
1022 #: rhodecode/apps/repository/views/repo_pull_requests.py:991
1028 #: rhodecode/apps/repository/views/repo_pull_requests.py:1007
1023 msgid "Not Enough permissions to target repo `{}`."
1029 msgid "Not Enough permissions to target repo `{}`."
1024 msgstr ""
1030 msgstr ""
1025
1031
1026 #: rhodecode/apps/repository/views/repo_pull_requests.py:1055
1032 #: rhodecode/apps/repository/views/repo_pull_requests.py:1071
1027 msgid "Successfully opened new pull request"
1033 msgid "Successfully opened new pull request"
1028 msgstr ""
1034 msgstr ""
1029
1035
1030 #: rhodecode/apps/repository/views/repo_pull_requests.py:1058
1036 #: rhodecode/apps/repository/views/repo_pull_requests.py:1074
1031 msgid "Error occurred during creation of this pull request."
1037 msgid "Error occurred during creation of this pull request."
1032 msgstr ""
1038 msgstr ""
1033
1039
1034 #: rhodecode/apps/repository/views/repo_pull_requests.py:1090
1040 #: rhodecode/apps/repository/views/repo_pull_requests.py:1106
1035 #: rhodecode/apps/repository/views/repo_pull_requests.py:1145
1041 #: rhodecode/apps/repository/views/repo_pull_requests.py:1161
1036 msgid "Cannot update closed pull requests."
1042 msgid "Cannot update closed pull requests."
1037 msgstr ""
1043 msgstr ""
1038
1044
1039 #: rhodecode/apps/repository/views/repo_pull_requests.py:1112
1045 #: rhodecode/apps/repository/views/repo_pull_requests.py:1128
1040 msgid "Cannot update pull requests commits in state other than `{}`. Current state is: `{}`"
1046 msgid "Cannot update pull requests commits in state other than `{}`. Current state is: `{}`"
1041 msgstr ""
1047 msgstr ""
1042
1048
1043 #: rhodecode/apps/repository/views/repo_pull_requests.py:1151
1049 #: rhodecode/apps/repository/views/repo_pull_requests.py:1167
1044 msgid "Pull request title & description updated."
1050 msgid "Pull request title & description updated."
1045 msgstr ""
1051 msgstr ""
1046
1052
1047 #: rhodecode/apps/repository/views/repo_pull_requests.py:1173
1053 #: rhodecode/apps/repository/views/repo_pull_requests.py:1189
1048 msgid "Pull request updated to \"{source_commit_id}\" with {count_added} added, {count_removed} removed commits. Source of changes: {change_source}"
1054 msgid "Pull request updated to \"{source_commit_id}\" with {count_added} added, {count_removed} removed commits. Source of changes: {change_source}"
1049 msgstr ""
1055 msgstr ""
1050
1056
1051 #: rhodecode/apps/repository/views/repo_pull_requests.py:1187
1057 #: rhodecode/apps/repository/views/repo_pull_requests.py:1203
1052 msgid "Reload page"
1058 msgid "Reload page"
1053 msgstr ""
1059 msgstr ""
1054
1060
1055 #: rhodecode/apps/repository/views/repo_pull_requests.py:1222
1061 #: rhodecode/apps/repository/views/repo_pull_requests.py:1238
1056 msgid "Cannot merge pull requests in state other than `{}`. Current state is: `{}`"
1062 msgid "Cannot merge pull requests in state other than `{}`. Current state is: `{}`"
1057 msgstr ""
1063 msgstr ""
1058
1064
1059 #: rhodecode/apps/repository/views/repo_pull_requests.py:1268
1065 #: rhodecode/apps/repository/views/repo_pull_requests.py:1284
1060 msgid "Pull request was successfully merged and closed."
1066 msgid "Pull request was successfully merged and closed."
1061 msgstr ""
1067 msgstr ""
1062
1068
1063 #: rhodecode/apps/repository/views/repo_pull_requests.py:1292
1069 #: rhodecode/apps/repository/views/repo_pull_requests.py:1308
1064 msgid "Pull request reviewers updated."
1070 msgid "Pull request reviewers updated."
1065 msgstr ""
1071 msgstr ""
1066
1072
1067 #: rhodecode/apps/repository/views/repo_pull_requests.py:1325
1073 #: rhodecode/apps/repository/views/repo_pull_requests.py:1341
1068 msgid "Successfully deleted pull request"
1074 msgid "Successfully deleted pull request"
1069 msgstr ""
1075 msgstr ""
1070
1076
1071 #: rhodecode/apps/repository/views/repo_settings.py:172
1077 #: rhodecode/apps/repository/views/repo_settings.py:172
1072 msgid "Repository `{}` updated successfully"
1078 msgid "Repository `{}` updated successfully"
1073 msgstr ""
1079 msgstr ""
1074
1080
1075 #: rhodecode/apps/repository/views/repo_settings.py:209
1081 #: rhodecode/apps/repository/views/repo_settings.py:209
1076 msgid "Unlocked"
1082 msgid "Unlocked"
1077 msgstr ""
1083 msgstr ""
1078
1084
1079 #: rhodecode/apps/repository/views/repo_settings.py:214
1085 #: rhodecode/apps/repository/views/repo_settings.py:214
1080 msgid "Locked"
1086 msgid "Locked"
1081 msgstr ""
1087 msgstr ""
1082
1088
1083 #: rhodecode/apps/repository/views/repo_settings.py:216
1089 #: rhodecode/apps/repository/views/repo_settings.py:216
1084 #, python-format
1090 #, python-format
1085 msgid "Repository has been %s"
1091 msgid "Repository has been %s"
1086 msgstr ""
1092 msgstr ""
1087
1093
1088 #: rhodecode/apps/repository/views/repo_settings.py:220
1094 #: rhodecode/apps/repository/views/repo_settings.py:220
1089 #: rhodecode/apps/repository/views/repo_settings_advanced.py:305
1095 #: rhodecode/apps/repository/views/repo_settings_advanced.py:305
1090 msgid "An error occurred during unlocking"
1096 msgid "An error occurred during unlocking"
1091 msgstr ""
1097 msgstr ""
1092
1098
1093 #: rhodecode/apps/repository/views/repo_settings.py:264
1099 #: rhodecode/apps/repository/views/repo_settings.py:264
1094 msgid "An error occurred during deletion of repository stats"
1100 msgid "An error occurred during deletion of repository stats"
1095 msgstr ""
1101 msgstr ""
1096
1102
1097 #: rhodecode/apps/repository/views/repo_settings_advanced.py:114
1103 #: rhodecode/apps/repository/views/repo_settings_advanced.py:114
1098 #, python-format
1104 #, python-format
1099 msgid "Archived repository `%s`"
1105 msgid "Archived repository `%s`"
1100 msgstr ""
1106 msgstr ""
1101
1107
1102 #: rhodecode/apps/repository/views/repo_settings_advanced.py:119
1108 #: rhodecode/apps/repository/views/repo_settings_advanced.py:119
1103 #, python-format
1109 #, python-format
1104 msgid "An error occurred during archiving of `%s`"
1110 msgid "An error occurred during archiving of `%s`"
1105 msgstr ""
1111 msgstr ""
1106
1112
1107 #: rhodecode/apps/repository/views/repo_settings_advanced.py:157
1113 #: rhodecode/apps/repository/views/repo_settings_advanced.py:157
1108 #, python-format
1114 #, python-format
1109 msgid "Detached %s forks"
1115 msgid "Detached %s forks"
1110 msgstr ""
1116 msgstr ""
1111
1117
1112 #: rhodecode/apps/repository/views/repo_settings_advanced.py:159
1118 #: rhodecode/apps/repository/views/repo_settings_advanced.py:159
1113 #, python-format
1119 #, python-format
1114 msgid "Deleted %s forks"
1120 msgid "Deleted %s forks"
1115 msgstr ""
1121 msgstr ""
1116
1122
1117 #: rhodecode/apps/repository/views/repo_settings_advanced.py:168
1123 #: rhodecode/apps/repository/views/repo_settings_advanced.py:168
1118 #, python-format
1124 #, python-format
1119 msgid "Deleted repository `%s`"
1125 msgid "Deleted repository `%s`"
1120 msgstr ""
1126 msgstr ""
1121
1127
1122 #: rhodecode/apps/repository/views/repo_settings_advanced.py:175
1128 #: rhodecode/apps/repository/views/repo_settings_advanced.py:175
1123 msgid "detach or delete"
1129 msgid "detach or delete"
1124 msgstr ""
1130 msgstr ""
1125
1131
1126 #: rhodecode/apps/repository/views/repo_settings_advanced.py:176
1132 #: rhodecode/apps/repository/views/repo_settings_advanced.py:176
1127 msgid "Cannot delete `{repo}` it still contains attached forks. Try using {delete_or_detach} option."
1133 msgid "Cannot delete `{repo}` it still contains attached forks. Try using {delete_or_detach} option."
1128 msgstr ""
1134 msgstr ""
1129
1135
1130 #: rhodecode/apps/repository/views/repo_settings_advanced.py:191
1136 #: rhodecode/apps/repository/views/repo_settings_advanced.py:191
1131 msgid "Cannot delete `{repo}` it still contains {num} attached pull requests. Consider archiving the repository instead."
1137 msgid "Cannot delete `{repo}` it still contains {num} attached pull requests. Consider archiving the repository instead."
1132 msgstr ""
1138 msgstr ""
1133
1139
1134 #: rhodecode/apps/repository/views/repo_settings_advanced.py:200
1140 #: rhodecode/apps/repository/views/repo_settings_advanced.py:200
1135 #, python-format
1141 #, python-format
1136 msgid "An error occurred during deletion of `%s`"
1142 msgid "An error occurred during deletion of `%s`"
1137 msgstr ""
1143 msgstr ""
1138
1144
1139 #: rhodecode/apps/repository/views/repo_settings_advanced.py:225
1145 #: rhodecode/apps/repository/views/repo_settings_advanced.py:225
1140 msgid "Updated repository visibility in public journal"
1146 msgid "Updated repository visibility in public journal"
1141 msgstr ""
1147 msgstr ""
1142
1148
1143 #: rhodecode/apps/repository/views/repo_settings_advanced.py:229
1149 #: rhodecode/apps/repository/views/repo_settings_advanced.py:229
1144 msgid "An error occurred during setting this repository in public journal"
1150 msgid "An error occurred during setting this repository in public journal"
1145 msgstr ""
1151 msgstr ""
1146
1152
1147 #: rhodecode/apps/repository/views/repo_settings_advanced.py:265
1153 #: rhodecode/apps/repository/views/repo_settings_advanced.py:265
1148 msgid "Nothing"
1154 msgid "Nothing"
1149 msgstr ""
1155 msgstr ""
1150
1156
1151 #: rhodecode/apps/repository/views/repo_settings_advanced.py:268
1157 #: rhodecode/apps/repository/views/repo_settings_advanced.py:268
1152 #, python-format
1158 #, python-format
1153 msgid "Marked repo %s as fork of %s"
1159 msgid "Marked repo %s as fork of %s"
1154 msgstr ""
1160 msgstr ""
1155
1161
1156 #: rhodecode/apps/repository/views/repo_settings_advanced.py:275
1162 #: rhodecode/apps/repository/views/repo_settings_advanced.py:275
1157 msgid "An error occurred during this operation"
1163 msgid "An error occurred during this operation"
1158 msgstr ""
1164 msgstr ""
1159
1165
1160 #: rhodecode/apps/repository/views/repo_settings_advanced.py:299
1166 #: rhodecode/apps/repository/views/repo_settings_advanced.py:299
1161 msgid "Locked repository"
1167 msgid "Locked repository"
1162 msgstr ""
1168 msgstr ""
1163
1169
1164 #: rhodecode/apps/repository/views/repo_settings_advanced.py:302
1170 #: rhodecode/apps/repository/views/repo_settings_advanced.py:302
1165 msgid "Unlocked repository"
1171 msgid "Unlocked repository"
1166 msgstr ""
1172 msgstr ""
1167
1173
1168 #: rhodecode/apps/repository/views/repo_settings_advanced.py:322
1174 #: rhodecode/apps/repository/views/repo_settings_advanced.py:322
1169 msgid "installed updated hooks into this repository"
1175 msgid "installed updated hooks into this repository"
1170 msgstr ""
1176 msgstr ""
1171
1177
1172 #: rhodecode/apps/repository/views/repo_settings_fields.py:86
1178 #: rhodecode/apps/repository/views/repo_settings_fields.py:86
1173 msgid "An error occurred during creation of field"
1179 msgid "An error occurred during creation of field"
1174 msgstr ""
1180 msgstr ""
1175
1181
1176 #: rhodecode/apps/repository/views/repo_settings_fields.py:108
1182 #: rhodecode/apps/repository/views/repo_settings_fields.py:108
1177 msgid "An error occurred during removal of field"
1183 msgid "An error occurred during removal of field"
1178 msgstr ""
1184 msgstr ""
1179
1185
1180 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:86
1186 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:86
1181 msgid "Error occurred during deleting issue tracker entry"
1187 msgid "Error occurred during deleting issue tracker entry"
1182 msgstr ""
1188 msgstr ""
1183
1189
1184 #: rhodecode/apps/repository/views/repo_settings_remote.py:64
1190 #: rhodecode/apps/repository/views/repo_settings_remote.py:64
1185 msgid "Pulled from remote location"
1191 msgid "Pulled from remote location"
1186 msgstr ""
1192 msgstr ""
1187
1193
1188 #: rhodecode/apps/repository/views/repo_settings_remote.py:67
1194 #: rhodecode/apps/repository/views/repo_settings_remote.py:67
1189 msgid "An error occurred during pull from remote location"
1195 msgid "An error occurred during pull from remote location"
1190 msgstr ""
1196 msgstr ""
1191
1197
1192 #: rhodecode/apps/repository/views/repo_settings_vcs.py:147
1198 #: rhodecode/apps/repository/views/repo_settings_vcs.py:147
1193 msgid "Error occurred during updating repository VCS settings"
1199 msgid "Error occurred during updating repository VCS settings"
1194 msgstr ""
1200 msgstr ""
1195
1201
1196 #: rhodecode/apps/repository/views/repo_summary.py:240
1202 #: rhodecode/apps/repository/views/repo_summary.py:240
1197 #: rhodecode/templates/admin/permissions/permissions.mako:42
1203 #: rhodecode/templates/admin/permissions/permissions.mako:42
1198 #: rhodecode/templates/summary/components.mako:8
1204 #: rhodecode/templates/summary/components.mako:8
1199 msgid "Branch"
1205 msgid "Branch"
1200 msgstr ""
1206 msgstr ""
1201
1207
1202 #: rhodecode/apps/repository/views/repo_summary.py:241
1208 #: rhodecode/apps/repository/views/repo_summary.py:241
1203 #: rhodecode/templates/summary/components.mako:32
1209 #: rhodecode/templates/summary/components.mako:32
1204 msgid "Tag"
1210 msgid "Tag"
1205 msgstr ""
1211 msgstr ""
1206
1212
1207 #: rhodecode/apps/repository/views/repo_summary.py:242
1213 #: rhodecode/apps/repository/views/repo_summary.py:242
1208 #: rhodecode/templates/summary/components.mako:44
1214 #: rhodecode/templates/summary/components.mako:44
1209 msgid "Bookmark"
1215 msgid "Bookmark"
1210 msgstr ""
1216 msgstr ""
1211
1217
1212 #: rhodecode/apps/repository/views/repo_summary.py:265
1218 #: rhodecode/apps/repository/views/repo_summary.py:265
1213 msgid "Closed branches"
1219 msgid "Closed branches"
1214 msgstr ""
1220 msgstr ""
1215
1221
1216 #: rhodecode/apps/ssh_support/events.py:29
1222 #: rhodecode/apps/ssh_support/events.py:29
1217 msgid "RhodeCode SSH Key files changed."
1223 msgid "RhodeCode SSH Key files changed."
1218 msgstr ""
1224 msgstr ""
1219
1225
1220 #: rhodecode/apps/svn_support/events.py:30
1226 #: rhodecode/apps/svn_support/events.py:30
1221 msgid "Configuration for Apache mad_dav_svn changed."
1227 msgid "Configuration for Apache mad_dav_svn changed."
1222 msgstr ""
1228 msgstr ""
1223
1229
1224 #: rhodecode/apps/user_group/views/__init__.py:188
1230 #: rhodecode/apps/user_group/views/__init__.py:188
1225 #, python-format
1231 #, python-format
1226 msgid "Updated user group %s"
1232 msgid "Updated user group %s"
1227 msgstr ""
1233 msgstr ""
1228
1234
1229 #: rhodecode/apps/user_group/views/__init__.py:224
1235 #: rhodecode/apps/user_group/views/__init__.py:224
1230 #, python-format
1236 #, python-format
1231 msgid "Error occurred during update of user group %s"
1237 msgid "Error occurred during update of user group %s"
1232 msgstr ""
1238 msgstr ""
1233
1239
1234 #: rhodecode/apps/user_group/views/__init__.py:250
1240 #: rhodecode/apps/user_group/views/__init__.py:250
1235 msgid "Successfully deleted user group"
1241 msgid "Successfully deleted user group"
1236 msgstr ""
1242 msgstr ""
1237
1243
1238 #: rhodecode/apps/user_group/views/__init__.py:255
1244 #: rhodecode/apps/user_group/views/__init__.py:255
1239 msgid "An error occurred during deletion of user group"
1245 msgid "An error occurred during deletion of user group"
1240 msgstr ""
1246 msgstr ""
1241
1247
1242 #: rhodecode/apps/user_group/views/__init__.py:359
1248 #: rhodecode/apps/user_group/views/__init__.py:359
1243 msgid "Target group cannot be the same"
1249 msgid "Target group cannot be the same"
1244 msgstr ""
1250 msgstr ""
1245
1251
1246 #: rhodecode/apps/user_group/views/__init__.py:374
1252 #: rhodecode/apps/user_group/views/__init__.py:374
1247 msgid "User Group permissions updated"
1253 msgid "User Group permissions updated"
1248 msgstr ""
1254 msgstr ""
1249
1255
1250 #: rhodecode/apps/user_group/views/__init__.py:459
1256 #: rhodecode/apps/user_group/views/__init__.py:459
1251 msgid "User Group global permissions updated successfully"
1257 msgid "User Group global permissions updated successfully"
1252 msgstr ""
1258 msgstr ""
1253
1259
1254 #: rhodecode/apps/user_group/views/__init__.py:541
1260 #: rhodecode/apps/user_group/views/__init__.py:541
1255 msgid "User Group synchronization updated successfully"
1261 msgid "User Group synchronization updated successfully"
1256 msgstr ""
1262 msgstr ""
1257
1263
1258 #: rhodecode/apps/user_group/views/__init__.py:545
1264 #: rhodecode/apps/user_group/views/__init__.py:545
1259 msgid "An error occurred during synchronization update"
1265 msgid "An error occurred during synchronization update"
1260 msgstr ""
1266 msgstr ""
1261
1267
1262 #: rhodecode/authentication/routes.py:61
1268 #: rhodecode/authentication/routes.py:61
1263 #: rhodecode/templates/admin/auth/plugin_settings.mako:14
1269 #: rhodecode/templates/admin/auth/plugin_settings.mako:14
1264 msgid "Authentication Plugins"
1270 msgid "Authentication Plugins"
1265 msgstr ""
1271 msgstr ""
1266
1272
1267 #: rhodecode/authentication/schema.py:36
1273 #: rhodecode/authentication/schema.py:36
1268 msgid "Enable or disable this authentication plugin."
1274 msgid "Enable or disable this authentication plugin."
1269 msgstr ""
1275 msgstr ""
1270
1276
1271 #: rhodecode/authentication/schema.py:38 rhodecode/integrations/schema.py:32
1277 #: rhodecode/authentication/schema.py:38 rhodecode/integrations/schema.py:32
1272 #: rhodecode/model/permission.py:110 rhodecode/model/permission.py:114
1278 #: rhodecode/model/permission.py:110 rhodecode/model/permission.py:114
1273 #: rhodecode/model/permission.py:118 rhodecode/model/permission.py:122
1279 #: rhodecode/model/permission.py:118 rhodecode/model/permission.py:122
1274 #: rhodecode/model/permission.py:126 rhodecode/model/permission.py:130
1280 #: rhodecode/model/permission.py:126 rhodecode/model/permission.py:130
1275 #: rhodecode/model/validation_schema/schemas/integration_schema.py:195
1281 #: rhodecode/model/validation_schema/schemas/integration_schema.py:195
1276 #: rhodecode/templates/admin/auth/auth_settings.mako:64
1282 #: rhodecode/templates/admin/auth/auth_settings.mako:64
1277 #: rhodecode/templates/admin/integrations/list.mako:71
1283 #: rhodecode/templates/admin/integrations/list.mako:71
1278 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:23
1284 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:23
1279 msgid "Enabled"
1285 msgid "Enabled"
1280 msgstr ""
1286 msgstr ""
1281
1287
1282 #: rhodecode/authentication/schema.py:44
1288 #: rhodecode/authentication/schema.py:44
1283 msgid ""
1289 msgid ""
1284 "Amount of seconds to cache the authentication and permissions check response call for this plugin. \n"
1290 "Amount of seconds to cache the authentication and permissions check response call for this plugin. \n"
1285 "Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled)."
1291 "Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled)."
1286 msgstr ""
1292 msgstr ""
1287
1293
1288 #: rhodecode/authentication/schema.py:49
1294 #: rhodecode/authentication/schema.py:49
1289 msgid "Auth Cache TTL"
1295 msgid "Auth Cache TTL"
1290 msgstr ""
1296 msgstr ""
1291
1297
1292 #: rhodecode/authentication/views.py:92
1298 #: rhodecode/authentication/views.py:92
1293 msgid "Errors exist when saving plugin settings. Please check the form inputs."
1299 msgid "Errors exist when saving plugin settings. Please check the form inputs."
1294 msgstr ""
1300 msgstr ""
1295
1301
1296 #: rhodecode/authentication/views.py:105 rhodecode/authentication/views.py:164
1302 #: rhodecode/authentication/views.py:105 rhodecode/authentication/views.py:164
1297 msgid "Auth settings updated successfully."
1303 msgid "Auth settings updated successfully."
1298 msgstr ""
1304 msgstr ""
1299
1305
1300 #: rhodecode/authentication/views.py:167
1306 #: rhodecode/authentication/views.py:167
1301 msgid "Errors exist when saving plugin setting. Please check the form inputs."
1307 msgid "Errors exist when saving plugin setting. Please check the form inputs."
1302 msgstr ""
1308 msgstr ""
1303
1309
1304 #: rhodecode/authentication/views.py:175
1310 #: rhodecode/authentication/views.py:175
1305 msgid "Error occurred during update of auth settings."
1311 msgid "Error occurred during update of auth settings."
1306 msgstr ""
1312 msgstr ""
1307
1313
1308 #: rhodecode/authentication/plugins/auth_crowd.py:60
1314 #: rhodecode/authentication/plugins/auth_crowd.py:60
1309 msgid "The FQDN or IP of the Atlassian CROWD Server"
1315 msgid "The FQDN or IP of the Atlassian CROWD Server"
1310 msgstr ""
1316 msgstr ""
1311
1317
1312 #: rhodecode/authentication/plugins/auth_crowd.py:62
1318 #: rhodecode/authentication/plugins/auth_crowd.py:62
1313 msgid "Host"
1319 msgid "Host"
1314 msgstr ""
1320 msgstr ""
1315
1321
1316 #: rhodecode/authentication/plugins/auth_crowd.py:67
1322 #: rhodecode/authentication/plugins/auth_crowd.py:67
1317 msgid "The Port in use by the Atlassian CROWD Server"
1323 msgid "The Port in use by the Atlassian CROWD Server"
1318 msgstr ""
1324 msgstr ""
1319
1325
1320 #: rhodecode/authentication/plugins/auth_crowd.py:69
1326 #: rhodecode/authentication/plugins/auth_crowd.py:69
1321 #: rhodecode/authentication/plugins/auth_ldap.py:270
1327 #: rhodecode/authentication/plugins/auth_ldap.py:270
1322 msgid "Port"
1328 msgid "Port"
1323 msgstr ""
1329 msgstr ""
1324
1330
1325 #: rhodecode/authentication/plugins/auth_crowd.py:75
1331 #: rhodecode/authentication/plugins/auth_crowd.py:75
1326 msgid "The Application Name to authenticate to CROWD"
1332 msgid "The Application Name to authenticate to CROWD"
1327 msgstr ""
1333 msgstr ""
1328
1334
1329 #: rhodecode/authentication/plugins/auth_crowd.py:77
1335 #: rhodecode/authentication/plugins/auth_crowd.py:77
1330 msgid "Application Name"
1336 msgid "Application Name"
1331 msgstr ""
1337 msgstr ""
1332
1338
1333 #: rhodecode/authentication/plugins/auth_crowd.py:82
1339 #: rhodecode/authentication/plugins/auth_crowd.py:82
1334 msgid "The password to authenticate to CROWD"
1340 msgid "The password to authenticate to CROWD"
1335 msgstr ""
1341 msgstr ""
1336
1342
1337 #: rhodecode/authentication/plugins/auth_crowd.py:84
1343 #: rhodecode/authentication/plugins/auth_crowd.py:84
1338 msgid "Application Password"
1344 msgid "Application Password"
1339 msgstr ""
1345 msgstr ""
1340
1346
1341 #: rhodecode/authentication/plugins/auth_crowd.py:89
1347 #: rhodecode/authentication/plugins/auth_crowd.py:89
1342 msgid "A comma separated list of group names that identify users as RhodeCode Administrators"
1348 msgid "A comma separated list of group names that identify users as RhodeCode Administrators"
1343 msgstr ""
1349 msgstr ""
1344
1350
1345 #: rhodecode/authentication/plugins/auth_crowd.py:93
1351 #: rhodecode/authentication/plugins/auth_crowd.py:93
1346 msgid "Admin Groups"
1352 msgid "Admin Groups"
1347 msgstr ""
1353 msgstr ""
1348
1354
1349 #: rhodecode/authentication/plugins/auth_crowd.py:217
1355 #: rhodecode/authentication/plugins/auth_crowd.py:217
1350 msgid "CROWD"
1356 msgid "CROWD"
1351 msgstr ""
1357 msgstr ""
1352
1358
1353 #: rhodecode/authentication/plugins/auth_headers.py:54
1359 #: rhodecode/authentication/plugins/auth_headers.py:54
1354 msgid "Header to extract the user from"
1360 msgid "Header to extract the user from"
1355 msgstr ""
1361 msgstr ""
1356
1362
1357 #: rhodecode/authentication/plugins/auth_headers.py:56
1363 #: rhodecode/authentication/plugins/auth_headers.py:56
1358 msgid "Header"
1364 msgid "Header"
1359 msgstr ""
1365 msgstr ""
1360
1366
1361 #: rhodecode/authentication/plugins/auth_headers.py:61
1367 #: rhodecode/authentication/plugins/auth_headers.py:61
1362 msgid "Header to extract the user from when main one fails"
1368 msgid "Header to extract the user from when main one fails"
1363 msgstr ""
1369 msgstr ""
1364
1370
1365 #: rhodecode/authentication/plugins/auth_headers.py:63
1371 #: rhodecode/authentication/plugins/auth_headers.py:63
1366 msgid "Fallback header"
1372 msgid "Fallback header"
1367 msgstr ""
1373 msgstr ""
1368
1374
1369 #: rhodecode/authentication/plugins/auth_headers.py:68
1375 #: rhodecode/authentication/plugins/auth_headers.py:68
1370 msgid "Perform cleaning of user, if passed user has @ in username then first part before @ is taken. If there's \\ in the username only the part after \\ is taken"
1376 msgid "Perform cleaning of user, if passed user has @ in username then first part before @ is taken. If there's \\ in the username only the part after \\ is taken"
1371 msgstr ""
1377 msgstr ""
1372
1378
1373 #: rhodecode/authentication/plugins/auth_headers.py:73
1379 #: rhodecode/authentication/plugins/auth_headers.py:73
1374 msgid "Clean username"
1380 msgid "Clean username"
1375 msgstr ""
1381 msgstr ""
1376
1382
1377 #: rhodecode/authentication/plugins/auth_headers.py:99
1383 #: rhodecode/authentication/plugins/auth_headers.py:99
1378 msgid "Headers"
1384 msgid "Headers"
1379 msgstr ""
1385 msgstr ""
1380
1386
1381 #: rhodecode/authentication/plugins/auth_jasig_cas.py:62
1387 #: rhodecode/authentication/plugins/auth_jasig_cas.py:62
1382 msgid "The url of the Jasig CAS REST service"
1388 msgid "The url of the Jasig CAS REST service"
1383 msgstr ""
1389 msgstr ""
1384
1390
1385 #: rhodecode/authentication/plugins/auth_jasig_cas.py:64
1391 #: rhodecode/authentication/plugins/auth_jasig_cas.py:64
1386 msgid "URL"
1392 msgid "URL"
1387 msgstr ""
1393 msgstr ""
1388
1394
1389 #: rhodecode/authentication/plugins/auth_jasig_cas.py:93
1395 #: rhodecode/authentication/plugins/auth_jasig_cas.py:93
1390 msgid "Jasig-CAS"
1396 msgid "Jasig-CAS"
1391 msgstr ""
1397 msgstr ""
1392
1398
1393 #: rhodecode/authentication/plugins/auth_ldap.py:258
1399 #: rhodecode/authentication/plugins/auth_ldap.py:258
1394 msgid ""
1400 msgid ""
1395 "Host[s] of the LDAP Server \n"
1401 "Host[s] of the LDAP Server \n"
1396 "(e.g., 192.168.2.154, or ldap-server.domain.com.\n"
1402 "(e.g., 192.168.2.154, or ldap-server.domain.com.\n"
1397 " Multiple servers can be specified using commas"
1403 " Multiple servers can be specified using commas"
1398 msgstr ""
1404 msgstr ""
1399
1405
1400 #: rhodecode/authentication/plugins/auth_ldap.py:262
1406 #: rhodecode/authentication/plugins/auth_ldap.py:262
1401 msgid "LDAP Host"
1407 msgid "LDAP Host"
1402 msgstr ""
1408 msgstr ""
1403
1409
1404 #: rhodecode/authentication/plugins/auth_ldap.py:267
1410 #: rhodecode/authentication/plugins/auth_ldap.py:267
1405 msgid "Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS (SSL)"
1411 msgid "Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS (SSL)"
1406 msgstr ""
1412 msgstr ""
1407
1413
1408 #: rhodecode/authentication/plugins/auth_ldap.py:277
1414 #: rhodecode/authentication/plugins/auth_ldap.py:277
1409 msgid "Timeout for LDAP connection"
1415 msgid "Timeout for LDAP connection"
1410 msgstr ""
1416 msgstr ""
1411
1417
1412 #: rhodecode/authentication/plugins/auth_ldap.py:279
1418 #: rhodecode/authentication/plugins/auth_ldap.py:279
1413 msgid "Connection timeout"
1419 msgid "Connection timeout"
1414 msgstr ""
1420 msgstr ""
1415
1421
1416 #: rhodecode/authentication/plugins/auth_ldap.py:286
1422 #: rhodecode/authentication/plugins/auth_ldap.py:286
1417 msgid ""
1423 msgid ""
1418 "Optional user DN/account to connect to LDAP if authentication is required. \n"
1424 "Optional user DN/account to connect to LDAP if authentication is required. \n"
1419 "e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com"
1425 "e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com"
1420 msgstr ""
1426 msgstr ""
1421
1427
1422 #: rhodecode/authentication/plugins/auth_ldap.py:291
1428 #: rhodecode/authentication/plugins/auth_ldap.py:291
1423 msgid "Bind account"
1429 msgid "Bind account"
1424 msgstr ""
1430 msgstr ""
1425
1431
1426 #: rhodecode/authentication/plugins/auth_ldap.py:296
1432 #: rhodecode/authentication/plugins/auth_ldap.py:296
1427 msgid "Password to authenticate for given user DN."
1433 msgid "Password to authenticate for given user DN."
1428 msgstr ""
1434 msgstr ""
1429
1435
1430 #: rhodecode/authentication/plugins/auth_ldap.py:299
1436 #: rhodecode/authentication/plugins/auth_ldap.py:299
1431 msgid "Bind account password"
1437 msgid "Bind account password"
1432 msgstr ""
1438 msgstr ""
1433
1439
1434 #: rhodecode/authentication/plugins/auth_ldap.py:304
1440 #: rhodecode/authentication/plugins/auth_ldap.py:304
1435 msgid "TLS Type"
1441 msgid "TLS Type"
1436 msgstr ""
1442 msgstr ""
1437
1443
1438 #: rhodecode/authentication/plugins/auth_ldap.py:305
1444 #: rhodecode/authentication/plugins/auth_ldap.py:305
1439 msgid "Connection Security"
1445 msgid "Connection Security"
1440 msgstr ""
1446 msgstr ""
1441
1447
1442 #: rhodecode/authentication/plugins/auth_ldap.py:311
1448 #: rhodecode/authentication/plugins/auth_ldap.py:311
1443 msgid ""
1449 msgid ""
1444 "Require Cert over TLS?. Self-signed and custom certificates can be used when\n"
1450 "Require Cert over TLS?. Self-signed and custom certificates can be used when\n"
1445 " `RhodeCode Certificate` found in admin > settings > system info page is extended."
1451 " `RhodeCode Certificate` found in admin > settings > system info page is extended."
1446 msgstr ""
1452 msgstr ""
1447
1453
1448 #: rhodecode/authentication/plugins/auth_ldap.py:314
1454 #: rhodecode/authentication/plugins/auth_ldap.py:314
1449 msgid "Certificate Checks"
1455 msgid "Certificate Checks"
1450 msgstr ""
1456 msgstr ""
1451
1457
1452 #: rhodecode/authentication/plugins/auth_ldap.py:320
1458 #: rhodecode/authentication/plugins/auth_ldap.py:320
1453 msgid ""
1459 msgid ""
1454 "This specifies the PEM-format file path containing certificates for use in TLS connection.\n"
1460 "This specifies the PEM-format file path containing certificates for use in TLS connection.\n"
1455 "If not specified `TLS Cert dir` will be used"
1461 "If not specified `TLS Cert dir` will be used"
1456 msgstr ""
1462 msgstr ""
1457
1463
1458 #: rhodecode/authentication/plugins/auth_ldap.py:323
1464 #: rhodecode/authentication/plugins/auth_ldap.py:323
1459 msgid "TLS Cert file"
1465 msgid "TLS Cert file"
1460 msgstr ""
1466 msgstr ""
1461
1467
1462 #: rhodecode/authentication/plugins/auth_ldap.py:329
1468 #: rhodecode/authentication/plugins/auth_ldap.py:329
1463 msgid "This specifies the path of a directory that contains individual CA certificates in separate files."
1469 msgid "This specifies the path of a directory that contains individual CA certificates in separate files."
1464 msgstr ""
1470 msgstr ""
1465
1471
1466 #: rhodecode/authentication/plugins/auth_ldap.py:331
1472 #: rhodecode/authentication/plugins/auth_ldap.py:331
1467 msgid "TLS Cert dir"
1473 msgid "TLS Cert dir"
1468 msgstr ""
1474 msgstr ""
1469
1475
1470 #: rhodecode/authentication/plugins/auth_ldap.py:336
1476 #: rhodecode/authentication/plugins/auth_ldap.py:336
1471 msgid ""
1477 msgid ""
1472 "Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user username \n"
1478 "Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user username \n"
1473 "(e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)"
1479 "(e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)"
1474 msgstr ""
1480 msgstr ""
1475
1481
1476 #: rhodecode/authentication/plugins/auth_ldap.py:341
1482 #: rhodecode/authentication/plugins/auth_ldap.py:341
1477 msgid "Base DN"
1483 msgid "Base DN"
1478 msgstr ""
1484 msgstr ""
1479
1485
1480 #: rhodecode/authentication/plugins/auth_ldap.py:346
1486 #: rhodecode/authentication/plugins/auth_ldap.py:346
1481 msgid ""
1487 msgid ""
1482 "Filter to narrow results \n"
1488 "Filter to narrow results \n"
1483 "(e.g., (&(objectCategory=Person)(objectClass=user)), or \n"
1489 "(e.g., (&(objectCategory=Person)(objectClass=user)), or \n"
1484 "(memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))"
1490 "(memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))"
1485 msgstr ""
1491 msgstr ""
1486
1492
1487 #: rhodecode/authentication/plugins/auth_ldap.py:351
1493 #: rhodecode/authentication/plugins/auth_ldap.py:351
1488 msgid "LDAP Search Filter"
1494 msgid "LDAP Search Filter"
1489 msgstr ""
1495 msgstr ""
1490
1496
1491 #: rhodecode/authentication/plugins/auth_ldap.py:357
1497 #: rhodecode/authentication/plugins/auth_ldap.py:357
1492 msgid "How deep to search LDAP. If unsure set to SUBTREE"
1498 msgid "How deep to search LDAP. If unsure set to SUBTREE"
1493 msgstr ""
1499 msgstr ""
1494
1500
1495 #: rhodecode/authentication/plugins/auth_ldap.py:358
1501 #: rhodecode/authentication/plugins/auth_ldap.py:358
1496 msgid "LDAP Search Scope"
1502 msgid "LDAP Search Scope"
1497 msgstr ""
1503 msgstr ""
1498
1504
1499 #: rhodecode/authentication/plugins/auth_ldap.py:364
1505 #: rhodecode/authentication/plugins/auth_ldap.py:364
1500 msgid "LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)"
1506 msgid "LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)"
1501 msgstr ""
1507 msgstr ""
1502
1508
1503 #: rhodecode/authentication/plugins/auth_ldap.py:366
1509 #: rhodecode/authentication/plugins/auth_ldap.py:366
1504 msgid "Login Attribute"
1510 msgid "Login Attribute"
1505 msgstr ""
1511 msgstr ""
1506
1512
1507 #: rhodecode/authentication/plugins/auth_ldap.py:367
1513 #: rhodecode/authentication/plugins/auth_ldap.py:367
1508 msgid "The LDAP Login attribute of the CN must be specified"
1514 msgid "The LDAP Login attribute of the CN must be specified"
1509 msgstr ""
1515 msgstr ""
1510
1516
1511 #: rhodecode/authentication/plugins/auth_ldap.py:372
1517 #: rhodecode/authentication/plugins/auth_ldap.py:372
1512 msgid ""
1518 msgid ""
1513 "LDAP Attribute to map to email address (e.g., mail).\n"
1519 "LDAP Attribute to map to email address (e.g., mail).\n"
1514 "Emails are a crucial part of RhodeCode. \n"
1520 "Emails are a crucial part of RhodeCode. \n"
1515 "If possible add a valid email attribute to ldap users."
1521 "If possible add a valid email attribute to ldap users."
1516 msgstr ""
1522 msgstr ""
1517
1523
1518 #: rhodecode/authentication/plugins/auth_ldap.py:377
1524 #: rhodecode/authentication/plugins/auth_ldap.py:377
1519 msgid "Email Attribute"
1525 msgid "Email Attribute"
1520 msgstr ""
1526 msgstr ""
1521
1527
1522 #: rhodecode/authentication/plugins/auth_ldap.py:382
1528 #: rhodecode/authentication/plugins/auth_ldap.py:382
1523 msgid "LDAP Attribute to map to first name (e.g., givenName)"
1529 msgid "LDAP Attribute to map to first name (e.g., givenName)"
1524 msgstr ""
1530 msgstr ""
1525
1531
1526 #: rhodecode/authentication/plugins/auth_ldap.py:385
1532 #: rhodecode/authentication/plugins/auth_ldap.py:385
1527 msgid "First Name Attribute"
1533 msgid "First Name Attribute"
1528 msgstr ""
1534 msgstr ""
1529
1535
1530 #: rhodecode/authentication/plugins/auth_ldap.py:390
1536 #: rhodecode/authentication/plugins/auth_ldap.py:390
1531 msgid "LDAP Attribute to map to last name (e.g., sn)"
1537 msgid "LDAP Attribute to map to last name (e.g., sn)"
1532 msgstr ""
1538 msgstr ""
1533
1539
1534 #: rhodecode/authentication/plugins/auth_ldap.py:393
1540 #: rhodecode/authentication/plugins/auth_ldap.py:393
1535 msgid "Last Name Attribute"
1541 msgid "Last Name Attribute"
1536 msgstr ""
1542 msgstr ""
1537
1543
1538 #: rhodecode/authentication/plugins/auth_ldap.py:425
1544 #: rhodecode/authentication/plugins/auth_ldap.py:425
1539 msgid "LDAP"
1545 msgid "LDAP"
1540 msgstr ""
1546 msgstr ""
1541
1547
1542 #: rhodecode/authentication/plugins/auth_pam.py:60
1548 #: rhodecode/authentication/plugins/auth_pam.py:60
1543 msgid "PAM service name to use for authentication."
1549 msgid "PAM service name to use for authentication."
1544 msgstr ""
1550 msgstr ""
1545
1551
1546 #: rhodecode/authentication/plugins/auth_pam.py:62
1552 #: rhodecode/authentication/plugins/auth_pam.py:62
1547 msgid "PAM service name"
1553 msgid "PAM service name"
1548 msgstr ""
1554 msgstr ""
1549
1555
1550 #: rhodecode/authentication/plugins/auth_pam.py:67
1556 #: rhodecode/authentication/plugins/auth_pam.py:67
1551 msgid "Regular expression for extracting user name/email etc. from Unix userinfo."
1557 msgid "Regular expression for extracting user name/email etc. from Unix userinfo."
1552 msgstr ""
1558 msgstr ""
1553
1559
1554 #: rhodecode/authentication/plugins/auth_pam.py:70
1560 #: rhodecode/authentication/plugins/auth_pam.py:70
1555 msgid "Gecos Regex"
1561 msgid "Gecos Regex"
1556 msgstr ""
1562 msgstr ""
1557
1563
1558 #: rhodecode/authentication/plugins/auth_pam.py:99
1564 #: rhodecode/authentication/plugins/auth_pam.py:99
1559 msgid "PAM"
1565 msgid "PAM"
1560 msgstr ""
1566 msgstr ""
1561
1567
1562 #: rhodecode/authentication/plugins/auth_rhodecode.py:79
1568 #: rhodecode/authentication/plugins/auth_rhodecode.py:79
1563 msgid "RhodeCode Internal"
1569 msgid "RhodeCode Internal"
1564 msgstr ""
1570 msgstr ""
1565
1571
1566 #: rhodecode/authentication/plugins/auth_rhodecode.py:200
1572 #: rhodecode/authentication/plugins/auth_rhodecode.py:200
1567 msgid "Allowed user types for authentication using this plugin."
1573 msgid "Allowed user types for authentication using this plugin."
1568 msgstr ""
1574 msgstr ""
1569
1575
1570 #: rhodecode/authentication/plugins/auth_rhodecode.py:201
1576 #: rhodecode/authentication/plugins/auth_rhodecode.py:201
1571 msgid "User restriction"
1577 msgid "User restriction"
1572 msgstr ""
1578 msgstr ""
1573
1579
1574 #: rhodecode/authentication/plugins/auth_rhodecode.py:209
1580 #: rhodecode/authentication/plugins/auth_rhodecode.py:209
1575 msgid "Allowed protocols for authentication using this plugin. VCS means GIT/HG/SVN. HTTP is web based login."
1581 msgid "Allowed protocols for authentication using this plugin. VCS means GIT/HG/SVN. HTTP is web based login."
1576 msgstr ""
1582 msgstr ""
1577
1583
1578 #: rhodecode/authentication/plugins/auth_rhodecode.py:211
1584 #: rhodecode/authentication/plugins/auth_rhodecode.py:211
1579 #: rhodecode/authentication/plugins/auth_token.py:173
1585 #: rhodecode/authentication/plugins/auth_token.py:173
1580 msgid "Scope restriction"
1586 msgid "Scope restriction"
1581 msgstr ""
1587 msgstr ""
1582
1588
1583 #: rhodecode/authentication/plugins/auth_token.py:77
1589 #: rhodecode/authentication/plugins/auth_token.py:77
1584 msgid "Rhodecode Token"
1590 msgid "Rhodecode Token"
1585 msgstr ""
1591 msgstr ""
1586
1592
1587 #: rhodecode/authentication/plugins/auth_token.py:172
1593 #: rhodecode/authentication/plugins/auth_token.py:172
1588 msgid "Choose operation scope restriction when authenticating."
1594 msgid "Choose operation scope restriction when authenticating."
1589 msgstr ""
1595 msgstr ""
1590
1596
1591 #: rhodecode/events/pullrequest.py:79
1597 #: rhodecode/events/pullrequest.py:78
1592 msgid "pullrequest created"
1598 msgid "pullrequest created"
1593 msgstr ""
1599 msgstr ""
1594
1600
1595 #: rhodecode/events/pullrequest.py:80
1601 #: rhodecode/events/pullrequest.py:79
1596 msgid "Event triggered after pull request was created"
1602 msgid "Event triggered after pull request was created"
1597 msgstr ""
1603 msgstr ""
1598
1604
1605 #: rhodecode/events/pullrequest.py:88
1606 msgid "pullrequest closed"
1607 msgstr ""
1608
1599 #: rhodecode/events/pullrequest.py:89
1609 #: rhodecode/events/pullrequest.py:89
1600 msgid "pullrequest closed"
1601 msgstr ""
1602
1603 #: rhodecode/events/pullrequest.py:90
1604 msgid "Event triggered after pull request was closed"
1610 msgid "Event triggered after pull request was closed"
1605 msgstr ""
1611 msgstr ""
1606
1612
1613 #: rhodecode/events/pullrequest.py:98
1614 msgid "pullrequest commits updated"
1615 msgstr ""
1616
1607 #: rhodecode/events/pullrequest.py:99
1617 #: rhodecode/events/pullrequest.py:99
1608 msgid "pullrequest commits updated"
1609 msgstr ""
1610
1611 #: rhodecode/events/pullrequest.py:100
1612 msgid "Event triggered after pull requests was updated"
1618 msgid "Event triggered after pull requests was updated"
1613 msgstr ""
1619 msgstr ""
1614
1620
1621 #: rhodecode/events/pullrequest.py:108
1622 msgid "pullrequest review changed"
1623 msgstr ""
1624
1615 #: rhodecode/events/pullrequest.py:109
1625 #: rhodecode/events/pullrequest.py:109
1616 msgid "pullrequest review changed"
1617 msgstr ""
1618
1619 #: rhodecode/events/pullrequest.py:110
1620 msgid "Event triggered after a review status of a pull requests has changed to other."
1626 msgid "Event triggered after a review status of a pull requests has changed to other."
1621 msgstr ""
1627 msgstr ""
1622
1628
1629 #: rhodecode/events/pullrequest.py:123
1630 msgid "pullrequest merged"
1631 msgstr ""
1632
1623 #: rhodecode/events/pullrequest.py:124
1633 #: rhodecode/events/pullrequest.py:124
1624 msgid "pullrequest merged"
1625 msgstr ""
1626
1627 #: rhodecode/events/pullrequest.py:125
1628 msgid "Event triggered after a successful merge operation was executed on a pull request"
1634 msgid "Event triggered after a successful merge operation was executed on a pull request"
1629 msgstr ""
1635 msgstr ""
1630
1636
1637 #: rhodecode/events/pullrequest.py:134
1638 msgid "pullrequest commented"
1639 msgstr ""
1640
1631 #: rhodecode/events/pullrequest.py:135
1641 #: rhodecode/events/pullrequest.py:135
1632 msgid "pullrequest commented"
1633 msgstr ""
1634
1635 #: rhodecode/events/pullrequest.py:136
1636 msgid "Event triggered after a comment was made on a code in the pull request"
1642 msgid "Event triggered after a comment was made on a code in the pull request"
1637 msgstr ""
1643 msgstr ""
1638
1644
1645 #: rhodecode/events/pullrequest.py:173
1646 msgid "pullrequest comment edited"
1647 msgstr ""
1648
1649 #: rhodecode/events/pullrequest.py:174
1650 msgid "Event triggered after a comment was edited on a code in the pull request"
1651 msgstr ""
1652
1639 #: rhodecode/events/repo.py:191
1653 #: rhodecode/events/repo.py:191
1640 msgid "repository commit comment"
1654 msgid "repository commit comment"
1641 msgstr ""
1655 msgstr ""
1642
1656
1643 #: rhodecode/events/repo.py:192
1657 #: rhodecode/events/repo.py:192
1644 msgid "Event triggered after a comment was made on commit inside a repository"
1658 msgid "Event triggered after a comment was made on commit inside a repository"
1645 msgstr ""
1659 msgstr ""
1646
1660
1647 #: rhodecode/events/repo.py:224
1661 #: rhodecode/events/repo.py:226
1662 msgid "repository commit edit comment"
1663 msgstr ""
1664
1665 #: rhodecode/events/repo.py:227
1666 msgid "Event triggered after a comment was edited on commit inside a repository"
1667 msgstr ""
1668
1669 #: rhodecode/events/repo.py:260
1648 msgid "repository pre create"
1670 msgid "repository pre create"
1649 msgstr ""
1671 msgstr ""
1650
1672
1651 #: rhodecode/events/repo.py:225
1673 #: rhodecode/events/repo.py:261
1652 msgid "Event triggered before repository is created"
1674 msgid "Event triggered before repository is created"
1653 msgstr ""
1675 msgstr ""
1654
1676
1655 #: rhodecode/events/repo.py:234
1677 #: rhodecode/events/repo.py:270
1656 msgid "repository created"
1678 msgid "repository created"
1657 msgstr ""
1679 msgstr ""
1658
1680
1659 #: rhodecode/events/repo.py:235
1681 #: rhodecode/events/repo.py:271
1660 msgid "Event triggered after repository was created"
1682 msgid "Event triggered after repository was created"
1661 msgstr ""
1683 msgstr ""
1662
1684
1663 #: rhodecode/events/repo.py:244
1685 #: rhodecode/events/repo.py:280
1664 msgid "repository pre delete"
1686 msgid "repository pre delete"
1665 msgstr ""
1687 msgstr ""
1666
1688
1667 #: rhodecode/events/repo.py:245
1689 #: rhodecode/events/repo.py:281
1668 msgid "Event triggered before a repository is deleted"
1690 msgid "Event triggered before a repository is deleted"
1669 msgstr ""
1691 msgstr ""
1670
1692
1671 #: rhodecode/events/repo.py:254
1693 #: rhodecode/events/repo.py:290
1672 msgid "repository deleted"
1694 msgid "repository deleted"
1673 msgstr ""
1695 msgstr ""
1674
1696
1675 #: rhodecode/events/repo.py:255
1697 #: rhodecode/events/repo.py:291
1676 msgid "Event triggered after repository was deleted"
1698 msgid "Event triggered after repository was deleted"
1677 msgstr ""
1699 msgstr ""
1678
1700
1679 #: rhodecode/events/repo.py:295
1701 #: rhodecode/events/repo.py:331
1680 msgid "repository pre pull"
1702 msgid "repository pre pull"
1681 msgstr ""
1703 msgstr ""
1682
1704
1683 #: rhodecode/events/repo.py:296
1705 #: rhodecode/events/repo.py:332
1684 msgid "Event triggered before repository code is pulled"
1706 msgid "Event triggered before repository code is pulled"
1685 msgstr ""
1707 msgstr ""
1686
1708
1687 #: rhodecode/events/repo.py:305
1709 #: rhodecode/events/repo.py:341
1688 msgid "repository pull"
1710 msgid "repository pull"
1689 msgstr ""
1711 msgstr ""
1690
1712
1691 #: rhodecode/events/repo.py:306
1713 #: rhodecode/events/repo.py:342
1692 msgid "Event triggered after repository code was pulled"
1714 msgid "Event triggered after repository code was pulled"
1693 msgstr ""
1715 msgstr ""
1694
1716
1695 #: rhodecode/events/repo.py:315
1717 #: rhodecode/events/repo.py:351
1696 msgid "repository pre push"
1718 msgid "repository pre push"
1697 msgstr ""
1719 msgstr ""
1698
1720
1699 #: rhodecode/events/repo.py:316
1721 #: rhodecode/events/repo.py:352
1700 msgid "Event triggered before the code is pushed to a repository"
1722 msgid "Event triggered before the code is pushed to a repository"
1701 msgstr ""
1723 msgstr ""
1702
1724
1703 #: rhodecode/events/repo.py:328
1725 #: rhodecode/events/repo.py:364
1704 msgid "repository push"
1726 msgid "repository push"
1705 msgstr ""
1727 msgstr ""
1706
1728
1707 #: rhodecode/events/repo.py:329
1729 #: rhodecode/events/repo.py:365
1708 msgid "Event triggered after the code was pushed to a repository"
1730 msgid "Event triggered after the code was pushed to a repository"
1709 msgstr ""
1731 msgstr ""
1710
1732
1711 #: rhodecode/events/repo_group.py:62
1733 #: rhodecode/events/repo_group.py:62
1712 msgid "repository group created"
1734 msgid "repository group created"
1713 msgstr ""
1735 msgstr ""
1714
1736
1715 #: rhodecode/events/repo_group.py:63
1737 #: rhodecode/events/repo_group.py:63
1716 msgid "Event triggered after a repository group was created"
1738 msgid "Event triggered after a repository group was created"
1717 msgstr ""
1739 msgstr ""
1718
1740
1719 #: rhodecode/events/repo_group.py:72
1741 #: rhodecode/events/repo_group.py:72
1720 msgid "repository group deleted"
1742 msgid "repository group deleted"
1721 msgstr ""
1743 msgstr ""
1722
1744
1723 #: rhodecode/events/repo_group.py:73
1745 #: rhodecode/events/repo_group.py:73
1724 msgid "Event triggered after a repository group was deleted"
1746 msgid "Event triggered after a repository group was deleted"
1725 msgstr ""
1747 msgstr ""
1726
1748
1727 #: rhodecode/events/repo_group.py:82
1749 #: rhodecode/events/repo_group.py:82
1728 msgid "repository group update"
1750 msgid "repository group update"
1729 msgstr ""
1751 msgstr ""
1730
1752
1731 #: rhodecode/events/repo_group.py:83
1753 #: rhodecode/events/repo_group.py:83
1732 msgid "Event triggered after a repository group was updated"
1754 msgid "Event triggered after a repository group was updated"
1733 msgstr ""
1755 msgstr ""
1734
1756
1735 #: rhodecode/events/user.py:37
1757 #: rhodecode/events/user.py:37
1736 msgid "user registered"
1758 msgid "user registered"
1737 msgstr ""
1759 msgstr ""
1738
1760
1739 #: rhodecode/events/user.py:52
1761 #: rhodecode/events/user.py:52
1740 msgid "user pre create"
1762 msgid "user pre create"
1741 msgstr ""
1763 msgstr ""
1742
1764
1743 #: rhodecode/events/user.py:66
1765 #: rhodecode/events/user.py:66
1744 msgid "user post create"
1766 msgid "user post create"
1745 msgstr ""
1767 msgstr ""
1746
1768
1747 #: rhodecode/events/user.py:80
1769 #: rhodecode/events/user.py:80
1748 msgid "user pre update"
1770 msgid "user pre update"
1749 msgstr ""
1771 msgstr ""
1750
1772
1751 #: rhodecode/events/user.py:100
1773 #: rhodecode/events/user.py:100
1752 msgid "user permissions change"
1774 msgid "user permissions change"
1753 msgstr ""
1775 msgstr ""
1754
1776
1755 #: rhodecode/forms/__init__.py:35
1777 #: rhodecode/forms/__init__.py:35
1756 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:97
1778 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:103
1757 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:73
1779 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:73
1758 #: rhodecode/templates/admin/permissions/permissions_application.mako:60
1780 #: rhodecode/templates/admin/permissions/permissions_application.mako:60
1759 #: rhodecode/templates/admin/permissions/permissions_ips.mako:64
1781 #: rhodecode/templates/admin/permissions/permissions_ips.mako:64
1760 #: rhodecode/templates/admin/permissions/permissions_objects.mako:60
1782 #: rhodecode/templates/admin/permissions/permissions_objects.mako:60
1761 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
1783 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:227
1762 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:78
1784 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:78
1763 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:66
1785 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:66
1764 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:201
1786 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:207
1765 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:251
1787 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:251
1766 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:44
1788 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:44
1767 #: rhodecode/templates/admin/settings/settings_global.mako:141
1789 #: rhodecode/templates/admin/settings/settings_global.mako:141
1768 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:16
1790 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:16
1769 #: rhodecode/templates/admin/settings/settings_labs.mako:49
1791 #: rhodecode/templates/admin/settings/settings_labs.mako:49
1770 #: rhodecode/templates/admin/settings/settings_vcs.mako:14
1792 #: rhodecode/templates/admin/settings/settings_vcs.mako:14
1771 #: rhodecode/templates/admin/settings/settings_visual.mako:215
1793 #: rhodecode/templates/admin/settings/settings_visual.mako:215
1772 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:207
1794 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:217
1773 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:101
1795 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:107
1774 #: rhodecode/templates/admin/users/user_edit_emails.mako:66
1796 #: rhodecode/templates/admin/users/user_edit_emails.mako:66
1775 #: rhodecode/templates/admin/users/user_edit_ips.mako:76
1797 #: rhodecode/templates/admin/users/user_edit_ips.mako:76
1776 #: rhodecode/templates/admin/users/user_edit_profile.mako:155
1798 #: rhodecode/templates/admin/users/user_edit_profile.mako:155
1777 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:72
1799 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:72
1778 #: rhodecode/templates/base/default_perms_box.mako:89
1800 #: rhodecode/templates/base/default_perms_box.mako:102
1779 msgid "Reset"
1801 msgid "Reset"
1780 msgstr ""
1802 msgstr ""
1781
1803
1782 #: rhodecode/forms/__init__.py:36 rhodecode/public/js/scripts.js:37802
1804 #: rhodecode/forms/__init__.py:36 rhodecode/public/js/scripts.js:38311
1783 #: rhodecode/public/js/scripts.min.js:1
1805 #: rhodecode/public/js/scripts.min.js:1
1784 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:158
1806 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
1807 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:161
1785 #: rhodecode/templates/admin/gists/gist_show.mako:59
1808 #: rhodecode/templates/admin/gists/gist_show.mako:59
1786 #: rhodecode/templates/admin/integrations/list.mako:179
1809 #: rhodecode/templates/admin/integrations/list.mako:179
1787 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:59
1810 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:65
1788 #: rhodecode/templates/admin/my_account/my_account_emails.mako:33
1811 #: rhodecode/templates/admin/my_account/my_account_emails.mako:33
1789 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:34
1812 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:34
1790 #: rhodecode/templates/admin/notifications/notifications_data.mako:22
1813 #: rhodecode/templates/admin/notifications/notifications_data.mako:22
1791 #: rhodecode/templates/admin/notifications/notifications_show.mako:37
1814 #: rhodecode/templates/admin/notifications/notifications_show.mako:37
1792 #: rhodecode/templates/admin/permissions/permissions_ips.mako:29
1815 #: rhodecode/templates/admin/permissions/permissions_ips.mako:29
1793 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:25
1816 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:25
1794 #: rhodecode/templates/admin/settings/settings_hooks.mako:46
1817 #: rhodecode/templates/admin/settings/settings_hooks.mako:46
1795 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:63
1818 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:69
1796 #: rhodecode/templates/admin/users/user_edit_emails.mako:34
1819 #: rhodecode/templates/admin/users/user_edit_emails.mako:34
1797 #: rhodecode/templates/admin/users/user_edit_ips.mako:40
1820 #: rhodecode/templates/admin/users/user_edit_ips.mako:40
1798 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:35
1821 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:35
1799 #: rhodecode/templates/base/issue_tracker_settings.mako:146
1822 #: rhodecode/templates/base/issue_tracker_settings.mako:146
1800 #: rhodecode/templates/base/vcs_settings.mako:244
1823 #: rhodecode/templates/base/vcs_settings.mako:244
1801 #: rhodecode/templates/base/vcs_settings.mako:269
1824 #: rhodecode/templates/base/vcs_settings.mako:269
1802 #: rhodecode/templates/changeset/changeset_file_comment.mako:140
1825 #: rhodecode/templates/changeset/changeset_file_comment.mako:203
1803 #: rhodecode/templates/changeset/changeset_file_comment.mako:142
1826 #: rhodecode/templates/changeset/changeset_file_comment.mako:206
1804 #: rhodecode/templates/changeset/changeset_file_comment.mako:145
1827 #: rhodecode/templates/changeset/changeset_file_comment.mako:210
1805 #: rhodecode/templates/data_table/_dt_elements.mako:436
1828 #: rhodecode/templates/data_table/_dt_elements.mako:436
1806 #: rhodecode/templates/debug_style/buttons.html:132
1829 #: rhodecode/templates/debug_style/buttons.html:132
1807 #: rhodecode/templates/files/files_source.mako:30
1830 #: rhodecode/templates/files/files_source.mako:40
1808 #: rhodecode/templates/files/files_source.mako:37
1831 #: rhodecode/templates/files/files_source.mako:47
1809 #: rhodecode/templates/files/files_source.mako:43
1832 #: rhodecode/templates/files/files_source.mako:53
1810 msgid "Delete"
1833 msgid "Delete"
1811 msgstr ""
1834 msgstr ""
1812
1835
1813 #: rhodecode/integrations/schema.py:30
1836 #: rhodecode/integrations/schema.py:30
1814 #: rhodecode/model/validation_schema/schemas/integration_schema.py:193
1837 #: rhodecode/model/validation_schema/schemas/integration_schema.py:193
1815 msgid "Enable or disable this integration."
1838 msgid "Enable or disable this integration."
1816 msgstr ""
1839 msgstr ""
1817
1840
1818 #: rhodecode/integrations/schema.py:37
1841 #: rhodecode/integrations/schema.py:37
1819 #: rhodecode/model/validation_schema/schemas/integration_schema.py:174
1842 #: rhodecode/model/validation_schema/schemas/integration_schema.py:174
1820 msgid "Short name for this integration."
1843 msgid "Short name for this integration."
1821 msgstr ""
1844 msgstr ""
1822
1845
1823 #: rhodecode/integrations/schema.py:39
1846 #: rhodecode/integrations/schema.py:39
1824 #: rhodecode/model/validation_schema/schemas/integration_schema.py:176
1847 #: rhodecode/model/validation_schema/schemas/integration_schema.py:176
1825 msgid "Integration name"
1848 msgid "Integration name"
1826 msgstr ""
1849 msgstr ""
1827
1850
1828 #: rhodecode/integrations/schema.py:51
1851 #: rhodecode/integrations/schema.py:51
1829 msgid "Limit integrations to to work only on the direct children repositories of this repository group (no subgroups)"
1852 msgid "Limit integrations to to work only on the direct children repositories of this repository group (no subgroups)"
1830 msgstr ""
1853 msgstr ""
1831
1854
1832 #: rhodecode/integrations/schema.py:55
1855 #: rhodecode/integrations/schema.py:55
1833 msgid "Limit to childen repos only"
1856 msgid "Limit to childen repos only"
1834 msgstr ""
1857 msgstr ""
1835
1858
1836 #: rhodecode/integrations/schema.py:63
1859 #: rhodecode/integrations/schema.py:63
1837 msgid "Limit integrations to to work only on root level repositories"
1860 msgid "Limit integrations to to work only on root level repositories"
1838 msgstr ""
1861 msgstr ""
1839
1862
1840 #: rhodecode/integrations/schema.py:66
1863 #: rhodecode/integrations/schema.py:66
1841 msgid "Root repositories only"
1864 msgid "Root repositories only"
1842 msgstr ""
1865 msgstr ""
1843
1866
1844 #: rhodecode/integrations/views.py:147
1867 #: rhodecode/integrations/views.py:147
1845 msgid "{repo_name} repository"
1868 msgid "{repo_name} repository"
1846 msgstr ""
1869 msgstr ""
1847
1870
1848 #: rhodecode/integrations/views.py:150
1871 #: rhodecode/integrations/views.py:150
1849 msgid "{repo_group_name} repo group"
1872 msgid "{repo_group_name} repo group"
1850 msgstr ""
1873 msgstr ""
1851
1874
1852 #: rhodecode/integrations/views.py:153
1875 #: rhodecode/integrations/views.py:153
1853 #: rhodecode/templates/admin/permissions/permissions.mako:36
1876 #: rhodecode/templates/admin/permissions/permissions.mako:36
1854 msgid "Global"
1877 msgid "Global"
1855 msgstr ""
1878 msgstr ""
1856
1879
1857 #: rhodecode/integrations/views.py:157
1880 #: rhodecode/integrations/views.py:157
1858 msgid "{name} integration"
1881 msgid "{name} integration"
1859 msgstr ""
1882 msgstr ""
1860
1883
1861 #: rhodecode/integrations/views.py:172
1884 #: rhodecode/integrations/views.py:172
1862 msgid "Integration {integration_name} deleted successfully."
1885 msgid "Integration {integration_name} deleted successfully."
1863 msgstr ""
1886 msgstr ""
1864
1887
1865 #: rhodecode/integrations/views.py:305
1888 #: rhodecode/integrations/views.py:305
1866 msgid "Errors exist when saving integration settings. Please check the form inputs."
1889 msgid "Errors exist when saving integration settings. Please check the form inputs."
1867 msgstr ""
1890 msgstr ""
1868
1891
1869 #: rhodecode/integrations/views.py:330
1892 #: rhodecode/integrations/views.py:330
1870 msgid "Integration {integration_name} updated successfully."
1893 msgid "Integration {integration_name} updated successfully."
1871 msgstr ""
1894 msgstr ""
1872
1895
1873 #: rhodecode/integrations/types/email.py:157
1896 #: rhodecode/integrations/types/email.py:157
1874 msgid "Recipients"
1897 msgid "Recipients"
1875 msgstr ""
1898 msgstr ""
1876
1899
1877 #: rhodecode/integrations/types/email.py:158
1900 #: rhodecode/integrations/types/email.py:158
1878 msgid "Email addresses to send push events to"
1901 msgid "Email addresses to send push events to"
1879 msgstr ""
1902 msgstr ""
1880
1903
1881 #: rhodecode/integrations/types/email.py:163
1904 #: rhodecode/integrations/types/email.py:163
1882 #: rhodecode/integrations/types/email.py:164
1905 #: rhodecode/integrations/types/email.py:164
1883 msgid "Email address"
1906 msgid "Email address"
1884 msgstr ""
1907 msgstr ""
1885
1908
1886 #: rhodecode/integrations/types/email.py:175
1909 #: rhodecode/integrations/types/email.py:175
1887 #: rhodecode/templates/register.mako:95
1910 #: rhodecode/templates/register.mako:95
1888 #: rhodecode/templates/admin/my_account/my_account_profile.mako:78
1911 #: rhodecode/templates/admin/my_account/my_account_profile.mako:78
1889 #: rhodecode/templates/admin/users/user_add.mako:86
1912 #: rhodecode/templates/admin/users/user_add.mako:86
1890 #: rhodecode/templates/admin/users/user_edit_profile.mako:65
1913 #: rhodecode/templates/admin/users/user_edit_profile.mako:65
1891 #: rhodecode/templates/admin/users/users.mako:76
1914 #: rhodecode/templates/admin/users/users.mako:76
1892 #: rhodecode/templates/email_templates/user_registration.mako:50
1915 #: rhodecode/templates/email_templates/user_registration.mako:51
1893 #: rhodecode/templates/users/user_profile.mako:69
1916 #: rhodecode/templates/users/user_profile.mako:69
1894 msgid "Email"
1917 msgid "Email"
1895 msgstr ""
1918 msgstr ""
1896
1919
1897 #: rhodecode/integrations/types/email.py:176
1920 #: rhodecode/integrations/types/email.py:176
1898 msgid "Send repo push summaries to a list of recipients via email"
1921 msgid "Send repo push summaries to a list of recipients via email"
1899 msgstr ""
1922 msgstr ""
1900
1923
1901 #: rhodecode/integrations/types/hipchat.py:63
1924 #: rhodecode/integrations/types/hipchat.py:63
1902 msgid "Yellow"
1925 msgid "Yellow"
1903 msgstr ""
1926 msgstr ""
1904
1927
1905 #: rhodecode/integrations/types/hipchat.py:64
1928 #: rhodecode/integrations/types/hipchat.py:64
1906 msgid "Red"
1929 msgid "Red"
1907 msgstr ""
1930 msgstr ""
1908
1931
1909 #: rhodecode/integrations/types/hipchat.py:65
1932 #: rhodecode/integrations/types/hipchat.py:65
1910 msgid "Green"
1933 msgid "Green"
1911 msgstr ""
1934 msgstr ""
1912
1935
1913 #: rhodecode/integrations/types/hipchat.py:66
1936 #: rhodecode/integrations/types/hipchat.py:66
1914 msgid "Purple"
1937 msgid "Purple"
1915 msgstr ""
1938 msgstr ""
1916
1939
1917 #: rhodecode/integrations/types/hipchat.py:67
1940 #: rhodecode/integrations/types/hipchat.py:67
1918 msgid "Gray"
1941 msgid "Gray"
1919 msgstr ""
1942 msgstr ""
1920
1943
1921 #: rhodecode/integrations/types/hipchat.py:72
1944 #: rhodecode/integrations/types/hipchat.py:72
1922 msgid "Hipchat server URL"
1945 msgid "Hipchat server URL"
1923 msgstr ""
1946 msgstr ""
1924
1947
1925 #: rhodecode/integrations/types/hipchat.py:73
1948 #: rhodecode/integrations/types/hipchat.py:73
1926 msgid "Hipchat integration url."
1949 msgid "Hipchat integration url."
1927 msgstr ""
1950 msgstr ""
1928
1951
1929 #: rhodecode/integrations/types/hipchat.py:83
1952 #: rhodecode/integrations/types/hipchat.py:83
1930 msgid "Notify"
1953 msgid "Notify"
1931 msgstr ""
1954 msgstr ""
1932
1955
1933 #: rhodecode/integrations/types/hipchat.py:84
1956 #: rhodecode/integrations/types/hipchat.py:84
1934 msgid "Make a notification to the users in room."
1957 msgid "Make a notification to the users in room."
1935 msgstr ""
1958 msgstr ""
1936
1959
1937 #: rhodecode/integrations/types/hipchat.py:90
1960 #: rhodecode/integrations/types/hipchat.py:90
1938 msgid "Color"
1961 msgid "Color"
1939 msgstr ""
1962 msgstr ""
1940
1963
1941 #: rhodecode/integrations/types/hipchat.py:91
1964 #: rhodecode/integrations/types/hipchat.py:91
1942 msgid "Background color of message."
1965 msgid "Background color of message."
1943 msgstr ""
1966 msgstr ""
1944
1967
1945 #: rhodecode/integrations/types/hipchat.py:102
1968 #: rhodecode/integrations/types/hipchat.py:102
1946 msgid "Hipchat"
1969 msgid "Hipchat"
1947 msgstr ""
1970 msgstr ""
1948
1971
1949 #: rhodecode/integrations/types/hipchat.py:103
1972 #: rhodecode/integrations/types/hipchat.py:103
1950 msgid "Send events such as repo pushes and pull requests to your hipchat channel."
1973 msgid "Send events such as repo pushes and pull requests to your hipchat channel."
1951 msgstr ""
1974 msgstr ""
1952
1975
1953 #: rhodecode/integrations/types/slack.py:72
1976 #: rhodecode/integrations/types/slack.py:72
1954 msgid "Slack service URL"
1977 msgid "Slack service URL"
1955 msgstr ""
1978 msgstr ""
1956
1979
1957 #: rhodecode/integrations/types/slack.py:73
1980 #: rhodecode/integrations/types/slack.py:73
1958 msgid "This can be setup at the <a href=\"https://my.slack.com/services/new/incoming-webhook/\">slack app manager</a>"
1981 msgid "This can be setup at the <a href=\"https://my.slack.com/services/new/incoming-webhook/\">slack app manager</a>"
1959 msgstr ""
1982 msgstr ""
1960
1983
1961 #: rhodecode/integrations/types/slack.py:86
1984 #: rhodecode/integrations/types/slack.py:86
1962 #: rhodecode/integrations/types/webhook.py:81 rhodecode/templates/login.mako:44
1985 #: rhodecode/integrations/types/webhook.py:81 rhodecode/templates/login.mako:44
1963 #: rhodecode/templates/register.mako:48
1986 #: rhodecode/templates/register.mako:48
1964 #: rhodecode/templates/admin/admin_log_base.mako:7
1987 #: rhodecode/templates/admin/admin_log_base.mako:7
1965 #: rhodecode/templates/admin/my_account/my_account_profile.mako:38
1988 #: rhodecode/templates/admin/my_account/my_account_profile.mako:38
1966 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:29
1989 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:29
1967 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:45
1990 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:45
1968 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:74
1991 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:74
1969 #: rhodecode/templates/admin/users/user_add.mako:35
1992 #: rhodecode/templates/admin/users/user_add.mako:35
1970 #: rhodecode/templates/admin/users/user_edit_profile.mako:39
1993 #: rhodecode/templates/admin/users/user_edit_profile.mako:39
1971 #: rhodecode/templates/admin/users/users.mako:74
1994 #: rhodecode/templates/admin/users/users.mako:74
1972 #: rhodecode/templates/debug_style/login.html:36
1995 #: rhodecode/templates/debug_style/login.html:36
1973 #: rhodecode/templates/email_templates/user_registration.mako:42
1996 #: rhodecode/templates/email_templates/user_registration.mako:43
1974 #: rhodecode/templates/user_group/profile.mako:61
1997 #: rhodecode/templates/user_group/profile.mako:61
1975 #: rhodecode/templates/users/user_profile.mako:29
1998 #: rhodecode/templates/users/user_profile.mako:29
1976 msgid "Username"
1999 msgid "Username"
1977 msgstr ""
2000 msgstr ""
1978
2001
1979 #: rhodecode/integrations/types/slack.py:87
2002 #: rhodecode/integrations/types/slack.py:87
1980 msgid "Username to show notifications coming from."
2003 msgid "Username to show notifications coming from."
1981 msgstr ""
2004 msgstr ""
1982
2005
1983 #: rhodecode/integrations/types/slack.py:96
2006 #: rhodecode/integrations/types/slack.py:96
1984 msgid "Channel"
2007 msgid "Channel"
1985 msgstr ""
2008 msgstr ""
1986
2009
1987 #: rhodecode/integrations/types/slack.py:97
2010 #: rhodecode/integrations/types/slack.py:97
1988 msgid "Channel to send notifications to."
2011 msgid "Channel to send notifications to."
1989 msgstr ""
2012 msgstr ""
1990
2013
1991 #: rhodecode/integrations/types/slack.py:106
2014 #: rhodecode/integrations/types/slack.py:106
1992 msgid "Emoji"
2015 msgid "Emoji"
1993 msgstr ""
2016 msgstr ""
1994
2017
1995 #: rhodecode/integrations/types/slack.py:107
2018 #: rhodecode/integrations/types/slack.py:107
1996 msgid "Emoji to use eg. :studio_microphone:"
2019 msgid "Emoji to use eg. :studio_microphone:"
1997 msgstr ""
2020 msgstr ""
1998
2021
1999 #: rhodecode/integrations/types/slack.py:118
2022 #: rhodecode/integrations/types/slack.py:118
2000 msgid "Slack"
2023 msgid "Slack"
2001 msgstr ""
2024 msgstr ""
2002
2025
2003 #: rhodecode/integrations/types/slack.py:119
2026 #: rhodecode/integrations/types/slack.py:119
2004 msgid "Send events such as repo pushes and pull requests to your slack channel."
2027 msgid "Send events such as repo pushes and pull requests to your slack channel."
2005 msgstr ""
2028 msgstr ""
2006
2029
2007 #: rhodecode/integrations/types/webhook.py:49
2030 #: rhodecode/integrations/types/webhook.py:49
2008 msgid "Webhook URL"
2031 msgid "Webhook URL"
2009 msgstr ""
2032 msgstr ""
2010
2033
2011 #: rhodecode/integrations/types/webhook.py:51
2034 #: rhodecode/integrations/types/webhook.py:51
2012 msgid "URL to which Webhook should submit data. If used some of the variables would trigger multiple calls, like ${branch} or ${commit_id}. Webhook will be called as many times as unique objects in data in such cases."
2035 msgid "URL to which Webhook should submit data. If used some of the variables would trigger multiple calls, like ${branch} or ${commit_id}. Webhook will be called as many times as unique objects in data in such cases."
2013 msgstr ""
2036 msgstr ""
2014
2037
2015 #: rhodecode/integrations/types/webhook.py:70
2038 #: rhodecode/integrations/types/webhook.py:70
2016 msgid "Secret Token"
2039 msgid "Secret Token"
2017 msgstr ""
2040 msgstr ""
2018
2041
2019 #: rhodecode/integrations/types/webhook.py:71
2042 #: rhodecode/integrations/types/webhook.py:71
2020 msgid "Optional string used to validate received payloads. It will be sent together with event data in JSON"
2043 msgid "Optional string used to validate received payloads. It will be sent together with event data in JSON"
2021 msgstr ""
2044 msgstr ""
2022
2045
2023 #: rhodecode/integrations/types/webhook.py:82
2046 #: rhodecode/integrations/types/webhook.py:82
2024 msgid "Optional username to authenticate the call."
2047 msgid "Optional username to authenticate the call."
2025 msgstr ""
2048 msgstr ""
2026
2049
2027 #: rhodecode/integrations/types/webhook.py:91 rhodecode/templates/login.mako:51
2050 #: rhodecode/integrations/types/webhook.py:91 rhodecode/templates/login.mako:51
2028 #: rhodecode/templates/register.mako:62
2051 #: rhodecode/templates/register.mako:62
2029 #: rhodecode/templates/admin/my_account/my_account.mako:31
2052 #: rhodecode/templates/admin/my_account/my_account.mako:31
2030 #: rhodecode/templates/admin/users/user_add.mako:44
2053 #: rhodecode/templates/admin/users/user_add.mako:44
2031 #: rhodecode/templates/debug_style/login.html:45
2054 #: rhodecode/templates/debug_style/login.html:45
2032 msgid "Password"
2055 msgid "Password"
2033 msgstr ""
2056 msgstr ""
2034
2057
2035 #: rhodecode/integrations/types/webhook.py:92
2058 #: rhodecode/integrations/types/webhook.py:92
2036 msgid "Optional password to authenticate the call."
2059 msgid "Optional password to authenticate the call."
2037 msgstr ""
2060 msgstr ""
2038
2061
2039 #: rhodecode/integrations/types/webhook.py:102
2062 #: rhodecode/integrations/types/webhook.py:102
2040 msgid "Custom Header Key"
2063 msgid "Custom Header Key"
2041 msgstr ""
2064 msgstr ""
2042
2065
2043 #: rhodecode/integrations/types/webhook.py:103
2066 #: rhodecode/integrations/types/webhook.py:103
2044 msgid "Custom Header name to be set when calling endpoint."
2067 msgid "Custom Header name to be set when calling endpoint."
2045 msgstr ""
2068 msgstr ""
2046
2069
2047 #: rhodecode/integrations/types/webhook.py:112
2070 #: rhodecode/integrations/types/webhook.py:112
2048 msgid "Custom Header Value"
2071 msgid "Custom Header Value"
2049 msgstr ""
2072 msgstr ""
2050
2073
2051 #: rhodecode/integrations/types/webhook.py:113
2074 #: rhodecode/integrations/types/webhook.py:113
2052 msgid "Custom Header value to be set when calling endpoint."
2075 msgid "Custom Header value to be set when calling endpoint."
2053 msgstr ""
2076 msgstr ""
2054
2077
2055 #: rhodecode/integrations/types/webhook.py:122
2078 #: rhodecode/integrations/types/webhook.py:122
2056 msgid "Call Method"
2079 msgid "Call Method"
2057 msgstr ""
2080 msgstr ""
2058
2081
2059 #: rhodecode/integrations/types/webhook.py:123
2082 #: rhodecode/integrations/types/webhook.py:123
2060 msgid "Select a HTTP method to use when calling the Webhook."
2083 msgid "Select a HTTP method to use when calling the Webhook."
2061 msgstr ""
2084 msgstr ""
2062
2085
2063 #: rhodecode/integrations/types/webhook.py:135
2086 #: rhodecode/integrations/types/webhook.py:135
2064 msgid "Webhook"
2087 msgid "Webhook"
2065 msgstr ""
2088 msgstr ""
2066
2089
2067 #: rhodecode/integrations/types/webhook.py:136
2090 #: rhodecode/integrations/types/webhook.py:136
2068 msgid "send JSON data to a url endpoint"
2091 msgid "send JSON data to a url endpoint"
2069 msgstr ""
2092 msgstr ""
2070
2093
2071 #: rhodecode/lib/action_parser.py:93
2094 #: rhodecode/lib/action_parser.py:93
2072 msgid "[deleted] repository"
2095 msgid "[deleted] repository"
2073 msgstr ""
2096 msgstr ""
2074
2097
2075 #: rhodecode/lib/action_parser.py:96 rhodecode/lib/action_parser.py:114
2098 #: rhodecode/lib/action_parser.py:96 rhodecode/lib/action_parser.py:114
2076 msgid "[created] repository"
2099 msgid "[created] repository"
2077 msgstr ""
2100 msgstr ""
2078
2101
2079 #: rhodecode/lib/action_parser.py:99
2102 #: rhodecode/lib/action_parser.py:99
2080 msgid "[created] repository as fork"
2103 msgid "[created] repository as fork"
2081 msgstr ""
2104 msgstr ""
2082
2105
2083 #: rhodecode/lib/action_parser.py:102 rhodecode/lib/action_parser.py:117
2106 #: rhodecode/lib/action_parser.py:102 rhodecode/lib/action_parser.py:117
2084 msgid "[forked] repository"
2107 msgid "[forked] repository"
2085 msgstr ""
2108 msgstr ""
2086
2109
2087 #: rhodecode/lib/action_parser.py:105 rhodecode/lib/action_parser.py:120
2110 #: rhodecode/lib/action_parser.py:105 rhodecode/lib/action_parser.py:120
2088 msgid "[updated] repository"
2111 msgid "[updated] repository"
2089 msgstr ""
2112 msgstr ""
2090
2113
2091 #: rhodecode/lib/action_parser.py:108
2114 #: rhodecode/lib/action_parser.py:108
2092 msgid "[downloaded] archive from repository"
2115 msgid "[downloaded] archive from repository"
2093 msgstr ""
2116 msgstr ""
2094
2117
2095 #: rhodecode/lib/action_parser.py:111
2118 #: rhodecode/lib/action_parser.py:111
2096 msgid "[delete] repository"
2119 msgid "[delete] repository"
2097 msgstr ""
2120 msgstr ""
2098
2121
2099 #: rhodecode/lib/action_parser.py:123
2122 #: rhodecode/lib/action_parser.py:123
2100 msgid "[created] user"
2123 msgid "[created] user"
2101 msgstr ""
2124 msgstr ""
2102
2125
2103 #: rhodecode/lib/action_parser.py:126
2126 #: rhodecode/lib/action_parser.py:126
2104 msgid "[updated] user"
2127 msgid "[updated] user"
2105 msgstr ""
2128 msgstr ""
2106
2129
2107 #: rhodecode/lib/action_parser.py:129
2130 #: rhodecode/lib/action_parser.py:129
2108 msgid "[created] user group"
2131 msgid "[created] user group"
2109 msgstr ""
2132 msgstr ""
2110
2133
2111 #: rhodecode/lib/action_parser.py:132
2134 #: rhodecode/lib/action_parser.py:132
2112 msgid "[updated] user group"
2135 msgid "[updated] user group"
2113 msgstr ""
2136 msgstr ""
2114
2137
2115 #: rhodecode/lib/action_parser.py:135
2138 #: rhodecode/lib/action_parser.py:135
2116 msgid "[commented] on commit in repository"
2139 msgid "[commented] on commit in repository"
2117 msgstr ""
2140 msgstr ""
2118
2141
2119 #: rhodecode/lib/action_parser.py:138
2142 #: rhodecode/lib/action_parser.py:138
2120 msgid "[commented] on pull request for"
2143 msgid "[commented] on pull request for"
2121 msgstr ""
2144 msgstr ""
2122
2145
2123 #: rhodecode/lib/action_parser.py:141
2146 #: rhodecode/lib/action_parser.py:141
2124 msgid "[closed] pull request for"
2147 msgid "[closed] pull request for"
2125 msgstr ""
2148 msgstr ""
2126
2149
2127 #: rhodecode/lib/action_parser.py:144
2150 #: rhodecode/lib/action_parser.py:144
2128 msgid "[merged] pull request for"
2151 msgid "[merged] pull request for"
2129 msgstr ""
2152 msgstr ""
2130
2153
2131 #: rhodecode/lib/action_parser.py:147
2154 #: rhodecode/lib/action_parser.py:147
2132 msgid "[pushed] into"
2155 msgid "[pushed] into"
2133 msgstr ""
2156 msgstr ""
2134
2157
2135 #: rhodecode/lib/action_parser.py:150
2158 #: rhodecode/lib/action_parser.py:150
2136 msgid "[committed via RhodeCode] into repository"
2159 msgid "[committed via RhodeCode] into repository"
2137 msgstr ""
2160 msgstr ""
2138
2161
2139 #: rhodecode/lib/action_parser.py:153
2162 #: rhodecode/lib/action_parser.py:153
2140 msgid "[pulled from remote] into repository"
2163 msgid "[pulled from remote] into repository"
2141 msgstr ""
2164 msgstr ""
2142
2165
2143 #: rhodecode/lib/action_parser.py:156
2166 #: rhodecode/lib/action_parser.py:156
2144 msgid "[pulled] from"
2167 msgid "[pulled] from"
2145 msgstr ""
2168 msgstr ""
2146
2169
2147 #: rhodecode/lib/action_parser.py:159
2170 #: rhodecode/lib/action_parser.py:159
2148 msgid "[started following] repository"
2171 msgid "[started following] repository"
2149 msgstr ""
2172 msgstr ""
2150
2173
2151 #: rhodecode/lib/action_parser.py:162
2174 #: rhodecode/lib/action_parser.py:162
2152 msgid "[stopped following] repository"
2175 msgid "[stopped following] repository"
2153 msgstr ""
2176 msgstr ""
2154
2177
2155 #: rhodecode/lib/action_parser.py:172
2178 #: rhodecode/lib/action_parser.py:172
2156 #, python-format
2179 #, python-format
2157 msgid "fork name %s"
2180 msgid "fork name %s"
2158 msgstr ""
2181 msgstr ""
2159
2182
2160 #: rhodecode/lib/action_parser.py:191
2183 #: rhodecode/lib/action_parser.py:191
2161 #, python-format
2184 #, python-format
2162 msgid "Pull request #%s"
2185 msgid "Pull request #%s"
2163 msgstr ""
2186 msgstr ""
2164
2187
2165 #: rhodecode/lib/action_parser.py:226
2188 #: rhodecode/lib/action_parser.py:226
2166 #, python-format
2189 #, python-format
2167 msgid "Show all combined commits %s->%s"
2190 msgid "Show all combined commits %s->%s"
2168 msgstr ""
2191 msgstr ""
2169
2192
2170 #: rhodecode/lib/action_parser.py:231
2193 #: rhodecode/lib/action_parser.py:231
2171 msgid "compare view"
2194 msgid "compare view"
2172 msgstr ""
2195 msgstr ""
2173
2196
2174 #: rhodecode/lib/action_parser.py:238
2197 #: rhodecode/lib/action_parser.py:238
2175 #, python-format
2198 #, python-format
2176 msgid " and %(num)s more commits"
2199 msgid " and %(num)s more commits"
2177 msgstr ""
2200 msgstr ""
2178
2201
2179 #: rhodecode/lib/action_parser.py:293
2202 #: rhodecode/lib/action_parser.py:293
2180 #, python-format
2203 #, python-format
2181 msgid "Deleted branch: %s"
2204 msgid "Deleted branch: %s"
2182 msgstr ""
2205 msgstr ""
2183
2206
2184 #: rhodecode/lib/action_parser.py:296
2207 #: rhodecode/lib/action_parser.py:296
2185 #, python-format
2208 #, python-format
2186 msgid "Created tag: %s"
2209 msgid "Created tag: %s"
2187 msgstr ""
2210 msgstr ""
2188
2211
2189 #: rhodecode/lib/action_parser.py:309
2212 #: rhodecode/lib/action_parser.py:309
2190 msgid "Commit not found"
2213 msgid "Commit not found"
2191 msgstr ""
2214 msgstr ""
2192
2215
2193 #: rhodecode/lib/auth.py:1760
2216 #: rhodecode/lib/auth.py:1769
2194 msgid "IP {} not allowed"
2217 msgid "IP {} not allowed"
2195 msgstr ""
2218 msgstr ""
2196
2219
2197 #: rhodecode/lib/auth.py:1852
2220 #: rhodecode/lib/auth.py:1861
2198 msgid "You need to be a registered user to perform this action"
2221 msgid "You need to be a registered user to perform this action"
2199 msgstr ""
2222 msgstr ""
2200
2223
2201 #: rhodecode/lib/auth.py:1896
2224 #: rhodecode/lib/auth.py:1905
2202 msgid "You need to be signed in to view this page"
2225 msgid "You need to be signed in to view this page"
2203 msgstr ""
2226 msgstr ""
2204
2227
2205 #: rhodecode/lib/diffs.py:903
2228 #: rhodecode/lib/diffs.py:903
2206 msgid "Click to select line"
2229 msgid "Click to select line"
2207 msgstr ""
2230 msgstr ""
2208
2231
2209 #: rhodecode/lib/helpers.py:1721
2232 #: rhodecode/lib/helpers.py:1803
2210 msgid ""
2233 msgid ""
2211 "Example filter terms:\n"
2234 "Example filter terms:\n"
2212 " repository:vcs\n"
2235 " repository:vcs\n"
2213 " username:marcin\n"
2236 " username:marcin\n"
2214 " username:(NOT marcin)\n"
2237 " username:(NOT marcin)\n"
2215 " action:*push*\n"
2238 " action:*push*\n"
2216 " ip:127.0.0.1\n"
2239 " ip:127.0.0.1\n"
2217 " date:20120101\n"
2240 " date:20120101\n"
2218 " date:[20120101100000 TO 20120102]\n"
2241 " date:[20120101100000 TO 20120102]\n"
2219 "\n"
2242 "\n"
2220 "Actions: {actions}\n"
2243 "Actions: {actions}\n"
2221 "\n"
2244 "\n"
2222 "Generate wildcards using '*' character:\n"
2245 "Generate wildcards using '*' character:\n"
2223 " \"repository:vcs*\" - search everything starting with 'vcs'\n"
2246 " \"repository:vcs*\" - search everything starting with 'vcs'\n"
2224 " \"repository:*vcs*\" - search for repository containing 'vcs'\n"
2247 " \"repository:*vcs*\" - search for repository containing 'vcs'\n"
2225 "\n"
2248 "\n"
2226 "Optional AND / OR operators in queries\n"
2249 "Optional AND / OR operators in queries\n"
2227 " \"repository:vcs OR repository:test\"\n"
2250 " \"repository:vcs OR repository:test\"\n"
2228 " \"username:test AND repository:test*\"\n"
2251 " \"username:test AND repository:test*\"\n"
2229 msgstr ""
2252 msgstr ""
2230
2253
2231 #: rhodecode/lib/helpers.py:1745
2254 #: rhodecode/lib/helpers.py:1827
2232 #, python-format
2255 #, python-format
2233 msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories"
2256 msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories"
2234 msgstr ""
2257 msgstr ""
2235
2258
2236 #: rhodecode/lib/utils2.py:542
2259 #: rhodecode/lib/utils2.py:542
2237 msgid "in ${ago}"
2260 msgid "in ${ago}"
2238 msgstr ""
2261 msgstr ""
2239
2262
2240 #: rhodecode/lib/utils2.py:548
2263 #: rhodecode/lib/utils2.py:548
2241 msgid "${ago} ago"
2264 msgid "${ago} ago"
2242 msgstr ""
2265 msgstr ""
2243
2266
2244 #: rhodecode/lib/utils2.py:557
2267 #: rhodecode/lib/utils2.py:557
2245 msgid "${val}, ${detail}"
2268 msgid "${val}, ${detail}"
2246 msgstr ""
2269 msgstr ""
2247
2270
2248 #: rhodecode/lib/utils2.py:559
2271 #: rhodecode/lib/utils2.py:559
2249 msgid "${val}, ${detail} ago"
2272 msgid "${val}, ${detail} ago"
2250 msgstr ""
2273 msgstr ""
2251
2274
2252 #: rhodecode/lib/utils2.py:561
2275 #: rhodecode/lib/utils2.py:561
2253 msgid "in ${val}, ${detail}"
2276 msgid "in ${val}, ${detail}"
2254 msgstr ""
2277 msgstr ""
2255
2278
2256 #: rhodecode/lib/utils2.py:563
2279 #: rhodecode/lib/utils2.py:563
2257 msgid "${val} and ${detail}"
2280 msgid "${val} and ${detail}"
2258 msgstr ""
2281 msgstr ""
2259
2282
2260 #: rhodecode/lib/utils2.py:565
2283 #: rhodecode/lib/utils2.py:565
2261 msgid "${val} and ${detail} ago"
2284 msgid "${val} and ${detail} ago"
2262 msgstr ""
2285 msgstr ""
2263
2286
2264 #: rhodecode/lib/utils2.py:567
2287 #: rhodecode/lib/utils2.py:567
2265 msgid "in ${val} and ${detail}"
2288 msgid "in ${val} and ${detail}"
2266 msgstr ""
2289 msgstr ""
2267
2290
2268 #: rhodecode/lib/utils2.py:571 rhodecode/public/js/scripts.js:22115
2291 #: rhodecode/lib/utils2.py:571 rhodecode/public/js/scripts.js:22612
2269 #: rhodecode/public/js/scripts.min.js:1
2292 #: rhodecode/public/js/scripts.min.js:1
2270 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:111
2293 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
2271 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:174
2294 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:174
2272 msgid "just now"
2295 msgid "just now"
2273 msgstr ""
2296 msgstr ""
2274
2297
2275 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:568
2298 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:568
2276 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:581
2299 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:581
2277 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:598
2300 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:598
2278 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:681
2301 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:681
2279 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:656
2302 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:656
2280 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:658
2303 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:658
2281 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:681
2304 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:681
2282 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:682
2305 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:682
2283 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:699
2306 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:699
2284 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:716
2307 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:716
2285 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:732
2308 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:732
2286 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:735
2309 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:735
2287 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:737
2310 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:737
2288 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:737
2311 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:737
2289 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:764
2312 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:764
2290 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:774
2313 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:774
2291 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:815
2314 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:815
2292 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:815
2315 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:815
2293 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:816
2316 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:816
2294 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:816
2317 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:816
2295 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:822
2318 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:822
2296 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:944
2319 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:944
2297 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:969
2320 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:969
2298 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2587
2321 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2587
2299 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2653
2322 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2653
2300 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2739
2323 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2739
2301 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2772
2324 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2772
2302 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2772
2325 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2772
2303 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2987
2326 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2987
2304 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3073
2327 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3073
2328 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3079
2305 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2275
2329 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2275
2306 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2267
2330 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2267
2307 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2266
2331 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2266
2308 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2270
2332 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2270
2309 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2270
2333 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2270
2310 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2321
2334 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2321
2311 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2322
2335 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2322
2312 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2522 rhodecode/model/db.py:3079
2336 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2522 rhodecode/model/db.py:3110
2313 msgid "Repository no access"
2337 msgid "Repository no access"
2314 msgstr ""
2338 msgstr ""
2315
2339
2316 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:569
2340 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:569
2317 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:582
2341 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:582
2318 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:599
2342 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:599
2319 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:682
2343 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:682
2320 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:657
2344 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:657
2321 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:659
2345 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:659
2322 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:682
2346 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:682
2323 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:683
2347 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:683
2324 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:700
2348 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:700
2325 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:717
2349 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:717
2326 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:733
2350 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:733
2327 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:736
2351 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:736
2328 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:738
2352 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:738
2329 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:738
2353 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:738
2330 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:765
2354 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:765
2331 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:775
2355 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:775
2332 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:816
2356 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:816
2333 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:816
2357 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:816
2334 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:817
2358 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:817
2335 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:817
2359 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:817
2336 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:823
2360 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:823
2337 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:945
2361 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:945
2338 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:970
2362 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:970
2339 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2588
2363 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2588
2340 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2654
2364 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2654
2341 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2740
2365 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2740
2342 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2773
2366 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2773
2343 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2773
2367 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2773
2344 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2988
2368 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2988
2345 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3074
2369 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3074
2370 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3080
2346 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2276
2371 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2276
2347 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2268
2372 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2268
2348 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2267
2373 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2267
2349 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2271
2374 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2271
2350 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2271
2375 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2271
2351 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2322
2376 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2322
2352 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2323
2377 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2323
2353 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2523 rhodecode/model/db.py:3080
2378 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2523 rhodecode/model/db.py:3111
2354 msgid "Repository read access"
2379 msgid "Repository read access"
2355 msgstr ""
2380 msgstr ""
2356
2381
2357 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:570
2382 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:570
2358 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:583
2383 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:583
2359 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:600
2384 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:600
2360 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:683
2385 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:683
2361 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:658
2386 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:658
2362 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:660
2387 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:660
2363 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:683
2388 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:683
2364 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:684
2389 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:684
2365 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:701
2390 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:701
2366 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:718
2391 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:718
2367 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:734
2392 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:734
2368 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:737
2393 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:737
2369 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:739
2394 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:739
2370 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:739
2395 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:739
2371 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:766
2396 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:766
2372 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:776
2397 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:776
2373 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:817
2398 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:817
2374 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:817
2399 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:817
2375 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:818
2400 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:818
2376 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:818
2401 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:818
2377 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:824
2402 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:824
2378 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:946
2403 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:946
2379 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:971
2404 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:971
2380 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2589
2405 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2589
2381 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2655
2406 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2655
2382 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2741
2407 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2741
2383 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2774
2408 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2774
2384 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2774
2409 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2774
2385 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2989
2410 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2989
2386 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3075
2411 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3075
2412 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3081
2387 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2277
2413 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2277
2388 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2269
2414 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2269
2389 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2268
2415 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2268
2390 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2272
2416 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2272
2391 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2272
2417 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2272
2392 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2323
2418 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2323
2393 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2324
2419 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2324
2394 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2524 rhodecode/model/db.py:3081
2420 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2524 rhodecode/model/db.py:3112
2395 msgid "Repository write access"
2421 msgid "Repository write access"
2396 msgstr ""
2422 msgstr ""
2397
2423
2398 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:571
2424 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:571
2399 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:584
2425 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:584
2400 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:601
2426 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:601
2401 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:684
2427 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:684
2402 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:659
2428 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:659
2403 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:661
2429 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:661
2404 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:684
2430 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:684
2405 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:685
2431 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:685
2406 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:702
2432 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:702
2407 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:719
2433 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:719
2408 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:735
2434 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:735
2409 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:738
2435 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:738
2410 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:740
2436 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:740
2411 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:740
2437 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:740
2412 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:767
2438 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:767
2413 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:777
2439 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:777
2414 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:818
2440 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:818
2415 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:818
2441 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:818
2416 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:819
2442 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:819
2417 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:819
2443 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:819
2418 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:825
2444 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:825
2419 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:947
2445 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:947
2420 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:972
2446 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:972
2421 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2590
2447 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2590
2422 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2656
2448 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2656
2423 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2742
2449 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2742
2424 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2775
2450 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2775
2425 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2775
2451 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2775
2426 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2990
2452 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2990
2427 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3076
2453 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3076
2454 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3082
2428 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2278
2455 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2278
2429 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2270
2456 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2270
2430 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2269
2457 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2269
2431 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2273
2458 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2273
2432 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2273
2459 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2273
2433 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2324
2460 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2324
2434 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2325
2461 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2325
2435 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2525 rhodecode/model/db.py:3082
2462 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2525 rhodecode/model/db.py:3113
2436 msgid "Repository admin access"
2463 msgid "Repository admin access"
2437 msgstr ""
2464 msgstr ""
2438
2465
2439 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:573
2466 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:573
2440 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:586
2467 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:586
2441 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:603
2468 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:603
2442 msgid "Repositories Group no access"
2469 msgid "Repositories Group no access"
2443 msgstr ""
2470 msgstr ""
2444
2471
2445 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:574
2472 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:574
2446 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:587
2473 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:587
2447 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:604
2474 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:604
2448 msgid "Repositories Group read access"
2475 msgid "Repositories Group read access"
2449 msgstr ""
2476 msgstr ""
2450
2477
2451 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:575
2478 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:575
2452 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:588
2479 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:588
2453 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:605
2480 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:605
2454 msgid "Repositories Group write access"
2481 msgid "Repositories Group write access"
2455 msgstr ""
2482 msgstr ""
2456
2483
2457 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:576
2484 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:576
2458 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:589
2485 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:589
2459 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:606
2486 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:606
2460 msgid "Repositories Group admin access"
2487 msgid "Repositories Group admin access"
2461 msgstr ""
2488 msgstr ""
2462
2489
2463 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:578
2490 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:578
2464 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:591
2491 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:591
2465 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:608
2492 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:608
2466 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:691
2493 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:691
2467 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:654
2494 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:654
2468 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:656
2495 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:656
2469 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:679
2496 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:679
2470 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:680
2497 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:680
2471 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:697
2498 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:697
2472 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:714
2499 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:714
2473 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:730
2500 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:730
2474 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:733
2501 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:733
2475 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:735
2502 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:735
2476 msgid "RhodeCode Administrator"
2503 msgid "RhodeCode Administrator"
2477 msgstr ""
2504 msgstr ""
2478
2505
2479 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:579
2506 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:579
2480 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:592
2507 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:592
2481 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:609
2508 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:609
2482 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:692
2509 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:692
2483 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:677
2510 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:677
2484 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:679
2511 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:679
2485 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:702
2512 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:702
2486 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:703
2513 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:703
2487 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:720
2514 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:720
2488 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:737
2515 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:737
2489 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:753
2516 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:753
2490 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:756
2517 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:756
2491 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:758
2518 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:758
2492 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:758
2519 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:758
2493 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:785
2520 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:785
2494 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:795
2521 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:795
2495 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:836
2522 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:836
2496 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:836
2523 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:836
2497 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:837
2524 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:837
2498 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:837
2525 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:837
2499 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:843
2526 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:843
2500 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:965
2527 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:965
2501 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:990
2528 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:990
2502 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2608
2529 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2608
2503 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2679
2530 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2679
2504 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2765
2531 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2765
2505 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2798
2532 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2798
2506 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2798
2533 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2798
2507 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3013
2534 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3013
2508 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3099
2535 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3099
2536 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3105
2509 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2296
2537 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2296
2510 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2288
2538 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2288
2511 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2287
2539 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2287
2512 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2291
2540 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2291
2513 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2291
2541 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2291
2514 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2342
2542 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2342
2515 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2343
2543 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2343
2516 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2543 rhodecode/model/db.py:3105
2544 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2543 rhodecode/model/db.py:3136
2517 msgid "Repository creation disabled"
2545 msgid "Repository creation disabled"
2518 msgstr ""
2546 msgstr ""
2519
2547
2520 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:580
2548 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:580
2521 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:593
2549 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:593
2522 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:610
2550 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:610
2523 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:693
2551 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:693
2524 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:678
2552 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:678
2525 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:680
2553 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:680
2526 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:703
2554 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:703
2527 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:704
2555 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:704
2528 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:721
2556 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:721
2529 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:738
2557 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:738
2530 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:754
2558 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:754
2531 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:757
2559 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:757
2532 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:759
2560 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:759
2533 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:759
2561 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:759
2534 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:786
2562 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:786
2535 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:796
2563 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:796
2536 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:837
2564 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:837
2537 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:837
2565 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:837
2538 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:838
2566 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:838
2539 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:838
2567 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:838
2540 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:844
2568 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:844
2541 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:966
2569 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:966
2542 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:991
2570 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:991
2543 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2609
2571 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2609
2544 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2680
2572 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2680
2545 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2766
2573 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2766
2546 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2799
2574 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2799
2547 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2799
2575 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2799
2548 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3014
2576 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3014
2549 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3100
2577 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3100
2578 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3106
2550 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2297
2579 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2297
2551 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2289
2580 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2289
2552 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2288
2581 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2288
2553 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2292
2582 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2292
2554 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2292
2583 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2292
2555 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2343
2584 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2343
2556 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2344
2585 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2344
2557 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2544 rhodecode/model/db.py:3106
2586 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2544 rhodecode/model/db.py:3137
2558 msgid "Repository creation enabled"
2587 msgid "Repository creation enabled"
2559 msgstr ""
2588 msgstr ""
2560
2589
2561 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:581
2590 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:581
2562 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:594
2591 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:594
2563 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:611
2592 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:611
2564 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:694
2593 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:694
2565 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:680
2594 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:680
2566 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:682
2595 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:682
2567 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:705
2596 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:705
2568 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:706
2597 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:706
2569 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:723
2598 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:723
2570 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:740
2599 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:740
2571 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:758
2600 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:758
2572 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:761
2601 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:761
2573 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:763
2602 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:763
2574 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:763
2603 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:763
2575 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:790
2604 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:790
2576 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:800
2605 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:800
2577 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:841
2606 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:841
2578 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:841
2607 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:841
2579 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:842
2608 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:842
2580 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:842
2609 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:842
2581 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:848
2610 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:848
2582 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:970
2611 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:970
2583 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:995
2612 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:995
2584 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2613
2613 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2613
2585 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2684
2614 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2684
2586 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2770
2615 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2770
2587 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2803
2616 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2803
2588 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2803
2617 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2803
2589 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3018
2618 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3018
2590 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3104
2619 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3104
2620 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3110
2591 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2301
2621 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2301
2592 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2293
2622 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2293
2593 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2292
2623 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2292
2594 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2296
2624 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2296
2595 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2296
2625 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2296
2596 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2347
2626 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2347
2597 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2348
2627 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2348
2598 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2548 rhodecode/model/db.py:3110
2628 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2548 rhodecode/model/db.py:3141
2599 msgid "Repository forking disabled"
2629 msgid "Repository forking disabled"
2600 msgstr ""
2630 msgstr ""
2601
2631
2602 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:582
2632 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:582
2603 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:595
2633 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:595
2604 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:612
2634 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:612
2605 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:695
2635 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:695
2606 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:681
2636 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:681
2607 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:683
2637 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:683
2608 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:706
2638 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:706
2609 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:707
2639 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:707
2610 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:724
2640 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:724
2611 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:741
2641 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:741
2612 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:759
2642 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:759
2613 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:762
2643 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:762
2614 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:764
2644 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:764
2615 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:764
2645 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:764
2616 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:791
2646 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:791
2617 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:801
2647 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:801
2618 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:842
2648 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:842
2619 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:842
2649 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:842
2620 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:843
2650 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:843
2621 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:843
2651 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:843
2622 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:849
2652 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:849
2623 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:971
2653 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:971
2624 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:996
2654 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:996
2625 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2614
2655 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2614
2626 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2685
2656 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2685
2627 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2771
2657 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2771
2628 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2804
2658 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2804
2629 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2804
2659 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2804
2630 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3019
2660 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3019
2631 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3105
2661 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3105
2662 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3111
2632 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2302
2663 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2302
2633 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2294
2664 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2294
2634 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2293
2665 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2293
2635 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2297
2666 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2297
2636 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2297
2667 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2297
2637 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2348
2668 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2348
2638 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2349
2669 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2349
2639 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2549 rhodecode/model/db.py:3111
2670 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2549 rhodecode/model/db.py:3142
2640 msgid "Repository forking enabled"
2671 msgid "Repository forking enabled"
2641 msgstr ""
2672 msgstr ""
2642
2673
2643 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:583
2674 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:583
2644 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:596
2675 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:596
2645 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:613
2676 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:613
2646 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:696
2677 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:696
2647 msgid "Register disabled"
2678 msgid "Register disabled"
2648 msgstr ""
2679 msgstr ""
2649
2680
2650 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:584
2681 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:584
2651 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:597
2682 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:597
2652 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:614
2683 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:614
2653 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:697
2684 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:697
2654 msgid "Register new user with RhodeCode with manual activation"
2685 msgid "Register new user with RhodeCode with manual activation"
2655 msgstr ""
2686 msgstr ""
2656
2687
2657 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:587
2688 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:587
2658 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:600
2689 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:600
2659 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:617
2690 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:617
2660 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:700
2691 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:700
2661 msgid "Register new user with RhodeCode with auto activation"
2692 msgid "Register new user with RhodeCode with auto activation"
2662 msgstr ""
2693 msgstr ""
2663
2694
2664 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:843
2695 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:843
2665 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:864
2696 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:864
2666 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:873
2697 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:873
2667 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:956
2698 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:956
2668 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:994
2699 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:994
2669 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:996
2700 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:996
2670 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1019
2701 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1019
2671 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1020
2702 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1020
2672 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1037
2703 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1037
2673 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1054
2704 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1054
2674 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1073
2705 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1073
2675 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1076
2706 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1076
2676 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1087
2707 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1087
2677 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1090
2708 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1090
2678 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1120
2709 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1120
2679 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1134
2710 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1134
2680 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1175
2711 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1175
2681 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1175
2712 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1175
2682 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1184
2713 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1184
2683 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1184
2714 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1184
2684 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1194
2715 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1194
2685 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1316
2716 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1316
2686 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1341
2717 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1341
2687 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3295
2718 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3295
2688 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3378
2719 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3378
2689 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3491
2720 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3491
2690 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3524
2721 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3524
2691 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3525
2722 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3525
2692 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3757
2723 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3757
2693 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3843
2724 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3843
2725 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3890
2694 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2915
2726 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2915
2695 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2907
2727 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2907
2696 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2907
2728 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2907
2697 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2910
2729 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2910
2698 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2910
2730 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2910
2699 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3011
2731 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3011
2700 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3012
2732 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3012
2701 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3859
2733 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3935
2702 #: rhodecode/public/js/scripts.js:41391 rhodecode/public/js/scripts.min.js:1
2734 #: rhodecode/public/js/scripts.js:42219 rhodecode/public/js/scripts.min.js:1
2703 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:56
2735 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:64
2704 #: rhodecode/public/js/src/rhodecode/pullrequests.js:350
2736 #: rhodecode/public/js/src/rhodecode/pullrequests.js:352
2705 msgid "Not Reviewed"
2737 msgid "Not Reviewed"
2706 msgstr ""
2738 msgstr ""
2707
2739
2708 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:844
2740 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:844
2709 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:865
2741 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:865
2710 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:874
2742 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:874
2711 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:957
2743 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:957
2712 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:995
2744 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:995
2713 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:997
2745 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:997
2714 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1020
2746 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1020
2715 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1021
2747 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1021
2716 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1038
2748 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1038
2717 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1055
2749 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1055
2718 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1074
2750 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1074
2719 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1077
2751 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1077
2720 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1088
2752 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1088
2721 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1091
2753 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1091
2722 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1121
2754 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1121
2723 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1135
2755 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1135
2724 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1176
2756 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1176
2725 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1176
2757 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1176
2726 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1185
2758 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1185
2727 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1185
2759 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1185
2728 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1195
2760 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1195
2729 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1317
2761 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1317
2730 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1342
2762 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1342
2731 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3296
2763 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3296
2732 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3379
2764 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3379
2733 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3492
2765 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3492
2734 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3525
2766 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3525
2735 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3526
2767 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3526
2736 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3758
2768 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3758
2737 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3844
2769 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3844
2770 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3891
2738 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2916
2771 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2916
2739 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2908
2772 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2908
2740 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2908
2773 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2908
2741 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2911
2774 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2911
2742 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2911
2775 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2911
2743 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3012
2776 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3012
2744 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3013
2777 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3013
2745 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3231 rhodecode/model/db.py:3860
2778 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3231 rhodecode/model/db.py:3936
2746 msgid "Approved"
2779 msgid "Approved"
2747 msgstr ""
2780 msgstr ""
2748
2781
2749 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:845
2782 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:845
2750 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:866
2783 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:866
2751 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:875
2784 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:875
2752 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:958
2785 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:958
2753 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:996
2786 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:996
2754 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:998
2787 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:998
2755 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1021
2788 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1021
2756 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1022
2789 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1022
2757 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1039
2790 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1039
2758 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1056
2791 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1056
2759 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1075
2792 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1075
2760 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1078
2793 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1078
2761 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1089
2794 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1089
2762 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1092
2795 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1092
2763 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1122
2796 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1122
2764 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1136
2797 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1136
2765 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1177
2798 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1177
2766 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1177
2799 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1177
2767 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1186
2800 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1186
2768 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1186
2801 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1186
2769 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1196
2802 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1196
2770 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1318
2803 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1318
2771 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1343
2804 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1343
2772 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3297
2805 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3297
2773 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3380
2806 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3380
2774 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3493
2807 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3493
2775 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3526
2808 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3526
2776 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3527
2809 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3527
2777 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3759
2810 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3759
2778 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3845
2811 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3845
2812 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3892
2779 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2917
2813 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2917
2780 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2909
2814 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2909
2781 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2909
2815 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2909
2782 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2912
2816 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2912
2783 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2912
2817 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2912
2784 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3013
2818 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3013
2785 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3014
2819 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3014
2786 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3232 rhodecode/model/db.py:3861
2820 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3232 rhodecode/model/db.py:3937
2787 msgid "Rejected"
2821 msgid "Rejected"
2788 msgstr ""
2822 msgstr ""
2789
2823
2790 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:846
2824 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:846
2791 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:867
2825 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:867
2792 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:876
2826 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:876
2793 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:959
2827 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:959
2794 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:997
2828 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:997
2795 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:999
2829 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:999
2796 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1022
2830 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1022
2797 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1023
2831 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1023
2798 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1040
2832 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1040
2799 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1057
2833 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1057
2800 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1076
2834 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1076
2801 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1079
2835 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1079
2802 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1090
2836 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1090
2803 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1093
2837 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1093
2804 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1123
2838 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1123
2805 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1137
2839 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1137
2806 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1178
2840 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1178
2807 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1178
2841 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1178
2808 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1187
2842 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1187
2809 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1187
2843 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1187
2810 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1197
2844 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1197
2811 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1319
2845 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1319
2812 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1344
2846 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1344
2813 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3298
2847 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3298
2814 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3381
2848 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3381
2815 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3494
2849 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3494
2816 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3527
2850 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3527
2817 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3528
2851 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3528
2818 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3760
2852 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3760
2819 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3846
2853 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3846
2854 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3893
2820 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2918
2855 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2918
2821 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2910
2856 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2910
2822 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2910
2857 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2910
2823 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2913
2858 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2913
2824 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2913
2859 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2913
2825 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3014
2860 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3014
2826 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3015
2861 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3015
2827 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3233 rhodecode/model/db.py:3862
2862 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3233 rhodecode/model/db.py:3938
2828 msgid "Under Review"
2863 msgid "Under Review"
2829 msgstr ""
2864 msgstr ""
2830
2865
2831 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:686
2866 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:686
2832 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:661
2867 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:661
2833 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:663
2868 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:663
2834 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:686
2869 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:686
2835 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:687
2870 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:687
2836 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:704
2871 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:704
2837 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:721
2872 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:721
2838 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:737
2873 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:737
2839 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:740
2874 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:740
2840 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:742
2875 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:742
2841 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:742
2876 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:742
2842 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:769
2877 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:769
2843 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:779
2878 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:779
2844 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:820
2879 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:820
2845 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:820
2880 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:820
2846 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:821
2881 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:821
2847 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:821
2882 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:821
2848 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:827
2883 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:827
2849 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:949
2884 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:949
2850 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:974
2885 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:974
2851 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2592
2886 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2592
2852 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2658
2887 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2658
2853 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2744
2888 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2744
2854 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2777
2889 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2777
2855 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2777
2890 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2777
2856 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2992
2891 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2992
2857 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3078
2892 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3078
2893 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3084
2858 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2280
2894 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2280
2859 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2272
2895 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2272
2860 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2271
2896 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2271
2861 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2275
2897 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2275
2862 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2275
2898 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2275
2863 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2326
2899 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2326
2864 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2327
2900 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2327
2865 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2527 rhodecode/model/db.py:3084
2901 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2527 rhodecode/model/db.py:3115
2866 msgid "Repository group no access"
2902 msgid "Repository group no access"
2867 msgstr ""
2903 msgstr ""
2868
2904
2869 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:687
2905 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:687
2870 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:662
2906 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:662
2871 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:664
2907 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:664
2872 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:687
2908 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:687
2873 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:688
2909 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:688
2874 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:705
2910 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:705
2875 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:722
2911 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:722
2876 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:738
2912 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:738
2877 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:741
2913 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:741
2878 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:743
2914 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:743
2879 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:743
2915 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:743
2880 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:770
2916 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:770
2881 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:780
2917 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:780
2882 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:821
2918 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:821
2883 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:821
2919 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:821
2884 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:822
2920 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:822
2885 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:822
2921 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:822
2886 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:828
2922 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:828
2887 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:950
2923 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:950
2888 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:975
2924 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:975
2889 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2593
2925 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2593
2890 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2659
2926 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2659
2891 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2745
2927 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2745
2892 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2778
2928 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2778
2893 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2778
2929 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2778
2894 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2993
2930 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2993
2895 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3079
2931 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3079
2932 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3085
2896 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2281
2933 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2281
2897 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2273
2934 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2273
2898 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2272
2935 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2272
2899 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2276
2936 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2276
2900 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2276
2937 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2276
2901 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2327
2938 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2327
2902 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2328
2939 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2328
2903 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2528 rhodecode/model/db.py:3085
2940 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2528 rhodecode/model/db.py:3116
2904 msgid "Repository group read access"
2941 msgid "Repository group read access"
2905 msgstr ""
2942 msgstr ""
2906
2943
2907 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:688
2944 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:688
2908 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:663
2945 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:663
2909 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:665
2946 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:665
2910 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:688
2947 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:688
2911 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:689
2948 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:689
2912 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:706
2949 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:706
2913 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:723
2950 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:723
2914 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:739
2951 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:739
2915 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:742
2952 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:742
2916 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:744
2953 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:744
2917 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:744
2954 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:744
2918 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:771
2955 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:771
2919 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:781
2956 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:781
2920 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:822
2957 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:822
2921 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:822
2958 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:822
2922 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:823
2959 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:823
2923 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:823
2960 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:823
2924 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:829
2961 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:829
2925 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:951
2962 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:951
2926 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:976
2963 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:976
2927 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2594
2964 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2594
2928 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2660
2965 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2660
2929 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2746
2966 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2746
2930 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2779
2967 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2779
2931 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2779
2968 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2779
2932 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2994
2969 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2994
2933 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3080
2970 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3080
2971 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3086
2934 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2282
2972 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2282
2935 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2274
2973 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2274
2936 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2273
2974 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2273
2937 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2277
2975 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2277
2938 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2277
2976 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2277
2939 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2328
2977 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2328
2940 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2329
2978 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2329
2941 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2529 rhodecode/model/db.py:3086
2979 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2529 rhodecode/model/db.py:3117
2942 msgid "Repository group write access"
2980 msgid "Repository group write access"
2943 msgstr ""
2981 msgstr ""
2944
2982
2945 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:689
2983 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:689
2946 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:664
2984 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:664
2947 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:666
2985 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:666
2948 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:689
2986 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:689
2949 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:690
2987 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:690
2950 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:707
2988 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:707
2951 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:724
2989 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:724
2952 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:740
2990 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:740
2953 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:743
2991 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:743
2954 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:745
2992 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:745
2955 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:745
2993 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:745
2956 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:772
2994 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:772
2957 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:782
2995 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:782
2958 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:823
2996 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:823
2959 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:823
2997 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:823
2960 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:824
2998 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:824
2961 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:824
2999 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:824
2962 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:830
3000 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:830
2963 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:952
3001 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:952
2964 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:977
3002 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:977
2965 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2595
3003 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2595
2966 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2661
3004 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2661
2967 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2747
3005 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2747
2968 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2780
3006 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2780
2969 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2780
3007 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2780
2970 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2995
3008 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2995
2971 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3081
3009 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3081
3010 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3087
2972 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2283
3011 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2283
2973 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2275
3012 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2275
2974 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2274
3013 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2274
2975 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2278
3014 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2278
2976 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2278
3015 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2278
2977 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2329
3016 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2329
2978 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2330
3017 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2330
2979 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2530 rhodecode/model/db.py:3087
3018 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2530 rhodecode/model/db.py:3118
2980 msgid "Repository group admin access"
3019 msgid "Repository group admin access"
2981 msgstr ""
3020 msgstr ""
2982
3021
2983 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:666
3022 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:666
2984 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:668
3023 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:668
2985 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:691
3024 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:691
2986 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:692
3025 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:692
2987 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:709
3026 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:709
2988 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:726
3027 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:726
2989 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:742
3028 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:742
2990 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:745
3029 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:745
2991 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:747
3030 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:747
2992 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:747
3031 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:747
2993 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:774
3032 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:774
2994 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:784
3033 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:784
2995 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:825
3034 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:825
2996 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:825
3035 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:825
2997 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:826
3036 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:826
2998 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:826
3037 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:826
2999 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:832
3038 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:832
3000 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:954
3039 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:954
3001 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:979
3040 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:979
3002 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2597
3041 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2597
3003 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2663
3042 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2663
3004 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2749
3043 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2749
3005 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2782
3044 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2782
3006 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2782
3045 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2782
3007 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2997
3046 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2997
3008 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3083
3047 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3083
3048 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3089
3009 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2285
3049 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2285
3010 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2277
3050 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2277
3011 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2276
3051 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2276
3012 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2280
3052 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2280
3013 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2280
3053 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2280
3014 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2331
3054 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2331
3015 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2332
3055 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2332
3016 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2532 rhodecode/model/db.py:3089
3056 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2532 rhodecode/model/db.py:3120
3017 msgid "User group no access"
3057 msgid "User group no access"
3018 msgstr ""
3058 msgstr ""
3019
3059
3020 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:667
3060 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:667
3021 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:669
3061 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:669
3022 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:692
3062 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:692
3023 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:693
3063 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:693
3024 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:710
3064 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:710
3025 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:727
3065 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:727
3026 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:743
3066 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:743
3027 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:746
3067 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:746
3028 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:748
3068 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:748
3029 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:748
3069 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:748
3030 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:775
3070 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:775
3031 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:785
3071 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:785
3032 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:826
3072 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:826
3033 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:826
3073 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:826
3034 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:827
3074 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:827
3035 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:827
3075 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:827
3036 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:833
3076 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:833
3037 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:955
3077 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:955
3038 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:980
3078 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:980
3039 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2598
3079 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2598
3040 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2664
3080 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2664
3041 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2750
3081 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2750
3042 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2783
3082 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2783
3043 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2783
3083 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2783
3044 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2998
3084 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2998
3045 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3084
3085 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3084
3086 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3090
3046 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2286
3087 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2286
3047 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2278
3088 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2278
3048 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2277
3089 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2277
3049 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2281
3090 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2281
3050 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2281
3091 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2281
3051 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2332
3092 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2332
3052 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2333
3093 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2333
3053 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2533 rhodecode/model/db.py:3090
3094 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2533 rhodecode/model/db.py:3121
3054 msgid "User group read access"
3095 msgid "User group read access"
3055 msgstr ""
3096 msgstr ""
3056
3097
3057 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:668
3098 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:668
3058 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:670
3099 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:670
3059 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:693
3100 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:693
3060 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:694
3101 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:694
3061 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:711
3102 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:711
3062 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:728
3103 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:728
3063 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:744
3104 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:744
3064 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:747
3105 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:747
3065 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:749
3106 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:749
3066 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:749
3107 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:749
3067 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:776
3108 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:776
3068 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:786
3109 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:786
3069 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:827
3110 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:827
3070 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:827
3111 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:827
3071 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:828
3112 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:828
3072 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:828
3113 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:828
3073 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:834
3114 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:834
3074 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:956
3115 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:956
3075 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:981
3116 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:981
3076 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2599
3117 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2599
3077 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2665
3118 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2665
3078 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2751
3119 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2751
3079 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2784
3120 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2784
3080 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2784
3121 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2784
3081 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2999
3122 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2999
3082 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3085
3123 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3085
3124 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3091
3083 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2287
3125 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2287
3084 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2279
3126 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2279
3085 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2278
3127 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2278
3086 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2282
3128 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2282
3087 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2282
3129 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2282
3088 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2333
3130 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2333
3089 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2334
3131 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2334
3090 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2534 rhodecode/model/db.py:3091
3132 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2534 rhodecode/model/db.py:3122
3091 msgid "User group write access"
3133 msgid "User group write access"
3092 msgstr ""
3134 msgstr ""
3093
3135
3094 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:669
3136 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:669
3095 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:671
3137 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:671
3096 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:694
3138 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:694
3097 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:695
3139 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:695
3098 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:712
3140 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:712
3099 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:729
3141 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:729
3100 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:745
3142 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:745
3101 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:748
3143 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:748
3102 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:750
3144 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:750
3103 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:750
3145 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:750
3104 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:777
3146 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:777
3105 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:787
3147 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:787
3106 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:828
3148 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:828
3107 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:828
3149 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:828
3108 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:829
3150 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:829
3109 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:829
3151 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:829
3110 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:835
3152 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:835
3111 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:957
3153 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:957
3112 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:982
3154 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:982
3113 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2600
3155 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2600
3114 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2666
3156 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2666
3115 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2752
3157 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2752
3116 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2785
3158 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2785
3117 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2785
3159 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2785
3118 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3000
3160 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3000
3119 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3086
3161 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3086
3162 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3092
3120 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2288
3163 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2288
3121 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2280
3164 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2280
3122 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2279
3165 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2279
3123 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2283
3166 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2283
3124 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2283
3167 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2283
3125 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2334
3168 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2334
3126 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2335
3169 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2335
3127 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2535 rhodecode/model/db.py:3092
3170 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2535 rhodecode/model/db.py:3123
3128 msgid "User group admin access"
3171 msgid "User group admin access"
3129 msgstr ""
3172 msgstr ""
3130
3173
3131 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:671
3174 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:671
3132 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:673
3175 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:673
3133 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:696
3176 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:696
3134 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:697
3177 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:697
3135 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:714
3178 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:714
3136 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:731
3179 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:731
3137 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:747
3180 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:747
3138 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:750
3181 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:750
3139 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:752
3182 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:752
3140 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:752
3183 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:752
3141 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:779
3184 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:779
3142 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:789
3185 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:789
3143 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:830
3186 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:830
3144 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:830
3187 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:830
3145 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:831
3188 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:831
3146 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:831
3189 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:831
3147 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:837
3190 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:837
3148 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:959
3191 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:959
3149 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:984
3192 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:984
3150 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2602
3193 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2602
3151 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2673
3194 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2673
3152 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2759
3195 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2759
3153 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2792
3196 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2792
3154 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2792
3197 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2792
3155 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3007
3198 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3007
3156 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3093
3199 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3093
3200 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3099
3157 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2290
3201 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2290
3158 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2282
3202 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2282
3159 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2281
3203 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2281
3160 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2285
3204 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2285
3161 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2285
3205 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2285
3162 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2336
3206 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2336
3163 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2337
3207 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2337
3164 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2537 rhodecode/model/db.py:3099
3208 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2537 rhodecode/model/db.py:3130
3165 msgid "Repository Group creation disabled"
3209 msgid "Repository Group creation disabled"
3166 msgstr ""
3210 msgstr ""
3167
3211
3168 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:672
3212 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:672
3169 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:674
3213 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:674
3170 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:697
3214 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:697
3171 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:698
3215 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:698
3172 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:715
3216 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:715
3173 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:732
3217 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:732
3174 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:748
3218 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:748
3175 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:751
3219 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:751
3176 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:753
3220 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:753
3177 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:753
3221 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:753
3178 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:780
3222 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:780
3179 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:790
3223 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:790
3180 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:831
3224 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:831
3181 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:831
3225 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:831
3182 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:832
3226 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:832
3183 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:832
3227 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:832
3184 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:838
3228 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:838
3185 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:960
3229 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:960
3186 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:985
3230 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:985
3187 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2603
3231 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2603
3188 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2674
3232 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2674
3189 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2760
3233 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2760
3190 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2793
3234 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2793
3191 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2793
3235 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2793
3192 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3008
3236 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3008
3193 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3094
3237 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3094
3238 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3100
3194 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2291
3239 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2291
3195 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2283
3240 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2283
3196 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2282
3241 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2282
3197 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2286
3242 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2286
3198 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2286
3243 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2286
3199 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2337
3244 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2337
3200 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2338
3245 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2338
3201 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2538 rhodecode/model/db.py:3100
3246 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2538 rhodecode/model/db.py:3131
3202 msgid "Repository Group creation enabled"
3247 msgid "Repository Group creation enabled"
3203 msgstr ""
3248 msgstr ""
3204
3249
3205 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:674
3250 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:674
3206 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:676
3251 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:676
3207 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:699
3252 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:699
3208 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:700
3253 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:700
3209 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:717
3254 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:717
3210 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:734
3255 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:734
3211 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:750
3256 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:750
3212 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:753
3257 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:753
3213 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:755
3258 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:755
3214 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:755
3259 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:755
3215 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:782
3260 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:782
3216 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:792
3261 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:792
3217 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:833
3262 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:833
3218 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:833
3263 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:833
3219 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:834
3264 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:834
3220 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:834
3265 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:834
3221 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:840
3266 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:840
3222 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:962
3267 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:962
3223 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:987
3268 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:987
3224 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2605
3269 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2605
3225 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2676
3270 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2676
3226 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2762
3271 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2762
3227 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2795
3272 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2795
3228 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2795
3273 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2795
3229 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3010
3274 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3010
3230 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3096
3275 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3096
3276 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3102
3231 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2293
3277 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2293
3232 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2285
3278 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2285
3233 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2284
3279 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2284
3234 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2288
3280 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2288
3235 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2288
3281 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2288
3236 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2339
3282 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2339
3237 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2340
3283 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2340
3238 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2540 rhodecode/model/db.py:3102
3284 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2540 rhodecode/model/db.py:3133
3239 msgid "User Group creation disabled"
3285 msgid "User Group creation disabled"
3240 msgstr ""
3286 msgstr ""
3241
3287
3242 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:675
3288 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:675
3243 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:677
3289 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:677
3244 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:700
3290 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:700
3245 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:701
3291 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:701
3246 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:718
3292 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:718
3247 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:735
3293 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:735
3248 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:751
3294 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:751
3249 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:754
3295 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:754
3250 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:756
3296 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:756
3251 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:756
3297 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:756
3252 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:783
3298 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:783
3253 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:793
3299 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:793
3254 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:834
3300 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:834
3255 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:834
3301 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:834
3256 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:835
3302 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:835
3257 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:835
3303 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:835
3258 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:841
3304 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:841
3259 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:963
3305 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:963
3260 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:988
3306 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:988
3261 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2606
3307 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2606
3262 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2677
3308 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2677
3263 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2763
3309 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2763
3264 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2796
3310 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2796
3265 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2796
3311 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2796
3266 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3011
3312 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3011
3267 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3097
3313 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3097
3314 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3103
3268 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2294
3315 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2294
3269 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2286
3316 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2286
3270 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2285
3317 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2285
3271 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2289
3318 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2289
3272 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2289
3319 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2289
3273 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2340
3320 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2340
3274 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2341
3321 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2341
3275 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2541 rhodecode/model/db.py:3103
3322 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2541 rhodecode/model/db.py:3134
3276 msgid "User Group creation enabled"
3323 msgid "User Group creation enabled"
3277 msgstr ""
3324 msgstr ""
3278
3325
3279 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:683
3326 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:683
3280 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:685
3327 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:685
3281 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:708
3328 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:708
3282 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:709
3329 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:709
3283 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:726
3330 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:726
3284 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:743
3331 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:743
3285 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:761
3332 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:761
3286 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:764
3333 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:764
3287 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:766
3334 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:766
3288 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:766
3335 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:766
3289 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:793
3336 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:793
3290 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:803
3337 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:803
3291 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:844
3338 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:844
3292 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:844
3339 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:844
3293 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:845
3340 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:845
3294 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:845
3341 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:845
3295 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:851
3342 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:851
3296 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:973
3343 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:973
3297 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:998
3344 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:998
3298 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2616
3345 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2616
3299 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2687
3346 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2687
3300 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2773
3347 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2773
3301 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2806
3348 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2806
3302 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2806
3349 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2806
3303 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3021
3350 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3021
3304 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3107
3351 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3107
3352 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3113
3305 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2304
3353 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2304
3306 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2296
3354 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2296
3307 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2295
3355 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2295
3308 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2299
3356 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2299
3309 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2299
3357 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2299
3310 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2350
3358 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2350
3311 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2351
3359 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2351
3312 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2551 rhodecode/model/db.py:3113
3360 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2551 rhodecode/model/db.py:3144
3313 msgid "Registration disabled"
3361 msgid "Registration disabled"
3314 msgstr ""
3362 msgstr ""
3315
3363
3316 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:684
3364 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:684
3317 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:686
3365 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:686
3318 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:709
3366 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:709
3319 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:710
3367 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:710
3320 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:727
3368 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:727
3321 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:744
3369 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:744
3322 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:762
3370 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:762
3323 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:765
3371 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:765
3324 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:767
3372 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:767
3325 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:767
3373 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:767
3326 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:794
3374 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:794
3327 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:804
3375 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:804
3328 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:845
3376 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:845
3329 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:845
3377 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:845
3330 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:846
3378 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:846
3331 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:846
3379 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:846
3332 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:852
3380 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:852
3333 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:974
3381 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:974
3334 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:999
3382 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:999
3335 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2617
3383 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2617
3336 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2688
3384 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2688
3337 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2774
3385 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2774
3338 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2807
3386 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2807
3339 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2807
3387 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2807
3340 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3022
3388 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3022
3341 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3108
3389 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3108
3390 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3114
3342 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2305
3391 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2305
3343 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2297
3392 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2297
3344 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2296
3393 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2296
3345 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2300
3394 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2300
3346 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2300
3395 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2300
3347 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2351
3396 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2351
3348 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2352
3397 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2352
3349 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2552 rhodecode/model/db.py:3114
3398 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2552 rhodecode/model/db.py:3145
3350 msgid "User Registration with manual account activation"
3399 msgid "User Registration with manual account activation"
3351 msgstr ""
3400 msgstr ""
3352
3401
3353 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:685
3402 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:685
3354 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:687
3403 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:687
3355 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:710
3404 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:710
3356 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:711
3405 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:711
3357 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:728
3406 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:728
3358 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:745
3407 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:745
3359 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:763
3408 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:763
3360 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:766
3409 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:766
3361 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:768
3410 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:768
3362 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:768
3411 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:768
3363 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:795
3412 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:795
3364 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:805
3413 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:805
3365 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:846
3414 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:846
3366 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:846
3415 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:846
3367 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:847
3416 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:847
3368 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:847
3417 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:847
3369 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:853
3418 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:853
3370 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:975
3419 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:975
3371 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1000
3420 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1000
3372 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2618
3421 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2618
3373 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2689
3422 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2689
3374 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2775
3423 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2775
3375 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2808
3424 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2808
3376 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2808
3425 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2808
3377 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3023
3426 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3023
3378 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3109
3427 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3109
3428 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3115
3379 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2306
3429 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2306
3380 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2298
3430 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2298
3381 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2297
3431 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2297
3382 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2301
3432 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2301
3383 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2301
3433 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2301
3384 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2352
3434 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2352
3385 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2353
3435 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2353
3386 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2553 rhodecode/model/db.py:3115
3436 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2553 rhodecode/model/db.py:3146
3387 msgid "User Registration with automatic account activation"
3437 msgid "User Registration with automatic account activation"
3388 msgstr ""
3438 msgstr ""
3389
3439
3390 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:687
3440 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:687
3391 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:689
3441 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:689
3392 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:712
3442 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:712
3393 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:713
3443 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:713
3394 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:730
3444 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:730
3395 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:747
3445 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:747
3396 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:765
3446 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:765
3397 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:768
3447 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:768
3398 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:770
3448 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:770
3399 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:770
3449 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:770
3400 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:797
3450 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:797
3401 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:807
3451 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:807
3402 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:848
3452 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:848
3403 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:848
3453 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:848
3404 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:849
3454 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:849
3405 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:849
3455 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:849
3406 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:855
3456 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:855
3407 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:977
3457 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:977
3408 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1002
3458 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1002
3409 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2624
3459 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2624
3410 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2695
3460 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2695
3411 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2781
3461 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2781
3412 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2814
3462 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2814
3413 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2814
3463 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2814
3414 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3029
3464 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3029
3415 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3115
3465 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3115
3466 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3121
3416 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2308
3467 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2308
3417 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2300
3468 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2300
3418 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2299
3469 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2299
3419 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2303
3470 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2303
3420 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2303
3471 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2303
3421 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2358
3472 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2358
3422 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2359
3473 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2359
3423 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3121
3474 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3152
3424 #: rhodecode/model/permission.py:105
3475 #: rhodecode/model/permission.py:105
3425 msgid "Manual activation of external account"
3476 msgid "Manual activation of external account"
3426 msgstr ""
3477 msgstr ""
3427
3478
3428 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:688
3479 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:688
3429 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:690
3480 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:690
3430 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:713
3481 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:713
3431 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:714
3482 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:714
3432 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:731
3483 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:731
3433 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:748
3484 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:748
3434 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:766
3485 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:766
3435 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:769
3486 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:769
3436 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:771
3487 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:771
3437 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:771
3488 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:771
3438 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:798
3489 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:798
3439 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:808
3490 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:808
3440 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:849
3491 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:849
3441 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:849
3492 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:849
3442 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:850
3493 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:850
3443 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:850
3494 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:850
3444 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:856
3495 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:856
3445 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:978
3496 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:978
3446 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1003
3497 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1003
3447 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2625
3498 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2625
3448 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2696
3499 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2696
3449 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2782
3500 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2782
3450 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2815
3501 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2815
3451 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2815
3502 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2815
3452 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3030
3503 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3030
3453 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3116
3504 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3116
3505 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3122
3454 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2309
3506 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2309
3455 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2301
3507 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2301
3456 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2300
3508 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2300
3457 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2304
3509 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2304
3458 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2304
3510 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2304
3459 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2359
3511 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2359
3460 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2360
3512 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2360
3461 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3122
3513 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3153
3462 #: rhodecode/model/permission.py:106
3514 #: rhodecode/model/permission.py:106
3463 msgid "Automatic activation of external account"
3515 msgid "Automatic activation of external account"
3464 msgstr ""
3516 msgstr ""
3465
3517
3466 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:755
3518 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:755
3467 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:758
3519 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:758
3468 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:760
3520 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:760
3469 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:760
3521 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:760
3470 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:787
3522 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:787
3471 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:797
3523 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:797
3472 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:838
3524 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:838
3473 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:838
3525 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:838
3474 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:839
3526 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:839
3475 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:839
3527 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:839
3476 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:845
3528 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:845
3477 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:967
3529 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:967
3478 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:992
3530 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:992
3479 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2610
3531 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2610
3480 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2681
3532 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2681
3481 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2767
3533 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2767
3482 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2800
3534 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2800
3483 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2800
3535 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2800
3484 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3015
3536 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3015
3485 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3101
3537 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3101
3538 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3107
3486 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2298
3539 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2298
3487 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2290
3540 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2290
3488 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2289
3541 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2289
3489 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2293
3542 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2293
3490 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2293
3543 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2293
3491 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2344
3544 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2344
3492 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2345
3545 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2345
3493 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2545 rhodecode/model/db.py:3107
3546 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2545 rhodecode/model/db.py:3138
3494 msgid "Repository creation enabled with write permission to a repository group"
3547 msgid "Repository creation enabled with write permission to a repository group"
3495 msgstr ""
3548 msgstr ""
3496
3549
3497 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:756
3550 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:756
3498 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:759
3551 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:759
3499 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:761
3552 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:761
3500 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:761
3553 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:761
3501 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:788
3554 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:788
3502 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:798
3555 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:798
3503 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:839
3556 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:839
3504 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:839
3557 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:839
3505 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:840
3558 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:840
3506 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:840
3559 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:840
3507 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:846
3560 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:846
3508 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:968
3561 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:968
3509 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:993
3562 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:993
3510 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2611
3563 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2611
3511 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2682
3564 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2682
3512 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2768
3565 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2768
3513 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2801
3566 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2801
3514 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2801
3567 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2801
3515 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3016
3568 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3016
3516 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3102
3569 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3102
3570 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3108
3517 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2299
3571 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2299
3518 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2291
3572 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2291
3519 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2290
3573 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2290
3520 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2294
3574 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2294
3521 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2294
3575 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2294
3522 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2345
3576 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2345
3523 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2346
3577 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2346
3524 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2546 rhodecode/model/db.py:3108
3578 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2546 rhodecode/model/db.py:3139
3525 msgid "Repository creation disabled with write permission to a repository group"
3579 msgid "Repository creation disabled with write permission to a repository group"
3526 msgstr ""
3580 msgstr ""
3527
3581
3528 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:735
3582 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:735
3529 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:762
3583 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:762
3530 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:772
3584 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:772
3531 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:813
3585 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:813
3532 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:813
3586 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:813
3533 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:814
3587 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:814
3534 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:814
3588 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:814
3535 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:820
3589 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:820
3536 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:942
3590 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:942
3537 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:967
3591 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:967
3538 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2585
3592 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2585
3539 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2651
3593 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2651
3540 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2737
3594 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2737
3541 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2770
3595 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2770
3542 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2770
3596 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2770
3543 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2985
3597 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2985
3544 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3071
3598 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3071
3599 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3077
3545 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2273
3600 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2273
3546 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2265
3601 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2265
3547 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2264
3602 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2264
3548 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2268
3603 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2268
3549 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2268
3604 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2268
3550 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2319
3605 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2319
3551 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2320
3606 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2320
3552 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2520 rhodecode/model/db.py:3077
3607 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2520 rhodecode/model/db.py:3108
3553 msgid "RhodeCode Super Administrator"
3608 msgid "RhodeCode Super Administrator"
3554 msgstr ""
3609 msgstr ""
3555
3610
3556 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:810
3611 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:810
3557 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:851
3612 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:851
3558 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:851
3613 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:851
3559 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:852
3614 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:852
3560 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:852
3615 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:852
3561 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:858
3616 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:858
3562 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:980
3617 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:980
3563 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1005
3618 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1005
3564 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2627
3619 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2627
3565 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2698
3620 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2698
3566 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2784
3621 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2784
3567 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2817
3622 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2817
3568 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2817
3623 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2817
3569 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3032
3624 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3032
3570 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3118
3625 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3118
3626 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3124
3571 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2311
3627 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2311
3572 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2303
3628 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2303
3573 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2302
3629 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2302
3574 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2306
3630 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2306
3575 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2306
3631 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2306
3576 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2361
3632 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2361
3577 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2362
3633 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2362
3578 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2562 rhodecode/model/db.py:3124
3634 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2562 rhodecode/model/db.py:3155
3579 msgid "Inherit object permissions from default user disabled"
3635 msgid "Inherit object permissions from default user disabled"
3580 msgstr ""
3636 msgstr ""
3581
3637
3582 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:811
3638 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:811
3583 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:852
3639 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:852
3584 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:852
3640 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:852
3585 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:853
3641 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:853
3586 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:853
3642 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:853
3587 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:859
3643 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:859
3588 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:981
3644 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:981
3589 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1006
3645 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1006
3590 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2628
3646 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2628
3591 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2699
3647 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2699
3592 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2785
3648 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2785
3593 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2818
3649 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2818
3594 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2818
3650 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2818
3595 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3033
3651 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3033
3596 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3119
3652 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3119
3653 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3125
3597 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2312
3654 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2312
3598 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2304
3655 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2304
3599 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2303
3656 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2303
3600 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2307
3657 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2307
3601 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2307
3658 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2307
3602 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2362
3659 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2362
3603 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2363
3660 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2363
3604 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2563 rhodecode/model/db.py:3125
3661 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2563 rhodecode/model/db.py:3156
3605 msgid "Inherit object permissions from default user enabled"
3662 msgid "Inherit object permissions from default user enabled"
3606 msgstr ""
3663 msgstr ""
3607
3664
3608 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1103
3665 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1103
3609 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1107
3666 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1107
3610 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1118
3667 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1118
3611 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1120
3668 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1120
3612 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1120
3669 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1120
3613 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1137
3670 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1137
3614 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1189
3671 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1189
3672 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1195
3615 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:910
3673 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:910
3616 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:911
3674 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:911
3617 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:910
3675 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:910
3618 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:912
3676 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:912
3619 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:912
3677 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:912
3620 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:955
3678 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:955
3621 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:956
3679 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:956
3622 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1050 rhodecode/model/db.py:1195
3680 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1050 rhodecode/model/db.py:1202
3623 msgid "all"
3681 msgid "all"
3624 msgstr ""
3682 msgstr ""
3625
3683
3626 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1104
3684 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1104
3627 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1108
3685 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1108
3628 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1119
3686 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1119
3629 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1121
3687 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1121
3630 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1121
3688 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1121
3631 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1138
3689 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1138
3632 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1190
3690 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1190
3691 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1196
3633 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:911
3692 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:911
3634 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:912
3693 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:912
3635 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:911
3694 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:911
3636 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:913
3695 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:913
3637 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:913
3696 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:913
3638 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:956
3697 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:956
3639 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:957
3698 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:957
3640 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1051 rhodecode/model/db.py:1196
3699 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1051 rhodecode/model/db.py:1203
3641 msgid "http/web interface"
3700 msgid "http/web interface"
3642 msgstr ""
3701 msgstr ""
3643
3702
3644 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1105
3703 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1105
3645 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1109
3704 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1109
3646 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1120
3705 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1120
3647 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1122
3706 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1122
3648 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1122
3707 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1122
3649 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1139
3708 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1139
3650 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1191
3709 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1191
3710 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1197
3651 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:912
3711 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:912
3652 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:913
3712 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:913
3653 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:912
3713 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:912
3654 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:914
3714 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:914
3655 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:914
3715 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:914
3656 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:957
3716 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:957
3657 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:958
3717 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:958
3658 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1052 rhodecode/model/db.py:1197
3718 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1052 rhodecode/model/db.py:1204
3659 msgid "vcs (git/hg/svn protocol)"
3719 msgid "vcs (git/hg/svn protocol)"
3660 msgstr ""
3720 msgstr ""
3661
3721
3662 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1106
3722 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1106
3663 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1110
3723 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1110
3664 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1121
3724 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1121
3665 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1123
3725 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1123
3666 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1123
3726 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1123
3667 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1140
3727 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1140
3668 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1192
3728 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1192
3729 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1198
3669 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:913
3730 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:913
3670 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:914
3731 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:914
3671 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:913
3732 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:913
3672 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:915
3733 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:915
3673 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:915
3734 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:915
3674 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:958
3735 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:958
3675 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:959
3736 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:959
3676 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1053 rhodecode/model/db.py:1198
3737 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1053 rhodecode/model/db.py:1205
3677 msgid "api calls"
3738 msgid "api calls"
3678 msgstr ""
3739 msgstr ""
3679
3740
3680 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1107
3741 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1107
3681 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1111
3742 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1111
3682 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1122
3743 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1122
3683 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1124
3744 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1124
3684 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1124
3745 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1124
3685 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1141
3746 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1141
3686 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1193
3747 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1193
3748 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1199
3687 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:914
3749 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:914
3688 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:915
3750 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:915
3689 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:914
3751 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:914
3690 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:916
3752 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:916
3691 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:916
3753 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:916
3692 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:959
3754 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:959
3693 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:960
3755 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:960
3694 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1054 rhodecode/model/db.py:1199
3756 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1054 rhodecode/model/db.py:1206
3695 msgid "feed access"
3757 msgid "feed access"
3696 msgstr ""
3758 msgstr ""
3697
3759
3698 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2348
3760 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2348
3699 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2414
3761 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2414
3700 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2488
3762 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2488
3701 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2511
3763 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2511
3702 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2511
3764 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2511
3703 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2638
3765 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2638
3704 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:2729
3766 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:2729
3767 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:2735
3705 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2051
3768 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2051
3706 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2043
3769 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2043
3707 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2042
3770 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2042
3708 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2046
3771 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2046
3709 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2046
3772 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2046
3710 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2090
3773 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2090
3711 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2091
3774 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2091
3712 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2284 rhodecode/model/db.py:2735
3775 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2284 rhodecode/model/db.py:2766
3713 msgid "No parent"
3776 msgid "No parent"
3714 msgstr ""
3777 msgstr ""
3715
3778
3716 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2620
3779 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2620
3717 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2691
3780 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2691
3718 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2777
3781 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2777
3719 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2810
3782 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2810
3720 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2810
3783 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2810
3721 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3025
3784 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3025
3722 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3111
3785 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3111
3786 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3117
3723 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2354
3787 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2354
3724 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2355
3788 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2355
3725 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2555 rhodecode/model/db.py:3117
3789 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2555 rhodecode/model/db.py:3148
3726 msgid "Password reset enabled"
3790 msgid "Password reset enabled"
3727 msgstr ""
3791 msgstr ""
3728
3792
3729 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2621
3793 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2621
3730 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2692
3794 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2692
3731 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2778
3795 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2778
3732 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2811
3796 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2811
3733 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2811
3797 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2811
3734 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3026
3798 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3026
3735 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3112
3799 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3112
3800 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3118
3736 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2355
3801 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2355
3737 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2356
3802 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2356
3738 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2556 rhodecode/model/db.py:3118
3803 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2556 rhodecode/model/db.py:3149
3739 msgid "Password reset hidden"
3804 msgid "Password reset hidden"
3740 msgstr ""
3805 msgstr ""
3741
3806
3742 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2622
3807 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2622
3743 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2693
3808 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2693
3744 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2779
3809 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2779
3745 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2812
3810 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2812
3746 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2812
3811 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2812
3747 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3027
3812 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3027
3748 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3113
3813 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3113
3814 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3119
3749 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2356
3815 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2356
3750 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2357
3816 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2357
3751 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2557 rhodecode/model/db.py:3119
3817 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2557 rhodecode/model/db.py:3150
3752 msgid "Password reset disabled"
3818 msgid "Password reset disabled"
3753 msgstr ""
3819 msgstr ""
3754
3820
3755 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2668
3821 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2668
3756 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2754
3822 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2754
3757 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2787
3823 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2787
3758 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2787
3824 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2787
3759 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3002
3825 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3002
3760 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3088
3826 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3088
3761 #: rhodecode/model/db.py:3094
3827 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3094
3828 #: rhodecode/model/db.py:3125
3762 msgid "Branch no permissions"
3829 msgid "Branch no permissions"
3763 msgstr ""
3830 msgstr ""
3764
3831
3765 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2669
3832 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2669
3766 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2755
3833 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2755
3767 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2788
3834 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2788
3768 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2788
3835 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2788
3769 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3003
3836 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3003
3770 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3089
3837 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3089
3771 #: rhodecode/model/db.py:3095
3838 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3095
3839 #: rhodecode/model/db.py:3126
3772 msgid "Branch access by web merge"
3840 msgid "Branch access by web merge"
3773 msgstr ""
3841 msgstr ""
3774
3842
3775 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2670
3843 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2670
3776 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2756
3844 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2756
3777 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2789
3845 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2789
3778 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2789
3846 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2789
3779 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3004
3847 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3004
3780 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3090
3848 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3090
3781 #: rhodecode/model/db.py:3096
3849 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3096
3850 #: rhodecode/model/db.py:3127
3782 msgid "Branch access by push"
3851 msgid "Branch access by push"
3783 msgstr ""
3852 msgstr ""
3784
3853
3785 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2671
3854 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2671
3786 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2757
3855 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2757
3787 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2790
3856 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2790
3788 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2790
3857 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2790
3789 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3005
3858 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3005
3790 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3091
3859 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3091
3791 #: rhodecode/model/db.py:3097
3860 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3097
3861 #: rhodecode/model/db.py:3128
3792 msgid "Branch access by push with force"
3862 msgid "Branch access by push with force"
3793 msgstr ""
3863 msgstr ""
3794
3864
3795 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1194
3865 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1194
3796 #: rhodecode/model/db.py:1200
3866 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1200
3867 #: rhodecode/model/db.py:1207
3797 msgid "artifacts downloads"
3868 msgid "artifacts downloads"
3798 msgstr ""
3869 msgstr ""
3799
3870
3800 #: rhodecode/lib/index/whoosh.py:189
3871 #: rhodecode/lib/index/whoosh.py:189
3801 msgid "Index Type"
3872 msgid "Index Type"
3802 msgstr ""
3873 msgstr ""
3803
3874
3804 #: rhodecode/lib/index/whoosh.py:192
3875 #: rhodecode/lib/index/whoosh.py:192
3805 msgid "File Index"
3876 msgid "File Index"
3806 msgstr ""
3877 msgstr ""
3807
3878
3808 #: rhodecode/lib/index/whoosh.py:193 rhodecode/lib/index/whoosh.py:199
3879 #: rhodecode/lib/index/whoosh.py:193 rhodecode/lib/index/whoosh.py:199
3809 msgid "Indexed documents"
3880 msgid "Indexed documents"
3810 msgstr ""
3881 msgstr ""
3811
3882
3812 #: rhodecode/lib/index/whoosh.py:194 rhodecode/lib/index/whoosh.py:200
3883 #: rhodecode/lib/index/whoosh.py:194 rhodecode/lib/index/whoosh.py:200
3813 msgid "Last update"
3884 msgid "Last update"
3814 msgstr ""
3885 msgstr ""
3815
3886
3816 #: rhodecode/lib/index/whoosh.py:198
3887 #: rhodecode/lib/index/whoosh.py:198
3817 msgid "Commit index"
3888 msgid "Commit index"
3818 msgstr ""
3889 msgstr ""
3819
3890
3820 #: rhodecode/lib/vcs/backends/base.py:150
3891 #: rhodecode/lib/vcs/backends/base.py:150
3821 msgid "This pull request can be automatically merged."
3892 msgid "This pull request can be automatically merged."
3822 msgstr ""
3893 msgstr ""
3823
3894
3824 #: rhodecode/lib/vcs/backends/base.py:152
3895 #: rhodecode/lib/vcs/backends/base.py:152
3825 msgid "This pull request cannot be merged because of an unhandled exception. {exception}"
3896 msgid "This pull request cannot be merged because of an unhandled exception. {exception}"
3826 msgstr ""
3897 msgstr ""
3827
3898
3828 #: rhodecode/lib/vcs/backends/base.py:155
3899 #: rhodecode/lib/vcs/backends/base.py:155
3829 msgid "This pull request cannot be merged because of merge conflicts. {unresolved_files}"
3900 msgid "This pull request cannot be merged because of merge conflicts. {unresolved_files}"
3830 msgstr ""
3901 msgstr ""
3831
3902
3832 #: rhodecode/lib/vcs/backends/base.py:157
3903 #: rhodecode/lib/vcs/backends/base.py:157
3833 msgid "This pull request could not be merged because push to target:`{target}@{merge_commit}` failed."
3904 msgid "This pull request could not be merged because push to target:`{target}@{merge_commit}` failed."
3834 msgstr ""
3905 msgstr ""
3835
3906
3836 #: rhodecode/lib/vcs/backends/base.py:160
3907 #: rhodecode/lib/vcs/backends/base.py:160
3837 msgid "This pull request cannot be merged because the target `{target_ref.name}` is not a head."
3908 msgid "This pull request cannot be merged because the target `{target_ref.name}` is not a head."
3838 msgstr ""
3909 msgstr ""
3839
3910
3840 #: rhodecode/lib/vcs/backends/base.py:163
3911 #: rhodecode/lib/vcs/backends/base.py:163
3841 msgid "This pull request cannot be merged because the source contains more branches than the target."
3912 msgid "This pull request cannot be merged because the source contains more branches than the target."
3842 msgstr ""
3913 msgstr ""
3843
3914
3844 #: rhodecode/lib/vcs/backends/base.py:166
3915 #: rhodecode/lib/vcs/backends/base.py:166
3845 msgid "This pull request cannot be merged because the target `{target_ref.name}` has multiple heads: `{heads}`."
3916 msgid "This pull request cannot be merged because the target `{target_ref.name}` has multiple heads: `{heads}`."
3846 msgstr ""
3917 msgstr ""
3847
3918
3848 #: rhodecode/lib/vcs/backends/base.py:169
3919 #: rhodecode/lib/vcs/backends/base.py:169
3849 msgid "This pull request cannot be merged because the target repository is locked by {locked_by}."
3920 msgid "This pull request cannot be merged because the target repository is locked by {locked_by}."
3850 msgstr ""
3921 msgstr ""
3851
3922
3852 #: rhodecode/lib/vcs/backends/base.py:173
3923 #: rhodecode/lib/vcs/backends/base.py:173
3853 msgid "This pull request cannot be merged because the target reference `{target_ref.name}` is missing."
3924 msgid "This pull request cannot be merged because the target reference `{target_ref.name}` is missing."
3854 msgstr ""
3925 msgstr ""
3855
3926
3856 #: rhodecode/lib/vcs/backends/base.py:176
3927 #: rhodecode/lib/vcs/backends/base.py:176
3857 msgid "This pull request cannot be merged because the source reference `{source_ref.name}` is missing."
3928 msgid "This pull request cannot be merged because the source reference `{source_ref.name}` is missing."
3858 msgstr ""
3929 msgstr ""
3859
3930
3860 #: rhodecode/lib/vcs/backends/base.py:179
3931 #: rhodecode/lib/vcs/backends/base.py:179
3861 msgid "This pull request cannot be merged because of conflicts related to sub repositories."
3932 msgid "This pull request cannot be merged because of conflicts related to sub repositories."
3862 msgstr ""
3933 msgstr ""
3863
3934
3864 #: rhodecode/lib/vcs/backends/base.py:184
3935 #: rhodecode/lib/vcs/backends/base.py:184
3865 msgid "This pull request cannot be merged because the target or the source reference is missing."
3936 msgid "This pull request cannot be merged because the target or the source reference is missing."
3866 msgstr ""
3937 msgstr ""
3867
3938
3868 #: rhodecode/model/auth_token.py:53
3939 #: rhodecode/model/auth_token.py:53
3869 msgid "5 minutes {end_date}"
3940 msgid "5 minutes {end_date}"
3870 msgstr ""
3941 msgstr ""
3871
3942
3872 #: rhodecode/model/auth_token.py:55
3943 #: rhodecode/model/auth_token.py:55
3873 msgid "1 hour {end_date}"
3944 msgid "1 hour {end_date}"
3874 msgstr ""
3945 msgstr ""
3875
3946
3876 #: rhodecode/model/auth_token.py:57
3947 #: rhodecode/model/auth_token.py:57
3877 msgid "1 day {end_date}"
3948 msgid "1 day {end_date}"
3878 msgstr ""
3949 msgstr ""
3879
3950
3880 #: rhodecode/model/auth_token.py:59
3951 #: rhodecode/model/auth_token.py:59
3881 msgid "1 month {end_date}"
3952 msgid "1 month {end_date}"
3882 msgstr ""
3953 msgstr ""
3883
3954
3884 #: rhodecode/model/comment.py:473
3955 #: rhodecode/model/comment.py:485
3885 msgid "made a comment"
3956 msgid "made a comment"
3886 msgstr ""
3957 msgstr ""
3887
3958
3888 #: rhodecode/model/comment.py:474
3959 #: rhodecode/model/comment.py:486
3889 msgid "Show it now"
3960 msgid "Show it now"
3890 msgstr ""
3961 msgstr ""
3891
3962
3963 #: rhodecode/model/db.py:1213
3964 msgid "Token for all actions."
3965 msgstr ""
3966
3967 #: rhodecode/model/db.py:1214
3968 msgid "Token to access RhodeCode pages via web interface without login using `api_access_controllers_whitelist` functionality."
3969 msgstr ""
3970
3971 #: rhodecode/model/db.py:1216
3972 msgid "Token to interact over git/hg/svn protocols. Requires auth_token authentication plugin to be active. <br/>Such Token should be used then instead of a password to interact with a repository, and additionally can be limited to single repository using repo scope."
3973 msgstr ""
3974
3975 #: rhodecode/model/db.py:1221
3976 msgid "Token limited to api calls."
3977 msgstr ""
3978
3979 #: rhodecode/model/db.py:1222
3980 msgid "Token to read RSS/ATOM feed."
3981 msgstr ""
3982
3983 #: rhodecode/model/db.py:1223
3984 msgid "Token for artifacts downloads."
3985 msgstr ""
3986
3892 #: rhodecode/model/forms.py:88
3987 #: rhodecode/model/forms.py:88
3893 msgid "Please enter a login"
3988 msgid "Please enter a login"
3894 msgstr ""
3989 msgstr ""
3895
3990
3896 #: rhodecode/model/forms.py:89
3991 #: rhodecode/model/forms.py:89
3897 #, python-format
3992 #, python-format
3898 msgid "Enter a value %(min)i characters long or more"
3993 msgid "Enter a value %(min)i characters long or more"
3899 msgstr ""
3994 msgstr ""
3900
3995
3901 #: rhodecode/model/forms.py:99
3996 #: rhodecode/model/forms.py:99
3902 msgid "Please enter a password"
3997 msgid "Please enter a password"
3903 msgstr ""
3998 msgstr ""
3904
3999
3905 #: rhodecode/model/forms.py:100
4000 #: rhodecode/model/forms.py:100
3906 #, python-format
4001 #, python-format
3907 msgid "Enter %(min)i characters or more"
4002 msgid "Enter %(min)i characters or more"
3908 msgstr ""
4003 msgstr ""
3909
4004
3910 #: rhodecode/model/notification.py:246
4005 #: rhodecode/model/notification.py:248
3911 #, python-format
4006 #, python-format
3912 msgid "%(user)s commented on commit %(date_or_age)s"
4007 msgid "%(user)s commented on commit %(date_or_age)s"
3913 msgstr ""
4008 msgstr ""
3914
4009
3915 #: rhodecode/model/notification.py:247
4010 #: rhodecode/model/notification.py:249
3916 #, python-format
4011 #, python-format
3917 msgid "%(user)s commented on commit at %(date_or_age)s"
4012 msgid "%(user)s commented on commit at %(date_or_age)s"
3918 msgstr ""
4013 msgstr ""
3919
4014
3920 #: rhodecode/model/notification.py:250
4015 #: rhodecode/model/notification.py:252
3921 #, python-format
4016 #, python-format
3922 msgid "%(user)s sent message %(date_or_age)s"
4017 msgid "%(user)s sent message %(date_or_age)s"
3923 msgstr ""
4018 msgstr ""
3924
4019
3925 #: rhodecode/model/notification.py:251
4020 #: rhodecode/model/notification.py:253
3926 #, python-format
4021 #, python-format
3927 msgid "%(user)s sent message at %(date_or_age)s"
4022 msgid "%(user)s sent message at %(date_or_age)s"
3928 msgstr ""
4023 msgstr ""
3929
4024
3930 #: rhodecode/model/notification.py:254
4025 #: rhodecode/model/notification.py:256
3931 #, python-format
4026 #, python-format
3932 msgid "%(user)s mentioned you %(date_or_age)s"
4027 msgid "%(user)s mentioned you %(date_or_age)s"
3933 msgstr ""
4028 msgstr ""
3934
4029
3935 #: rhodecode/model/notification.py:255
4030 #: rhodecode/model/notification.py:257
3936 #, python-format
4031 #, python-format
3937 msgid "%(user)s mentioned you at %(date_or_age)s"
4032 msgid "%(user)s mentioned you at %(date_or_age)s"
3938 msgstr ""
4033 msgstr ""
3939
4034
3940 #: rhodecode/model/notification.py:258
4035 #: rhodecode/model/notification.py:260
3941 #, python-format
4036 #, python-format
3942 msgid "%(user)s registered in RhodeCode %(date_or_age)s"
4037 msgid "%(user)s registered in RhodeCode %(date_or_age)s"
3943 msgstr ""
4038 msgstr ""
3944
4039
3945 #: rhodecode/model/notification.py:259
4040 #: rhodecode/model/notification.py:261
3946 #, python-format
4041 #, python-format
3947 msgid "%(user)s registered in RhodeCode at %(date_or_age)s"
4042 msgid "%(user)s registered in RhodeCode at %(date_or_age)s"
3948 msgstr ""
4043 msgstr ""
3949
4044
3950 #: rhodecode/model/notification.py:262
4045 #: rhodecode/model/notification.py:264
3951 #, python-format
4046 #, python-format
3952 msgid "%(user)s opened new pull request %(date_or_age)s"
4047 msgid "%(user)s opened new pull request %(date_or_age)s"
3953 msgstr ""
4048 msgstr ""
3954
4049
3955 #: rhodecode/model/notification.py:263
4050 #: rhodecode/model/notification.py:265
3956 #, python-format
4051 #, python-format
3957 msgid "%(user)s opened new pull request at %(date_or_age)s"
4052 msgid "%(user)s opened new pull request at %(date_or_age)s"
3958 msgstr ""
4053 msgstr ""
3959
4054
3960 #: rhodecode/model/notification.py:266
4055 #: rhodecode/model/notification.py:268
3961 #, python-format
4056 #, python-format
3962 msgid "%(user)s updated pull request %(date_or_age)s"
4057 msgid "%(user)s updated pull request %(date_or_age)s"
3963 msgstr ""
4058 msgstr ""
3964
4059
3965 #: rhodecode/model/notification.py:267
4060 #: rhodecode/model/notification.py:269
3966 #, python-format
4061 #, python-format
3967 msgid "%(user)s updated pull request at %(date_or_age)s"
4062 msgid "%(user)s updated pull request at %(date_or_age)s"
3968 msgstr ""
4063 msgstr ""
3969
4064
3970 #: rhodecode/model/notification.py:270
4065 #: rhodecode/model/notification.py:272
3971 #, python-format
4066 #, python-format
3972 msgid "%(user)s commented on pull request %(date_or_age)s"
4067 msgid "%(user)s commented on pull request %(date_or_age)s"
3973 msgstr ""
4068 msgstr ""
3974
4069
3975 #: rhodecode/model/notification.py:271
4070 #: rhodecode/model/notification.py:273
3976 #, python-format
4071 #, python-format
3977 msgid "%(user)s commented on pull request at %(date_or_age)s"
4072 msgid "%(user)s commented on pull request at %(date_or_age)s"
3978 msgstr ""
4073 msgstr ""
3979
4074
3980 #: rhodecode/model/permission.py:71 rhodecode/model/permission.py:77
4075 #: rhodecode/model/permission.py:71 rhodecode/model/permission.py:77
3981 #: rhodecode/model/permission.py:83
4076 #: rhodecode/model/permission.py:83
3982 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:11
4077 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:11
3983 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:207
4078 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
3984 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:11
4079 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:11
3985 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:15
4080 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:15
3986 msgid "None"
4081 msgid "None"
3987 msgstr ""
4082 msgstr ""
3988
4083
3989 #: rhodecode/model/permission.py:72 rhodecode/model/permission.py:78
4084 #: rhodecode/model/permission.py:72 rhodecode/model/permission.py:78
3990 #: rhodecode/model/permission.py:84
4085 #: rhodecode/model/permission.py:84
3991 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:12
4086 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:12
3992 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:12
4087 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:12
3993 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:16
4088 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:16
3994 msgid "Read"
4089 msgid "Read"
3995 msgstr ""
4090 msgstr ""
3996
4091
3997 #: rhodecode/model/permission.py:73 rhodecode/model/permission.py:79
4092 #: rhodecode/model/permission.py:73 rhodecode/model/permission.py:79
3998 #: rhodecode/model/permission.py:85
4093 #: rhodecode/model/permission.py:85
3999 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:13
4094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:13
4000 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:13
4095 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:13
4001 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:17
4096 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:17
4002 #: rhodecode/templates/changeset/changeset_file_comment.mako:272
4097 #: rhodecode/templates/changeset/changeset_file_comment.mako:337
4003 #: rhodecode/templates/changeset/changeset_file_comment.mako:323
4098 #: rhodecode/templates/changeset/changeset_file_comment.mako:388
4004 #: rhodecode/templates/data_table/_dt_elements.mako:450
4099 #: rhodecode/templates/data_table/_dt_elements.mako:450
4005 msgid "Write"
4100 msgid "Write"
4006 msgstr ""
4101 msgstr ""
4007
4102
4008 #: rhodecode/model/permission.py:74 rhodecode/model/permission.py:80
4103 #: rhodecode/model/permission.py:74 rhodecode/model/permission.py:80
4009 #: rhodecode/model/permission.py:86
4104 #: rhodecode/model/permission.py:86
4010 #: rhodecode/templates/admin/auth/plugin_settings.mako:12
4105 #: rhodecode/templates/admin/auth/plugin_settings.mako:12
4011 #: rhodecode/templates/admin/defaults/defaults.mako:12
4106 #: rhodecode/templates/admin/defaults/defaults.mako:12
4012 #: rhodecode/templates/admin/integrations/base.mako:21
4107 #: rhodecode/templates/admin/integrations/base.mako:21
4013 #: rhodecode/templates/admin/integrations/form.mako:15
4108 #: rhodecode/templates/admin/integrations/form.mako:15
4014 #: rhodecode/templates/admin/integrations/form.mako:28
4109 #: rhodecode/templates/admin/integrations/form.mako:28
4015 #: rhodecode/templates/admin/integrations/global.mako:12
4110 #: rhodecode/templates/admin/integrations/global.mako:12
4016 #: rhodecode/templates/admin/integrations/list.mako:8
4111 #: rhodecode/templates/admin/integrations/list.mako:8
4017 #: rhodecode/templates/admin/integrations/list.mako:14
4112 #: rhodecode/templates/admin/integrations/list.mako:14
4018 #: rhodecode/templates/admin/integrations/new.mako:11
4113 #: rhodecode/templates/admin/integrations/new.mako:11
4019 #: rhodecode/templates/admin/permissions/permissions.mako:12
4114 #: rhodecode/templates/admin/permissions/permissions.mako:12
4020 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:12
4115 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:12
4021 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:14
4116 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:14
4022 #: rhodecode/templates/admin/repos/repo_add.mako:13
4117 #: rhodecode/templates/admin/repos/repo_add.mako:13
4023 #: rhodecode/templates/admin/repos/repo_add.mako:17
4118 #: rhodecode/templates/admin/repos/repo_add.mako:17
4024 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:14
4119 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:14
4025 #: rhodecode/templates/admin/settings/settings.mako:12
4120 #: rhodecode/templates/admin/settings/settings.mako:12
4026 #: rhodecode/templates/admin/user_groups/user_group_add.mako:11
4121 #: rhodecode/templates/admin/user_groups/user_group_add.mako:11
4027 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:12
4122 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:12
4028 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:18
4123 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:18
4029 #: rhodecode/templates/admin/users/user_add.mako:11
4124 #: rhodecode/templates/admin/users/user_add.mako:11
4030 #: rhodecode/templates/admin/users/user_edit.mako:12
4125 #: rhodecode/templates/admin/users/user_edit.mako:12
4031 #: rhodecode/templates/base/base.mako:832
4126 #: rhodecode/templates/base/base.mako:839
4032 msgid "Admin"
4127 msgid "Admin"
4033 msgstr ""
4128 msgstr ""
4034
4129
4035 #: rhodecode/model/permission.py:89
4130 #: rhodecode/model/permission.py:89
4036 msgid "Protected/No Access"
4131 msgid "Protected/No Access"
4037 msgstr ""
4132 msgstr ""
4038
4133
4039 #: rhodecode/model/permission.py:90
4134 #: rhodecode/model/permission.py:90
4040 msgid "Web merge"
4135 msgid "Web merge"
4041 msgstr ""
4136 msgstr ""
4042
4137
4043 #: rhodecode/model/permission.py:91
4138 #: rhodecode/model/permission.py:91
4044 msgid "Push"
4139 msgid "Push"
4045 msgstr ""
4140 msgstr ""
4046
4141
4047 #: rhodecode/model/permission.py:92
4142 #: rhodecode/model/permission.py:92
4048 msgid "Force Push"
4143 msgid "Force Push"
4049 msgstr ""
4144 msgstr ""
4050
4145
4051 #: rhodecode/model/permission.py:95 rhodecode/model/permission.py:109
4146 #: rhodecode/model/permission.py:95 rhodecode/model/permission.py:109
4052 #: rhodecode/model/permission.py:113 rhodecode/model/permission.py:117
4147 #: rhodecode/model/permission.py:113 rhodecode/model/permission.py:117
4053 #: rhodecode/model/permission.py:121 rhodecode/model/permission.py:125
4148 #: rhodecode/model/permission.py:121 rhodecode/model/permission.py:125
4054 #: rhodecode/model/permission.py:129
4149 #: rhodecode/model/permission.py:129
4055 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:27
4150 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:27
4056 msgid "Disabled"
4151 msgid "Disabled"
4057 msgstr ""
4152 msgstr ""
4058
4153
4059 #: rhodecode/model/permission.py:96
4154 #: rhodecode/model/permission.py:96
4060 msgid "Allowed with manual account activation"
4155 msgid "Allowed with manual account activation"
4061 msgstr ""
4156 msgstr ""
4062
4157
4063 #: rhodecode/model/permission.py:97
4158 #: rhodecode/model/permission.py:97
4064 msgid "Allowed with automatic account activation"
4159 msgid "Allowed with automatic account activation"
4065 msgstr ""
4160 msgstr ""
4066
4161
4067 #: rhodecode/model/permission.py:100
4162 #: rhodecode/model/permission.py:100
4068 msgid "Allow password recovery"
4163 msgid "Allow password recovery"
4069 msgstr ""
4164 msgstr ""
4070
4165
4071 #: rhodecode/model/permission.py:101
4166 #: rhodecode/model/permission.py:101
4072 msgid "Hide password recovery link"
4167 msgid "Hide password recovery link"
4073 msgstr ""
4168 msgstr ""
4074
4169
4075 #: rhodecode/model/permission.py:102
4170 #: rhodecode/model/permission.py:102
4076 msgid "Disable password recovery"
4171 msgid "Disable password recovery"
4077 msgstr ""
4172 msgstr ""
4078
4173
4079 #: rhodecode/model/pull_request.py:215
4174 #: rhodecode/model/pull_request.py:215
4080 msgid "Pull request update successful."
4175 msgid "Pull request update successful."
4081 msgstr ""
4176 msgstr ""
4082
4177
4083 #: rhodecode/model/pull_request.py:217
4178 #: rhodecode/model/pull_request.py:217
4084 msgid "Pull request update failed because of an unknown error."
4179 msgid "Pull request update failed because of an unknown error."
4085 msgstr ""
4180 msgstr ""
4086
4181
4087 #: rhodecode/model/pull_request.py:219
4182 #: rhodecode/model/pull_request.py:219
4088 msgid "No update needed because the source and target have not changed."
4183 msgid "No update needed because the source and target have not changed."
4089 msgstr ""
4184 msgstr ""
4090
4185
4091 #: rhodecode/model/pull_request.py:221
4186 #: rhodecode/model/pull_request.py:221
4092 msgid "Pull request cannot be updated because the reference type is not supported for an update. Only Branch, Tag or Bookmark is allowed."
4187 msgid "Pull request cannot be updated because the reference type is not supported for an update. Only Branch, Tag or Bookmark is allowed."
4093 msgstr ""
4188 msgstr ""
4094
4189
4095 #: rhodecode/model/pull_request.py:224
4190 #: rhodecode/model/pull_request.py:224
4096 msgid "This pull request cannot be updated because the target reference is missing."
4191 msgid "This pull request cannot be updated because the target reference is missing."
4097 msgstr ""
4192 msgstr ""
4098
4193
4099 #: rhodecode/model/pull_request.py:227
4194 #: rhodecode/model/pull_request.py:227
4100 msgid "This pull request cannot be updated because the source reference is missing."
4195 msgid "This pull request cannot be updated because the source reference is missing."
4101 msgstr ""
4196 msgstr ""
4102
4197
4103 #: rhodecode/model/pull_request.py:1518
4198 #: rhodecode/model/pull_request.py:1518
4104 msgid "Server-side pull request merging is disabled."
4199 msgid "Server-side pull request merging is disabled."
4105 msgstr ""
4200 msgstr ""
4106
4201
4107 #: rhodecode/model/pull_request.py:1521
4202 #: rhodecode/model/pull_request.py:1521
4108 msgid "This pull request is closed."
4203 msgid "This pull request is closed."
4109 msgstr ""
4204 msgstr ""
4110
4205
4111 #: rhodecode/model/pull_request.py:1535
4206 #: rhodecode/model/pull_request.py:1535
4112 msgid "Pull request merging is not supported."
4207 msgid "Pull request merging is not supported."
4113 msgstr ""
4208 msgstr ""
4114
4209
4115 #: rhodecode/model/pull_request.py:1552
4210 #: rhodecode/model/pull_request.py:1552
4116 msgid "Target repository large files support is disabled."
4211 msgid "Target repository large files support is disabled."
4117 msgstr ""
4212 msgstr ""
4118
4213
4119 #: rhodecode/model/pull_request.py:1555
4214 #: rhodecode/model/pull_request.py:1555
4120 msgid "Source repository large files support is disabled."
4215 msgid "Source repository large files support is disabled."
4121 msgstr ""
4216 msgstr ""
4122
4217
4123 #: rhodecode/model/pull_request.py:1739 rhodecode/model/scm.py:1004
4218 #: rhodecode/model/pull_request.py:1739 rhodecode/model/scm.py:1004
4124 #: rhodecode/templates/admin/my_account/my_account.mako:32
4219 #: rhodecode/templates/admin/my_account/my_account.mako:32
4125 #: rhodecode/templates/base/base.mako:629
4220 #: rhodecode/templates/base/base.mako:636
4126 #: rhodecode/templates/summary/components.mako:46
4221 #: rhodecode/templates/summary/components.mako:46
4127 msgid "Bookmarks"
4222 msgid "Bookmarks"
4128 msgstr ""
4223 msgstr ""
4129
4224
4130 #: rhodecode/model/pull_request.py:1744
4225 #: rhodecode/model/pull_request.py:1744
4131 msgid "Commit IDs"
4226 msgid "Commit IDs"
4132 msgstr ""
4227 msgstr ""
4133
4228
4134 #: rhodecode/model/pull_request.py:1747
4229 #: rhodecode/model/pull_request.py:1747
4135 #: rhodecode/templates/summary/components.mako:22
4230 #: rhodecode/templates/summary/components.mako:22
4136 msgid "Closed Branches"
4231 msgid "Closed Branches"
4137 msgstr ""
4232 msgstr ""
4138
4233
4139 #: rhodecode/model/pull_request.py:1929
4234 #: rhodecode/model/pull_request.py:1929
4140 msgid "WIP marker in title prevents from accidental merge."
4235 msgid "WIP marker in title prevents from accidental merge."
4141 msgstr ""
4236 msgstr ""
4142
4237
4143 #: rhodecode/model/pull_request.py:1939
4238 #: rhodecode/model/pull_request.py:1939
4144 msgid "User `{}` not allowed to perform merge."
4239 msgid "User `{}` not allowed to perform merge."
4145 msgstr ""
4240 msgstr ""
4146
4241
4147 #: rhodecode/model/pull_request.py:1957
4242 #: rhodecode/model/pull_request.py:1957
4148 msgid "Target branch `{}` changes rejected by rule {}."
4243 msgid "Target branch `{}` changes rejected by rule {}."
4149 msgstr ""
4244 msgstr ""
4150
4245
4151 #: rhodecode/model/pull_request.py:1971
4246 #: rhodecode/model/pull_request.py:1971
4152 msgid "Pull request reviewer approval is pending."
4247 msgid "Pull request reviewer approval is pending."
4153 msgstr ""
4248 msgstr ""
4154
4249
4155 #: rhodecode/model/pull_request.py:1985
4250 #: rhodecode/model/pull_request.py:1985
4156 msgid "Cannot merge, {} TODO still not resolved."
4251 msgid "Cannot merge, {} TODO still not resolved."
4157 msgstr ""
4252 msgstr ""
4158
4253
4159 #: rhodecode/model/pull_request.py:1988
4254 #: rhodecode/model/pull_request.py:1988
4160 msgid "Cannot merge, {} TODOs still not resolved."
4255 msgid "Cannot merge, {} TODOs still not resolved."
4161 msgstr ""
4256 msgstr ""
4162
4257
4163 #: rhodecode/model/pull_request.py:2043
4258 #: rhodecode/model/pull_request.py:2043
4164 msgid "Merge strategy: rebase"
4259 msgid "Merge strategy: rebase"
4165 msgstr ""
4260 msgstr ""
4166
4261
4167 #: rhodecode/model/pull_request.py:2048
4262 #: rhodecode/model/pull_request.py:2048
4168 msgid "Merge strategy: explicit merge commit"
4263 msgid "Merge strategy: explicit merge commit"
4169 msgstr ""
4264 msgstr ""
4170
4265
4171 #: rhodecode/model/pull_request.py:2056
4266 #: rhodecode/model/pull_request.py:2056
4172 msgid "Source branch will be closed after merge."
4267 msgid "Source branch will be closed before the merge."
4173 msgstr ""
4268 msgstr ""
4174
4269
4175 #: rhodecode/model/pull_request.py:2058
4270 #: rhodecode/model/pull_request.py:2058
4176 msgid "Source branch will be deleted after merge."
4271 msgid "Source branch will be deleted after the merge."
4177 msgstr ""
4272 msgstr ""
4178
4273
4179 #: rhodecode/model/validators.py:93 rhodecode/model/validators.py:94
4274 #: rhodecode/model/validators.py:93 rhodecode/model/validators.py:94
4180 msgid "Value cannot be an empty list"
4275 msgid "Value cannot be an empty list"
4181 msgstr ""
4276 msgstr ""
4182
4277
4183 #: rhodecode/model/validators.py:140
4278 #: rhodecode/model/validators.py:140
4184 msgid "Pattern already exists"
4279 msgid "Pattern already exists"
4185 msgstr ""
4280 msgstr ""
4186
4281
4187 #: rhodecode/model/validators.py:161
4282 #: rhodecode/model/validators.py:161
4188 #, python-format
4283 #, python-format
4189 msgid "Username \"%(username)s\" already exists"
4284 msgid "Username \"%(username)s\" already exists"
4190 msgstr ""
4285 msgstr ""
4191
4286
4192 #: rhodecode/model/validators.py:163
4287 #: rhodecode/model/validators.py:163
4193 #, python-format
4288 #, python-format
4194 msgid "Username \"%(username)s\" is forbidden"
4289 msgid "Username \"%(username)s\" is forbidden"
4195 msgstr ""
4290 msgstr ""
4196
4291
4197 #: rhodecode/model/validators.py:165
4292 #: rhodecode/model/validators.py:165
4198 #: rhodecode/model/validation_schema/schemas/user_schema.py:71
4293 #: rhodecode/model/validation_schema/schemas/user_schema.py:71
4199 msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character or underscore"
4294 msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character or underscore"
4200 msgstr ""
4295 msgstr ""
4201
4296
4202 #: rhodecode/model/validators.py:196
4297 #: rhodecode/model/validators.py:196
4203 #, python-format
4298 #, python-format
4204 msgid "Username %(username)s is not valid"
4299 msgid "Username %(username)s is not valid"
4205 msgstr ""
4300 msgstr ""
4206
4301
4207 #: rhodecode/model/validators.py:197
4302 #: rhodecode/model/validators.py:197
4208 #, python-format
4303 #, python-format
4209 msgid "Username %(username)s is disabled"
4304 msgid "Username %(username)s is disabled"
4210 msgstr ""
4305 msgstr ""
4211
4306
4212 #: rhodecode/model/validators.py:222
4307 #: rhodecode/model/validators.py:222
4213 msgid "Invalid user group name"
4308 msgid "Invalid user group name"
4214 msgstr ""
4309 msgstr ""
4215
4310
4216 #: rhodecode/model/validators.py:223
4311 #: rhodecode/model/validators.py:223
4217 #, python-format
4312 #, python-format
4218 msgid "User group `%(usergroup)s` already exists"
4313 msgid "User group `%(usergroup)s` already exists"
4219 msgstr ""
4314 msgstr ""
4220
4315
4221 #: rhodecode/model/validators.py:225
4316 #: rhodecode/model/validators.py:225
4222 msgid "user group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
4317 msgid "user group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
4223 msgstr ""
4318 msgstr ""
4224
4319
4225 #: rhodecode/model/validators.py:265
4320 #: rhodecode/model/validators.py:265
4226 msgid "Cannot assign this group as parent"
4321 msgid "Cannot assign this group as parent"
4227 msgstr ""
4322 msgstr ""
4228
4323
4229 #: rhodecode/model/validators.py:266
4324 #: rhodecode/model/validators.py:266
4230 #, python-format
4325 #, python-format
4231 msgid "Group \"%(group_name)s\" already exists"
4326 msgid "Group \"%(group_name)s\" already exists"
4232 msgstr ""
4327 msgstr ""
4233
4328
4234 #: rhodecode/model/validators.py:267
4329 #: rhodecode/model/validators.py:267
4235 #, python-format
4330 #, python-format
4236 msgid "Repository with name \"%(group_name)s\" already exists"
4331 msgid "Repository with name \"%(group_name)s\" already exists"
4237 msgstr ""
4332 msgstr ""
4238
4333
4239 #: rhodecode/model/validators.py:269
4334 #: rhodecode/model/validators.py:269
4240 msgid "no permission to store repository groupin this location"
4335 msgid "no permission to store repository groupin this location"
4241 msgstr ""
4336 msgstr ""
4242
4337
4243 #: rhodecode/model/validators.py:271
4338 #: rhodecode/model/validators.py:271
4244 msgid "no permission to store repository group in root location"
4339 msgid "no permission to store repository group in root location"
4245 msgstr ""
4340 msgstr ""
4246
4341
4247 #: rhodecode/model/validators.py:388
4342 #: rhodecode/model/validators.py:388
4248 msgid "Invalid characters (non-ascii) in password"
4343 msgid "Invalid characters (non-ascii) in password"
4249 msgstr ""
4344 msgstr ""
4250
4345
4251 #: rhodecode/model/validators.py:407
4346 #: rhodecode/model/validators.py:407
4252 msgid "Passwords do not match"
4347 msgid "Passwords do not match"
4253 msgstr ""
4348 msgstr ""
4254
4349
4255 #: rhodecode/model/validators.py:427
4350 #: rhodecode/model/validators.py:427
4256 msgid "invalid password"
4351 msgid "invalid password"
4257 msgstr ""
4352 msgstr ""
4258
4353
4259 #: rhodecode/model/validators.py:428
4354 #: rhodecode/model/validators.py:428
4260 msgid "invalid user name"
4355 msgid "invalid user name"
4261 msgstr ""
4356 msgstr ""
4262
4357
4263 #: rhodecode/model/validators.py:429
4358 #: rhodecode/model/validators.py:429
4264 msgid "Your account is disabled"
4359 msgid "Your account is disabled"
4265 msgstr ""
4360 msgstr ""
4266
4361
4267 #: rhodecode/model/validators.py:465
4362 #: rhodecode/model/validators.py:465
4268 #, python-format
4363 #, python-format
4269 msgid "Repository name %(repo)s is disallowed"
4364 msgid "Repository name %(repo)s is disallowed"
4270 msgstr ""
4365 msgstr ""
4271
4366
4272 #: rhodecode/model/validators.py:467
4367 #: rhodecode/model/validators.py:467
4273 #, python-format
4368 #, python-format
4274 msgid "Repository with name %(repo)s already exists"
4369 msgid "Repository with name %(repo)s already exists"
4275 msgstr ""
4370 msgstr ""
4276
4371
4277 #: rhodecode/model/validators.py:469
4372 #: rhodecode/model/validators.py:469
4278 #, python-format
4373 #, python-format
4279 msgid "Repository group with name \"%(repo)s\" already exists"
4374 msgid "Repository group with name \"%(repo)s\" already exists"
4280 msgstr ""
4375 msgstr ""
4281
4376
4282 #: rhodecode/model/validators.py:472
4377 #: rhodecode/model/validators.py:472
4283 #, python-format
4378 #, python-format
4284 msgid "Repository with name %(repo)s exists in group \"%(group)s\""
4379 msgid "Repository with name %(repo)s exists in group \"%(group)s\""
4285 msgstr ""
4380 msgstr ""
4286
4381
4287 #: rhodecode/model/validators.py:474
4382 #: rhodecode/model/validators.py:474
4288 #, python-format
4383 #, python-format
4289 msgid "Repository group with name \"%(repo)s\" exists in group \"%(group)s\""
4384 msgid "Repository group with name \"%(repo)s\" exists in group \"%(group)s\""
4290 msgstr ""
4385 msgstr ""
4291
4386
4292 #: rhodecode/model/validators.py:567
4387 #: rhodecode/model/validators.py:567
4293 #: rhodecode/model/validation_schema/schemas/repo_schema.py:230
4388 #: rhodecode/model/validation_schema/schemas/repo_schema.py:236
4294 msgid "Repository name cannot end with .git"
4389 msgid "Repository name cannot end with .git"
4295 msgstr ""
4390 msgstr ""
4296
4391
4297 #: rhodecode/model/validators.py:627
4392 #: rhodecode/model/validators.py:627
4298 #, python-format
4393 #, python-format
4299 msgid "invalid clone url for %(rtype)s repository"
4394 msgid "invalid clone url for %(rtype)s repository"
4300 msgstr ""
4395 msgstr ""
4301
4396
4302 #: rhodecode/model/validators.py:628
4397 #: rhodecode/model/validators.py:628
4303 #, python-format
4398 #, python-format
4304 msgid "Invalid clone url, provide a valid clone url starting with one of %(allowed_prefixes)s"
4399 msgid "Invalid clone url, provide a valid clone url starting with one of %(allowed_prefixes)s"
4305 msgstr ""
4400 msgstr ""
4306
4401
4307 #: rhodecode/model/validators.py:660
4402 #: rhodecode/model/validators.py:660
4308 msgid "Fork have to be the same type as parent"
4403 msgid "Fork have to be the same type as parent"
4309 msgstr ""
4404 msgstr ""
4310
4405
4311 #: rhodecode/model/validators.py:677
4406 #: rhodecode/model/validators.py:677
4312 msgid "You do not have the permission to create repositories in this group."
4407 msgid "You do not have the permission to create repositories in this group."
4313 msgstr ""
4408 msgstr ""
4314
4409
4315 #: rhodecode/model/validators.py:680
4410 #: rhodecode/model/validators.py:680
4316 #: rhodecode/model/validation_schema/schemas/repo_schema.py:136
4411 #: rhodecode/model/validation_schema/schemas/repo_schema.py:136
4317 msgid "You do not have the permission to store repositories in the root location."
4412 msgid "You do not have the permission to store repositories in the root location."
4318 msgstr ""
4413 msgstr ""
4319
4414
4320 #: rhodecode/model/validators.py:740
4415 #: rhodecode/model/validators.py:740
4321 msgid "This username or user group name is not valid"
4416 msgid "This username or user group name is not valid"
4322 msgstr ""
4417 msgstr ""
4323
4418
4324 #: rhodecode/model/validators.py:853
4419 #: rhodecode/model/validators.py:853
4325 msgid "This is not a valid path"
4420 msgid "This is not a valid path"
4326 msgstr ""
4421 msgstr ""
4327
4422
4328 #: rhodecode/model/validators.py:871
4423 #: rhodecode/model/validators.py:871
4329 #: rhodecode/model/validation_schema/schemas/user_schema.py:144
4424 #: rhodecode/model/validation_schema/schemas/user_schema.py:144
4330 #: rhodecode/model/validation_schema/schemas/user_schema.py:148
4425 #: rhodecode/model/validation_schema/schemas/user_schema.py:148
4331 msgid "This e-mail address is already taken"
4426 msgid "This e-mail address is already taken"
4332 msgstr ""
4427 msgstr ""
4333
4428
4334 #: rhodecode/model/validators.py:893
4429 #: rhodecode/model/validators.py:893
4335 #, python-format
4430 #, python-format
4336 msgid "e-mail \"%(email)s\" does not exist."
4431 msgid "e-mail \"%(email)s\" does not exist."
4337 msgstr ""
4432 msgstr ""
4338
4433
4339 #: rhodecode/model/validators.py:914
4434 #: rhodecode/model/validators.py:914
4340 #, python-format
4435 #, python-format
4341 msgid "Revisions %(revs)s are already part of pull request or have set status"
4436 msgid "Revisions %(revs)s are already part of pull request or have set status"
4342 msgstr ""
4437 msgstr ""
4343
4438
4344 #: rhodecode/model/validators.py:947
4439 #: rhodecode/model/validators.py:947
4345 #: rhodecode/model/validation_schema/validators.py:41
4440 #: rhodecode/model/validation_schema/validators.py:41
4346 #: rhodecode/model/validation_schema/validators.py:54
4441 #: rhodecode/model/validation_schema/validators.py:54
4347 msgid "Please enter a valid IPv4 or IpV6 address"
4442 msgid "Please enter a valid IPv4 or IpV6 address"
4348 msgstr ""
4443 msgstr ""
4349
4444
4350 #: rhodecode/model/validators.py:948
4445 #: rhodecode/model/validators.py:948
4351 #, python-format
4446 #, python-format
4352 msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
4447 msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
4353 msgstr ""
4448 msgstr ""
4354
4449
4355 #: rhodecode/model/validators.py:976
4450 #: rhodecode/model/validators.py:976
4356 msgid "Key name can only consist of letters, underscore, dash or numbers"
4451 msgid "Key name can only consist of letters, underscore, dash or numbers"
4357 msgstr ""
4452 msgstr ""
4358
4453
4359 #: rhodecode/model/validators.py:993
4454 #: rhodecode/model/validators.py:993
4360 #, python-format
4455 #, python-format
4361 msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name"
4456 msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name"
4362 msgstr ""
4457 msgstr ""
4363
4458
4364 #: rhodecode/model/validators.py:996
4459 #: rhodecode/model/validators.py:996
4365 #, python-format
4460 #, python-format
4366 msgid "The plugin \"%(plugin_id)s\" is missing an includeme function."
4461 msgid "The plugin \"%(plugin_id)s\" is missing an includeme function."
4367 msgstr ""
4462 msgstr ""
4368
4463
4369 #: rhodecode/model/validators.py:999
4464 #: rhodecode/model/validators.py:999
4370 #, python-format
4465 #, python-format
4371 msgid "Can not load plugin \"%(plugin_id)s\""
4466 msgid "Can not load plugin \"%(plugin_id)s\""
4372 msgstr ""
4467 msgstr ""
4373
4468
4374 #: rhodecode/model/validators.py:1001
4469 #: rhodecode/model/validators.py:1001
4375 #, python-format
4470 #, python-format
4376 msgid "No plugin available with ID \"%(plugin_id)s\""
4471 msgid "No plugin available with ID \"%(plugin_id)s\""
4377 msgstr ""
4472 msgstr ""
4378
4473
4379 #: rhodecode/model/validators.py:1069
4474 #: rhodecode/model/validators.py:1069
4380 msgid "Url must start with http or /"
4475 msgid "Url must start with http or /"
4381 msgstr ""
4476 msgstr ""
4382
4477
4383 #: rhodecode/model/validation_schema/validators.py:62
4478 #: rhodecode/model/validation_schema/validators.py:62
4384 msgid "Invalid glob pattern"
4479 msgid "Invalid glob pattern"
4385 msgstr ""
4480 msgstr ""
4386
4481
4387 #: rhodecode/model/validation_schema/validators.py:71
4482 #: rhodecode/model/validation_schema/validators.py:71
4388 msgid "Name must start with a letter or number. Got `{}`"
4483 msgid "Name must start with a letter or number. Got `{}`"
4389 msgstr ""
4484 msgstr ""
4390
4485
4391 #: rhodecode/model/validation_schema/validators.py:142
4486 #: rhodecode/model/validation_schema/validators.py:142
4392 msgid "invalid clone url for {repo_type} repository"
4487 msgid "invalid clone url for {repo_type} repository"
4393 msgstr ""
4488 msgstr ""
4394
4489
4395 #: rhodecode/model/validation_schema/validators.py:151
4490 #: rhodecode/model/validation_schema/validators.py:151
4396 msgid "Please enter a valid json object"
4491 msgid "Please enter a valid json object"
4397 msgstr ""
4492 msgstr ""
4398
4493
4399 #: rhodecode/model/validation_schema/schemas/comment_schema.py:42
4494 #: rhodecode/model/validation_schema/schemas/comment_schema.py:42
4400 #: rhodecode/model/validation_schema/schemas/gist_schema.py:89
4495 #: rhodecode/model/validation_schema/schemas/gist_schema.py:89
4401 msgid "Gist with name {} already exists"
4496 msgid "Gist with name {} already exists"
4402 msgstr ""
4497 msgstr ""
4403
4498
4404 #: rhodecode/model/validation_schema/schemas/comment_schema.py:48
4499 #: rhodecode/model/validation_schema/schemas/comment_schema.py:48
4405 #: rhodecode/model/validation_schema/schemas/gist_schema.py:95
4500 #: rhodecode/model/validation_schema/schemas/gist_schema.py:95
4406 msgid "Filename {} cannot be inside a directory"
4501 msgid "Filename {} cannot be inside a directory"
4407 msgstr ""
4502 msgstr ""
4408
4503
4409 #: rhodecode/model/validation_schema/schemas/gist_schema.py:132
4504 #: rhodecode/model/validation_schema/schemas/gist_schema.py:132
4410 msgid "Duplicated value for filename found: `{}`"
4505 msgid "Duplicated value for filename found: `{}`"
4411 msgstr ""
4506 msgstr ""
4412
4507
4413 #: rhodecode/model/validation_schema/schemas/integration_schema.py:36
4508 #: rhodecode/model/validation_schema/schemas/integration_schema.py:36
4414 msgid "Pick a scope:"
4509 msgid "Pick a scope:"
4415 msgstr ""
4510 msgstr ""
4416
4511
4417 #: rhodecode/model/validation_schema/schemas/integration_schema.py:39
4512 #: rhodecode/model/validation_schema/schemas/integration_schema.py:39
4418 msgid "Global (all repositories)"
4513 msgid "Global (all repositories)"
4419 msgstr ""
4514 msgstr ""
4420
4515
4421 #: rhodecode/model/validation_schema/schemas/integration_schema.py:40
4516 #: rhodecode/model/validation_schema/schemas/integration_schema.py:40
4422 msgid "Top level repositories only"
4517 msgid "Top level repositories only"
4423 msgstr ""
4518 msgstr ""
4424
4519
4425 #: rhodecode/model/validation_schema/schemas/integration_schema.py:79
4520 #: rhodecode/model/validation_schema/schemas/integration_schema.py:79
4426 msgid "Only repo admins can create integrations"
4521 msgid "Only repo admins can create integrations"
4427 msgstr ""
4522 msgstr ""
4428
4523
4429 #: rhodecode/model/validation_schema/schemas/integration_schema.py:86
4524 #: rhodecode/model/validation_schema/schemas/integration_schema.py:86
4430 msgid "Only repogroup admins can create integrations"
4525 msgid "Only repogroup admins can create integrations"
4431 msgstr ""
4526 msgstr ""
4432
4527
4433 #: rhodecode/model/validation_schema/schemas/integration_schema.py:91
4528 #: rhodecode/model/validation_schema/schemas/integration_schema.py:91
4434 msgid "Only superadmins can create global integrations"
4529 msgid "Only superadmins can create global integrations"
4435 msgstr ""
4530 msgstr ""
4436
4531
4437 #: rhodecode/model/validation_schema/schemas/integration_schema.py:181
4532 #: rhodecode/model/validation_schema/schemas/integration_schema.py:181
4438 msgid "Scope of the integration. Recursive means the integration runs on all repos of that group and children recursively."
4533 msgid "Scope of the integration. Recursive means the integration runs on all repos of that group and children recursively."
4439 msgstr ""
4534 msgstr ""
4440
4535
4441 #: rhodecode/model/validation_schema/schemas/integration_schema.py:184
4536 #: rhodecode/model/validation_schema/schemas/integration_schema.py:184
4442 msgid "Integration scope"
4537 msgid "Integration scope"
4443 msgstr ""
4538 msgstr ""
4444
4539
4445 #: rhodecode/model/validation_schema/schemas/integration_schema.py:214
4540 #: rhodecode/model/validation_schema/schemas/integration_schema.py:214
4446 msgid "General integration options"
4541 msgid "General integration options"
4447 msgstr ""
4542 msgstr ""
4448
4543
4449 #: rhodecode/model/validation_schema/schemas/integration_schema.py:217
4544 #: rhodecode/model/validation_schema/schemas/integration_schema.py:217
4450 msgid "{integration_type} settings"
4545 msgid "{integration_type} settings"
4451 msgstr ""
4546 msgstr ""
4452
4547
4453 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:52
4548 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:52
4549 msgid "Parent repository group `{}` does not exist"
4550 msgstr ""
4551
4454 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:56
4552 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:56
4455 msgid "Parent repository group `{}` does not exist"
4553 msgid "You do not have the permissions to store repository groups inside repository group `{}`"
4456 msgstr ""
4554 msgstr ""
4457
4555
4458 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:58
4556 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:59
4459 msgid "You do not have the permission to store repository groups in the root location."
4557 msgid "You do not have the permission to store repository groups in the root location."
4460 msgstr ""
4558 msgstr ""
4461
4559
4462 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:118
4560 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:125
4463 msgid "Repo group owner with id `{}` does not exists"
4561 msgid "Repo group owner with id `{}` does not exists"
4464 msgstr ""
4562 msgstr ""
4465
4563
4466 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:136
4564 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:143
4467 #: rhodecode/model/validation_schema/schemas/repo_schema.py:215
4565 #: rhodecode/model/validation_schema/schemas/repo_schema.py:221
4468 msgid "Repository with name `{}` already exists"
4566 msgid "Repository with name `{}` already exists"
4469 msgstr ""
4567 msgstr ""
4470
4568
4471 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:141
4569 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:148
4472 #: rhodecode/model/validation_schema/schemas/repo_schema.py:220
4570 #: rhodecode/model/validation_schema/schemas/repo_schema.py:226
4473 msgid "Repository group with name `{}` already exists"
4571 msgid "Repository group with name `{}` already exists"
4474 msgstr ""
4572 msgstr ""
4475
4573
4476 #: rhodecode/model/validation_schema/schemas/repo_schema.py:60
4574 #: rhodecode/model/validation_schema/schemas/repo_schema.py:60
4477 msgid "Repo owner with id `{}` does not exists"
4575 msgid "Repo owner with id `{}` does not exists"
4478 msgstr ""
4576 msgstr ""
4479
4577
4480 #: rhodecode/model/validation_schema/schemas/repo_schema.py:102
4578 #: rhodecode/model/validation_schema/schemas/repo_schema.py:102
4481 msgid "Fork with id `{}` does not exists"
4579 msgid "Fork with id `{}` does not exists"
4482 msgstr ""
4580 msgstr ""
4483
4581
4484 #: rhodecode/model/validation_schema/schemas/repo_schema.py:105
4582 #: rhodecode/model/validation_schema/schemas/repo_schema.py:105
4485 msgid "Cannot set fork of parameter of this repository to itself"
4583 msgid "Cannot set fork of parameter of this repository to itself"
4486 msgstr ""
4584 msgstr ""
4487
4585
4488 #: rhodecode/model/validation_schema/schemas/repo_schema.py:130
4586 #: rhodecode/model/validation_schema/schemas/repo_schema.py:130
4489 #: rhodecode/model/validation_schema/schemas/repo_schema.py:134
4587 #: rhodecode/model/validation_schema/schemas/repo_schema.py:134
4490 msgid "Repository group `{}` does not exist"
4588 msgid "Repository group `{}` does not exist"
4491 msgstr ""
4589 msgstr ""
4492
4590
4493 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:32
4591 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:32
4494 msgid "Allowed in name are letters, numbers, and `-`, `_`, `.` Name must start with a letter or number. Got `{}`"
4592 msgid "Allowed in name are letters, numbers, and `-`, `_`, `.` Name must start with a letter or number. Got `{}`"
4495 msgstr ""
4593 msgstr ""
4496
4594
4497 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:48
4595 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:48
4498 msgid "User group owner with id `{}` does not exists"
4596 msgid "User group owner with id `{}` does not exists"
4499 msgstr ""
4597 msgstr ""
4500
4598
4501 #: rhodecode/model/validation_schema/schemas/user_schema.py:39
4599 #: rhodecode/model/validation_schema/schemas/user_schema.py:39
4502 msgid "Password is incorrect"
4600 msgid "Password is incorrect"
4503 msgstr ""
4601 msgstr ""
4504
4602
4505 #: rhodecode/model/validation_schema/schemas/user_schema.py:62
4603 #: rhodecode/model/validation_schema/schemas/user_schema.py:62
4506 msgid "New password must be different to old password"
4604 msgid "New password must be different to old password"
4507 msgstr ""
4605 msgstr ""
4508
4606
4509 #: rhodecode/model/validation_schema/schemas/user_schema.py:183
4607 #: rhodecode/model/validation_schema/schemas/user_schema.py:183
4510 msgid "Additional emails can be specified at <a href=\"{}\">extra emails</a> page."
4608 msgid "Additional emails can be specified at <a href=\"{}\">extra emails</a> page."
4511 msgstr ""
4609 msgstr ""
4512
4610
4513 #: rhodecode/public/js/scripts.js:20588 rhodecode/public/js/scripts.min.js:1
4611 #: rhodecode/public/js/scripts.js:19
4514 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:51
4612 msgid ": , "
4613 msgstr ""
4614
4615 #: rhodecode/public/js/scripts.js:20822 rhodecode/public/js/scripts.min.js:1
4616 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:59
4515 #: rhodecode/public/js/src/plugins/jquery.autocomplete.js:87
4617 #: rhodecode/public/js/src/plugins/jquery.autocomplete.js:87
4516 msgid "No results"
4618 msgid "No results"
4517 msgstr ""
4619 msgstr ""
4518
4620
4519 #: rhodecode/public/js/scripts.js:22050 rhodecode/public/js/scripts.min.js:1
4621 #: rhodecode/public/js/scripts.js:22547 rhodecode/public/js/scripts.min.js:1
4520 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:144
4622 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:161
4521 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:109
4623 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:109
4522 msgid "{0} year"
4624 msgid "{0} year"
4523 msgstr ""
4625 msgstr ""
4524
4626
4525 #: rhodecode/public/js/scripts.js:22051 rhodecode/public/js/scripts.min.js:1
4627 #: rhodecode/public/js/scripts.js:22548 rhodecode/public/js/scripts.min.js:1
4526 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:132
4628 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:149
4527 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:110
4629 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:110
4528 msgid "{0} month"
4630 msgid "{0} month"
4529 msgstr ""
4631 msgstr ""
4530
4632
4531 #: rhodecode/public/js/scripts.js:22052 rhodecode/public/js/scripts.min.js:1
4633 #: rhodecode/public/js/scripts.js:22549 rhodecode/public/js/scripts.min.js:1
4532 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
4634 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:144
4533 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:111
4635 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:111
4534 msgid "{0} day"
4636 msgid "{0} day"
4535 msgstr ""
4637 msgstr ""
4536
4638
4537 #: rhodecode/public/js/scripts.js:22053 rhodecode/public/js/scripts.min.js:1
4639 #: rhodecode/public/js/scripts.js:22550 rhodecode/public/js/scripts.min.js:1
4538 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
4640 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:146
4539 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:112
4641 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:112
4540 msgid "{0} hour"
4642 msgid "{0} hour"
4541 msgstr ""
4643 msgstr ""
4542
4644
4543 #: rhodecode/public/js/scripts.js:22054 rhodecode/public/js/scripts.min.js:1
4645 #: rhodecode/public/js/scripts.js:22551 rhodecode/public/js/scripts.min.js:1
4544 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
4646 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:148
4545 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:113
4647 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:113
4546 msgid "{0} min"
4648 msgid "{0} min"
4547 msgstr ""
4649 msgstr ""
4548
4650
4549 #: rhodecode/public/js/scripts.js:22055 rhodecode/public/js/scripts.min.js:1
4651 #: rhodecode/public/js/scripts.js:22552 rhodecode/public/js/scripts.min.js:1
4550 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:141
4652 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:158
4551 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:114
4653 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:114
4552 msgid "{0} sec"
4654 msgid "{0} sec"
4553 msgstr ""
4655 msgstr ""
4554
4656
4555 #: rhodecode/public/js/scripts.js:22075 rhodecode/public/js/scripts.min.js:1
4657 #: rhodecode/public/js/scripts.js:22572 rhodecode/public/js/scripts.min.js:1
4556 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4658 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:124
4557 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:134
4659 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:134
4558 msgid "in {0}"
4660 msgid "in {0}"
4559 msgstr ""
4661 msgstr ""
4560
4662
4561 #: rhodecode/public/js/scripts.js:22083 rhodecode/public/js/scripts.min.js:1
4663 #: rhodecode/public/js/scripts.js:22580 rhodecode/public/js/scripts.min.js:1
4562 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:124
4664 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:141
4563 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:142
4665 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:142
4564 msgid "{0} ago"
4666 msgid "{0} ago"
4565 msgstr ""
4667 msgstr ""
4566
4668
4567 #: rhodecode/public/js/scripts.js:22095 rhodecode/public/js/scripts.min.js:1
4669 #: rhodecode/public/js/scripts.js:22592 rhodecode/public/js/scripts.min.js:1
4568 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:146
4670 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:163
4569 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:154
4671 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:154
4570 msgid "{0}, {1} ago"
4672 msgid "{0}, {1} ago"
4571 msgstr ""
4673 msgstr ""
4572
4674
4573 #: rhodecode/public/js/scripts.js:22097 rhodecode/public/js/scripts.min.js:1
4675 #: rhodecode/public/js/scripts.js:22594 rhodecode/public/js/scripts.min.js:1
4574 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:110
4676 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:126
4575 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:156
4677 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:156
4576 msgid "in {0}, {1}"
4678 msgid "in {0}, {1}"
4577 msgstr ""
4679 msgstr ""
4578
4680
4579 #: rhodecode/public/js/scripts.js:22101 rhodecode/public/js/scripts.min.js:1
4681 #: rhodecode/public/js/scripts.js:22598 rhodecode/public/js/scripts.min.js:1
4580 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
4682 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:142
4581 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:160
4683 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:160
4582 msgid "{0} and {1}"
4684 msgid "{0} and {1}"
4583 msgstr ""
4685 msgstr ""
4584
4686
4585 #: rhodecode/public/js/scripts.js:22103 rhodecode/public/js/scripts.min.js:1
4687 #: rhodecode/public/js/scripts.js:22600 rhodecode/public/js/scripts.min.js:1
4586 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:126
4688 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:143
4587 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:162
4689 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:162
4588 msgid "{0} and {1} ago"
4690 msgid "{0} and {1} ago"
4589 msgstr ""
4691 msgstr ""
4590
4692
4591 #: rhodecode/public/js/scripts.js:22105 rhodecode/public/js/scripts.min.js:1
4693 #: rhodecode/public/js/scripts.js:22602 rhodecode/public/js/scripts.min.js:1
4592 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:109
4694 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
4593 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:164
4695 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:164
4594 msgid "in {0} and {1}"
4696 msgid "in {0} and {1}"
4595 msgstr ""
4697 msgstr ""
4596
4698
4597 #: rhodecode/public/js/scripts.js:37103 rhodecode/public/js/scripts.min.js:1
4699 #: rhodecode/public/js/scripts.js:37600 rhodecode/public/js/scripts.min.js:1
4598 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
4700 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:46
4599 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:4
4701 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:4
4600 msgid "Loading more results..."
4702 msgid "Loading more results..."
4601 msgstr ""
4703 msgstr ""
4602
4704
4603 #: rhodecode/public/js/scripts.js:37106 rhodecode/public/js/scripts.min.js:1
4705 #: rhodecode/public/js/scripts.js:37603 rhodecode/public/js/scripts.min.js:1
4604 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:67
4706 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:76
4605 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:7
4707 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:7
4606 msgid "Searching..."
4708 msgid "Searching..."
4607 msgstr ""
4709 msgstr ""
4608
4710
4609 #: rhodecode/public/js/scripts.js:37109 rhodecode/public/js/scripts.min.js:1
4711 #: rhodecode/public/js/scripts.js:37606 rhodecode/public/js/scripts.min.js:1
4610 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
4712 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:52
4611 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:10
4713 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:10
4612 msgid "No matches found"
4714 msgid "No matches found"
4613 msgstr ""
4715 msgstr ""
4614
4716
4615 #: rhodecode/public/js/scripts.js:37112 rhodecode/public/js/scripts.min.js:1
4717 #: rhodecode/public/js/scripts.js:37609 rhodecode/public/js/scripts.min.js:1
4616 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:37
4718 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:45
4617 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:13
4719 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:13
4618 msgid "Loading failed"
4720 msgid "Loading failed"
4619 msgstr ""
4721 msgstr ""
4620
4722
4621 #: rhodecode/public/js/scripts.js:37116 rhodecode/public/js/scripts.min.js:1
4723 #: rhodecode/public/js/scripts.js:37613 rhodecode/public/js/scripts.min.js:1
4622 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:58
4724 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:66
4623 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:17
4725 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:17
4624 msgid "One result is available, press enter to select it."
4726 msgid "One result is available, press enter to select it."
4625 msgstr ""
4727 msgstr ""
4626
4728
4627 #: rhodecode/public/js/scripts.js:37118 rhodecode/public/js/scripts.min.js:1
4729 #: rhodecode/public/js/scripts.js:37615 rhodecode/public/js/scripts.min.js:1
4628 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:140
4730 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:157
4629 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:19
4731 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:19
4630 msgid "{0} results are available, use up and down arrow keys to navigate."
4732 msgid "{0} results are available, use up and down arrow keys to navigate."
4631 msgstr ""
4733 msgstr ""
4632
4734
4633 #: rhodecode/public/js/scripts.js:37123 rhodecode/public/js/scripts.min.js:1
4735 #: rhodecode/public/js/scripts.js:37620 rhodecode/public/js/scripts.min.js:1
4634 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:63
4736 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:71
4635 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:24
4737 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:24
4636 msgid "Please enter {0} or more character"
4738 msgid "Please enter {0} or more character"
4637 msgstr ""
4739 msgstr ""
4638
4740
4639 #: rhodecode/public/js/scripts.js:37125 rhodecode/public/js/scripts.min.js:1
4741 #: rhodecode/public/js/scripts.js:37622 rhodecode/public/js/scripts.min.js:1
4640 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:64
4742 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
4641 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:26
4743 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:26
4642 msgid "Please enter {0} or more characters"
4744 msgid "Please enter {0} or more characters"
4643 msgstr ""
4745 msgstr ""
4644
4746
4645 #: rhodecode/public/js/scripts.js:37130 rhodecode/public/js/scripts.min.js:1
4747 #: rhodecode/public/js/scripts.js:37627 rhodecode/public/js/scripts.min.js:1
4646 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:61
4748 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:69
4647 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:31
4749 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:31
4648 msgid "Please delete {0} character"
4750 msgid "Please delete {0} character"
4649 msgstr ""
4751 msgstr ""
4650
4752
4651 #: rhodecode/public/js/scripts.js:37132 rhodecode/public/js/scripts.min.js:1
4753 #: rhodecode/public/js/scripts.js:37629 rhodecode/public/js/scripts.min.js:1
4652 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:62
4754 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:70
4653 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:33
4755 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:33
4654 msgid "Please delete {0} characters"
4756 msgid "Please delete {0} characters"
4655 msgstr ""
4757 msgstr ""
4656
4758
4657 #: rhodecode/public/js/scripts.js:37136 rhodecode/public/js/scripts.min.js:1
4759 #: rhodecode/public/js/scripts.js:37633 rhodecode/public/js/scripts.min.js:1
4658 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
4760 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:114
4659 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:37
4761 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:37
4660 msgid "You can only select {0} item"
4762 msgid "You can only select {0} item"
4661 msgstr ""
4763 msgstr ""
4662
4764
4663 #: rhodecode/public/js/scripts.js:37138 rhodecode/public/js/scripts.min.js:1
4765 #: rhodecode/public/js/scripts.js:37635 rhodecode/public/js/scripts.min.js:1
4664 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:99
4766 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
4665 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:39
4767 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:39
4666 msgid "You can only select {0} items"
4768 msgid "You can only select {0} items"
4667 msgstr ""
4769 msgstr ""
4668
4770
4669 #: rhodecode/public/js/scripts.js:37780 rhodecode/public/js/scripts.min.js:1
4771 #: rhodecode/public/js/scripts.js:38285 rhodecode/public/js/scripts.min.js:1
4670 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:136
4772 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:7
4773 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:135
4671 msgid "Ajax Request Error"
4774 msgid "Ajax Request Error"
4672 msgstr ""
4775 msgstr ""
4673
4776
4674 #: rhodecode/public/js/scripts.js:38178 rhodecode/public/js/scripts.min.js:1
4777 #: rhodecode/public/js/scripts.js:38687 rhodecode/public/js/scripts.min.js:1
4675 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
4778 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:133
4676 #: rhodecode/public/js/src/rhodecode/changelog.js:35
4779 #: rhodecode/public/js/src/rhodecode/changelog.js:35
4677 msgid "showing {0} out of {1} commit"
4780 msgid "showing {0} out of {1} commit"
4678 msgstr ""
4781 msgstr ""
4679
4782
4680 #: rhodecode/public/js/scripts.js:38180 rhodecode/public/js/scripts.min.js:1
4783 #: rhodecode/public/js/scripts.js:38689 rhodecode/public/js/scripts.min.js:1
4681 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
4784 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:134
4682 #: rhodecode/public/js/src/rhodecode/changelog.js:37
4785 #: rhodecode/public/js/src/rhodecode/changelog.js:37
4683 msgid "showing {0} out of {1} commits"
4786 msgid "showing {0} out of {1} commits"
4684 msgstr ""
4787 msgstr ""
4685
4788
4686 #: rhodecode/public/js/scripts.js:38718 rhodecode/public/js/scripts.min.js:1
4789 #: rhodecode/public/js/scripts.js:39227 rhodecode/public/js/scripts.min.js:1
4687 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:70
4790 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:79
4688 #: rhodecode/public/js/src/rhodecode/codemirror.js:363
4791 #: rhodecode/public/js/src/rhodecode/codemirror.js:363
4689 msgid "Set status to Approved"
4792 msgid "Set status to Approved"
4690 msgstr ""
4793 msgstr ""
4691
4794
4692 #: rhodecode/public/js/scripts.js:38738 rhodecode/public/js/scripts.min.js:1
4795 #: rhodecode/public/js/scripts.js:39247 rhodecode/public/js/scripts.min.js:1
4693 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:71
4796 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:80
4694 #: rhodecode/public/js/src/rhodecode/codemirror.js:383
4797 #: rhodecode/public/js/src/rhodecode/codemirror.js:383
4695 msgid "Set status to Rejected"
4798 msgid "Set status to Rejected"
4696 msgstr ""
4799 msgstr ""
4697
4800
4698 #: rhodecode/public/js/scripts.js:38757 rhodecode/public/js/scripts.min.js:1
4801 #: rhodecode/public/js/scripts.js:39266 rhodecode/public/js/scripts.min.js:1
4699 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:88
4802 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:99
4700 #: rhodecode/public/js/src/rhodecode/codemirror.js:402
4803 #: rhodecode/public/js/src/rhodecode/codemirror.js:402
4701 msgid "TODO comment"
4804 msgid "TODO comment"
4702 msgstr ""
4805 msgstr ""
4703
4806
4704 #: rhodecode/public/js/scripts.js:38777 rhodecode/public/js/scripts.min.js:1
4807 #: rhodecode/public/js/scripts.js:39286 rhodecode/public/js/scripts.min.js:1
4705 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:57
4808 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:65
4706 #: rhodecode/public/js/src/rhodecode/codemirror.js:422
4809 #: rhodecode/public/js/src/rhodecode/codemirror.js:422
4707 msgid "Note Comment"
4810 msgid "Note Comment"
4708 msgstr ""
4811 msgstr ""
4709
4812
4710 #: rhodecode/public/js/scripts.js:39078 rhodecode/public/js/scripts.js:39432
4813 #: rhodecode/public/js/scripts.js:39587 rhodecode/public/js/scripts.js:39962
4711 #: rhodecode/public/js/scripts.min.js:1
4814 #: rhodecode/public/js/scripts.min.js:1
4712 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:82
4815 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:93
4713 #: rhodecode/public/js/src/rhodecode/codemirror.js:723
4816 #: rhodecode/public/js/src/rhodecode/codemirror.js:723
4714 #: rhodecode/public/js/src/rhodecode/comments.js:233
4817 #: rhodecode/public/js/src/rhodecode/comments.js:254
4715 msgid "Status Review"
4818 msgid "Status Review"
4716 msgstr ""
4819 msgstr ""
4717
4820
4718 #: rhodecode/public/js/scripts.js:39093 rhodecode/public/js/scripts.js:39447
4821 #: rhodecode/public/js/scripts.js:39602 rhodecode/public/js/scripts.js:39977
4719 #: rhodecode/public/js/scripts.min.js:1
4822 #: rhodecode/public/js/scripts.min.js:1
4720 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:17
4823 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:21
4721 #: rhodecode/public/js/src/rhodecode/codemirror.js:738
4824 #: rhodecode/public/js/src/rhodecode/codemirror.js:738
4722 #: rhodecode/public/js/src/rhodecode/comments.js:248
4825 #: rhodecode/public/js/src/rhodecode/comments.js:269
4723 msgid "Comment text will be set automatically based on currently selected status ({0}) ..."
4826 msgid "Comment text will be set automatically based on currently selected status ({0}) ..."
4724 msgstr ""
4827 msgstr ""
4725
4828
4726 #: rhodecode/public/js/scripts.js:39174 rhodecode/public/js/scripts.js:39642
4829 #: rhodecode/public/js/scripts.js:39683 rhodecode/public/js/scripts.js:40172
4727 #: rhodecode/public/js/scripts.js:40669 rhodecode/public/js/scripts.min.js:1
4830 #: rhodecode/public/js/scripts.js:41495 rhodecode/public/js/scripts.min.js:1
4728 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:36
4831 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:43
4729 #: rhodecode/public/js/src/rhodecode/codemirror.js:819
4832 #: rhodecode/public/js/src/rhodecode/codemirror.js:819
4730 #: rhodecode/public/js/src/rhodecode/comments.js:443
4833 #: rhodecode/public/js/src/rhodecode/comments.js:464
4731 #: rhodecode/public/js/src/rhodecode/files.js:499
4834 #: rhodecode/public/js/src/rhodecode/files.js:499
4732 #: rhodecode/templates/files/files_browser_tree.mako:54
4835 #: rhodecode/templates/files/files_browser_tree.mako:57
4733 msgid "Loading ..."
4836 msgid "Loading ..."
4734 msgstr ""
4837 msgstr ""
4735
4838
4736 #: rhodecode/public/js/scripts.js:39348 rhodecode/public/js/scripts.min.js:1
4839 #: rhodecode/public/js/scripts.js:39844 rhodecode/public/js/scripts.min.js:1
4737 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
4840 #: rhodecode/public/js/src/rhodecode/comments.js:136
4738 #: rhodecode/public/js/src/rhodecode/comments.js:149
4841 msgid "Updated Comment"
4842 msgstr ""
4843
4844 #: rhodecode/public/js/scripts.js:39868 rhodecode/public/js/scripts.min.js:1
4845 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:132
4846 #: rhodecode/public/js/src/rhodecode/comments.js:160
4739 msgid "resolve comment"
4847 msgid "resolve comment"
4740 msgstr ""
4848 msgstr ""
4741
4849
4742 #: rhodecode/public/js/scripts.js:39591 rhodecode/public/js/scripts.min.js:1
4850 #: rhodecode/public/js/scripts.js:40121 rhodecode/public/js/scripts.min.js:1
4743 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:85
4851 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:96
4744 #: rhodecode/public/js/src/rhodecode/comments.js:392
4852 #: rhodecode/public/js/src/rhodecode/comments.js:413
4745 msgid "Submitting..."
4853 msgid "Submitting..."
4746 msgstr ""
4854 msgstr ""
4747
4855
4748 #: rhodecode/public/js/scripts.js:39794 rhodecode/public/js/scripts.min.js:1
4856 #: rhodecode/public/js/scripts.js:40403 rhodecode/public/js/scripts.min.js:1
4749 #: rhodecode/public/js/src/rhodecode/comments.js:595
4857 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
4858 #: rhodecode/public/js/src/rhodecode/comments.js:695
4750 msgid "Yes, delete comment #{0}!"
4859 msgid "Yes, delete comment #{0}!"
4751 msgstr ""
4860 msgstr ""
4752
4861
4753 #: rhodecode/public/js/scripts.js:39849 rhodecode/public/js/scripts.min.js:1
4862 #: rhodecode/public/js/scripts.js:40458 rhodecode/public/js/scripts.min.js:1
4754 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:34
4863 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:41
4755 #: rhodecode/public/js/src/rhodecode/comments.js:650
4864 #: rhodecode/public/js/src/rhodecode/comments.js:750
4756 msgid "Leave a resolution comment, or click resolve button to resolve TODO comment #{0}"
4865 msgid "Leave a resolution comment, or click resolve button to resolve TODO comment #{0}"
4757 msgstr ""
4866 msgstr ""
4758
4867
4759 #: rhodecode/public/js/scripts.js:40015 rhodecode/public/js/scripts.min.js:1
4868 #: rhodecode/public/js/scripts.js:40667 rhodecode/public/js/scripts.min.js:1
4760 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:32
4869 #: rhodecode/public/js/src/rhodecode/comments.js:959
4761 #: rhodecode/public/js/src/rhodecode/comments.js:816
4870 msgid "Comment body was not changed."
4871 msgstr ""
4872
4873 #: rhodecode/public/js/scripts.js:40840 rhodecode/public/js/scripts.min.js:1
4874 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:39
4875 #: rhodecode/public/js/src/rhodecode/comments.js:1132
4762 msgid "Leave a comment on line {0}."
4876 msgid "Leave a comment on line {0}."
4763 msgstr ""
4877 msgstr ""
4764
4878
4765 #: rhodecode/public/js/scripts.js:40140 rhodecode/public/js/scripts.min.js:1
4879 #: rhodecode/public/js/scripts.js:40966 rhodecode/public/js/scripts.min.js:1
4766 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:89
4880 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
4767 #: rhodecode/public/js/src/rhodecode/comments.js:941
4881 #: rhodecode/public/js/src/rhodecode/comments.js:1258
4768 msgid "TODO from comment {0} was fixed."
4882 msgid "TODO from comment {0} was fixed."
4769 msgstr ""
4883 msgstr ""
4770
4884
4771 #: rhodecode/public/js/scripts.js:40418 rhodecode/public/js/scripts.min.js:1
4885 #: rhodecode/public/js/scripts.js:41244 rhodecode/public/js/scripts.min.js:1
4772 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:119
4886 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
4773 #: rhodecode/public/js/src/rhodecode/files.js:248
4887 #: rhodecode/public/js/src/rhodecode/files.js:248
4774 msgid "truncated result"
4888 msgid "truncated result"
4775 msgstr ""
4889 msgstr ""
4776
4890
4777 #: rhodecode/public/js/scripts.js:40420 rhodecode/public/js/scripts.min.js:1
4891 #: rhodecode/public/js/scripts.js:41246 rhodecode/public/js/scripts.min.js:1
4778 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:120
4892 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:137
4779 #: rhodecode/public/js/src/rhodecode/files.js:250
4893 #: rhodecode/public/js/src/rhodecode/files.js:250
4780 msgid "truncated results"
4894 msgid "truncated results"
4781 msgstr ""
4895 msgstr ""
4782
4896
4783 #: rhodecode/public/js/scripts.js:40429 rhodecode/public/js/scripts.min.js:1
4897 #: rhodecode/public/js/scripts.js:41255 rhodecode/public/js/scripts.min.js:1
4784 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:45
4898 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
4785 #: rhodecode/public/js/src/rhodecode/files.js:259
4899 #: rhodecode/public/js/src/rhodecode/files.js:259
4786 msgid "No matching files"
4900 msgid "No matching files"
4787 msgstr ""
4901 msgstr ""
4788
4902
4789 #: rhodecode/public/js/scripts.js:40487 rhodecode/public/js/scripts.min.js:1
4903 #: rhodecode/public/js/scripts.js:41313 rhodecode/public/js/scripts.min.js:1
4790 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:68
4904 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:77
4791 #: rhodecode/public/js/src/rhodecode/files.js:317
4905 #: rhodecode/public/js/src/rhodecode/files.js:317
4792 msgid "Selection link"
4906 msgid "Selection link"
4793 msgstr ""
4907 msgstr ""
4794
4908
4795 #: rhodecode/public/js/scripts.js:40584 rhodecode/public/js/scripts.min.js:1
4909 #: rhodecode/public/js/scripts.js:41410 rhodecode/public/js/scripts.min.js:1
4796 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:5
4910 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:8
4797 #: rhodecode/public/js/src/rhodecode/files.js:414
4911 #: rhodecode/public/js/src/rhodecode/files.js:414
4798 msgid "All Authors"
4912 msgid "All Authors"
4799 msgstr ""
4913 msgstr ""
4800
4914
4801 #: rhodecode/public/js/scripts.js:40734 rhodecode/public/js/scripts.js:40737
4915 #: rhodecode/public/js/scripts.js:41560 rhodecode/public/js/scripts.js:41563
4802 #: rhodecode/public/js/scripts.min.js:1
4916 #: rhodecode/public/js/scripts.min.js:1
4917 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:33
4803 #: rhodecode/public/js/src/rhodecode/files.js:564
4918 #: rhodecode/public/js/src/rhodecode/files.js:564
4804 #: rhodecode/public/js/src/rhodecode/files.js:567
4919 #: rhodecode/public/js/src/rhodecode/files.js:567
4805 msgid "File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version."
4920 msgid "File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version."
4806 msgstr ""
4921 msgstr ""
4807
4922
4808 #: rhodecode/public/js/scripts.js:40740 rhodecode/public/js/scripts.min.js:1
4923 #: rhodecode/public/js/scripts.js:41566 rhodecode/public/js/scripts.min.js:1
4924 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
4809 #: rhodecode/public/js/src/rhodecode/files.js:570
4925 #: rhodecode/public/js/src/rhodecode/files.js:570
4810 msgid "There is an existing path `{0}` at this commit."
4926 msgid "There is an existing path `{0}` at this commit."
4811 msgstr ""
4927 msgstr ""
4812
4928
4813 #: rhodecode/public/js/scripts.js:40743 rhodecode/public/js/scripts.min.js:1
4929 #: rhodecode/public/js/scripts.js:41569 rhodecode/public/js/scripts.min.js:1
4930 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
4814 #: rhodecode/public/js/src/rhodecode/files.js:573
4931 #: rhodecode/public/js/src/rhodecode/files.js:573
4815 msgid "There is a later version of file tree available. Click {0} to create a file at the latest tree."
4932 msgid "There is a later version of file tree available. Click {0} to create a file at the latest tree."
4816 msgstr ""
4933 msgstr ""
4817
4934
4818 #: rhodecode/public/js/scripts.js:40797 rhodecode/public/js/scripts.min.js:1
4935 #: rhodecode/public/js/scripts.js:41623 rhodecode/public/js/scripts.min.js:1
4819 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:84
4936 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:95
4820 #: rhodecode/public/js/src/rhodecode/followers.js:26
4937 #: rhodecode/public/js/src/rhodecode/followers.js:26
4821 msgid "Stopped watching this repository"
4938 msgid "Stopped watching this repository"
4822 msgstr ""
4939 msgstr ""
4823
4940
4824 #: rhodecode/public/js/scripts.js:40798 rhodecode/public/js/scripts.min.js:1
4941 #: rhodecode/public/js/scripts.js:41624 rhodecode/public/js/scripts.min.js:1
4825 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:97
4942 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:112
4826 #: rhodecode/public/js/src/rhodecode/followers.js:27
4943 #: rhodecode/public/js/src/rhodecode/followers.js:27
4827 #: rhodecode/templates/base/base.mako:301
4944 #: rhodecode/templates/base/base.mako:308
4828 msgid "Watch"
4945 msgid "Watch"
4829 msgstr ""
4946 msgstr ""
4830
4947
4831 #: rhodecode/public/js/scripts.js:40801 rhodecode/public/js/scripts.min.js:1
4948 #: rhodecode/public/js/scripts.js:41627 rhodecode/public/js/scripts.min.js:1
4832 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:81
4949 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:92
4833 #: rhodecode/public/js/src/rhodecode/followers.js:30
4950 #: rhodecode/public/js/src/rhodecode/followers.js:30
4834 msgid "Started watching this repository"
4951 msgid "Started watching this repository"
4835 msgstr ""
4952 msgstr ""
4836
4953
4837 #: rhodecode/public/js/scripts.js:40802 rhodecode/public/js/scripts.min.js:1
4954 #: rhodecode/public/js/scripts.js:41628 rhodecode/public/js/scripts.min.js:1
4838 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:93
4955 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4839 #: rhodecode/public/js/src/rhodecode/followers.js:31
4956 #: rhodecode/public/js/src/rhodecode/followers.js:31
4840 #: rhodecode/templates/base/base.mako:299
4957 #: rhodecode/templates/base/base.mako:306
4841 msgid "Unwatch"
4958 msgid "Unwatch"
4842 msgstr ""
4959 msgstr ""
4843
4960
4844 #: rhodecode/public/js/scripts.js:41182 rhodecode/public/js/scripts.min.js:1
4961 #: rhodecode/public/js/scripts.js:42010 rhodecode/public/js/scripts.min.js:1
4845 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:7
4962 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
4846 #: rhodecode/public/js/src/rhodecode/pullrequests.js:141
4963 #: rhodecode/public/js/src/rhodecode/pullrequests.js:143
4847 msgid "All reviewers must vote."
4964 msgid "All reviewers must vote."
4848 msgstr ""
4965 msgstr ""
4849
4966
4850 #: rhodecode/public/js/scripts.js:41191 rhodecode/public/js/scripts.min.js:1
4967 #: rhodecode/public/js/scripts.js:42019 rhodecode/public/js/scripts.min.js:1
4851 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:6
4968 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:9
4852 #: rhodecode/public/js/src/rhodecode/pullrequests.js:150
4969 #: rhodecode/public/js/src/rhodecode/pullrequests.js:152
4853 msgid "All individual reviewers must vote."
4970 msgid "All individual reviewers must vote."
4854 msgstr ""
4971 msgstr ""
4855
4972
4856 #: rhodecode/public/js/scripts.js:41196 rhodecode/public/js/scripts.min.js:1
4973 #: rhodecode/public/js/scripts.js:42024 rhodecode/public/js/scripts.min.js:1
4857 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:9
4974 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
4858 #: rhodecode/public/js/src/rhodecode/pullrequests.js:155
4975 #: rhodecode/public/js/src/rhodecode/pullrequests.js:157
4859 msgid "At least {0} reviewer must vote."
4976 msgid "At least {0} reviewer must vote."
4860 msgstr ""
4977 msgstr ""
4861
4978
4862 #: rhodecode/public/js/scripts.js:41202 rhodecode/public/js/scripts.min.js:1
4979 #: rhodecode/public/js/scripts.js:42030 rhodecode/public/js/scripts.min.js:1
4863 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
4980 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:13
4864 #: rhodecode/public/js/src/rhodecode/pullrequests.js:161
4981 #: rhodecode/public/js/src/rhodecode/pullrequests.js:163
4865 msgid "At least {0} reviewers must vote."
4982 msgid "At least {0} reviewers must vote."
4866 msgstr ""
4983 msgstr ""
4867
4984
4868 #: rhodecode/public/js/scripts.js:41218 rhodecode/public/js/scripts.min.js:1
4985 #: rhodecode/public/js/scripts.js:42046 rhodecode/public/js/scripts.min.js:1
4869 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:65
4986 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:74
4870 #: rhodecode/public/js/src/rhodecode/pullrequests.js:177
4987 #: rhodecode/public/js/src/rhodecode/pullrequests.js:179
4871 msgid "Reviewers picked from source code changes."
4988 msgid "Reviewers picked from source code changes."
4872 msgstr ""
4989 msgstr ""
4873
4990
4874 #: rhodecode/public/js/scripts.js:41225 rhodecode/public/js/scripts.min.js:1
4991 #: rhodecode/public/js/scripts.js:42053 rhodecode/public/js/scripts.min.js:1
4875 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:4
4992 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:6
4876 #: rhodecode/public/js/src/rhodecode/pullrequests.js:184
4993 #: rhodecode/public/js/src/rhodecode/pullrequests.js:186
4877 msgid "Adding new reviewers is forbidden."
4994 msgid "Adding new reviewers is forbidden."
4878 msgstr ""
4995 msgstr ""
4879
4996
4880 #: rhodecode/public/js/scripts.js:41232 rhodecode/public/js/scripts.min.js:1
4997 #: rhodecode/public/js/scripts.js:42060 rhodecode/public/js/scripts.min.js:1
4881 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:11
4998 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:15
4882 #: rhodecode/public/js/src/rhodecode/pullrequests.js:191
4999 #: rhodecode/public/js/src/rhodecode/pullrequests.js:193
4883 msgid "Author is not allowed to be a reviewer."
5000 msgid "Author is not allowed to be a reviewer."
4884 msgstr ""
5001 msgstr ""
4885
5002
4886 #: rhodecode/public/js/scripts.js:41246 rhodecode/public/js/scripts.min.js:1
5003 #: rhodecode/public/js/scripts.js:42074 rhodecode/public/js/scripts.min.js:1
4887 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:18
5004 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:22
4888 #: rhodecode/public/js/src/rhodecode/pullrequests.js:205
5005 #: rhodecode/public/js/src/rhodecode/pullrequests.js:207
4889 msgid "Commit Authors are not allowed to be a reviewer."
5006 msgid "Commit Authors are not allowed to be a reviewer."
4890 msgstr ""
5007 msgstr ""
4891
5008
4892 #: rhodecode/public/js/scripts.js:41268 rhodecode/public/js/scripts.min.js:1
5009 #: rhodecode/public/js/scripts.js:42096 rhodecode/public/js/scripts.min.js:1
4893 #: rhodecode/public/js/src/rhodecode/pullrequests.js:227
5010 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
5011 #: rhodecode/public/js/src/rhodecode/pullrequests.js:229
4894 msgid "Loading diff ..."
5012 msgid "Loading diff ..."
4895 msgstr ""
5013 msgstr ""
4896
5014
4897 #: rhodecode/public/js/scripts.js:41307 rhodecode/public/js/scripts.min.js:1
5015 #: rhodecode/public/js/scripts.js:42135 rhodecode/public/js/scripts.min.js:1
4898 #: rhodecode/public/js/src/rhodecode/pullrequests.js:266
5016 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
5017 #: rhodecode/public/js/src/rhodecode/pullrequests.js:268
4899 msgid "no commits"
5018 msgid "no commits"
4900 msgstr ""
5019 msgstr ""
4901
5020
4902 #: rhodecode/public/js/scripts.js:41378 rhodecode/public/js/scripts.min.js:1
5021 #: rhodecode/public/js/scripts.js:42206 rhodecode/public/js/scripts.min.js:1
4903 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:96
5022 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:111
4904 #: rhodecode/public/js/src/rhodecode/pullrequests.js:337
5023 #: rhodecode/public/js/src/rhodecode/pullrequests.js:339
4905 msgid "User `{0}` not allowed to be a reviewer"
5024 msgid "User `{0}` not allowed to be a reviewer"
4906 msgstr ""
5025 msgstr ""
4907
5026
4908 #: rhodecode/public/js/scripts.js:41384 rhodecode/public/js/scripts.min.js:1
5027 #: rhodecode/public/js/scripts.js:42212 rhodecode/public/js/scripts.min.js:1
4909 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:95
5028 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:110
4910 #: rhodecode/public/js/src/rhodecode/pullrequests.js:343
5029 #: rhodecode/public/js/src/rhodecode/pullrequests.js:345
4911 msgid "User `{0}` already in reviewers"
5030 msgid "User `{0}` already in reviewers"
4912 msgstr ""
5031 msgstr ""
4913
5032
4914 #: rhodecode/public/js/scripts.js:41487 rhodecode/public/js/scripts.min.js:1
5033 #: rhodecode/public/js/scripts.js:42315 rhodecode/public/js/scripts.min.js:1
4915 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:101
5034 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
4916 #: rhodecode/public/js/src/rhodecode/pullrequests.js:446
5035 #: rhodecode/public/js/src/rhodecode/pullrequests.js:448
4917 msgid "added manually by \"{0}\""
5036 msgid "added manually by \"{0}\""
4918 msgstr ""
5037 msgstr ""
4919
5038
4920 #: rhodecode/public/js/scripts.js:41491 rhodecode/public/js/scripts.min.js:1
5039 #: rhodecode/public/js/scripts.js:42319 rhodecode/public/js/scripts.min.js:1
4921 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
5040 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
4922 #: rhodecode/public/js/src/rhodecode/pullrequests.js:450
5041 #: rhodecode/public/js/src/rhodecode/pullrequests.js:452
4923 msgid "member of \"{0}\""
5042 msgid "member of \"{0}\""
4924 msgstr ""
5043 msgstr ""
4925
5044
4926 #: rhodecode/public/js/scripts.js:41682 rhodecode/public/js/scripts.min.js:1
5045 #: rhodecode/public/js/scripts.js:42510 rhodecode/public/js/scripts.min.js:1
4927 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:94
5046 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:109
4928 #: rhodecode/public/js/src/rhodecode/pullrequests.js:641
5047 #: rhodecode/public/js/src/rhodecode/pullrequests.js:643
4929 msgid "Updating..."
5048 msgid "Updating..."
4930 msgstr ""
5049 msgstr ""
4931
5050
4932 #: rhodecode/public/js/scripts.js:41692 rhodecode/public/js/scripts.min.js:1
5051 #: rhodecode/public/js/scripts.js:42520 rhodecode/public/js/scripts.min.js:1
4933 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:28
5052 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:35
4934 #: rhodecode/public/js/src/rhodecode/pullrequests.js:651
5053 #: rhodecode/public/js/src/rhodecode/pullrequests.js:653
4935 msgid "Force updating..."
5054 msgid "Force updating..."
4936 msgstr ""
5055 msgstr ""
4937
5056
4938 #: rhodecode/public/js/scripts.js:46140 rhodecode/public/js/scripts.min.js:1
5057 #: rhodecode/public/js/scripts.js:46968 rhodecode/public/js/scripts.min.js:1
5058 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:88
4939 #: rhodecode/public/js/src/rhodecode/users.js:54
5059 #: rhodecode/public/js/src/rhodecode/users.js:54
4940 msgid "Show this authentication token?"
5060 msgid "Show this authentication token?"
4941 msgstr ""
5061 msgstr ""
4942
5062
4943 #: rhodecode/public/js/scripts.js:46142 rhodecode/public/js/scripts.min.js:1
5063 #: rhodecode/public/js/scripts.js:46970 rhodecode/public/js/scripts.min.js:1
5064 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:81
4944 #: rhodecode/public/js/src/rhodecode/users.js:56
5065 #: rhodecode/public/js/src/rhodecode/users.js:56
4945 msgid "Show"
5066 msgid "Show"
4946 msgstr ""
5067 msgstr ""
4947
5068
4948 #: rhodecode/public/js/scripts.js:46178 rhodecode/public/js/scripts.min.js:1
5069 #: rhodecode/public/js/scripts.js:47006 rhodecode/public/js/scripts.min.js:1
5070 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:14
4949 #: rhodecode/public/js/src/rhodecode/users.js:92
5071 #: rhodecode/public/js/src/rhodecode/users.js:92
4950 msgid "Authentication Token"
5072 msgid "Authentication Token"
4951 msgstr ""
5073 msgstr ""
4952
5074
4953 #: rhodecode/public/js/scripts.js:46367 rhodecode/public/js/scripts.min.js:1
5075 #: rhodecode/public/js/scripts.js:47195 rhodecode/public/js/scripts.min.js:1
4954 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5076 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:121
4955 #: rhodecode/public/js/src/rhodecode.js:144
5077 #: rhodecode/public/js/src/rhodecode.js:144
4956 msgid "file"
5078 msgid "file"
4957 msgstr ""
5079 msgstr ""
4958
5080
4959 #: rhodecode/public/js/scripts.js:46511 rhodecode/public/js/scripts.min.js:1
5081 #: rhodecode/public/js/scripts.js:47339 rhodecode/public/js/scripts.min.js:1
4960 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:39
5082 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
4961 #: rhodecode/public/js/src/rhodecode.js:288
5083 #: rhodecode/public/js/src/rhodecode.js:288
4962 msgid "Loading..."
5084 msgid "Loading..."
4963 msgstr ""
5085 msgstr ""
4964
5086
4965 #: rhodecode/public/js/scripts.js:46884 rhodecode/public/js/scripts.min.js:1
5087 #: rhodecode/public/js/scripts.js:47712 rhodecode/public/js/scripts.min.js:1
4966 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
5088 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:118
4967 #: rhodecode/public/js/src/rhodecode.js:661
5089 #: rhodecode/public/js/src/rhodecode.js:661
4968 msgid "date not in future"
5090 msgid "date not in future"
4969 msgstr ""
5091 msgstr ""
4970
5092
4971 #: rhodecode/public/js/scripts.js:46892 rhodecode/public/js/scripts.min.js:1
5093 #: rhodecode/public/js/scripts.js:47720 rhodecode/public/js/scripts.min.js:1
4972 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:79
5094 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
4973 #: rhodecode/public/js/src/rhodecode.js:669
5095 #: rhodecode/public/js/src/rhodecode.js:669
4974 msgid "Specified expiration date"
5096 msgid "Specified expiration date"
4975 msgstr ""
5097 msgstr ""
4976
5098
4977 #: rhodecode/public/js/scripts.min.js:1
5099 #: rhodecode/public/js/scripts.min.js:1
4978 msgid "action"
5100 msgid "action"
4979 msgstr ""
5101 msgstr ""
4980
5102
4981 #: rhodecode/public/js/scripts.min.js:1
5103 #: rhodecode/public/js/scripts.min.js:1
4982 msgid "target"
5104 msgid "target"
4983 msgstr ""
5105 msgstr ""
4984
5106
4985 #: rhodecode/public/js/scripts.min.js:1
5107 #: rhodecode/public/js/scripts.min.js:1
4986 msgid "text"
5108 msgid "text"
4987 msgstr ""
5109 msgstr ""
4988
5110
4989 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:2
5111 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:2
4990 msgid "(from usergroup {0})"
5112 msgid "(from usergroup {0})"
4991 msgstr ""
5113 msgstr ""
4992
5114
4993 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:3
5115 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:3
4994 #: rhodecode/templates/codeblocks/diffs.mako:606
5116 msgid "<strong>{0} file</strong> changed, "
4995 #: rhodecode/templates/codeblocks/diffs.mako:610
5117 msgstr ""
5118
5119 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:4
5120 msgid "<strong>{0} files</strong> changed, "
5121 msgstr ""
5122
5123 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:5
5124 #: rhodecode/templates/codeblocks/diffs.mako:618
5125 #: rhodecode/templates/codeblocks/diffs.mako:622
4996 msgid "Add another comment"
5126 msgid "Add another comment"
4997 msgstr ""
5127 msgstr ""
4998
5128
4999 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:8
5129 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:11
5000 msgid "Are you sure to close this pull request without merging?"
5130 msgid "Are you sure to close this pull request without merging?"
5001 msgstr ""
5131 msgstr ""
5002
5132
5003 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
5133 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5004 msgid "Changed files"
5134 msgid "Changed files"
5005 msgstr ""
5135 msgstr ""
5006
5136
5007 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:13
5137 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:17
5008 #: rhodecode/public/js/src/i18n_messages.js:5
5138 #: rhodecode/public/js/src/i18n_messages.js:5
5009 #: rhodecode/templates/pullrequests/pullrequest_show.mako:288
5139 #: rhodecode/templates/pullrequests/pullrequest_show.mako:288
5010 msgid "Close"
5140 msgid "Close"
5011 msgstr ""
5141 msgstr ""
5012
5142
5013 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:14
5143 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:18
5014 #: rhodecode/templates/codeblocks/diffs.mako:131
5144 #: rhodecode/templates/codeblocks/diffs.mako:131
5015 msgid "Collapse all files"
5145 msgid "Collapse all files"
5016 msgstr ""
5146 msgstr ""
5017
5147
5018 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:15
5019 msgid "Collapse {0} commit"
5020 msgstr ""
5021
5022 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5023 msgid "Collapse {0} commits"
5024 msgstr ""
5025
5026 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:19
5148 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:19
5027 msgid "Context file: "
5149 msgid "Collapse {0} commit"
5028 msgstr ""
5150 msgstr ""
5029
5151
5030 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:20
5152 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:20
5031 msgid "Delete this comment?"
5153 msgid "Collapse {0} commits"
5032 msgstr ""
5033
5034 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:21
5035 msgid "Diff to Commit "
5036 msgstr ""
5037
5038 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:22
5039 #: rhodecode/templates/codeblocks/diffs.mako:129
5040 msgid "Expand all files"
5041 msgstr ""
5154 msgstr ""
5042
5155
5043 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:23
5156 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:23
5044 msgid "Expand {0} commit"
5157 msgid "Context file: "
5045 msgstr ""
5046
5047 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
5048 msgid "Expand {0} commits"
5049 msgstr ""
5158 msgstr ""
5050
5159
5051 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:25
5160 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:25
5052 msgid "Fetching repository state failed. Error code: {0} {1}. Try <a href=\"{2}\">refreshing</a> this page."
5161 msgid "Delete this comment?"
5053 msgstr ""
5162 msgstr ""
5054
5163
5055 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:26
5164 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:26
5056 msgid "Fetching repository state failed. Error code: {0} {1}. Try refreshing this page."
5165 msgid "Diff to Commit "
5057 msgstr ""
5166 msgstr ""
5058
5167
5059 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:27
5168 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:27
5060 msgid "Follow"
5169 msgid "Error during search operation"
5170 msgstr ""
5171
5172 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:28
5173 #: rhodecode/templates/codeblocks/diffs.mako:129
5174 msgid "Expand all files"
5061 msgstr ""
5175 msgstr ""
5062
5176
5063 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:29
5177 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:29
5064 msgid "Hide full context diff"
5178 msgid "Expand {0} commit"
5065 msgstr ""
5179 msgstr ""
5066
5180
5067 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:30
5181 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:30
5068 msgid "Hide whitespace changes"
5182 msgid "Expand {0} commits"
5069 msgstr ""
5183 msgstr ""
5070
5184
5071 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:31
5185 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:31
5186 msgid "Fetching repository state failed. Error code: {0} {1}. Try <a href=\"{2}\">refreshing</a> this page."
5187 msgstr ""
5188
5189 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:32
5190 msgid "Fetching repository state failed. Error code: {0} {1}. Try refreshing this page."
5191 msgstr ""
5192
5193 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:34
5194 msgid "Follow"
5195 msgstr ""
5196
5197 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:36
5198 msgid "Hide full context diff"
5199 msgstr ""
5200
5201 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:37
5202 msgid "Hide whitespace changes"
5203 msgstr ""
5204
5205 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
5072 #: rhodecode/public/js/src/i18n_messages.js:4
5206 #: rhodecode/public/js/src/i18n_messages.js:4
5073 msgid "Invite reviewers to this discussion"
5207 msgid "Invite reviewers to this discussion"
5074 msgstr ""
5208 msgstr ""
5075
5209
5076 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:33
5077 msgid "Leave a comment, or click resolve button to resolve TODO comment #{0}"
5078 msgstr ""
5079
5080 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:40
5210 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:40
5081 msgid "No bookmarks available yet."
5211 msgid "Leave a comment, or click resolve button to resolve TODO comment #{0}"
5082 msgstr ""
5083
5084 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:41
5085 msgid "No branches available yet."
5086 msgstr ""
5087
5088 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:42
5089 msgid "No forks available yet."
5090 msgstr ""
5091
5092 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:43
5093 msgid "No gists available yet."
5094 msgstr ""
5095
5096 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:46
5097 msgid "No pull requests available yet."
5098 msgstr ""
5099
5100 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
5101 msgid "No repositories available yet."
5102 msgstr ""
5212 msgstr ""
5103
5213
5104 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:48
5214 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:48
5105 msgid "No repositories present."
5215 msgid "No bookmarks available yet."
5106 msgstr ""
5216 msgstr ""
5107
5217
5108 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:49
5218 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:49
5109 msgid "No repository groups available yet."
5219 msgid "No branches available yet."
5110 msgstr ""
5220 msgstr ""
5111
5221
5112 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:50
5222 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:50
5113 msgid "No repository groups present."
5223 msgid "No forks available yet."
5114 msgstr ""
5224 msgstr ""
5115
5225
5116 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:52
5226 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:51
5117 msgid "No ssh keys available yet."
5227 msgid "No gists available yet."
5118 msgstr ""
5119
5120 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
5121 msgid "No tags available yet."
5122 msgstr ""
5228 msgstr ""
5123
5229
5124 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:54
5230 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:54
5125 msgid "No user groups available yet."
5231 msgid "No pull requests available yet."
5126 msgstr ""
5232 msgstr ""
5127
5233
5128 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:55
5234 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:55
5129 msgid "No users available yet."
5235 msgid "No repositories available yet."
5130 msgstr ""
5236 msgstr ""
5131
5237
5132 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:59
5238 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:56
5133 #: rhodecode/templates/commits/changelog.mako:78
5239 msgid "No repositories present."
5134 msgid "Open new pull request"
5240 msgstr ""
5241
5242 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:57
5243 msgid "No repository groups available yet."
5244 msgstr ""
5245
5246 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:58
5247 msgid "No repository groups present."
5135 msgstr ""
5248 msgstr ""
5136
5249
5137 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:60
5250 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:60
5251 msgid "No ssh keys available yet."
5252 msgstr ""
5253
5254 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:61
5255 msgid "No tags available yet."
5256 msgstr ""
5257
5258 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:62
5259 msgid "No user groups available yet."
5260 msgstr ""
5261
5262 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:63
5263 msgid "No users available yet."
5264 msgstr ""
5265
5266 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:67
5267 #: rhodecode/templates/commits/changelog.mako:78
5268 msgid "Open new pull request"
5269 msgstr ""
5270
5271 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:68
5138 msgid "Open new pull request for selected commit"
5272 msgid "Open new pull request for selected commit"
5139 msgstr ""
5273 msgstr ""
5140
5274
5141 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:66
5275 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:73
5276 msgid "Please wait creating pull request..."
5277 msgstr ""
5278
5279 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:75
5142 msgid "Saving..."
5280 msgid "Saving..."
5143 msgstr ""
5281 msgstr ""
5144
5282
5145 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:69
5283 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:78
5146 #: rhodecode/public/js/src/i18n_messages.js:6
5284 #: rhodecode/public/js/src/i18n_messages.js:6
5147 #: rhodecode/templates/admin/settings/settings_email.mako:50
5285 #: rhodecode/templates/admin/settings/settings_email.mako:50
5148 msgid "Send"
5286 msgid "Send"
5149 msgstr ""
5287 msgstr ""
5150
5288
5151 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
5289 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:82
5152 msgid "Show at Commit "
5290 msgid "Show at Commit "
5153 msgstr ""
5291 msgstr ""
5154
5292
5155 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:73
5156 msgid "Show commit range {0} ... {1}"
5157 msgstr ""
5158
5159 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:74
5160 msgid "Show full context diff"
5161 msgstr ""
5162
5163 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:75
5164 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:40
5165 msgid "Show more"
5166 msgstr ""
5167
5168 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:76
5169 msgid "Show selected commit __S"
5170 msgstr ""
5171
5172 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:77
5173 msgid "Show selected commits __S ... __E"
5174 msgstr ""
5175
5176 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:78
5177 msgid "Show whitespace changes"
5178 msgstr ""
5179
5180 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:80
5181 msgid "Start following this repository"
5182 msgstr ""
5183
5184 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:83
5293 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:83
5185 msgid "Stop following this repository"
5294 msgid "Show commit range {0} ... {1}"
5295 msgstr ""
5296
5297 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:84
5298 msgid "Show full context diff"
5299 msgstr ""
5300
5301 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:85
5302 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:40
5303 msgid "Show more"
5186 msgstr ""
5304 msgstr ""
5187
5305
5188 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:86
5306 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:86
5189 #: rhodecode/public/js/src/i18n_messages.js:7
5307 msgid "Show selected commit __S"
5190 msgid "Switch to chat"
5191 msgstr ""
5308 msgstr ""
5192
5309
5193 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:87
5310 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:87
5194 #: rhodecode/public/js/src/i18n_messages.js:8
5311 msgid "Show selected commits __S ... __E"
5195 msgid "Switch to comment"
5312 msgstr ""
5196 msgstr ""
5313
5197
5314 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:89
5198 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
5315 msgid "Show whitespace changes"
5199 msgid "There are currently no open pull requests requiring your participation."
5200 msgstr ""
5316 msgstr ""
5201
5317
5202 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:91
5318 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:91
5203 msgid "Toggle Wide Mode diff"
5319 msgid "Start following this repository"
5204 msgstr ""
5320 msgstr ""
5205
5321
5206 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:92
5322 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:94
5207 msgid "Unfollow"
5323 msgid "Stop following this repository"
5208 msgstr ""
5324 msgstr ""
5209
5325
5210 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
5326 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:97
5211 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5327 #: rhodecode/public/js/src/i18n_messages.js:7
5212 msgid "activated"
5328 msgid "Switch to chat"
5213 msgstr ""
5329 msgstr ""
5214
5330
5215 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
5331 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
5216 msgid "disabled"
5332 #: rhodecode/public/js/src/i18n_messages.js:8
5333 msgid "Switch to comment"
5334 msgstr ""
5335
5336 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:101
5337 msgid "There are currently no open pull requests requiring your participation."
5217 msgstr ""
5338 msgstr ""
5218
5339
5219 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:104
5340 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:104
5220 msgid "enabled"
5341 msgid "This pull requests will consist of <strong>{0} commit</strong>."
5342 msgstr ""
5343
5344 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5345 msgid "This pull requests will consist of <strong>{0} commits</strong>."
5221 msgstr ""
5346 msgstr ""
5222
5347
5223 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:106
5348 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:106
5224 msgid "files"
5349 msgid "Toggle Wide Mode diff"
5225 msgstr ""
5350 msgstr ""
5226
5351
5227 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:107
5352 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:107
5228 msgid "go to numeric commit"
5353 msgid "Unfollow"
5229 msgstr ""
5354 msgstr ""
5230
5355
5231 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:112
5356 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
5232 #: rhodecode/templates/index_base.mako:27
5233 #: rhodecode/templates/pullrequests/pullrequest.mako:136
5234 msgid "loading..."
5235 msgstr ""
5236
5237 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:114
5238 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5357 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5239 msgid "not active"
5358 msgid "activated"
5240 msgstr ""
5359 msgstr ""
5241
5360
5242 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:118
5361 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:119
5243 msgid "specify commit"
5362 msgid "disabled"
5244 msgstr ""
5363 msgstr ""
5245
5364
5246 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:121
5365 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:120
5247 msgid "{0} ({1} inactive) of {2} user groups ({3} inactive)"
5366 msgid "enabled"
5248 msgstr ""
5367 msgstr ""
5249
5368
5250 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:122
5369 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:122
5251 msgid "{0} ({1} inactive) of {2} users ({3} inactive)"
5370 msgid "files"
5252 msgstr ""
5371 msgstr ""
5253
5372
5254 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:123
5373 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:123
5255 msgid "{0} active out of {1} users"
5374 msgid "go to numeric commit"
5256 msgstr ""
5375 msgstr ""
5257
5376
5258 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:128
5377 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:128
5259 msgid "{0} days"
5378 #: rhodecode/templates/index_base.mako:27
5260 msgstr ""
5379 #: rhodecode/templates/pullrequests/pullrequest.mako:136
5261
5380 msgid "loading..."
5262 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
5381 msgstr ""
5263 msgid "{0} hours"
5382
5264 msgstr ""
5383 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
5265
5384 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5266 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:133
5385 msgid "not active"
5267 msgid "{0} months"
5268 msgstr ""
5269
5270 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:134
5271 msgid "{0} of {1} repositories"
5272 msgstr ""
5386 msgstr ""
5273
5387
5274 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:135
5388 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:135
5275 msgid "{0} of {1} repository groups"
5389 msgid "specify commit"
5276 msgstr ""
5277
5278 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
5279 msgid "{0} out of {1} ssh keys"
5280 msgstr ""
5281
5282 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:137
5283 msgid "{0} out of {1} users"
5284 msgstr ""
5390 msgstr ""
5285
5391
5286 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:138
5392 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:138
5287 msgid "{0} repositories"
5393 msgid "{0} ({1} inactive) of {2} user groups ({3} inactive)"
5288 msgstr ""
5394 msgstr ""
5289
5395
5290 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:139
5396 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:139
5291 msgid "{0} repository groups"
5397 msgid "{0} ({1} inactive) of {2} users ({3} inactive)"
5292 msgstr ""
5398 msgstr ""
5293
5399
5294 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:142
5400 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:140
5295 msgid "{0} user groups ({1} inactive)"
5401 msgid "{0} active out of {1} users"
5296 msgstr ""
5297
5298 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:143
5299 msgid "{0} users ({1} inactive)"
5300 msgstr ""
5402 msgstr ""
5301
5403
5302 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:145
5404 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:145
5405 msgid "{0} days"
5406 msgstr ""
5407
5408 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:147
5409 msgid "{0} hours"
5410 msgstr ""
5411
5412 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:150
5413 msgid "{0} months"
5414 msgstr ""
5415
5416 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:151
5417 msgid "{0} of {1} repositories"
5418 msgstr ""
5419
5420 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:152
5421 msgid "{0} of {1} repository groups"
5422 msgstr ""
5423
5424 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:153
5425 msgid "{0} out of {1} ssh keys"
5426 msgstr ""
5427
5428 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:154
5429 msgid "{0} out of {1} users"
5430 msgstr ""
5431
5432 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:155
5433 msgid "{0} repositories"
5434 msgstr ""
5435
5436 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:156
5437 msgid "{0} repository groups"
5438 msgstr ""
5439
5440 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:159
5441 msgid "{0} user groups ({1} inactive)"
5442 msgstr ""
5443
5444 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:160
5445 msgid "{0} users ({1} inactive)"
5446 msgstr ""
5447
5448 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:162
5303 msgid "{0} years"
5449 msgid "{0} years"
5304 msgstr ""
5450 msgstr ""
5305
5451
5306 #: rhodecode/public/js/src/math_jax/extensions/HelpDialog.js:19
5452 #: rhodecode/public/js/src/math_jax/extensions/HelpDialog.js:19
5307 msgid "HelpDialog"
5453 msgid "HelpDialog"
5308 msgstr ""
5454 msgstr ""
5309
5455
5310 #: rhodecode/public/js/src/math_jax/jax/output/HTML-CSS/autoload/mglyph.js:19
5456 #: rhodecode/public/js/src/math_jax/jax/output/HTML-CSS/autoload/mglyph.js:19
5311 msgid "MathML"
5457 msgid "MathML"
5312 msgstr ""
5458 msgstr ""
5313
5459
5314 #: rhodecode/templates/index.mako:5
5460 #: rhodecode/templates/index.mako:5
5315 msgid "Dashboard"
5461 msgid "Dashboard"
5316 msgstr ""
5462 msgstr ""
5317
5463
5318 #: rhodecode/templates/index_base.mako:21
5464 #: rhodecode/templates/index_base.mako:21
5319 msgid "No repositories or repositories groups exists here."
5465 msgid "No repositories or repositories groups exists here."
5320 msgstr ""
5466 msgstr ""
5321
5467
5322 #: rhodecode/templates/index_base.mako:80
5468 #: rhodecode/templates/index_base.mako:80
5323 #: rhodecode/templates/index_base.mako:167
5469 #: rhodecode/templates/index_base.mako:167
5324 #: rhodecode/templates/admin/gists/gist_index.mako:107
5470 #: rhodecode/templates/admin/gists/gist_index.mako:107
5325 #: rhodecode/templates/admin/integrations/list.mako:72
5471 #: rhodecode/templates/admin/integrations/list.mako:72
5326 #: rhodecode/templates/admin/my_account/my_account_repos.mako:28
5472 #: rhodecode/templates/admin/my_account/my_account_repos.mako:28
5327 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:39
5473 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:39
5328 #: rhodecode/templates/admin/my_account/my_account_watched.mako:28
5474 #: rhodecode/templates/admin/my_account/my_account_watched.mako:28
5329 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:74
5475 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:74
5330 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:16
5476 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:16
5331 #: rhodecode/templates/admin/repos/repos.mako:76
5477 #: rhodecode/templates/admin/repos/repos.mako:76
5332 #: rhodecode/templates/admin/user_groups/user_groups.mako:76
5478 #: rhodecode/templates/admin/user_groups/user_groups.mako:76
5333 #: rhodecode/templates/admin/users/user_edit_groups.mako:57
5479 #: rhodecode/templates/admin/users/user_edit_groups.mako:57
5334 #: rhodecode/templates/base/perms_summary.mako:168
5480 #: rhodecode/templates/base/perms_summary.mako:173
5335 #: rhodecode/templates/base/perms_summary.mako:242
5481 #: rhodecode/templates/base/perms_summary.mako:247
5336 #: rhodecode/templates/bookmarks/bookmarks.mako:57
5482 #: rhodecode/templates/bookmarks/bookmarks.mako:57
5337 #: rhodecode/templates/branches/branches.mako:56
5483 #: rhodecode/templates/branches/branches.mako:56
5338 #: rhodecode/templates/files/files_browser_tree.mako:13
5484 #: rhodecode/templates/files/files_browser_tree.mako:16
5339 #: rhodecode/templates/tags/tags.mako:57
5485 #: rhodecode/templates/tags/tags.mako:57
5340 msgid "Name"
5486 msgid "Name"
5341 msgstr ""
5487 msgstr ""
5342
5488
5343 #: rhodecode/templates/index_base.mako:89
5489 #: rhodecode/templates/index_base.mako:89
5344 #: rhodecode/templates/index_base.mako:176
5490 #: rhodecode/templates/index_base.mako:176
5345 #: rhodecode/templates/admin/gists/gist_index.mako:109
5491 #: rhodecode/templates/admin/gists/gist_index.mako:109
5346 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:21
5492 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:27
5347 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:81
5493 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:87
5348 #: rhodecode/templates/admin/my_account/my_account_profile.mako:68
5494 #: rhodecode/templates/admin/my_account/my_account_profile.mako:68
5349 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:10
5495 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:10
5350 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:58
5496 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:58
5351 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:44
5497 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:44
5352 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:49
5498 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:49
5353 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:53
5499 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:58
5354 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:55
5500 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:55
5355 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:77
5501 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:77
5356 #: rhodecode/templates/admin/repos/repo_add_base.mako:83
5502 #: rhodecode/templates/admin/repos/repo_add_base.mako:83
5357 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:30
5503 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:30
5358 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:170
5504 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:170
5359 #: rhodecode/templates/admin/repos/repos.mako:84
5505 #: rhodecode/templates/admin/repos/repos.mako:84
5360 #: rhodecode/templates/admin/user_groups/user_group_add.mako:42
5506 #: rhodecode/templates/admin/user_groups/user_group_add.mako:42
5361 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:46
5507 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:46
5362 #: rhodecode/templates/admin/user_groups/user_groups.mako:78
5508 #: rhodecode/templates/admin/user_groups/user_groups.mako:78
5363 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:26
5509 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:32
5364 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:85
5510 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:91
5365 #: rhodecode/templates/admin/users/user_edit_groups.mako:62
5511 #: rhodecode/templates/admin/users/user_edit_groups.mako:62
5366 #: rhodecode/templates/admin/users/user_edit_ips.mako:17
5512 #: rhodecode/templates/admin/users/user_edit_ips.mako:17
5367 #: rhodecode/templates/admin/users/user_edit_profile.mako:74
5513 #: rhodecode/templates/admin/users/user_edit_profile.mako:74
5368 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:15
5514 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:15
5369 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:57
5515 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:57
5370 #: rhodecode/templates/base/issue_tracker_settings.mako:78
5516 #: rhodecode/templates/base/issue_tracker_settings.mako:78
5371 #: rhodecode/templates/compare/compare_commits.mako:19
5517 #: rhodecode/templates/compare/compare_commits.mako:19
5372 #: rhodecode/templates/email_templates/pull_request_review.mako:43
5518 #: rhodecode/templates/email_templates/pull_request_review.mako:45
5373 #: rhodecode/templates/email_templates/pull_request_review.mako:123
5519 #: rhodecode/templates/email_templates/pull_request_review.mako:126
5374 #: rhodecode/templates/email_templates/pull_request_update.mako:43
5520 #: rhodecode/templates/email_templates/pull_request_update.mako:45
5375 #: rhodecode/templates/email_templates/pull_request_update.mako:135
5521 #: rhodecode/templates/email_templates/pull_request_update.mako:139
5376 #: rhodecode/templates/forks/fork.mako:56
5522 #: rhodecode/templates/forks/fork.mako:56
5377 #: rhodecode/templates/forks/forks.mako:62
5523 #: rhodecode/templates/forks/forks.mako:62
5378 #: rhodecode/templates/pullrequests/pullrequest.mako:50
5524 #: rhodecode/templates/pullrequests/pullrequest.mako:50
5379 #: rhodecode/templates/pullrequests/pullrequest_show.mako:562
5525 #: rhodecode/templates/pullrequests/pullrequest_show.mako:560
5380 #: rhodecode/templates/summary/components.mako:159
5526 #: rhodecode/templates/summary/components.mako:159
5381 #: rhodecode/templates/user_group/profile.mako:25
5527 #: rhodecode/templates/user_group/profile.mako:25
5382 #: rhodecode/templates/users/user_profile.mako:59
5528 #: rhodecode/templates/users/user_profile.mako:59
5383 msgid "Description"
5529 msgid "Description"
5384 msgstr ""
5530 msgstr ""
5385
5531
5386 #: rhodecode/templates/index_base.mako:96
5532 #: rhodecode/templates/index_base.mako:96
5387 #: rhodecode/templates/index_base.mako:183
5533 #: rhodecode/templates/index_base.mako:183
5388 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:80
5534 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:80
5389 #: rhodecode/templates/admin/repos/repos.mako:91
5535 #: rhodecode/templates/admin/repos/repos.mako:91
5390 msgid "Last Change"
5536 msgid "Last Change"
5391 msgstr ""
5537 msgstr ""
5392
5538
5393 #: rhodecode/templates/index_base.mako:109
5539 #: rhodecode/templates/index_base.mako:109
5394 #: rhodecode/templates/index_base.mako:196
5540 #: rhodecode/templates/index_base.mako:196
5395 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:50
5541 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:50
5396 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:8
5542 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:8
5397 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:37
5543 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:37
5398 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:84
5544 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:84
5399 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:6
5545 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:6
5400 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:152
5546 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:152
5401 #: rhodecode/templates/admin/repos/repos.mako:104
5547 #: rhodecode/templates/admin/repos/repos.mako:104
5402 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:6
5548 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:6
5403 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:28
5549 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:28
5404 #: rhodecode/templates/admin/user_groups/user_groups.mako:86
5550 #: rhodecode/templates/admin/user_groups/user_groups.mako:86
5405 #: rhodecode/templates/admin/users/user_edit_groups.mako:68
5551 #: rhodecode/templates/admin/users/user_edit_groups.mako:68
5406 #: rhodecode/templates/forks/forks.mako:58
5552 #: rhodecode/templates/forks/forks.mako:58
5407 #: rhodecode/templates/summary/components.mako:148
5553 #: rhodecode/templates/summary/components.mako:148
5408 #: rhodecode/templates/user_group/profile.mako:35
5554 #: rhodecode/templates/user_group/profile.mako:35
5409 msgid "Owner"
5555 msgid "Owner"
5410 msgstr ""
5556 msgstr ""
5411
5557
5412 #: rhodecode/templates/index_base.mako:190
5558 #: rhodecode/templates/index_base.mako:190
5413 #: rhodecode/templates/admin/repos/repos.mako:98
5559 #: rhodecode/templates/admin/repos/repos.mako:98
5414 #: rhodecode/templates/bookmarks/bookmarks.mako:64
5560 #: rhodecode/templates/bookmarks/bookmarks.mako:64
5415 #: rhodecode/templates/branches/branches.mako:63
5561 #: rhodecode/templates/branches/branches.mako:63
5416 #: rhodecode/templates/compare/compare_commits.mako:17
5562 #: rhodecode/templates/compare/compare_commits.mako:17
5417 #: rhodecode/templates/email_templates/commit_comment.mako:56
5563 #: rhodecode/templates/email_templates/commit_comment.mako:60
5418 #: rhodecode/templates/email_templates/commit_comment.mako:109
5564 #: rhodecode/templates/email_templates/commit_comment.mako:114
5419 #: rhodecode/templates/email_templates/commit_comment.mako:135
5565 #: rhodecode/templates/email_templates/commit_comment.mako:141
5420 #: rhodecode/templates/files/file_authors_box.mako:28
5566 #: rhodecode/templates/files/file_authors_box.mako:28
5421 #: rhodecode/templates/pullrequests/pullrequest_show.mako:560
5567 #: rhodecode/templates/pullrequests/pullrequest_show.mako:558
5422 #: rhodecode/templates/search/search_commit.mako:9
5568 #: rhodecode/templates/search/search_commit.mako:9
5423 #: rhodecode/templates/summary/components.mako:117
5569 #: rhodecode/templates/summary/components.mako:117
5424 #: rhodecode/templates/summary/components.mako:125
5570 #: rhodecode/templates/summary/components.mako:125
5425 #: rhodecode/templates/summary/summary_commits.mako:8
5571 #: rhodecode/templates/summary/summary_commits.mako:8
5426 #: rhodecode/templates/tags/tags.mako:64
5572 #: rhodecode/templates/tags/tags.mako:64
5427 msgid "Commit"
5573 msgid "Commit"
5428 msgstr ""
5574 msgstr ""
5429
5575
5430 #: rhodecode/templates/index_repo_group.mako:5
5576 #: rhodecode/templates/index_repo_group.mako:5
5431 #, python-format
5577 #, python-format
5432 msgid "%s Repository group dashboard"
5578 msgid "%s Repository group dashboard"
5433 msgstr ""
5579 msgstr ""
5434
5580
5435 #: rhodecode/templates/index_repo_group.mako:13
5581 #: rhodecode/templates/index_repo_group.mako:13
5436 #: rhodecode/templates/base/base.mako:804
5582 #: rhodecode/templates/base/base.mako:811
5437 #: rhodecode/templates/base/base.mako:805
5583 #: rhodecode/templates/base/base.mako:812
5438 msgid "Home"
5584 msgid "Home"
5439 msgstr ""
5585 msgstr ""
5440
5586
5441 #: rhodecode/templates/login.mako:5 rhodecode/templates/login.mako:91
5587 #: rhodecode/templates/login.mako:5 rhodecode/templates/login.mako:91
5442 #: rhodecode/templates/debug_style/login.html:60
5588 #: rhodecode/templates/debug_style/login.html:60
5443 msgid "Sign In"
5589 msgid "Sign In"
5444 msgstr ""
5590 msgstr ""
5445
5591
5446 #: rhodecode/templates/login.mako:39
5592 #: rhodecode/templates/login.mako:39
5447 msgid "Sign In using username/password"
5593 msgid "Sign In using username/password"
5448 msgstr ""
5594 msgstr ""
5449
5595
5450 #: rhodecode/templates/login.mako:53
5596 #: rhodecode/templates/login.mako:53
5451 msgid "Forgot your password?"
5597 msgid "Forgot your password?"
5452 msgstr ""
5598 msgstr ""
5453
5599
5454 #: rhodecode/templates/login.mako:66
5600 #: rhodecode/templates/login.mako:66
5455 msgid "Remember my indefinitely"
5601 msgid "Remember my indefinitely"
5456 msgstr ""
5602 msgstr ""
5457
5603
5458 #: rhodecode/templates/login.mako:68
5604 #: rhodecode/templates/login.mako:68
5459 msgid "Remember me for {}"
5605 msgid "Remember me for {}"
5460 msgstr ""
5606 msgstr ""
5461
5607
5462 #: rhodecode/templates/login.mako:74
5608 #: rhodecode/templates/login.mako:74
5463 msgid "Create a new account."
5609 msgid "Create a new account."
5464 msgstr ""
5610 msgstr ""
5465
5611
5466 #: rhodecode/templates/login.mako:81
5612 #: rhodecode/templates/login.mako:81
5467 msgid "Password reset is disabled."
5613 msgid "Password reset is disabled."
5468 msgstr ""
5614 msgstr ""
5469
5615
5470 #: rhodecode/templates/login.mako:82
5616 #: rhodecode/templates/login.mako:82
5471 msgid "Please contact "
5617 msgid "Please contact "
5472 msgstr ""
5618 msgstr ""
5473
5619
5474 #: rhodecode/templates/login.mako:84 rhodecode/templates/password_reset.mako:39
5620 #: rhodecode/templates/login.mako:84 rhodecode/templates/password_reset.mako:39
5475 #: rhodecode/templates/base/base.mako:59
5621 #: rhodecode/templates/base/base.mako:61
5476 msgid "Support"
5622 msgid "Support"
5477 msgstr ""
5623 msgstr ""
5478
5624
5479 #: rhodecode/templates/login.mako:85 rhodecode/templates/password_reset.mako:40
5625 #: rhodecode/templates/login.mako:85 rhodecode/templates/password_reset.mako:40
5480 msgid "or"
5626 msgid "or"
5481 msgstr ""
5627 msgstr ""
5482
5628
5483 #: rhodecode/templates/login.mako:87 rhodecode/templates/password_reset.mako:42
5629 #: rhodecode/templates/login.mako:87 rhodecode/templates/password_reset.mako:42
5484 msgid "an administrator if you need help."
5630 msgid "an administrator if you need help."
5485 msgstr ""
5631 msgstr ""
5486
5632
5487 #: rhodecode/templates/login.mako:91
5633 #: rhodecode/templates/login.mako:91
5488 msgid "Sign in to {}"
5634 msgid "Sign in to {}"
5489 msgstr ""
5635 msgstr ""
5490
5636
5491 #: rhodecode/templates/password_reset.mako:5
5637 #: rhodecode/templates/password_reset.mako:5
5492 msgid "Reset Password"
5638 msgid "Reset Password"
5493 msgstr ""
5639 msgstr ""
5494
5640
5495 #: rhodecode/templates/password_reset.mako:37
5641 #: rhodecode/templates/password_reset.mako:37
5496 msgid "Password reset is disabled. Please contact "
5642 msgid "Password reset is disabled. Please contact "
5497 msgstr ""
5643 msgstr ""
5498
5644
5499 #: rhodecode/templates/password_reset.mako:49
5645 #: rhodecode/templates/password_reset.mako:49
5500 msgid "Reset your Password"
5646 msgid "Reset your Password"
5501 msgstr ""
5647 msgstr ""
5502
5648
5503 #: rhodecode/templates/password_reset.mako:50
5649 #: rhodecode/templates/password_reset.mako:50
5504 msgid "Go to the login page to sign in."
5650 msgid "Go to the login page to sign in."
5505 msgstr ""
5651 msgstr ""
5506
5652
5507 #: rhodecode/templates/password_reset.mako:54
5653 #: rhodecode/templates/password_reset.mako:54
5508 msgid "Email Address"
5654 msgid "Email Address"
5509 msgstr ""
5655 msgstr ""
5510
5656
5511 #: rhodecode/templates/password_reset.mako:60
5657 #: rhodecode/templates/password_reset.mako:60
5512 msgid "Password reset link will be sent to matching email address"
5658 msgid "Password reset link will be sent to matching email address"
5513 msgstr ""
5659 msgstr ""
5514
5660
5515 #: rhodecode/templates/password_reset.mako:64
5661 #: rhodecode/templates/password_reset.mako:64
5516 #: rhodecode/templates/register.mako:104
5662 #: rhodecode/templates/register.mako:104
5517 msgid "Captcha"
5663 msgid "Captcha"
5518 msgstr ""
5664 msgstr ""
5519
5665
5520 #: rhodecode/templates/password_reset.mako:75
5666 #: rhodecode/templates/password_reset.mako:75
5521 msgid "Send password reset email"
5667 msgid "Send password reset email"
5522 msgstr ""
5668 msgstr ""
5523
5669
5524 #: rhodecode/templates/register.mako:5
5670 #: rhodecode/templates/register.mako:5
5525 msgid "Create an Account"
5671 msgid "Create an Account"
5526 msgstr ""
5672 msgstr ""
5527
5673
5528 #: rhodecode/templates/register.mako:38
5674 #: rhodecode/templates/register.mako:38
5529 msgid "Create an account linked with {}"
5675 msgid "Create an account linked with {}"
5530 msgstr ""
5676 msgstr ""
5531
5677
5532 #: rhodecode/templates/register.mako:40
5678 #: rhodecode/templates/register.mako:40
5533 msgid "Create an account"
5679 msgid "Create an account"
5534 msgstr ""
5680 msgstr ""
5535
5681
5536 #: rhodecode/templates/register.mako:43
5682 #: rhodecode/templates/register.mako:43
5537 msgid "Go to the login page to sign in with an existing account."
5683 msgid "Go to the login page to sign in with an existing account."
5538 msgstr ""
5684 msgstr ""
5539
5685
5540 #: rhodecode/templates/register.mako:69
5686 #: rhodecode/templates/register.mako:69
5541 msgid "Re-enter password"
5687 msgid "Re-enter password"
5542 msgstr ""
5688 msgstr ""
5543
5689
5544 #: rhodecode/templates/register.mako:81
5690 #: rhodecode/templates/register.mako:81
5545 #: rhodecode/templates/admin/my_account/my_account_profile.mako:48
5691 #: rhodecode/templates/admin/my_account/my_account_profile.mako:48
5546 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:38
5692 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:38
5547 #: rhodecode/templates/admin/users/user_add.mako:68
5693 #: rhodecode/templates/admin/users/user_add.mako:68
5548 #: rhodecode/templates/admin/users/user_edit_profile.mako:47
5694 #: rhodecode/templates/admin/users/user_edit_profile.mako:47
5549 #: rhodecode/templates/admin/users/users.mako:78
5695 #: rhodecode/templates/admin/users/users.mako:78
5550 msgid "First Name"
5696 msgid "First Name"
5551 msgstr ""
5697 msgstr ""
5552
5698
5553 #: rhodecode/templates/register.mako:88
5699 #: rhodecode/templates/register.mako:88
5554 #: rhodecode/templates/admin/my_account/my_account_profile.mako:58
5700 #: rhodecode/templates/admin/my_account/my_account_profile.mako:58
5555 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:47
5701 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:47
5556 #: rhodecode/templates/admin/users/user_add.mako:77
5702 #: rhodecode/templates/admin/users/user_add.mako:77
5557 #: rhodecode/templates/admin/users/user_edit_profile.mako:56
5703 #: rhodecode/templates/admin/users/user_edit_profile.mako:56
5558 #: rhodecode/templates/admin/users/users.mako:80
5704 #: rhodecode/templates/admin/users/users.mako:80
5559 msgid "Last Name"
5705 msgid "Last Name"
5560 msgstr ""
5706 msgstr ""
5561
5707
5562 #: rhodecode/templates/register.mako:116
5708 #: rhodecode/templates/register.mako:116
5563 msgid "Account activation requires admin approval."
5709 msgid "Account activation requires admin approval."
5564 msgstr ""
5710 msgstr ""
5565
5711
5566 #: rhodecode/templates/register.mako:123
5712 #: rhodecode/templates/register.mako:123
5567 msgid "Create Account"
5713 msgid "Create Account"
5568 msgstr ""
5714 msgstr ""
5569
5715
5570 #: rhodecode/templates/register.mako:123
5716 #: rhodecode/templates/register.mako:123
5571 msgid "Create Account in {}"
5717 msgid "Create Account in {}"
5572 msgstr ""
5718 msgstr ""
5573
5719
5574 #: rhodecode/templates/admin/admin_audit_log_entry.mako:6
5720 #: rhodecode/templates/admin/admin_audit_log_entry.mako:6
5575 msgid "Admin audit log entry"
5721 msgid "Admin audit log entry"
5576 msgstr ""
5722 msgstr ""
5577
5723
5578 #: rhodecode/templates/admin/admin_audit_log_entry.mako:26
5724 #: rhodecode/templates/admin/admin_audit_log_entry.mako:26
5579 msgid "Audit long entry"
5725 msgid "Audit long entry"
5580 msgstr ""
5726 msgstr ""
5581
5727
5582 #: rhodecode/templates/admin/admin_audit_log_entry.mako:34
5728 #: rhodecode/templates/admin/admin_audit_log_entry.mako:34
5583 #: rhodecode/templates/users/user.mako:4
5729 #: rhodecode/templates/users/user.mako:4
5584 msgid "User"
5730 msgid "User"
5585 msgstr ""
5731 msgstr ""
5586
5732
5587 #: rhodecode/templates/admin/admin_audit_log_entry.mako:46
5733 #: rhodecode/templates/admin/admin_audit_log_entry.mako:46
5588 #: rhodecode/templates/admin/admin_log_base.mako:11
5734 #: rhodecode/templates/admin/admin_log_base.mako:11
5589 #: rhodecode/templates/bookmarks/bookmarks.mako:59
5735 #: rhodecode/templates/bookmarks/bookmarks.mako:59
5590 #: rhodecode/templates/branches/branches.mako:58
5736 #: rhodecode/templates/branches/branches.mako:58
5591 #: rhodecode/templates/tags/tags.mako:59
5737 #: rhodecode/templates/tags/tags.mako:59
5592 msgid "Date"
5738 msgid "Date"
5593 msgstr ""
5739 msgstr ""
5594
5740
5595 #: rhodecode/templates/admin/admin_audit_log_entry.mako:54
5741 #: rhodecode/templates/admin/admin_audit_log_entry.mako:54
5596 #: rhodecode/templates/admin/admin_log_base.mako:12
5742 #: rhodecode/templates/admin/admin_log_base.mako:12
5597 msgid "IP"
5743 msgid "IP"
5598 msgstr ""
5744 msgstr ""
5599
5745
5600 #: rhodecode/templates/admin/admin_audit_log_entry.mako:63
5746 #: rhodecode/templates/admin/admin_audit_log_entry.mako:63
5601 #: rhodecode/templates/admin/admin_log_base.mako:8
5747 #: rhodecode/templates/admin/admin_log_base.mako:8
5602 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:25
5748 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:31
5603 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:13
5749 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:13
5604 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:55
5750 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:55
5605 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:86
5751 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:86
5606 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:13
5752 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:13
5607 #: rhodecode/templates/admin/repos/repos.mako:116
5753 #: rhodecode/templates/admin/repos/repos.mako:116
5608 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:75
5754 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:75
5609 #: rhodecode/templates/admin/user_groups/user_groups.mako:88
5755 #: rhodecode/templates/admin/user_groups/user_groups.mako:88
5610 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:30
5756 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:36
5611 #: rhodecode/templates/admin/users/user_edit_groups.mako:76
5757 #: rhodecode/templates/admin/users/user_edit_groups.mako:76
5612 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:18
5758 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:18
5613 #: rhodecode/templates/admin/users/users.mako:91
5759 #: rhodecode/templates/admin/users/users.mako:91
5614 #: rhodecode/templates/forks/forks.mako:69
5760 #: rhodecode/templates/forks/forks.mako:69
5615 msgid "Action"
5761 msgid "Action"
5616 msgstr ""
5762 msgstr ""
5617
5763
5618 #: rhodecode/templates/admin/admin_audit_log_entry.mako:81
5764 #: rhodecode/templates/admin/admin_audit_log_entry.mako:81
5619 #: rhodecode/templates/admin/admin_log_base.mako:9
5765 #: rhodecode/templates/admin/admin_log_base.mako:9
5620 msgid "Action Data"
5766 msgid "Action Data"
5621 msgstr ""
5767 msgstr ""
5622
5768
5623 #: rhodecode/templates/admin/admin_audit_log_entry.mako:89
5769 #: rhodecode/templates/admin/admin_audit_log_entry.mako:89
5624 #: rhodecode/templates/admin/admin_log_base.mako:47
5770 #: rhodecode/templates/admin/admin_log_base.mako:47
5625 msgid "data not available for v1 entries type"
5771 msgid "data not available for v1 entries type"
5626 msgstr ""
5772 msgstr ""
5627
5773
5628 #: rhodecode/templates/admin/admin_audit_log_entry.mako:95
5774 #: rhodecode/templates/admin/admin_audit_log_entry.mako:95
5629 #: rhodecode/templates/admin/admin_log_base.mako:10
5775 #: rhodecode/templates/admin/admin_log_base.mako:10
5630 #: rhodecode/templates/admin/defaults/defaults.mako:32
5776 #: rhodecode/templates/admin/defaults/defaults.mako:32
5631 #: rhodecode/templates/admin/permissions/permissions_objects.mako:16
5777 #: rhodecode/templates/admin/permissions/permissions_objects.mako:16
5632 #: rhodecode/templates/base/base.mako:649
5778 #: rhodecode/templates/base/base.mako:656
5633 #: rhodecode/templates/base/base.mako:651
5779 #: rhodecode/templates/base/base.mako:658
5634 #: rhodecode/templates/base/base.mako:653
5780 #: rhodecode/templates/base/base.mako:660
5635 #: rhodecode/templates/search/search_commit.mako:8
5781 #: rhodecode/templates/search/search_commit.mako:8
5636 #: rhodecode/templates/search/search_path.mako:7
5782 #: rhodecode/templates/search/search_path.mako:7
5637 msgid "Repository"
5783 msgid "Repository"
5638 msgstr ""
5784 msgstr ""
5639
5785
5640 #: rhodecode/templates/admin/admin_audit_logs.mako:5
5786 #: rhodecode/templates/admin/admin_audit_logs.mako:5
5641 #: rhodecode/templates/base/base.mako:106
5787 #: rhodecode/templates/base/base.mako:111
5642 msgid "Admin audit logs"
5788 msgid "Admin audit logs"
5643 msgstr ""
5789 msgstr ""
5644
5790
5645 #: rhodecode/templates/admin/admin_audit_logs.mako:25
5791 #: rhodecode/templates/admin/admin_audit_logs.mako:25
5646 msgid "filter..."
5792 msgid "filter..."
5647 msgstr ""
5793 msgstr ""
5648
5794
5649 #: rhodecode/templates/admin/admin_audit_logs.mako:26
5795 #: rhodecode/templates/admin/admin_audit_logs.mako:26
5650 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:15
5796 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:15
5651 #: rhodecode/templates/admin/users/user_edit_audit.mako:18
5797 #: rhodecode/templates/admin/users/user_edit_audit.mako:18
5652 #: rhodecode/templates/journal/journal.mako:13
5798 #: rhodecode/templates/journal/journal.mako:13
5653 msgid "filter"
5799 msgid "filter"
5654 msgstr ""
5800 msgstr ""
5655
5801
5656 #: rhodecode/templates/admin/admin_audit_logs.mako:27
5802 #: rhodecode/templates/admin/admin_audit_logs.mako:27
5657 #: rhodecode/templates/admin/repos/repo_edit.mako:91
5803 #: rhodecode/templates/admin/repos/repo_edit.mako:91
5658 #: rhodecode/templates/admin/users/user_edit.mako:48
5804 #: rhodecode/templates/admin/users/user_edit.mako:48
5659 msgid "Audit logs"
5805 msgid "Audit logs"
5660 msgstr ""
5806 msgstr ""
5661
5807
5662 #: rhodecode/templates/admin/admin_audit_logs.mako:29
5808 #: rhodecode/templates/admin/admin_audit_logs.mako:29
5663 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:18
5809 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:18
5664 #: rhodecode/templates/admin/users/user_edit_audit.mako:21
5810 #: rhodecode/templates/admin/users/user_edit_audit.mako:21
5665 #: rhodecode/templates/journal/journal.mako:16
5811 #: rhodecode/templates/journal/journal.mako:16
5666 msgid "Example Queries"
5812 msgid "Example Queries"
5667 msgstr ""
5813 msgstr ""
5668
5814
5669 #: rhodecode/templates/admin/admin_log_base.mako:6
5815 #: rhodecode/templates/admin/admin_log_base.mako:6
5670 msgid "Uid"
5816 msgid "Uid"
5671 msgstr ""
5817 msgstr ""
5672
5818
5673 #: rhodecode/templates/admin/admin_log_base.mako:42
5819 #: rhodecode/templates/admin/admin_log_base.mako:42
5674 msgid "toggle"
5820 msgid "toggle"
5675 msgstr ""
5821 msgstr ""
5676
5822
5677 #: rhodecode/templates/admin/admin_log_base.mako:68
5823 #: rhodecode/templates/admin/admin_log_base.mako:68
5678 msgid "No actions yet"
5824 msgid "No actions yet"
5679 msgstr ""
5825 msgstr ""
5680
5826
5681 #: rhodecode/templates/admin/main.mako:5
5827 #: rhodecode/templates/admin/main.mako:5
5682 #: rhodecode/templates/admin/settings/settings.mako:5
5828 #: rhodecode/templates/admin/settings/settings.mako:5
5683 msgid "Settings administration"
5829 msgid "Settings administration"
5684 msgstr ""
5830 msgstr ""
5685
5831
5686 #: rhodecode/templates/admin/main.mako:26
5832 #: rhodecode/templates/admin/main.mako:26
5687 msgid "Administration area"
5833 msgid "Administration area"
5688 msgstr ""
5834 msgstr ""
5689
5835
5690 #: rhodecode/templates/admin/main.mako:30
5836 #: rhodecode/templates/admin/main.mako:30
5691 msgid "Repositories under administration"
5837 msgid "Repositories under administration"
5692 msgstr ""
5838 msgstr ""
5693
5839
5694 #: rhodecode/templates/admin/main.mako:34
5840 #: rhodecode/templates/admin/main.mako:34
5695 #: rhodecode/templates/admin/repos/repo_add.mako:22
5841 #: rhodecode/templates/admin/repos/repo_add.mako:22
5696 #: rhodecode/templates/admin/repos/repos.mako:31
5842 #: rhodecode/templates/admin/repos/repos.mako:31
5697 msgid "Add Repository"
5843 msgid "Add Repository"
5698 msgstr ""
5844 msgstr ""
5699
5845
5700 #: rhodecode/templates/admin/main.mako:39
5846 #: rhodecode/templates/admin/main.mako:39
5701 msgid "Repository groups under administration"
5847 msgid "Repository groups under administration"
5702 msgstr ""
5848 msgstr ""
5703
5849
5704 #: rhodecode/templates/admin/main.mako:43
5850 #: rhodecode/templates/admin/main.mako:43
5705 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:16
5851 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:16
5706 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:31
5852 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:31
5707 msgid "Add Repository Group"
5853 msgid "Add Repository Group"
5708 msgstr ""
5854 msgstr ""
5709
5855
5710 #: rhodecode/templates/admin/main.mako:48
5856 #: rhodecode/templates/admin/main.mako:48
5711 msgid "User groups under administration"
5857 msgid "User groups under administration"
5712 msgstr ""
5858 msgstr ""
5713
5859
5714 #: rhodecode/templates/admin/main.mako:52
5860 #: rhodecode/templates/admin/main.mako:52
5715 #: rhodecode/templates/admin/user_groups/user_group_add.mako:15
5861 #: rhodecode/templates/admin/user_groups/user_group_add.mako:15
5716 #: rhodecode/templates/admin/user_groups/user_groups.mako:31
5862 #: rhodecode/templates/admin/user_groups/user_groups.mako:31
5717 msgid "Add User Group"
5863 msgid "Add User Group"
5718 msgstr ""
5864 msgstr ""
5719
5865
5720 #: rhodecode/templates/admin/auth/auth_settings.mako:5
5866 #: rhodecode/templates/admin/auth/auth_settings.mako:5
5721 #: rhodecode/templates/admin/auth/plugin_settings.mako:5
5867 #: rhodecode/templates/admin/auth/plugin_settings.mako:5
5722 msgid "Authentication Settings"
5868 msgid "Authentication Settings"
5723 msgstr ""
5869 msgstr ""
5724
5870
5725 #: rhodecode/templates/admin/auth/auth_settings.mako:42
5871 #: rhodecode/templates/admin/auth/auth_settings.mako:42
5726 msgid "Enabled and Available Plugins"
5872 msgid "Enabled and Available Plugins"
5727 msgstr ""
5873 msgstr ""
5728
5874
5729 #: rhodecode/templates/admin/auth/auth_settings.mako:48
5875 #: rhodecode/templates/admin/auth/auth_settings.mako:48
5730 msgid "Ordered Activated Plugins"
5876 msgid "Ordered Activated Plugins"
5731 msgstr ""
5877 msgstr ""
5732
5878
5733 #: rhodecode/templates/admin/auth/auth_settings.mako:53
5879 #: rhodecode/templates/admin/auth/auth_settings.mako:53
5734 msgid ""
5880 msgid ""
5735 "List of plugins, separated by commas.\n"
5881 "List of plugins, separated by commas.\n"
5736 "The order of the plugins is also the order in which RhodeCode Enterprise will try to authenticate a user."
5882 "The order of the plugins is also the order in which RhodeCode Enterprise will try to authenticate a user."
5737 msgstr ""
5883 msgstr ""
5738
5884
5739 #: rhodecode/templates/admin/auth/auth_settings.mako:60
5885 #: rhodecode/templates/admin/auth/auth_settings.mako:60
5740 msgid "Activate"
5886 msgid "Activate"
5741 msgstr ""
5887 msgstr ""
5742
5888
5743 #: rhodecode/templates/admin/auth/auth_settings.mako:61
5889 #: rhodecode/templates/admin/auth/auth_settings.mako:61
5744 msgid "Plugin Name"
5890 msgid "Plugin Name"
5745 msgstr ""
5891 msgstr ""
5746
5892
5747 #: rhodecode/templates/admin/auth/auth_settings.mako:62
5893 #: rhodecode/templates/admin/auth/auth_settings.mako:62
5894 #: rhodecode/templates/base/base.mako:62
5748 msgid "Documentation"
5895 msgid "Documentation"
5749 msgstr ""
5896 msgstr ""
5750
5897
5751 #: rhodecode/templates/admin/auth/auth_settings.mako:63
5898 #: rhodecode/templates/admin/auth/auth_settings.mako:63
5752 msgid "Plugin ID"
5899 msgid "Plugin ID"
5753 msgstr ""
5900 msgstr ""
5754
5901
5755 #: rhodecode/templates/admin/auth/auth_settings.mako:85
5902 #: rhodecode/templates/admin/auth/auth_settings.mako:85
5756 #: rhodecode/templates/admin/auth/plugin_settings.mako:96
5903 #: rhodecode/templates/admin/auth/plugin_settings.mako:96
5757 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:63
5904 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:63
5758 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:109
5905 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:109
5759 #: rhodecode/templates/admin/permissions/permissions_application.mako:59
5906 #: rhodecode/templates/admin/permissions/permissions_application.mako:59
5760 #: rhodecode/templates/admin/permissions/permissions_objects.mako:59
5907 #: rhodecode/templates/admin/permissions/permissions_objects.mako:59
5761 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:216
5908 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:226
5762 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:77
5909 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:77
5763 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:66
5910 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:66
5764 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:84
5911 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:84
5765 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:200
5912 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:206
5766 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:250
5913 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:250
5767 #: rhodecode/templates/admin/settings/settings_hooks.mako:63
5914 #: rhodecode/templates/admin/settings/settings_hooks.mako:63
5768 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:15
5915 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:15
5769 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:206
5916 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:216
5770 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:106
5917 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:106
5771 #: rhodecode/templates/admin/users/user_edit_groups.mako:30
5918 #: rhodecode/templates/admin/users/user_edit_groups.mako:30
5772 #: rhodecode/templates/admin/users/user_edit_profile.mako:154
5919 #: rhodecode/templates/admin/users/user_edit_profile.mako:154
5773 #: rhodecode/templates/base/default_perms_box.mako:88
5920 #: rhodecode/templates/base/default_perms_box.mako:101
5774 msgid "Save"
5921 msgid "Save"
5775 msgstr ""
5922 msgstr ""
5776
5923
5777 #: rhodecode/templates/admin/auth/plugin_settings.mako:46
5924 #: rhodecode/templates/admin/auth/plugin_settings.mako:46
5778 msgid "Plugin"
5925 msgid "Plugin"
5779 msgstr ""
5926 msgstr ""
5780
5927
5781 #: rhodecode/templates/admin/defaults/defaults.mako:5
5928 #: rhodecode/templates/admin/defaults/defaults.mako:5
5782 #: rhodecode/templates/admin/defaults/defaults.mako:14
5929 #: rhodecode/templates/admin/defaults/defaults.mako:14
5783 msgid "Repositories defaults"
5930 msgid "Repositories defaults"
5784 msgstr ""
5931 msgstr ""
5785
5932
5786 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:3
5933 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:3
5787 msgid "Default Settings For New Repositories"
5934 msgid "Default Settings For New Repositories"
5788 msgstr ""
5935 msgstr ""
5789
5936
5790 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:14
5937 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:14
5791 #: rhodecode/templates/admin/gists/gist_index.mako:105
5938 #: rhodecode/templates/admin/gists/gist_index.mako:105
5792 #: rhodecode/templates/admin/integrations/list.mako:73
5939 #: rhodecode/templates/admin/integrations/list.mako:73
5793 #: rhodecode/templates/admin/repos/repo_add_base.mako:58
5940 #: rhodecode/templates/admin/repos/repo_add_base.mako:58
5794 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:12
5941 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:12
5795 msgid "Type"
5942 msgid "Type"
5796 msgstr ""
5943 msgstr ""
5797
5944
5798 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:23
5945 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:23
5799 #: rhodecode/templates/admin/repos/repo_add_base.mako:113
5946 #: rhodecode/templates/admin/repos/repo_add_base.mako:113
5800 msgid "Private Repository"
5947 msgid "Private Repository"
5801 msgstr ""
5948 msgstr ""
5802
5949
5803 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:27
5950 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:27
5804 #: rhodecode/templates/admin/repos/repo_add_base.mako:117
5951 #: rhodecode/templates/admin/repos/repo_add_base.mako:117
5805 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:199
5952 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:199
5806 #: rhodecode/templates/forks/fork.mako:92
5953 #: rhodecode/templates/forks/fork.mako:92
5807 msgid "Private repositories are only visible to people explicitly added as collaborators."
5954 msgid "Private repositories are only visible to people explicitly added as collaborators."
5808 msgstr ""
5955 msgstr ""
5809
5956
5810 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:34
5957 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:34
5811 msgid "Enable Statistics"
5958 msgid "Enable Statistics"
5812 msgstr ""
5959 msgstr ""
5813
5960
5814 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:38
5961 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:38
5815 msgid "Enable a statistics window on the repository summary page."
5962 msgid "Enable a statistics window on the repository summary page."
5816 msgstr ""
5963 msgstr ""
5817
5964
5818 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:44
5965 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:44
5819 msgid "Enable Downloads"
5966 msgid "Enable Downloads"
5820 msgstr ""
5967 msgstr ""
5821
5968
5822 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:48
5969 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:48
5823 msgid "Enable the download option on the repository summary page."
5970 msgid "Enable the download option on the repository summary page."
5824 msgstr ""
5971 msgstr ""
5825
5972
5826 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:54
5973 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:54
5827 msgid "Enable Locking"
5974 msgid "Enable Locking"
5828 msgstr ""
5975 msgstr ""
5829
5976
5830 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:58
5977 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:58
5831 msgid "Enable automatic repository locking. Pulling from a repository will lock it, and it is unlocked by pushing back by the same user."
5978 msgid "Enable automatic repository locking. Pulling from a repository will lock it, and it is unlocked by pushing back by the same user."
5832 msgstr ""
5979 msgstr ""
5833
5980
5834 #: rhodecode/templates/admin/gists/gist_edit.mako:5
5981 #: rhodecode/templates/admin/gists/gist_edit.mako:5
5835 msgid "Edit Gist"
5982 msgid "Edit Gist"
5836 msgstr ""
5983 msgstr ""
5837
5984
5838 #: rhodecode/templates/admin/gists/gist_edit.mako:33
5985 #: rhodecode/templates/admin/gists/gist_edit.mako:33
5839 #: rhodecode/templates/admin/gists/gist_new.mako:34
5986 #: rhodecode/templates/admin/gists/gist_new.mako:34
5840 msgid "Gist lifetime"
5987 msgid "Gist lifetime"
5841 msgstr ""
5988 msgstr ""
5842
5989
5843 #: rhodecode/templates/admin/gists/gist_edit.mako:36
5990 #: rhodecode/templates/admin/gists/gist_edit.mako:36
5844 msgid "Gist access level"
5991 msgid "Gist access level"
5845 msgstr ""
5992 msgstr ""
5846
5993
5847 #: rhodecode/templates/admin/gists/gist_edit.mako:40
5994 #: rhodecode/templates/admin/gists/gist_edit.mako:40
5848 #: rhodecode/templates/admin/gists/gist_new.mako:40
5995 #: rhodecode/templates/admin/gists/gist_new.mako:40
5849 msgid "Gist description ..."
5996 msgid "Gist description ..."
5850 msgstr ""
5997 msgstr ""
5851
5998
5852 #: rhodecode/templates/admin/gists/gist_edit.mako:54
5999 #: rhodecode/templates/admin/gists/gist_edit.mako:54
5853 #: rhodecode/templates/admin/gists/gist_new.mako:48
6000 #: rhodecode/templates/admin/gists/gist_new.mako:48
5854 #: rhodecode/templates/files/files_add.mako:67
6001 #: rhodecode/templates/files/files_add.mako:66
5855 #: rhodecode/templates/files/files_edit.mako:69
6002 #: rhodecode/templates/files/files_edit.mako:68
5856 msgid "plain"
6003 msgid "plain"
5857 msgstr ""
6004 msgstr ""
5858
6005
5859 #: rhodecode/templates/admin/gists/gist_edit.mako:99
6006 #: rhodecode/templates/admin/gists/gist_edit.mako:99
5860 msgid "Update Gist"
6007 msgid "Update Gist"
5861 msgstr ""
6008 msgstr ""
5862
6009
5863 #: rhodecode/templates/admin/gists/gist_edit.mako:100
6010 #: rhodecode/templates/admin/gists/gist_edit.mako:100
5864 #: rhodecode/templates/base/issue_tracker_settings.mako:150
6011 #: rhodecode/templates/base/issue_tracker_settings.mako:150
5865 #: rhodecode/templates/changeset/changeset_file_comment.mako:395
6012 #: rhodecode/templates/changeset/changeset_file_comment.mako:460
5866 #: rhodecode/templates/codeblocks/diffs.mako:88
6013 #: rhodecode/templates/codeblocks/diffs.mako:88
5867 #: rhodecode/templates/pullrequests/pullrequest_show.mako:75
6014 #: rhodecode/templates/pullrequests/pullrequest_show.mako:75
5868 msgid "Cancel"
6015 msgid "Cancel"
5869 msgstr ""
6016 msgstr ""
5870
6017
5871 #: rhodecode/templates/admin/gists/gist_edit.mako:123
6018 #: rhodecode/templates/admin/gists/gist_edit.mako:123
5872 #, python-format
6019 #, python-format
5873 msgid "Gist was updated since you started editing. Copy your changes and click %(here)s to reload the new version."
6020 msgid "Gist was updated since you started editing. Copy your changes and click %(here)s to reload the new version."
5874 msgstr ""
6021 msgstr ""
5875
6022
5876 #: rhodecode/templates/admin/gists/gist_index.mako:6
6023 #: rhodecode/templates/admin/gists/gist_index.mako:6
5877 msgid "Private Gists for user {}"
6024 msgid "Private Gists for user {}"
5878 msgstr ""
6025 msgstr ""
5879
6026
5880 #: rhodecode/templates/admin/gists/gist_index.mako:8
6027 #: rhodecode/templates/admin/gists/gist_index.mako:8
5881 msgid "Public Gists for user {}"
6028 msgid "Public Gists for user {}"
5882 msgstr ""
6029 msgstr ""
5883
6030
5884 #: rhodecode/templates/admin/gists/gist_index.mako:10
6031 #: rhodecode/templates/admin/gists/gist_index.mako:10
5885 msgid "Public Gists"
6032 msgid "Public Gists"
5886 msgstr ""
6033 msgstr ""
5887
6034
5888 #: rhodecode/templates/admin/gists/gist_index.mako:30
6035 #: rhodecode/templates/admin/gists/gist_index.mako:30
5889 msgid "All gists"
6036 msgid "All gists"
5890 msgstr ""
6037 msgstr ""
5891
6038
5892 #: rhodecode/templates/admin/gists/gist_index.mako:32
6039 #: rhodecode/templates/admin/gists/gist_index.mako:32
5893 msgid "All public"
6040 msgid "All public"
5894 msgstr ""
6041 msgstr ""
5895
6042
5896 #: rhodecode/templates/admin/gists/gist_index.mako:34
6043 #: rhodecode/templates/admin/gists/gist_index.mako:34
5897 msgid "My gists"
6044 msgid "My gists"
5898 msgstr ""
6045 msgstr ""
5899
6046
5900 #: rhodecode/templates/admin/gists/gist_index.mako:35
6047 #: rhodecode/templates/admin/gists/gist_index.mako:35
5901 msgid "My private"
6048 msgid "My private"
5902 msgstr ""
6049 msgstr ""
5903
6050
5904 #: rhodecode/templates/admin/gists/gist_index.mako:36
6051 #: rhodecode/templates/admin/gists/gist_index.mako:36
5905 msgid "My public"
6052 msgid "My public"
5906 msgstr ""
6053 msgstr ""
5907
6054
5908 #: rhodecode/templates/admin/gists/gist_index.mako:43
6055 #: rhodecode/templates/admin/gists/gist_index.mako:43
5909 msgid "Create New Gist"
6056 msgid "Create New Gist"
5910 msgstr ""
6057 msgstr ""
5911
6058
5912 #: rhodecode/templates/admin/gists/gist_index.mako:54
6059 #: rhodecode/templates/admin/gists/gist_index.mako:54
5913 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:23
6060 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:23
5914 #: rhodecode/templates/admin/my_account/my_account_repos.mako:7
6061 #: rhodecode/templates/admin/my_account/my_account_repos.mako:7
5915 #: rhodecode/templates/admin/my_account/my_account_watched.mako:7
6062 #: rhodecode/templates/admin/my_account/my_account_watched.mako:7
5916 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:11
6063 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:11
5917 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:25
6064 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:25
5918 #: rhodecode/templates/admin/repos/repos.mako:25
6065 #: rhodecode/templates/admin/repos/repos.mako:25
5919 #: rhodecode/templates/admin/user_groups/user_groups.mako:25
6066 #: rhodecode/templates/admin/user_groups/user_groups.mako:25
5920 #: rhodecode/templates/admin/users/users.mako:26
6067 #: rhodecode/templates/admin/users/users.mako:26
5921 #: rhodecode/templates/bookmarks/bookmarks.mako:33
6068 #: rhodecode/templates/bookmarks/bookmarks.mako:33
5922 #: rhodecode/templates/branches/branches.mako:33
6069 #: rhodecode/templates/branches/branches.mako:33
5923 #: rhodecode/templates/journal/journal.mako:12
6070 #: rhodecode/templates/journal/journal.mako:12
5924 #: rhodecode/templates/pullrequests/pullrequests.mako:53
6071 #: rhodecode/templates/pullrequests/pullrequests.mako:53
5925 #: rhodecode/templates/tags/tags.mako:33
6072 #: rhodecode/templates/tags/tags.mako:33
5926 msgid "quick filter..."
6073 msgid "quick filter..."
5927 msgstr ""
6074 msgstr ""
5928
6075
5929 #: rhodecode/templates/admin/gists/gist_index.mako:103
6076 #: rhodecode/templates/admin/gists/gist_index.mako:103
5930 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:91
6077 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:91
5931 #: rhodecode/templates/bookmarks/bookmarks.mako:61
6078 #: rhodecode/templates/bookmarks/bookmarks.mako:61
5932 #: rhodecode/templates/branches/branches.mako:60
6079 #: rhodecode/templates/branches/branches.mako:60
5933 #: rhodecode/templates/commits/changelog.mako:119
6080 #: rhodecode/templates/commits/changelog.mako:119
5934 #: rhodecode/templates/compare/compare_commits.mako:16
6081 #: rhodecode/templates/compare/compare_commits.mako:16
5935 #: rhodecode/templates/files/files_browser_tree.mako:17
6082 #: rhodecode/templates/files/files_browser_tree.mako:20
5936 #: rhodecode/templates/pullrequests/pullrequest_show.mako:559
6083 #: rhodecode/templates/pullrequests/pullrequest_show.mako:557
5937 #: rhodecode/templates/pullrequests/pullrequests.mako:98
6084 #: rhodecode/templates/pullrequests/pullrequests.mako:98
5938 #: rhodecode/templates/search/search_commit.mako:18
6085 #: rhodecode/templates/search/search_commit.mako:18
5939 #: rhodecode/templates/summary/summary_commits.mako:11
6086 #: rhodecode/templates/summary/summary_commits.mako:11
5940 #: rhodecode/templates/tags/tags.mako:61
6087 #: rhodecode/templates/tags/tags.mako:61
5941 msgid "Author"
6088 msgid "Author"
5942 msgstr ""
6089 msgstr ""
5943
6090
5944 #: rhodecode/templates/admin/gists/gist_index.mako:111
6091 #: rhodecode/templates/admin/gists/gist_index.mako:111
5945 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:11
6092 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:11
5946 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:51
6093 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:51
5947 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:9
6094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:9
5948 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:7
6095 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:7
5949 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:7
6096 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:7
5950 #: rhodecode/templates/admin/users/user_edit_advanced.mako:6
6097 #: rhodecode/templates/admin/users/user_edit_advanced.mako:6
5951 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:16
6098 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:16
5952 #: rhodecode/templates/pullrequests/pullrequest_show.mako:51
6099 #: rhodecode/templates/pullrequests/pullrequest_show.mako:51
5953 msgid "Created on"
6100 msgid "Created on"
5954 msgstr ""
6101 msgstr ""
5955
6102
5956 #: rhodecode/templates/admin/gists/gist_index.mako:113
6103 #: rhodecode/templates/admin/gists/gist_index.mako:113
5957 msgid "Expires"
6104 msgid "Expires"
5958 msgstr ""
6105 msgstr ""
5959
6106
5960 #: rhodecode/templates/admin/gists/gist_new.mako:5
6107 #: rhodecode/templates/admin/gists/gist_new.mako:5
5961 #: rhodecode/templates/base/base.mako:568
6108 #: rhodecode/templates/base/base.mako:575
5962 msgid "New Gist"
6109 msgid "New Gist"
5963 msgstr ""
6110 msgstr ""
5964
6111
5965 #: rhodecode/templates/admin/gists/gist_new.mako:31
6112 #: rhodecode/templates/admin/gists/gist_new.mako:31
5966 msgid "Gist id"
6113 msgid "Gist id"
5967 msgstr ""
6114 msgstr ""
5968
6115
5969 #: rhodecode/templates/admin/gists/gist_new.mako:32
6116 #: rhodecode/templates/admin/gists/gist_new.mako:32
5970 msgid "Auto generated"
6117 msgid "Auto generated"
5971 msgstr ""
6118 msgstr ""
5972
6119
5973 #: rhodecode/templates/admin/gists/gist_new.mako:37
6120 #: rhodecode/templates/admin/gists/gist_new.mako:37
5974 msgid "Private Gist access level"
6121 msgid "Private Gist access level"
5975 msgstr ""
6122 msgstr ""
5976
6123
5977 #: rhodecode/templates/admin/gists/gist_new.mako:47
6124 #: rhodecode/templates/admin/gists/gist_new.mako:47
5978 msgid "name gist file..."
6125 msgid "name gist file..."
5979 msgstr ""
6126 msgstr ""
5980
6127
5981 #: rhodecode/templates/admin/gists/gist_new.mako:61
6128 #: rhodecode/templates/admin/gists/gist_new.mako:61
5982 msgid "Create Gist"
6129 msgid "Create Gist"
5983 msgstr ""
6130 msgstr ""
5984
6131
5985 #: rhodecode/templates/admin/gists/gist_new.mako:69
6132 #: rhodecode/templates/admin/gists/gist_new.mako:69
5986 #: rhodecode/templates/admin/gists/gist_new.mako:70
6133 #: rhodecode/templates/admin/gists/gist_new.mako:70
5987 #: rhodecode/templates/data_table/_dt_elements.mako:352
6134 #: rhodecode/templates/data_table/_dt_elements.mako:352
5988 msgid "Private Gist"
6135 msgid "Private Gist"
5989 msgstr ""
6136 msgstr ""
5990
6137
5991 #: rhodecode/templates/admin/gists/gist_new.mako:70
6138 #: rhodecode/templates/admin/gists/gist_new.mako:70
5992 msgid "Private Gists are not listed and only accessible through their secret url."
6139 msgid "Private Gists are not listed and only accessible through their secret url."
5993 msgstr ""
6140 msgstr ""
5994
6141
5995 #: rhodecode/templates/admin/gists/gist_new.mako:73
6142 #: rhodecode/templates/admin/gists/gist_new.mako:73
5996 #: rhodecode/templates/admin/gists/gist_new.mako:74
6143 #: rhodecode/templates/admin/gists/gist_new.mako:74
5997 #: rhodecode/templates/data_table/_dt_elements.mako:350
6144 #: rhodecode/templates/data_table/_dt_elements.mako:350
5998 msgid "Public Gist"
6145 msgid "Public Gist"
5999 msgstr ""
6146 msgstr ""
6000
6147
6001 #: rhodecode/templates/admin/gists/gist_new.mako:74
6148 #: rhodecode/templates/admin/gists/gist_new.mako:74
6002 msgid "Public Gists are accessible to anyone and listed in Gists page."
6149 msgid "Public Gists are accessible to anyone and listed in Gists page."
6003 msgstr ""
6150 msgstr ""
6004
6151
6005 #: rhodecode/templates/admin/gists/gist_show.mako:14
6152 #: rhodecode/templates/admin/gists/gist_show.mako:14
6006 #: rhodecode/templates/admin/gists/gist_show.mako:21
6153 #: rhodecode/templates/admin/gists/gist_show.mako:21
6007 msgid "Gist"
6154 msgid "Gist"
6008 msgstr ""
6155 msgstr ""
6009
6156
6010 #: rhodecode/templates/admin/gists/gist_show.mako:41
6157 #: rhodecode/templates/admin/gists/gist_show.mako:41
6011 msgid "Copy the url"
6158 msgid "Copy the url"
6012 msgstr ""
6159 msgstr ""
6013
6160
6014 #: rhodecode/templates/admin/gists/gist_show.mako:47
6161 #: rhodecode/templates/admin/gists/gist_show.mako:47
6015 #: rhodecode/templates/files/files_source.mako:106
6162 #: rhodecode/templates/files/files_source.mako:116
6016 msgid "Copy content"
6163 msgid "Copy content"
6017 msgstr ""
6164 msgstr ""
6018
6165
6019 #: rhodecode/templates/admin/gists/gist_show.mako:52
6166 #: rhodecode/templates/admin/gists/gist_show.mako:52
6020 msgid "Show as Raw"
6167 msgid "Show as Raw"
6021 msgstr ""
6168 msgstr ""
6022
6169
6023 #: rhodecode/templates/admin/gists/gist_show.mako:73
6170 #: rhodecode/templates/admin/gists/gist_show.mako:73
6024 msgid "created"
6171 msgid "created"
6025 msgstr ""
6172 msgstr ""
6026
6173
6027 #: rhodecode/templates/admin/gists/gist_show.mako:74
6174 #: rhodecode/templates/admin/gists/gist_show.mako:74
6028 msgid "expires"
6175 msgid "expires"
6029 msgstr ""
6176 msgstr ""
6030
6177
6031 #: rhodecode/templates/admin/gists/gist_show.mako:95
6178 #: rhodecode/templates/admin/gists/gist_show.mako:95
6032 #: rhodecode/templates/files/files_delete.mako:58
6179 #: rhodecode/templates/files/files_delete.mako:57
6033 #: rhodecode/templates/files/files_source.mako:128
6180 #: rhodecode/templates/files/files_source.mako:138
6034 msgid "Show as raw"
6181 msgid "Show as raw"
6035 msgstr ""
6182 msgstr ""
6036
6183
6037 #: rhodecode/templates/admin/integrations/base.mako:14
6184 #: rhodecode/templates/admin/integrations/base.mako:14
6038 msgid "Integrations Settings"
6185 msgid "Integrations Settings"
6039 msgstr ""
6186 msgstr ""
6040
6187
6041 #: rhodecode/templates/admin/integrations/base.mako:23
6188 #: rhodecode/templates/admin/integrations/base.mako:23
6042 #: rhodecode/templates/admin/integrations/form.mako:8
6189 #: rhodecode/templates/admin/integrations/form.mako:8
6043 #: rhodecode/templates/admin/integrations/form.mako:21
6190 #: rhodecode/templates/admin/integrations/form.mako:21
6044 #: rhodecode/templates/admin/integrations/form.mako:32
6191 #: rhodecode/templates/admin/integrations/form.mako:32
6045 #: rhodecode/templates/admin/integrations/global.mako:14
6192 #: rhodecode/templates/admin/integrations/global.mako:14
6046 #: rhodecode/templates/admin/integrations/list.mako:21
6193 #: rhodecode/templates/admin/integrations/list.mako:21
6047 #: rhodecode/templates/admin/integrations/list.mako:25
6194 #: rhodecode/templates/admin/integrations/list.mako:25
6048 #: rhodecode/templates/admin/integrations/list.mako:29
6195 #: rhodecode/templates/admin/integrations/list.mako:29
6049 #: rhodecode/templates/admin/integrations/list.mako:36
6196 #: rhodecode/templates/admin/integrations/list.mako:36
6050 #: rhodecode/templates/admin/integrations/new.mako:15
6197 #: rhodecode/templates/admin/integrations/new.mako:15
6051 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:33
6198 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:33
6052 #: rhodecode/templates/admin/repos/repo_edit.mako:74
6199 #: rhodecode/templates/admin/repos/repo_edit.mako:74
6053 #: rhodecode/templates/base/base.mako:113
6200 #: rhodecode/templates/base/base.mako:118
6054 msgid "Integrations"
6201 msgid "Integrations"
6055 msgstr ""
6202 msgstr ""
6056
6203
6057 #: rhodecode/templates/admin/integrations/form.mako:30
6204 #: rhodecode/templates/admin/integrations/form.mako:30
6058 #: rhodecode/templates/admin/integrations/list.mako:16
6205 #: rhodecode/templates/admin/integrations/list.mako:16
6059 #: rhodecode/templates/admin/integrations/new.mako:7
6206 #: rhodecode/templates/admin/integrations/new.mako:7
6060 #: rhodecode/templates/admin/integrations/new.mako:9
6207 #: rhodecode/templates/admin/integrations/new.mako:9
6061 #: rhodecode/templates/admin/integrations/new.mako:13
6208 #: rhodecode/templates/admin/integrations/new.mako:13
6062 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:30
6209 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:30
6063 #: rhodecode/templates/admin/repos/repo_edit.mako:15
6210 #: rhodecode/templates/admin/repos/repo_edit.mako:15
6064 #: rhodecode/templates/admin/repos/repo_edit.mako:42
6211 #: rhodecode/templates/admin/repos/repo_edit.mako:42
6065 #: rhodecode/templates/admin/settings/settings.mako:14
6212 #: rhodecode/templates/admin/settings/settings.mako:14
6066 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:34
6213 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:34
6067 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:9
6214 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:9
6068 #: rhodecode/templates/base/base.mako:115
6215 #: rhodecode/templates/base/base.mako:120
6069 msgid "Settings"
6216 msgid "Settings"
6070 msgstr ""
6217 msgstr ""
6071
6218
6072 #: rhodecode/templates/admin/integrations/form.mako:60
6219 #: rhodecode/templates/admin/integrations/form.mako:60
6073 #, python-format
6220 #, python-format
6074 msgid "Create New %(integration_type)s Integration"
6221 msgid "Create New %(integration_type)s Integration"
6075 msgstr ""
6222 msgstr ""
6076
6223
6077 #: rhodecode/templates/admin/integrations/global.mako:5
6224 #: rhodecode/templates/admin/integrations/global.mako:5
6078 msgid "Integrations administration"
6225 msgid "Integrations administration"
6079 msgstr ""
6226 msgstr ""
6080
6227
6081 #: rhodecode/templates/admin/integrations/list.mako:44
6228 #: rhodecode/templates/admin/integrations/list.mako:44
6082 msgid "Current Integrations for Repository: {repo_name}"
6229 msgid "Current Integrations for Repository: {repo_name}"
6083 msgstr ""
6230 msgstr ""
6084
6231
6085 #: rhodecode/templates/admin/integrations/list.mako:46
6232 #: rhodecode/templates/admin/integrations/list.mako:46
6086 msgid "Repository Group Integrations: {}"
6233 msgid "Repository Group Integrations: {}"
6087 msgstr ""
6234 msgstr ""
6088
6235
6089 #: rhodecode/templates/admin/integrations/list.mako:48
6236 #: rhodecode/templates/admin/integrations/list.mako:48
6090 msgid "Current Integrations"
6237 msgid "Current Integrations"
6091 msgstr ""
6238 msgstr ""
6092
6239
6093 #: rhodecode/templates/admin/integrations/list.mako:65
6240 #: rhodecode/templates/admin/integrations/list.mako:65
6094 #: rhodecode/templates/admin/integrations/new.mako:18
6241 #: rhodecode/templates/admin/integrations/new.mako:18
6095 msgid "Create new integration"
6242 msgid "Create new integration"
6096 msgstr ""
6243 msgstr ""
6097
6244
6098 #: rhodecode/templates/admin/integrations/list.mako:74
6245 #: rhodecode/templates/admin/integrations/list.mako:74
6099 msgid "Scope"
6246 msgid "Scope"
6100 msgstr ""
6247 msgstr ""
6101
6248
6102 #: rhodecode/templates/admin/integrations/list.mako:75
6249 #: rhodecode/templates/admin/integrations/list.mako:75
6103 #: rhodecode/templates/compare/compare_diff.mako:84
6250 #: rhodecode/templates/compare/compare_diff.mako:84
6104 msgid "Actions"
6251 msgid "Actions"
6105 msgstr ""
6252 msgstr ""
6106
6253
6107 #: rhodecode/templates/admin/integrations/list.mako:85
6254 #: rhodecode/templates/admin/integrations/list.mako:85
6108 msgid "No {type} integrations for repo {repo} exist yet."
6255 msgid "No {type} integrations for repo {repo} exist yet."
6109 msgstr ""
6256 msgstr ""
6110
6257
6111 #: rhodecode/templates/admin/integrations/list.mako:87
6258 #: rhodecode/templates/admin/integrations/list.mako:87
6112 msgid "No {type} integrations for repogroup {repogroup} exist yet."
6259 msgid "No {type} integrations for repogroup {repogroup} exist yet."
6113 msgstr ""
6260 msgstr ""
6114
6261
6115 #: rhodecode/templates/admin/integrations/list.mako:89
6262 #: rhodecode/templates/admin/integrations/list.mako:89
6116 msgid "No {type} integrations exist yet."
6263 msgid "No {type} integrations exist yet."
6117 msgstr ""
6264 msgstr ""
6118
6265
6119 #: rhodecode/templates/admin/integrations/list.mako:103
6266 #: rhodecode/templates/admin/integrations/list.mako:103
6120 msgid "Create one"
6267 msgid "Create one"
6121 msgstr ""
6268 msgstr ""
6122
6269
6123 #: rhodecode/templates/admin/integrations/list.mako:132
6270 #: rhodecode/templates/admin/integrations/list.mako:132
6124 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:19
6271 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:19
6125 msgid "repo"
6272 msgid "repo"
6126 msgstr ""
6273 msgstr ""
6127
6274
6128 #: rhodecode/templates/admin/integrations/list.mako:136
6275 #: rhodecode/templates/admin/integrations/list.mako:136
6129 msgid "repogroup"
6276 msgid "repogroup"
6130 msgstr ""
6277 msgstr ""
6131
6278
6132 #: rhodecode/templates/admin/integrations/list.mako:138
6279 #: rhodecode/templates/admin/integrations/list.mako:138
6133 msgid "child repos only"
6280 msgid "child repos only"
6134 msgstr ""
6281 msgstr ""
6135
6282
6136 #: rhodecode/templates/admin/integrations/list.mako:140
6283 #: rhodecode/templates/admin/integrations/list.mako:140
6137 msgid "cascade to all"
6284 msgid "cascade to all"
6138 msgstr ""
6285 msgstr ""
6139
6286
6140 #: rhodecode/templates/admin/integrations/list.mako:145
6287 #: rhodecode/templates/admin/integrations/list.mako:145
6141 msgid "top level repos only"
6288 msgid "top level repos only"
6142 msgstr ""
6289 msgstr ""
6143
6290
6144 #: rhodecode/templates/admin/integrations/list.mako:147
6291 #: rhodecode/templates/admin/integrations/list.mako:147
6145 msgid "global"
6292 msgid "global"
6146 msgstr ""
6293 msgstr ""
6147
6294
6148 #: rhodecode/templates/admin/integrations/list.mako:153
6295 #: rhodecode/templates/admin/integrations/list.mako:153
6149 msgid "unknown integration"
6296 msgid "unknown integration"
6150 msgstr ""
6297 msgstr ""
6151
6298
6152 #: rhodecode/templates/admin/integrations/new.mako:23
6299 #: rhodecode/templates/admin/integrations/new.mako:23
6153 msgid "Create New Integration for repository: {repo_name}"
6300 msgid "Create New Integration for repository: {repo_name}"
6154 msgstr ""
6301 msgstr ""
6155
6302
6156 #: rhodecode/templates/admin/integrations/new.mako:25
6303 #: rhodecode/templates/admin/integrations/new.mako:25
6157 msgid "Create New Integration for repository group: {repo_group_name}"
6304 msgid "Create New Integration for repository group: {repo_group_name}"
6158 msgstr ""
6305 msgstr ""
6159
6306
6160 #: rhodecode/templates/admin/integrations/new.mako:27
6307 #: rhodecode/templates/admin/integrations/new.mako:27
6161 msgid "Create New Global Integration"
6308 msgid "Create New Global Integration"
6162 msgstr ""
6309 msgstr ""
6163
6310
6164 #: rhodecode/templates/admin/integrations/new.mako:55
6311 #: rhodecode/templates/admin/integrations/new.mako:55
6165 msgid "No description available"
6312 msgid "No description available"
6166 msgstr ""
6313 msgstr ""
6167
6314
6168 #: rhodecode/templates/admin/my_account/my_account.mako:5
6315 #: rhodecode/templates/admin/my_account/my_account.mako:5
6169 #: rhodecode/templates/base/base.mako:613
6316 #: rhodecode/templates/base/base.mako:620
6170 msgid "My account"
6317 msgid "My account"
6171 msgstr ""
6318 msgstr ""
6172
6319
6173 #: rhodecode/templates/admin/my_account/my_account.mako:12
6320 #: rhodecode/templates/admin/my_account/my_account.mako:12
6174 msgid "My Account"
6321 msgid "My Account"
6175 msgstr ""
6322 msgstr ""
6176
6323
6177 #: rhodecode/templates/admin/my_account/my_account.mako:29
6324 #: rhodecode/templates/admin/my_account/my_account.mako:29
6178 #: rhodecode/templates/email_templates/user_registration.mako:54
6325 #: rhodecode/templates/email_templates/user_registration.mako:55
6179 msgid "Profile"
6326 msgid "Profile"
6180 msgstr ""
6327 msgstr ""
6181
6328
6182 #: rhodecode/templates/admin/my_account/my_account.mako:30
6329 #: rhodecode/templates/admin/my_account/my_account.mako:30
6183 #: rhodecode/templates/admin/users/user_edit.mako:45
6330 #: rhodecode/templates/admin/users/user_edit.mako:45
6184 #: rhodecode/templates/debug_style/index.html:55
6331 #: rhodecode/templates/debug_style/index.html:55
6185 msgid "Emails"
6332 msgid "Emails"
6186 msgstr ""
6333 msgstr ""
6187
6334
6188 #: rhodecode/templates/admin/my_account/my_account.mako:33
6335 #: rhodecode/templates/admin/my_account/my_account.mako:33
6189 msgid "Auth Tokens"
6336 msgid "Auth Tokens"
6190 msgstr ""
6337 msgstr ""
6191
6338
6192 #: rhodecode/templates/admin/my_account/my_account.mako:34
6339 #: rhodecode/templates/admin/my_account/my_account.mako:34
6193 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:3
6340 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:3
6194 #: rhodecode/templates/admin/permissions/permissions.mako:51
6341 #: rhodecode/templates/admin/permissions/permissions.mako:51
6195 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:4
6342 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:4
6196 #: rhodecode/templates/admin/users/user_edit.mako:41
6343 #: rhodecode/templates/admin/users/user_edit.mako:41
6197 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:7
6344 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:7
6198 msgid "SSH Keys"
6345 msgid "SSH Keys"
6199 msgstr ""
6346 msgstr ""
6200
6347
6201 #: rhodecode/templates/admin/my_account/my_account.mako:35
6348 #: rhodecode/templates/admin/my_account/my_account.mako:35
6202 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:5
6349 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:5
6203 msgid "User Group Membership"
6350 msgid "User Group Membership"
6204 msgstr ""
6351 msgstr ""
6205
6352
6206 #: rhodecode/templates/admin/my_account/my_account.mako:40
6353 #: rhodecode/templates/admin/my_account/my_account.mako:40
6207 msgid "External Identities"
6354 msgid "External Identities"
6208 msgstr ""
6355 msgstr ""
6209
6356
6210 #: rhodecode/templates/admin/my_account/my_account.mako:43
6357 #: rhodecode/templates/admin/my_account/my_account.mako:43
6211 msgid "Owned Repositories"
6358 msgid "Owned Repositories"
6212 msgstr ""
6359 msgstr ""
6213
6360
6214 #: rhodecode/templates/admin/my_account/my_account.mako:44
6361 #: rhodecode/templates/admin/my_account/my_account.mako:44
6215 msgid "Watched Repositories"
6362 msgid "Watched Repositories"
6216 msgstr ""
6363 msgstr ""
6217
6364
6218 #: rhodecode/templates/admin/my_account/my_account.mako:45
6365 #: rhodecode/templates/admin/my_account/my_account.mako:45
6219 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:42
6366 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:42
6220 #: rhodecode/templates/base/base.mako:376
6367 #: rhodecode/templates/base/base.mako:383
6221 #: rhodecode/templates/base/base.mako:617
6368 #: rhodecode/templates/base/base.mako:624
6222 msgid "Pull Requests"
6369 msgid "Pull Requests"
6223 msgstr ""
6370 msgstr ""
6224
6371
6225 #: rhodecode/templates/admin/my_account/my_account.mako:46
6372 #: rhodecode/templates/admin/my_account/my_account.mako:46
6226 #: rhodecode/templates/admin/permissions/permissions.mako:14
6373 #: rhodecode/templates/admin/permissions/permissions.mako:14
6227 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:35
6374 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:35
6228 #: rhodecode/templates/base/base.mako:111
6375 #: rhodecode/templates/base/base.mako:116
6229 msgid "Permissions"
6376 msgid "Permissions"
6230 msgstr ""
6377 msgstr ""
6231
6378
6232 #: rhodecode/templates/admin/my_account/my_account.mako:47
6379 #: rhodecode/templates/admin/my_account/my_account.mako:47
6233 msgid "Live Notifications"
6380 msgid "Live Notifications"
6234 msgstr ""
6381 msgstr ""
6235
6382
6236 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:9
6383 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:9
6237 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:13
6384 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:13
6238 msgid "Authentication Tokens"
6385 msgid "Authentication Tokens"
6239 msgstr ""
6386 msgstr ""
6240
6387
6241 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:14
6388 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:14
6242 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:19
6389 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:19
6243 msgid "Authentication tokens can be used to interact with the API, or VCS-over-http. Each token can have a role. Token with a role can be used only in given context, e.g. VCS tokens can be used together with the authtoken auth plugin for git/hg/svn operations only."
6390 msgid "Available roles"
6244 msgstr ""
6391 msgstr ""
6245
6392
6246 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:20
6393 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:26
6247 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:25
6394 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:31
6248 msgid "Token"
6395 msgid "Token"
6249 msgstr ""
6396 msgstr ""
6250
6397
6251 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:23
6398 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:29
6252 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:28
6399 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:34
6253 msgid "Repository Scope"
6400 msgid "Repository Scope"
6254 msgstr ""
6401 msgstr ""
6255
6402
6256 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:24
6403 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:30
6257 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:29
6404 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:35
6258 msgid "Expiration"
6405 msgid "Expiration"
6259 msgstr ""
6406 msgstr ""
6260
6407
6261 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:66
6408 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:72
6262 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:70
6409 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:76
6263 msgid "No additional auth tokens specified"
6410 msgid "No additional auth tokens specified"
6264 msgstr ""
6411 msgstr ""
6265
6412
6266 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:78
6413 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:84
6267 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:82
6414 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:88
6268 msgid "New authentication token"
6415 msgid "New authentication token"
6269 msgstr ""
6416 msgstr ""
6270
6417
6271 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:92
6418 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:98
6272 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:96
6419 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:102
6273 msgid "Repository scope works only with tokens with VCS type."
6420 msgid "Repository scope works only with tokens with VCS type."
6274 msgstr ""
6421 msgstr ""
6275
6422
6276 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:96
6423 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:102
6277 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:72
6424 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:72
6278 #: rhodecode/templates/admin/permissions/permissions_ips.mako:63
6425 #: rhodecode/templates/admin/permissions/permissions_ips.mako:63
6279 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:65
6426 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:65
6280 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:100
6427 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:106
6281 #: rhodecode/templates/admin/users/user_edit_emails.mako:65
6428 #: rhodecode/templates/admin/users/user_edit_emails.mako:65
6282 #: rhodecode/templates/admin/users/user_edit_ips.mako:75
6429 #: rhodecode/templates/admin/users/user_edit_ips.mako:75
6283 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:71
6430 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:71
6284 msgid "Add"
6431 msgid "Add"
6285 msgstr ""
6432 msgstr ""
6286
6433
6287 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:129
6434 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:135
6288 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:134
6435 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:140
6289 msgid "Select or enter expiration date"
6436 msgid "Select or enter expiration date"
6290 msgstr ""
6437 msgstr ""
6291
6438
6292 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:164
6439 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:170
6293 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:169
6440 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:175
6294 msgid "repository scope"
6441 msgid "repository scope"
6295 msgstr ""
6442 msgstr ""
6296
6443
6297 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:7
6444 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:7
6298 msgid "Position"
6445 msgid "Position"
6299 msgstr ""
6446 msgstr ""
6300
6447
6301 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:17
6448 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:17
6302 msgid "Bookmark title (max 30 characters, optional)"
6449 msgid "Bookmark title (max 30 characters, optional)"
6303 msgstr ""
6450 msgstr ""
6304
6451
6305 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:24
6452 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:24
6306 msgid "Clear"
6453 msgid "Clear"
6307 msgstr ""
6454 msgstr ""
6308
6455
6309 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:30
6456 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:30
6310 msgid "Server URL is available as ${server_url} variable. E.g. Redirect url: ${server_url}/_admin/exception_tracker"
6457 msgid "Server URL is available as ${server_url} variable. E.g. Redirect url: ${server_url}/_admin/exception_tracker"
6311 msgstr ""
6458 msgstr ""
6312
6459
6313 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:34
6460 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:34
6314 msgid "Redirect URL"
6461 msgid "Redirect URL"
6315 msgstr ""
6462 msgstr ""
6316
6463
6317 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:44
6464 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:44
6318 msgid "Repository template"
6465 msgid "Repository template"
6319 msgstr ""
6466 msgstr ""
6320
6467
6321 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:50
6468 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:50
6322 msgid "Repository group template"
6469 msgid "Repository group template"
6323 msgstr ""
6470 msgstr ""
6324
6471
6325 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:56
6472 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:56
6326 msgid "Template Repository or Repository group"
6473 msgid "Template Repository or Repository group"
6327 msgstr ""
6474 msgstr ""
6328
6475
6329 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:66
6476 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:66
6330 msgid "Available as ${repo_url} e.g. Redirect url: ${repo_url}/changelog"
6477 msgid "Available as ${repo_url} e.g. Redirect url: ${repo_url}/changelog"
6331 msgstr ""
6478 msgstr ""
6332
6479
6333 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:68
6480 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:68
6334 msgid "Available as ${repo_group_url} e.g. Redirect url: ${repo_group_url}"
6481 msgid "Available as ${repo_group_url} e.g. Redirect url: ${repo_group_url}"
6335 msgstr ""
6482 msgstr ""
6336
6483
6337 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:70
6484 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:70
6338 msgid "Available as full url variables in redirect url. i.e: ${repo_url}, ${repo_group_url}."
6485 msgid "Available as full url variables in redirect url. i.e: ${repo_url}, ${repo_group_url}."
6339 msgstr ""
6486 msgstr ""
6340
6487
6341 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:80
6488 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:80
6342 msgid "Your Bookmarks"
6489 msgid "Your Bookmarks"
6343 msgstr ""
6490 msgstr ""
6344
6491
6345 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:85
6492 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:85
6346 msgid "Store upto 10 bookmark links to favorite repositories, external issue tracker or CI server. "
6493 msgid "Store upto 10 bookmark links to favorite repositories, external issue tracker or CI server. "
6347 msgstr ""
6494 msgstr ""
6348
6495
6349 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:87
6496 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:87
6350 msgid "Bookmarks are accessible from your username dropdown or by keyboard shortcut `g 0-9`"
6497 msgid "Bookmarks are accessible from your username dropdown or by keyboard shortcut `g 0-9`"
6351 msgstr ""
6498 msgstr ""
6352
6499
6353 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:141
6500 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:141
6354 msgid "repository"
6501 msgid "repository"
6355 msgstr ""
6502 msgstr ""
6356
6503
6357 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:192
6504 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:192
6358 msgid "repository group"
6505 msgid "repository group"
6359 msgstr ""
6506 msgstr ""
6360
6507
6361 #: rhodecode/templates/admin/my_account/my_account_emails.mako:5
6508 #: rhodecode/templates/admin/my_account/my_account_emails.mako:5
6362 msgid "Account Emails"
6509 msgid "Account Emails"
6363 msgstr ""
6510 msgstr ""
6364
6511
6365 #: rhodecode/templates/admin/my_account/my_account_emails.mako:17
6512 #: rhodecode/templates/admin/my_account/my_account_emails.mako:17
6366 #: rhodecode/templates/admin/users/user_edit_emails.mako:19
6513 #: rhodecode/templates/admin/users/user_edit_emails.mako:19
6367 msgid "Primary"
6514 msgid "Primary"
6368 msgstr ""
6515 msgstr ""
6369
6516
6370 #: rhodecode/templates/admin/my_account/my_account_emails.mako:43
6517 #: rhodecode/templates/admin/my_account/my_account_emails.mako:43
6371 #: rhodecode/templates/admin/users/user_edit_emails.mako:44
6518 #: rhodecode/templates/admin/users/user_edit_emails.mako:44
6372 msgid "No additional emails specified"
6519 msgid "No additional emails specified"
6373 msgstr ""
6520 msgstr ""
6374
6521
6375 #: rhodecode/templates/admin/my_account/my_account_emails.mako:52
6522 #: rhodecode/templates/admin/my_account/my_account_emails.mako:52
6376 #: rhodecode/templates/admin/my_account/my_account_password.mako:6
6523 #: rhodecode/templates/admin/my_account/my_account_password.mako:6
6377 msgid "Your user account details are managed by an external source. Details cannot be managed here."
6524 msgid "Your user account details are managed by an external source. Details cannot be managed here."
6378 msgstr ""
6525 msgstr ""
6379
6526
6380 #: rhodecode/templates/admin/my_account/my_account_emails.mako:53
6527 #: rhodecode/templates/admin/my_account/my_account_emails.mako:53
6381 #: rhodecode/templates/admin/my_account/my_account_password.mako:9
6528 #: rhodecode/templates/admin/my_account/my_account_password.mako:9
6382 msgid "Source type"
6529 msgid "Source type"
6383 msgstr ""
6530 msgstr ""
6384
6531
6385 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:4
6532 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:4
6386 msgid "Your Live Notification Settings"
6533 msgid "Your Live Notification Settings"
6387 msgstr ""
6534 msgstr ""
6388
6535
6389 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:16
6536 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:16
6390 msgid "Notifications Status"
6537 msgid "Notifications Status"
6391 msgstr ""
6538 msgstr ""
6392
6539
6393 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:40
6540 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:40
6394 msgid "Test Notifications"
6541 msgid "Test Notifications"
6395 msgstr ""
6542 msgstr ""
6396
6543
6397 #: rhodecode/templates/admin/my_account/my_account_password.mako:3
6544 #: rhodecode/templates/admin/my_account/my_account_password.mako:3
6398 msgid "Change Your Account Password"
6545 msgid "Change Your Account Password"
6399 msgstr ""
6546 msgstr ""
6400
6547
6401 #: rhodecode/templates/admin/my_account/my_account_password.mako:7
6548 #: rhodecode/templates/admin/my_account/my_account_password.mako:7
6402 #: rhodecode/templates/admin/my_account/my_account_profile.mako:18
6549 #: rhodecode/templates/admin/my_account/my_account_profile.mako:18
6403 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:19
6550 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:19
6404 msgid "For VCS access please generate"
6551 msgid "For VCS access please generate"
6405 msgstr ""
6552 msgstr ""
6406
6553
6407 #: rhodecode/templates/admin/my_account/my_account_profile.mako:6
6554 #: rhodecode/templates/admin/my_account/my_account_profile.mako:6
6408 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:4
6555 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:4
6409 msgid "My Profile"
6556 msgid "My Profile"
6410 msgstr ""
6557 msgstr ""
6411
6558
6412 #: rhodecode/templates/admin/my_account/my_account_profile.mako:15
6559 #: rhodecode/templates/admin/my_account/my_account_profile.mako:15
6413 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:16
6560 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:16
6414 #: rhodecode/templates/admin/users/user_edit_profile.mako:19
6561 #: rhodecode/templates/admin/users/user_edit_profile.mako:19
6415 #, python-format
6562 #, python-format
6416 msgid "This user was created from external source (%s). Editing some of the settings is limited."
6563 msgid "This user was created from external source (%s). Editing some of the settings is limited."
6417 msgstr ""
6564 msgstr ""
6418
6565
6419 #: rhodecode/templates/admin/my_account/my_account_profile.mako:24
6566 #: rhodecode/templates/admin/my_account/my_account_profile.mako:24
6420 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:60
6567 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:60
6421 #: rhodecode/templates/admin/users/user_edit_profile.mako:26
6568 #: rhodecode/templates/admin/users/user_edit_profile.mako:26
6422 #: rhodecode/templates/users/user_profile.mako:15
6569 #: rhodecode/templates/users/user_profile.mako:15
6423 msgid "Photo"
6570 msgid "Photo"
6424 msgstr ""
6571 msgstr ""
6425
6572
6426 #: rhodecode/templates/admin/my_account/my_account_profile.mako:82
6573 #: rhodecode/templates/admin/my_account/my_account_profile.mako:82
6427 #: rhodecode/templates/users/user_profile.mako:73
6574 #: rhodecode/templates/users/user_profile.mako:73
6428 msgid "Missing email, please update your user email address."
6575 msgid "Missing email, please update your user email address."
6429 msgstr ""
6576 msgstr ""
6430
6577
6431 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:65
6578 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:65
6432 msgid "Change your avatar at"
6579 msgid "Change your avatar at"
6433 msgstr ""
6580 msgstr ""
6434
6581
6435 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:13
6582 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:13
6436 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:40
6583 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:40
6437 msgid "All"
6584 msgid "All"
6438 msgstr ""
6585 msgstr ""
6439
6586
6440 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:14
6587 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:14
6441 msgid "All + Closed"
6588 msgid "All + Closed"
6442 msgstr ""
6589 msgstr ""
6443
6590
6444 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:33
6591 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:33
6445 msgid "Pull Requests You Participate In"
6592 msgid "Pull Requests You Participate In"
6446 msgstr ""
6593 msgstr ""
6447
6594
6448 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:67
6595 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:67
6449 msgid "Target Repo"
6596 msgid "Target Repo"
6450 msgstr ""
6597 msgstr ""
6451
6598
6452 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:79
6599 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:79
6453 #: rhodecode/templates/pullrequests/pullrequests.mako:94
6600 #: rhodecode/templates/pullrequests/pullrequests.mako:94
6454 msgid "Id"
6601 msgid "Id"
6455 msgstr ""
6602 msgstr ""
6456
6603
6457 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:85
6604 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:85
6458 #: rhodecode/templates/admin/settings/settings_global.mako:9
6605 #: rhodecode/templates/admin/settings/settings_global.mako:9
6459 #: rhodecode/templates/email_templates/pull_request_review.mako:41
6606 #: rhodecode/templates/email_templates/pull_request_review.mako:43
6460 #: rhodecode/templates/email_templates/pull_request_update.mako:41
6607 #: rhodecode/templates/email_templates/pull_request_update.mako:43
6461 #: rhodecode/templates/pullrequests/pullrequest.mako:38
6608 #: rhodecode/templates/pullrequests/pullrequest.mako:38
6462 #: rhodecode/templates/pullrequests/pullrequests.mako:96
6609 #: rhodecode/templates/pullrequests/pullrequests.mako:96
6463 msgid "Title"
6610 msgid "Title"
6464 msgstr ""
6611 msgstr ""
6465
6612
6466 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:103
6613 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:103
6467 #: rhodecode/templates/pullrequests/pullrequests.mako:102
6614 #: rhodecode/templates/pullrequests/pullrequests.mako:102
6468 msgid "Last Update"
6615 msgid "Last Update"
6469 msgstr ""
6616 msgstr ""
6470
6617
6471 #: rhodecode/templates/admin/my_account/my_account_repos.mako:3
6618 #: rhodecode/templates/admin/my_account/my_account_repos.mako:3
6472 msgid "Repositories You Own"
6619 msgid "Repositories You Own"
6473 msgstr ""
6620 msgstr ""
6474
6621
6475 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:9
6622 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:9
6476 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:47
6623 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:47
6477 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:14
6624 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:14
6478 msgid "Fingerprint"
6625 msgid "Fingerprint"
6479 msgstr ""
6626 msgstr ""
6480
6627
6481 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:12
6628 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:12
6482 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:53
6629 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:53
6483 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:17
6630 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:17
6484 msgid "Accessed on"
6631 msgid "Accessed on"
6485 msgstr ""
6632 msgstr ""
6486
6633
6487 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:16
6634 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:16
6488 msgid "SSH Keys usage is currently disabled, please ask your administrator to enable them."
6635 msgid "SSH Keys usage is currently disabled, please ask your administrator to enable them."
6489 msgstr ""
6636 msgstr ""
6490
6637
6491 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:41
6638 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:41
6492 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:42
6639 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:42
6493 msgid "No additional ssh keys specified"
6640 msgid "No additional ssh keys specified"
6494 msgstr ""
6641 msgstr ""
6495
6642
6496 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:55
6643 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:55
6497 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:54
6644 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:54
6498 msgid "New ssh key"
6645 msgid "New ssh key"
6499 msgstr ""
6646 msgstr ""
6500
6647
6501 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:60
6648 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:60
6502 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:59
6649 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:59
6503 msgid "Generate random RSA key"
6650 msgid "Generate random RSA key"
6504 msgstr ""
6651 msgstr ""
6505
6652
6506 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:67
6653 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:67
6507 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:66
6654 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:66
6508 msgid "Public key, begins with 'ssh-rsa', 'ssh-dss', 'ssh-ed25519', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'"
6655 msgid "Public key, begins with 'ssh-rsa', 'ssh-dss', 'ssh-ed25519', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'"
6509 msgstr ""
6656 msgstr ""
6510
6657
6511 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:76
6658 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:76
6512 msgid "Click add to use this generated SSH key"
6659 msgid "Click add to use this generated SSH key"
6513 msgstr ""
6660 msgstr ""
6514
6661
6515 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:49
6662 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:49
6516 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:51
6663 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:51
6517 #: rhodecode/templates/admin/user_groups/user_group_add.mako:51
6664 #: rhodecode/templates/admin/user_groups/user_group_add.mako:51
6518 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:55
6665 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:55
6519 #: rhodecode/templates/admin/user_groups/user_groups.mako:84
6666 #: rhodecode/templates/admin/user_groups/user_groups.mako:84
6520 #: rhodecode/templates/admin/users/user_add.mako:97
6667 #: rhodecode/templates/admin/users/user_add.mako:97
6521 #: rhodecode/templates/admin/users/user_edit_groups.mako:67
6668 #: rhodecode/templates/admin/users/user_edit_groups.mako:67
6522 #: rhodecode/templates/admin/users/user_edit_profile.mako:110
6669 #: rhodecode/templates/admin/users/user_edit_profile.mako:110
6523 #: rhodecode/templates/admin/users/users.mako:85
6670 #: rhodecode/templates/admin/users/users.mako:85
6524 #: rhodecode/templates/user_group/profile.mako:44
6671 #: rhodecode/templates/user_group/profile.mako:44
6525 msgid "Active"
6672 msgid "Active"
6526 msgstr ""
6673 msgstr ""
6527
6674
6528 #: rhodecode/templates/admin/my_account/my_account_watched.mako:3
6675 #: rhodecode/templates/admin/my_account/my_account_watched.mako:3
6529 msgid "Your Watched Repositories"
6676 msgid "Your Watched Repositories"
6530 msgstr ""
6677 msgstr ""
6531
6678
6532 #: rhodecode/templates/admin/notifications/notifications_data.mako:5
6679 #: rhodecode/templates/admin/notifications/notifications_data.mako:5
6533 msgid "My notifications"
6680 msgid "My notifications"
6534 msgstr ""
6681 msgstr ""
6535
6682
6536 #: rhodecode/templates/admin/notifications/notifications_data.mako:26
6683 #: rhodecode/templates/admin/notifications/notifications_data.mako:26
6537 msgid "Mark as read"
6684 msgid "Mark as read"
6538 msgstr ""
6685 msgstr ""
6539
6686
6540 #: rhodecode/templates/admin/notifications/notifications_data.mako:42
6687 #: rhodecode/templates/admin/notifications/notifications_data.mako:42
6541 msgid "No notifications here yet"
6688 msgid "No notifications here yet"
6542 msgstr ""
6689 msgstr ""
6543
6690
6544 #: rhodecode/templates/admin/notifications/notifications_show.mako:5
6691 #: rhodecode/templates/admin/notifications/notifications_show.mako:5
6545 #: rhodecode/templates/admin/notifications/notifications_show.mako:14
6692 #: rhodecode/templates/admin/notifications/notifications_show.mako:14
6546 #: rhodecode/templates/debug_style/email_plain_rendered.mako:5
6693 #: rhodecode/templates/debug_style/email_plain_rendered.mako:5
6547 #: rhodecode/templates/debug_style/email_plain_rendered.mako:14
6694 #: rhodecode/templates/debug_style/email_plain_rendered.mako:14
6548 msgid "Show notification"
6695 msgid "Show notification"
6549 msgstr ""
6696 msgstr ""
6550
6697
6551 #: rhodecode/templates/admin/notifications/notifications_show.mako:12
6698 #: rhodecode/templates/admin/notifications/notifications_show.mako:12
6552 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:5
6699 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:5
6553 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:20
6700 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:20
6554 #: rhodecode/templates/debug_style/email_plain_rendered.mako:12
6701 #: rhodecode/templates/debug_style/email_plain_rendered.mako:12
6555 msgid "My Notifications"
6702 msgid "My Notifications"
6556 msgstr ""
6703 msgstr ""
6557
6704
6558 #: rhodecode/templates/admin/notifications/notifications_show.mako:42
6705 #: rhodecode/templates/admin/notifications/notifications_show.mako:42
6559 #: rhodecode/templates/debug_style/email_plain_rendered.mako:38
6706 #: rhodecode/templates/debug_style/email_plain_rendered.mako:38
6560 msgid "Subject"
6707 msgid "Subject"
6561 msgstr ""
6708 msgstr ""
6562
6709
6563 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:25
6710 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:25
6564 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:29
6711 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:29
6565 msgid "Mark all as read"
6712 msgid "Mark all as read"
6566 msgstr ""
6713 msgstr ""
6567
6714
6568 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:39
6715 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:39
6569 msgid "Unread"
6716 msgid "Unread"
6570 msgstr ""
6717 msgstr ""
6571
6718
6572 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:41
6719 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:41
6573 #: rhodecode/templates/changeset/changeset.mako:172
6720 #: rhodecode/templates/changeset/changeset.mako:172
6574 #: rhodecode/templates/pullrequests/pullrequest_show.mako:671
6721 #: rhodecode/templates/pullrequests/pullrequest_show.mako:670
6575 msgid "Comments"
6722 msgid "Comments"
6576 msgstr ""
6723 msgstr ""
6577
6724
6578 #: rhodecode/templates/admin/permissions/permissions.mako:5
6725 #: rhodecode/templates/admin/permissions/permissions.mako:5
6579 msgid "Permissions Administration"
6726 msgid "Permissions Administration"
6580 msgstr ""
6727 msgstr ""
6581
6728
6582 #: rhodecode/templates/admin/permissions/permissions.mako:33
6729 #: rhodecode/templates/admin/permissions/permissions.mako:33
6583 msgid "Application"
6730 msgid "Application"
6584 msgstr ""
6731 msgstr ""
6585
6732
6586 #: rhodecode/templates/admin/permissions/permissions.mako:39
6733 #: rhodecode/templates/admin/permissions/permissions.mako:39
6587 msgid "Object"
6734 msgid "Object"
6588 msgstr ""
6735 msgstr ""
6589
6736
6590 #: rhodecode/templates/admin/permissions/permissions.mako:45
6737 #: rhodecode/templates/admin/permissions/permissions.mako:45
6591 msgid "IP Whitelist"
6738 msgid "IP Whitelist"
6592 msgstr ""
6739 msgstr ""
6593
6740
6594 #: rhodecode/templates/admin/permissions/permissions.mako:48
6741 #: rhodecode/templates/admin/permissions/permissions.mako:48
6595 msgid "AuthToken Access"
6742 msgid "AuthToken Access"
6596 msgstr ""
6743 msgstr ""
6597
6744
6598 #: rhodecode/templates/admin/permissions/permissions.mako:54
6745 #: rhodecode/templates/admin/permissions/permissions.mako:54
6599 msgid "Overview"
6746 msgid "Overview"
6600 msgstr ""
6747 msgstr ""
6601
6748
6602 #: rhodecode/templates/admin/permissions/permissions_application.mako:3
6749 #: rhodecode/templates/admin/permissions/permissions_application.mako:3
6603 msgid "System Wide Application Permissions"
6750 msgid "System Wide Application Permissions"
6604 msgstr ""
6751 msgstr ""
6605
6752
6606 #: rhodecode/templates/admin/permissions/permissions_application.mako:12
6753 #: rhodecode/templates/admin/permissions/permissions_application.mako:12
6607 msgid "Anonymous Access"
6754 msgid "Anonymous Access"
6608 msgstr ""
6755 msgstr ""
6609
6756
6610 #: rhodecode/templates/admin/permissions/permissions_application.mako:18
6757 #: rhodecode/templates/admin/permissions/permissions_application.mako:18
6611 #, python-format
6758 #, python-format
6612 msgid "Allow access to RhodeCode Enterprise without requiring users to login. Anonymous users get the %s permission settings."
6759 msgid "Allow access to RhodeCode Enterprise without requiring users to login. Anonymous users get the %s permission settings."
6613 msgstr ""
6760 msgstr ""
6614
6761
6615 #: rhodecode/templates/admin/permissions/permissions_application.mako:24
6762 #: rhodecode/templates/admin/permissions/permissions_application.mako:24
6616 msgid "Registration"
6763 msgid "Registration"
6617 msgstr ""
6764 msgstr ""
6618
6765
6619 #: rhodecode/templates/admin/permissions/permissions_application.mako:33
6766 #: rhodecode/templates/admin/permissions/permissions_application.mako:33
6620 msgid "Password Reset"
6767 msgid "Password Reset"
6621 msgstr ""
6768 msgstr ""
6622
6769
6623 #: rhodecode/templates/admin/permissions/permissions_application.mako:42
6770 #: rhodecode/templates/admin/permissions/permissions_application.mako:42
6624 msgid "Registration Page Message"
6771 msgid "Registration Page Message"
6625 msgstr ""
6772 msgstr ""
6626
6773
6627 #: rhodecode/templates/admin/permissions/permissions_application.mako:46
6774 #: rhodecode/templates/admin/permissions/permissions_application.mako:46
6628 msgid "Custom message to be displayed on the registration page. HTML syntax is supported."
6775 msgid "Custom message to be displayed on the registration page. HTML syntax is supported."
6629 msgstr ""
6776 msgstr ""
6630
6777
6631 #: rhodecode/templates/admin/permissions/permissions_application.mako:52
6778 #: rhodecode/templates/admin/permissions/permissions_application.mako:52
6632 msgid "External Authentication Account Activation"
6779 msgid "External Authentication Account Activation"
6633 msgstr ""
6780 msgstr ""
6634
6781
6635 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:5
6782 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:5
6636 msgid "View whitelist"
6783 msgid "View whitelist"
6637 msgstr ""
6784 msgstr ""
6638
6785
6639 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:36
6786 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:36
6640 msgid "List of views available for usage in whitelist access"
6787 msgid "List of views available for usage in whitelist access"
6641 msgstr ""
6788 msgstr ""
6642
6789
6643 #: rhodecode/templates/admin/permissions/permissions_branch.mako:3
6790 #: rhodecode/templates/admin/permissions/permissions_branch.mako:3
6644 msgid "Default Permissions for Branches."
6791 msgid "Default Permissions for Branches."
6645 msgstr ""
6792 msgstr ""
6646
6793
6647 #: rhodecode/templates/admin/permissions/permissions_branch.mako:6
6794 #: rhodecode/templates/admin/permissions/permissions_branch.mako:6
6648 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:6
6795 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:6
6649 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:6
6796 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:6
6650 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:67
6797 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:67
6651 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:6
6798 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:6
6652 #: rhodecode/templates/admin/settings/settings_automation.mako:6
6799 #: rhodecode/templates/admin/settings/settings_automation.mako:6
6653 #: rhodecode/templates/artifacts/artifact_list.mako:24
6800 #: rhodecode/templates/artifacts/artifact_list.mako:24
6654 msgid "This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license."
6801 msgid "This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license."
6655 msgstr ""
6802 msgstr ""
6656
6803
6657 #: rhodecode/templates/admin/permissions/permissions_ips.mako:5
6804 #: rhodecode/templates/admin/permissions/permissions_ips.mako:5
6658 msgid "Default IP Whitelist For All Users"
6805 msgid "Default IP Whitelist For All Users"
6659 msgstr ""
6806 msgstr ""
6660
6807
6661 #: rhodecode/templates/admin/permissions/permissions_ips.mako:9
6808 #: rhodecode/templates/admin/permissions/permissions_ips.mako:9
6662 #: rhodecode/templates/admin/users/user_edit_ips.mako:12
6809 #: rhodecode/templates/admin/users/user_edit_ips.mako:12
6663 msgid "Current IP address"
6810 msgid "Current IP address"
6664 msgstr ""
6811 msgstr ""
6665
6812
6666 #: rhodecode/templates/admin/permissions/permissions_ips.mako:30
6813 #: rhodecode/templates/admin/permissions/permissions_ips.mako:30
6667 #: rhodecode/templates/admin/users/user_edit_ips.mako:41
6814 #: rhodecode/templates/admin/users/user_edit_ips.mako:41
6668 #, python-format
6815 #, python-format
6669 msgid "Confirm to delete this ip: %s"
6816 msgid "Confirm to delete this ip: %s"
6670 msgstr ""
6817 msgstr ""
6671
6818
6672 #: rhodecode/templates/admin/permissions/permissions_ips.mako:37
6819 #: rhodecode/templates/admin/permissions/permissions_ips.mako:37
6673 #: rhodecode/templates/admin/users/user_edit_ips.mako:49
6820 #: rhodecode/templates/admin/users/user_edit_ips.mako:49
6674 msgid "All IP addresses are allowed"
6821 msgid "All IP addresses are allowed"
6675 msgstr ""
6822 msgstr ""
6676
6823
6677 #: rhodecode/templates/admin/permissions/permissions_ips.mako:52
6824 #: rhodecode/templates/admin/permissions/permissions_ips.mako:52
6678 #: rhodecode/templates/admin/users/user_edit_ips.mako:65
6825 #: rhodecode/templates/admin/users/user_edit_ips.mako:65
6679 msgid "New IP Address"
6826 msgid "New IP Address"
6680 msgstr ""
6827 msgstr ""
6681
6828
6682 #: rhodecode/templates/admin/permissions/permissions_ips.mako:56
6829 #: rhodecode/templates/admin/permissions/permissions_ips.mako:56
6683 #: rhodecode/templates/admin/users/user_edit_ips.mako:68
6830 #: rhodecode/templates/admin/users/user_edit_ips.mako:68
6684 msgid "Description..."
6831 msgid "Description..."
6685 msgstr ""
6832 msgstr ""
6686
6833
6687 #: rhodecode/templates/admin/permissions/permissions_ips.mako:57
6834 #: rhodecode/templates/admin/permissions/permissions_ips.mako:57
6688 msgid ""
6835 msgid ""
6689 "Enter a comma separated list of IP Addresses like 127.0.0.1,\n"
6836 "Enter a comma separated list of IP Addresses like 127.0.0.1,\n"
6690 "or use an IP Address with a mask 127.0.0.1/24, to create a network range.\n"
6837 "or use an IP Address with a mask 127.0.0.1/24, to create a network range.\n"
6691 "To specify multiple addresses in a range, use the 127.0.0.1-127.0.0.10 syntax"
6838 "To specify multiple addresses in a range, use the 127.0.0.1-127.0.0.10 syntax"
6692 msgstr ""
6839 msgstr ""
6693
6840
6694 #: rhodecode/templates/admin/permissions/permissions_objects.mako:3
6841 #: rhodecode/templates/admin/permissions/permissions_objects.mako:3
6695 msgid "Default Permissions for Repositories, User Groups and Repository Groups."
6842 msgid "Default Permissions for Repositories, User Groups and Repository Groups."
6696 msgstr ""
6843 msgstr ""
6697
6844
6698 #: rhodecode/templates/admin/permissions/permissions_objects.mako:7
6845 #: rhodecode/templates/admin/permissions/permissions_objects.mako:7
6699 msgid "Default access permissions. This defines permissions for the `default` user from which other users inherit permissions."
6846 msgid "Default access permissions. This defines permissions for the `default` user from which other users inherit permissions."
6700 msgstr ""
6847 msgstr ""
6701
6848
6702 #: rhodecode/templates/admin/permissions/permissions_objects.mako:9
6849 #: rhodecode/templates/admin/permissions/permissions_objects.mako:9
6703 msgid "Check the overwrite checkbox to force change all previously defined permissions for `default` user to the new selected value."
6850 msgid "Check the overwrite checkbox to force change all previously defined permissions for `default` user to the new selected value."
6704 msgstr ""
6851 msgstr ""
6705
6852
6706 #: rhodecode/templates/admin/permissions/permissions_objects.mako:23
6853 #: rhodecode/templates/admin/permissions/permissions_objects.mako:23
6707 msgid "All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost"
6854 msgid "All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost"
6708 msgstr ""
6855 msgstr ""
6709
6856
6710 #: rhodecode/templates/admin/permissions/permissions_objects.mako:24
6857 #: rhodecode/templates/admin/permissions/permissions_objects.mako:24
6711 #: rhodecode/templates/admin/permissions/permissions_objects.mako:38
6858 #: rhodecode/templates/admin/permissions/permissions_objects.mako:38
6712 #: rhodecode/templates/admin/permissions/permissions_objects.mako:52
6859 #: rhodecode/templates/admin/permissions/permissions_objects.mako:52
6713 msgid "Overwrite Existing Settings"
6860 msgid "Overwrite Existing Settings"
6714 msgstr ""
6861 msgstr ""
6715
6862
6716 #: rhodecode/templates/admin/permissions/permissions_objects.mako:37
6863 #: rhodecode/templates/admin/permissions/permissions_objects.mako:37
6717 msgid "All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost"
6864 msgid "All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost"
6718 msgstr ""
6865 msgstr ""
6719
6866
6720 #: rhodecode/templates/admin/permissions/permissions_objects.mako:45
6867 #: rhodecode/templates/admin/permissions/permissions_objects.mako:45
6721 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:14
6868 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:14
6722 msgid "User Groups"
6869 msgid "User Groups"
6723 msgstr ""
6870 msgstr ""
6724
6871
6725 #: rhodecode/templates/admin/permissions/permissions_objects.mako:51
6872 #: rhodecode/templates/admin/permissions/permissions_objects.mako:51
6726 msgid "All default permissions on each user group will be reset to chosen permission, note that all custom default permission on user groups will be lost"
6873 msgid "All default permissions on each user group will be reset to chosen permission, note that all custom default permission on user groups will be lost"
6727 msgstr ""
6874 msgstr ""
6728
6875
6729 #: rhodecode/templates/admin/permissions/permissions_perms.mako:1
6876 #: rhodecode/templates/admin/permissions/permissions_perms.mako:1
6730 msgid "Default User Permissions Overview"
6877 msgid "Default User Permissions Overview"
6731 msgstr ""
6878 msgstr ""
6732
6879
6733 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:7
6880 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:7
6734 msgid "Update SSH keys file"
6881 msgid "Update SSH keys file"
6735 msgstr ""
6882 msgstr ""
6736
6883
6737 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:5
6884 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:5
6738 msgid "Add repository group"
6885 msgid "Add repository group"
6739 msgstr ""
6886 msgstr ""
6740
6887
6741 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:14
6888 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:14
6742 #: rhodecode/templates/admin/users/user_edit_advanced.mako:13
6889 #: rhodecode/templates/admin/users/user_edit_advanced.mako:13
6743 #: rhodecode/templates/base/base.mako:108
6890 #: rhodecode/templates/base/base.mako:113
6744 #: rhodecode/templates/base/base.mako:129
6891 #: rhodecode/templates/base/base.mako:134
6745 msgid "Repository groups"
6892 msgid "Repository groups"
6746 msgstr ""
6893 msgstr ""
6747
6894
6748 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:35
6895 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:35
6749 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:15
6896 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:15
6750 #: rhodecode/templates/admin/user_groups/user_group_add.mako:34
6897 #: rhodecode/templates/admin/user_groups/user_group_add.mako:34
6751 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:19
6898 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:19
6752 msgid "Group name"
6899 msgid "Group name"
6753 msgstr ""
6900 msgstr ""
6754
6901
6755 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:44
6902 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:44
6756 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:25
6903 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:25
6757 #: rhodecode/templates/admin/repos/repo_add_base.mako:43
6904 #: rhodecode/templates/admin/repos/repo_add_base.mako:43
6758 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:33
6905 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:33
6759 #: rhodecode/templates/base/base.mako:662
6906 #: rhodecode/templates/base/base.mako:669
6760 #: rhodecode/templates/data_table/_dt_elements.mako:217
6907 #: rhodecode/templates/data_table/_dt_elements.mako:217
6761 #: rhodecode/templates/forks/fork.mako:41
6908 #: rhodecode/templates/forks/fork.mako:41
6762 msgid "Repository group"
6909 msgid "Repository group"
6763 msgstr ""
6910 msgstr ""
6764
6911
6765 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:60
6912 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:50
6913 #: rhodecode/templates/admin/repos/repo_add_base.mako:49
6914 msgid "Select my personal group ({})"
6915 msgstr ""
6916
6917 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:65
6766 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:64
6918 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:64
6767 #: rhodecode/templates/admin/repos/repo_add_base.mako:90
6919 #: rhodecode/templates/admin/repos/repo_add_base.mako:90
6768 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:179
6920 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:179
6769 #: rhodecode/templates/admin/users/user_edit_profile.mako:81
6921 #: rhodecode/templates/admin/users/user_edit_profile.mako:81
6770 #: rhodecode/templates/forks/fork.mako:63
6922 #: rhodecode/templates/forks/fork.mako:63
6771 msgid "Plain text format with {metatags} support."
6923 msgid "Plain text format with {metatags} support."
6772 msgstr ""
6924 msgstr ""
6773
6925
6774 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:62
6926 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:67
6775 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:66
6927 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:66
6776 #: rhodecode/templates/admin/repos/repo_add_base.mako:92
6928 #: rhodecode/templates/admin/repos/repo_add_base.mako:92
6777 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:181
6929 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:181
6778 #: rhodecode/templates/admin/users/user_edit_profile.mako:83
6930 #: rhodecode/templates/admin/users/user_edit_profile.mako:83
6779 #: rhodecode/templates/forks/fork.mako:65
6931 #: rhodecode/templates/forks/fork.mako:65
6780 msgid "Plain text format."
6932 msgid "Plain text format."
6781 msgstr ""
6933 msgstr ""
6782
6934
6783 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:74
6935 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:79
6784 #: rhodecode/templates/admin/repos/repo_add_base.mako:104
6936 #: rhodecode/templates/admin/repos/repo_add_base.mako:104
6785 msgid "Copy Parent Group Permissions"
6937 msgid "Copy Parent Group Permissions"
6786 msgstr ""
6938 msgstr ""
6787
6939
6788 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:78
6789 #: rhodecode/templates/admin/repos/repo_add_base.mako:108
6790 msgid "Copy permissions from parent repository group."
6791 msgstr ""
6792
6793 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:83
6940 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:83
6941 #: rhodecode/templates/admin/repos/repo_add_base.mako:108
6942 msgid "Copy permissions from parent repository group."
6943 msgstr ""
6944
6945 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:88
6794 msgid "Create Repository Group"
6946 msgid "Create Repository Group"
6795 msgstr ""
6947 msgstr ""
6796
6948
6797 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:5
6949 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:5
6798 #, python-format
6950 #, python-format
6799 msgid "%s repository group settings"
6951 msgid "%s repository group settings"
6800 msgstr ""
6952 msgstr ""
6801
6953
6802 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:31
6954 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:31
6803 #: rhodecode/templates/admin/repos/repo_edit.mako:45
6955 #: rhodecode/templates/admin/repos/repo_edit.mako:45
6804 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:8
6956 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:8
6805 #: rhodecode/templates/admin/users/user_edit_advanced.mako:30
6957 #: rhodecode/templates/admin/users/user_edit_advanced.mako:30
6806 msgid "Access Permissions"
6958 msgid "Access Permissions"
6807 msgstr ""
6959 msgstr ""
6808
6960
6809 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:32
6961 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:32
6810 #: rhodecode/templates/admin/repos/repo_edit.mako:51
6962 #: rhodecode/templates/admin/repos/repo_edit.mako:51
6811 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:36
6963 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:36
6812 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:24
6964 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:24
6813 #: rhodecode/templates/admin/users/user_edit.mako:42
6965 #: rhodecode/templates/admin/users/user_edit.mako:42
6814 msgid "Advanced"
6966 msgid "Advanced"
6815 msgstr ""
6967 msgstr ""
6816
6968
6817 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:7
6969 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:7
6818 msgid "Repository Group ID"
6970 msgid "Repository Group ID"
6819 msgstr ""
6971 msgstr ""
6820
6972
6821 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:10
6973 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:10
6822 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:8
6974 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:8
6823 msgid "Updated on"
6975 msgid "Updated on"
6824 msgstr ""
6976 msgstr ""
6825
6977
6826 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:11
6978 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:11
6827 msgid "Cached Commit source"
6979 msgid "Cached Commit source"
6828 msgstr ""
6980 msgstr ""
6829
6981
6830 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:12
6982 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:12
6831 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:9
6983 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:9
6832 msgid "Cached Commit id"
6984 msgid "Cached Commit id"
6833 msgstr ""
6985 msgstr ""
6834
6986
6835 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:13
6987 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:13
6836 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:10
6988 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:10
6837 msgid "Cached Commit date"
6989 msgid "Cached Commit date"
6838 msgstr ""
6990 msgstr ""
6839
6991
6840 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:15
6992 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:15
6841 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:11
6993 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:11
6842 msgid "Cached Commit data"
6994 msgid "Cached Commit data"
6843 msgstr ""
6995 msgstr ""
6844
6996
6845 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:17
6997 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:17
6846 msgid "Is Personal Group"
6998 msgid "Is Personal Group"
6847 msgstr ""
6999 msgstr ""
6848
7000
6849 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:19
7001 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:19
6850 msgid "Total repositories"
7002 msgid "Total repositories"
6851 msgstr ""
7003 msgstr ""
6852
7004
6853 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:20
7005 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:20
6854 msgid "Top level repositories"
7006 msgid "Top level repositories"
6855 msgstr ""
7007 msgstr ""
6856
7008
6857 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:22
7009 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:22
6858 msgid "Children groups"
7010 msgid "Children groups"
6859 msgstr ""
7011 msgstr ""
6860
7012
6861 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:28
7013 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:28
6862 msgid "Repository Group Advanced: {}"
7014 msgid "Repository Group Advanced: {}"
6863 msgstr ""
7015 msgstr ""
6864
7016
6865 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:38
7017 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:38
6866 msgid "Delete repository group"
7018 msgid "Delete repository group"
6867 msgstr ""
7019 msgstr ""
6868
7020
6869 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:67
7021 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:67
6870 #, python-format
7022 #, python-format
6871 msgid "Confirm to delete this group: %s"
7023 msgid "Confirm to delete this group: %s"
6872 msgstr ""
7024 msgstr ""
6873
7025
6874 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:68
7026 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:68
6875 msgid "Delete this repository group"
7027 msgid "Delete this repository group"
6876 msgstr ""
7028 msgstr ""
6877
7029
6878 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:5
7030 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:5
6879 msgid "Repository Group Permissions: {}"
7031 msgid "Repository Group Permissions: {}"
6880 msgstr ""
7032 msgstr ""
6881
7033
6882 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:15
7034 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:15
6883 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:15
7035 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:15
6884 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:19
7036 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:19
6885 msgid "User/User Group"
7037 msgid "User/User Group"
6886 msgstr ""
7038 msgstr ""
6887
7039
6888 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:32
7040 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:32
6889 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:31
7041 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:31
6890 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:37
7042 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:37
6891 msgid "super-admin"
7043 msgid "super-admin"
6892 msgstr ""
7044 msgstr ""
6893
7045
6894 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:35
7046 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:35
6895 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:34
7047 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:34
6896 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:40
7048 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:40
6897 msgid "owner"
7049 msgid "owner"
6898 msgstr ""
7050 msgstr ""
6899
7051
6900 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:66
7052 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:66
6901 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:114
7053 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:119
6902 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:92
7054 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:92
6903 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:72
7055 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:72
6904 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:120
7056 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:125
6905 msgid "permission for other logged in and anonymous users"
7057 msgid "permission for other logged in and anonymous users"
6906 msgstr ""
7058 msgstr ""
6907
7059
6908 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:68
7060 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:68
6909 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:116
7061 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:121
6910 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:94
7062 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:94
6911 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:74
7063 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:74
6912 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:122
7064 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:127
6913 msgid "permission for other logged in users"
7065 msgid "permission for other logged in users"
6914 msgstr ""
7066 msgstr ""
6915
7067
6916 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:73
7068 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:74
6917 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:121
7069 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:127
6918 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:99
7070 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:100
6919 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:79
7071 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:80
6920 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:127
7072 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:133
7073 msgid "This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually."
7074 msgstr ""
7075
7076 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:74
7077 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:127
7078 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:100
7079 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:80
7080 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:133
6921 msgid "inactive duplicate"
7081 msgid "inactive duplicate"
6922 msgstr ""
7082 msgstr ""
6923
7083
6924 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:82
7084 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:87
6925 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:167
7085 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:177
6926 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:115
7086 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:121
6927 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:164
7087 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:170
6928 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:46
7088 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:46
6929 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:88
7089 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:93
6930 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:172
7090 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:182
6931 msgid "Remove"
7091 msgid "Remove"
6932 msgstr ""
7092 msgstr ""
6933
7093
6934 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:124
7094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:134
6935 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:130
7095 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:140
6936 msgid "delegated admin"
7096 msgid "delegated admin"
6937 msgstr ""
7097 msgstr ""
6938
7098
6939 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:162
7099 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:172
6940 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:159
7100 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:165
6941 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:167
7101 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:177
6942 msgid "members"
7102 msgid "members"
6943 msgstr ""
7103 msgstr ""
6944
7104
6945 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:194
6946 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:191
6947 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:198
6948 msgid "Add user/user group"
6949 msgstr ""
6950
6951 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:204
7105 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:204
7106 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:197
7107 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:208
7108 msgid "Add user/user group"
7109 msgstr ""
7110
7111 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:214
6952 msgid "Apply to children"
7112 msgid "Apply to children"
6953 msgstr ""
7113 msgstr ""
6954
7114
6955 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:210
7115 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:220
6956 msgid "Both"
7116 msgid "Both"
6957 msgstr ""
7117 msgstr ""
6958
7118
6959 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:211
7119 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:221
6960 msgid "Set or revoke permissions to selected types of children of this group, including non-private repositories and other groups if chosen."
7120 msgid "Set or revoke permissions to selected types of children of this group, including non-private repositories and other groups if chosen."
6961 msgstr ""
7121 msgstr ""
6962
7122
6963 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:6
7123 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:6
6964 msgid "Repository Group Settings: {}"
7124 msgid "Repository Group Settings: {}"
6965 msgstr ""
7125 msgstr ""
6966
7126
6967 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:31
7127 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:31
6968 msgid "Optional select a parent group to move this repository group into."
7128 msgid "Optional select a parent group to move this repository group into."
6969 msgstr ""
7129 msgstr ""
6970
7130
6971 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:49
7131 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:49
6972 msgid "Change owner of this repository group."
7132 msgid "Change owner of this repository group."
6973 msgstr ""
7133 msgstr ""
6974
7134
6975 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:5
7135 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:5
6976 msgid "Repository groups administration"
7136 msgid "Repository groups administration"
6977 msgstr ""
7137 msgstr ""
6978
7138
6979 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:82
7139 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:82
6980 msgid "Number of top level repositories"
7140 msgid "Number of top level repositories"
6981 msgstr ""
7141 msgstr ""
6982
7142
6983 #: rhodecode/templates/admin/repos/repo_add.mako:5
7143 #: rhodecode/templates/admin/repos/repo_add.mako:5
6984 msgid "Add repository"
7144 msgid "Add repository"
6985 msgstr ""
7145 msgstr ""
6986
7146
6987 #: rhodecode/templates/admin/repos/repo_add_base.mako:9
7147 #: rhodecode/templates/admin/repos/repo_add_base.mako:9
6988 msgid "Repository name"
7148 msgid "Repository name"
6989 msgstr ""
7149 msgstr ""
6990
7150
6991 #: rhodecode/templates/admin/repos/repo_add_base.mako:14
7151 #: rhodecode/templates/admin/repos/repo_add_base.mako:14
6992 msgid "Import Existing Repository ?"
7152 msgid "Import Existing Repository ?"
6993 msgstr ""
7153 msgstr ""
6994
7154
6995 #: rhodecode/templates/admin/repos/repo_add_base.mako:23
7155 #: rhodecode/templates/admin/repos/repo_add_base.mako:23
6996 #: rhodecode/templates/base/base.mako:323
7156 #: rhodecode/templates/base/base.mako:330
6997 msgid "Clone from"
7157 msgid "Clone from"
6998 msgstr ""
7158 msgstr ""
6999
7159
7000 #: rhodecode/templates/admin/repos/repo_add_base.mako:49
7001 #: rhodecode/templates/forks/fork.mako:47
7002 #, python-format
7003 msgid "Select my personal group (%(repo_group_name)s)"
7004 msgstr ""
7005
7006 #: rhodecode/templates/admin/repos/repo_add_base.mako:52
7160 #: rhodecode/templates/admin/repos/repo_add_base.mako:52
7007 #: rhodecode/templates/forks/fork.mako:50
7161 #: rhodecode/templates/forks/fork.mako:50
7008 msgid "Optionally select a group to put this repository into."
7162 msgid "Optionally select a group to put this repository into."
7009 msgstr ""
7163 msgstr ""
7010
7164
7011 #: rhodecode/templates/admin/repos/repo_add_base.mako:78
7165 #: rhodecode/templates/admin/repos/repo_add_base.mako:78
7012 msgid "Set the type of repository to create."
7166 msgid "Set the type of repository to create."
7013 msgstr ""
7167 msgstr ""
7014
7168
7015 #: rhodecode/templates/admin/repos/repo_add_base.mako:94
7169 #: rhodecode/templates/admin/repos/repo_add_base.mako:94
7016 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:183
7170 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:183
7017 #: rhodecode/templates/forks/fork.mako:67
7171 #: rhodecode/templates/forks/fork.mako:67
7018 msgid "Add a README file for longer descriptions"
7172 msgid "Add a README file for longer descriptions"
7019 msgstr ""
7173 msgstr ""
7020
7174
7021 #: rhodecode/templates/admin/repos/repo_add_base.mako:121
7175 #: rhodecode/templates/admin/repos/repo_add_base.mako:121
7022 msgid "Create Repository"
7176 msgid "Create Repository"
7023 msgstr ""
7177 msgstr ""
7024
7178
7025 #: rhodecode/templates/admin/repos/repo_creating.mako:5
7179 #: rhodecode/templates/admin/repos/repo_creating.mako:5
7026 msgid "{} Creating repository"
7180 msgid "{} Creating repository"
7027 msgstr ""
7181 msgstr ""
7028
7182
7029 #: rhodecode/templates/admin/repos/repo_creating.mako:12
7183 #: rhodecode/templates/admin/repos/repo_creating.mako:12
7030 msgid "Creating repository"
7184 msgid "Creating repository"
7031 msgstr ""
7185 msgstr ""
7032
7186
7033 #: rhodecode/templates/admin/repos/repo_creating.mako:26
7187 #: rhodecode/templates/admin/repos/repo_creating.mako:26
7034 #, python-format
7188 #, python-format
7035 msgid "Repository \"%(repo_name)s\" is being created, you will be redirected when this process is finished.repo_name"
7189 msgid "Repository \"%(repo_name)s\" is being created, you will be redirected when this process is finished.repo_name"
7036 msgstr ""
7190 msgstr ""
7037
7191
7038 #: rhodecode/templates/admin/repos/repo_edit.mako:8
7192 #: rhodecode/templates/admin/repos/repo_edit.mako:8
7039 msgid "{} repository settings"
7193 msgid "{} repository settings"
7040 msgstr ""
7194 msgstr ""
7041
7195
7042 #: rhodecode/templates/admin/repos/repo_edit.mako:48
7196 #: rhodecode/templates/admin/repos/repo_edit.mako:48
7043 msgid "Branch Permissions"
7197 msgid "Branch Permissions"
7044 msgstr ""
7198 msgstr ""
7045
7199
7046 #: rhodecode/templates/admin/repos/repo_edit.mako:54
7200 #: rhodecode/templates/admin/repos/repo_edit.mako:54
7047 msgid "VCS"
7201 msgid "VCS"
7048 msgstr ""
7202 msgstr ""
7049
7203
7050 #: rhodecode/templates/admin/repos/repo_edit.mako:57
7204 #: rhodecode/templates/admin/repos/repo_edit.mako:57
7051 msgid "Extra Fields"
7205 msgid "Extra Fields"
7052 msgstr ""
7206 msgstr ""
7053
7207
7054 #: rhodecode/templates/admin/repos/repo_edit.mako:60
7208 #: rhodecode/templates/admin/repos/repo_edit.mako:60
7055 msgid "Issue Tracker"
7209 msgid "Issue Tracker"
7056 msgstr ""
7210 msgstr ""
7057
7211
7058 #: rhodecode/templates/admin/repos/repo_edit.mako:63
7212 #: rhodecode/templates/admin/repos/repo_edit.mako:63
7059 #: rhodecode/templates/admin/users/user_edit.mako:49
7213 #: rhodecode/templates/admin/users/user_edit.mako:49
7060 #: rhodecode/templates/admin/users/user_edit_caches.mako:7
7214 #: rhodecode/templates/admin/users/user_edit_caches.mako:7
7061 msgid "Caches"
7215 msgid "Caches"
7062 msgstr ""
7216 msgstr ""
7063
7217
7064 #: rhodecode/templates/admin/repos/repo_edit.mako:67
7218 #: rhodecode/templates/admin/repos/repo_edit.mako:67
7065 msgid "Remote sync"
7219 msgid "Remote sync"
7066 msgstr ""
7220 msgstr ""
7067
7221
7068 #: rhodecode/templates/admin/repos/repo_edit.mako:71
7222 #: rhodecode/templates/admin/repos/repo_edit.mako:71
7069 msgid "Statistics"
7223 msgid "Statistics"
7070 msgstr ""
7224 msgstr ""
7071
7225
7072 #: rhodecode/templates/admin/repos/repo_edit.mako:78
7226 #: rhodecode/templates/admin/repos/repo_edit.mako:78
7073 msgid "Reviewer Rules"
7227 msgid "Reviewer Rules"
7074 msgstr ""
7228 msgstr ""
7075
7229
7076 #: rhodecode/templates/admin/repos/repo_edit.mako:82
7230 #: rhodecode/templates/admin/repos/repo_edit.mako:82
7077 msgid "Automation"
7231 msgid "Automation"
7078 msgstr ""
7232 msgstr ""
7079
7233
7080 #: rhodecode/templates/admin/repos/repo_edit.mako:85
7234 #: rhodecode/templates/admin/repos/repo_edit.mako:85
7081 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:3
7235 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:3
7082 msgid "Maintenance"
7236 msgid "Maintenance"
7083 msgstr ""
7237 msgstr ""
7084
7238
7085 #: rhodecode/templates/admin/repos/repo_edit.mako:88
7239 #: rhodecode/templates/admin/repos/repo_edit.mako:88
7086 msgid "Strip"
7240 msgid "Strip"
7087 msgstr ""
7241 msgstr ""
7088
7242
7089 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:5
7243 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:5
7090 msgid "Repository ID"
7244 msgid "Repository ID"
7091 msgstr ""
7245 msgstr ""
7092
7246
7093 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:12
7247 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:12
7094 msgid "Attached scoped tokens"
7248 msgid "Attached scoped tokens"
7095 msgstr ""
7249 msgstr ""
7096
7250
7097 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:13
7251 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:13
7098 msgid "Pull requests source"
7252 msgid "Pull requests source"
7099 msgstr ""
7253 msgstr ""
7100
7254
7101 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:14
7255 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:14
7102 msgid "Pull requests target"
7256 msgid "Pull requests target"
7103 msgstr ""
7257 msgstr ""
7104
7258
7105 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:15
7259 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:15
7106 msgid "Attached Artifacts"
7260 msgid "Attached Artifacts"
7107 msgstr ""
7261 msgstr ""
7108
7262
7109 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:21
7263 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:21
7110 #, python-format
7264 #, python-format
7111 msgid "Repository: %s"
7265 msgid "Repository: %s"
7112 msgstr ""
7266 msgstr ""
7113
7267
7114 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:31
7268 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:31
7115 msgid "Fork Reference"
7269 msgid "Fork Reference"
7116 msgstr ""
7270 msgstr ""
7117
7271
7118 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:37
7272 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:37
7119 #, python-format
7273 #, python-format
7120 msgid "This repository is a fork of %(repo_link)s"
7274 msgid "This repository is a fork of %(repo_link)s"
7121 msgstr ""
7275 msgstr ""
7122
7276
7123 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:43
7277 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:43
7124 msgid "Set"
7278 msgid "Set"
7125 msgstr ""
7279 msgstr ""
7126
7280
7127 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:46
7281 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:46
7128 msgid "Manually set this repository as a fork of another from the list"
7282 msgid "Manually set this repository as a fork of another from the list"
7129 msgstr ""
7283 msgstr ""
7130
7284
7131 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:55
7285 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:55
7132 msgid "Public Journal Visibility"
7286 msgid "Public Journal Visibility"
7133 msgstr ""
7287 msgstr ""
7134
7288
7135 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:62
7289 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:62
7136 msgid "Remove from Public Journal"
7290 msgid "Remove from Public Journal"
7137 msgstr ""
7291 msgstr ""
7138
7292
7139 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:66
7293 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:66
7140 msgid "Add to Public Journal"
7294 msgid "Add to Public Journal"
7141 msgstr ""
7295 msgstr ""
7142
7296
7143 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:71
7297 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:71
7144 msgid "All actions made on this repository will be visible to everyone following the public journal."
7298 msgid "All actions made on this repository will be visible to everyone following the public journal."
7145 msgstr ""
7299 msgstr ""
7146
7300
7147 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:80
7301 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:80
7148 msgid "Locking state"
7302 msgid "Locking state"
7149 msgstr ""
7303 msgstr ""
7150
7304
7151 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:89
7305 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:89
7152 msgid "This Repository is not currently locked."
7306 msgid "This Repository is not currently locked."
7153 msgstr ""
7307 msgstr ""
7154
7308
7155 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:99
7309 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:99
7156 msgid "Unlock repository"
7310 msgid "Unlock repository"
7157 msgstr ""
7311 msgstr ""
7158
7312
7159 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:107
7313 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:107
7160 msgid "Lock repository"
7314 msgid "Lock repository"
7161 msgstr ""
7315 msgstr ""
7162
7316
7163 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:113
7317 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:113
7164 msgid "Force repository locking. This only works when anonymous access is disabled. Pulling from the repository locks the repository to that user until the same user pushes to that repository again."
7318 msgid "Force repository locking. This only works when anonymous access is disabled. Pulling from the repository locks the repository to that user until the same user pushes to that repository again."
7165 msgstr ""
7319 msgstr ""
7166
7320
7167 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:123
7321 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:123
7168 msgid "Hooks"
7322 msgid "Hooks"
7169 msgstr ""
7323 msgstr ""
7170
7324
7171 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:127
7325 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:127
7172 msgid "Hook type"
7326 msgid "Hook type"
7173 msgstr ""
7327 msgstr ""
7174
7328
7175 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:128
7329 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:128
7176 msgid "Hook version"
7330 msgid "Hook version"
7177 msgstr ""
7331 msgstr ""
7178
7332
7179 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:129
7333 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:129
7180 msgid "Current version"
7334 msgid "Current version"
7181 msgstr ""
7335 msgstr ""
7182
7336
7183 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:132
7337 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:132
7184 msgid "PRE HOOK"
7338 msgid "PRE HOOK"
7185 msgstr ""
7339 msgstr ""
7186
7340
7187 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:137
7341 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:137
7188 msgid "POST HOOK"
7342 msgid "POST HOOK"
7189 msgstr ""
7343 msgstr ""
7190
7344
7191 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:143
7345 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:143
7192 msgid "Unable to read hook information from VCS Server"
7346 msgid "Unable to read hook information from VCS Server"
7193 msgstr ""
7347 msgstr ""
7194
7348
7195 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:149
7349 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:149
7196 msgid "Confirm to reinstall hooks for this repository."
7350 msgid "Confirm to reinstall hooks for this repository."
7197 msgstr ""
7351 msgstr ""
7198
7352
7199 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:150
7353 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:150
7200 msgid "Update Hooks"
7354 msgid "Update Hooks"
7201 msgstr ""
7355 msgstr ""
7202
7356
7203 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:154
7357 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:154
7204 msgid "Outdated hooks detected, please update hooks using `Update Hooks` action."
7358 msgid "Outdated hooks detected, please update hooks using `Update Hooks` action."
7205 msgstr ""
7359 msgstr ""
7206
7360
7207 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:162
7361 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:162
7208 msgid "Archive repository"
7362 msgid "Archive repository"
7209 msgstr ""
7363 msgstr ""
7210
7364
7211 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:173
7365 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:176
7212 msgid "Archive this repository"
7366 msgid "Archive this repository"
7213 msgstr ""
7367 msgstr ""
7214
7368
7215 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:178
7369 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:183
7216 msgid "Archiving the repository will make it entirely read-only. The repository cannot be committed to.It is hidden from the search results and dashboard. "
7370 msgid "Archiving the repository will make it entirely read-only. The repository cannot be committed to.It is hidden from the search results and dashboard. "
7217 msgstr ""
7371 msgstr ""
7218
7372
7219 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:190
7373 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:195
7220 msgid "Delete repository"
7374 msgid "Delete repository"
7221 msgstr ""
7375 msgstr ""
7222
7376
7223 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:201
7224 msgid "Detach forks"
7225 msgstr ""
7226
7227 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:206
7377 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:206
7378 msgid "Detach forks"
7379 msgstr ""
7380
7381 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:211
7228 msgid "Delete forks"
7382 msgid "Delete forks"
7229 msgstr ""
7383 msgstr ""
7230
7384
7231 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:216
7385 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:221
7232 msgid "Consider to archive this repository instead."
7386 msgid "Consider to archive this repository instead."
7233 msgstr ""
7387 msgstr ""
7234
7388
7235 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:229
7236 msgid "Delete this repository"
7237 msgstr ""
7238
7239 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:234
7389 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:234
7390 msgid "Delete this repository"
7391 msgstr ""
7392
7393 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:239
7240 msgid "This repository will be renamed in a special way in order to make it inaccessible to RhodeCode Enterprise and its VCS systems. If you need to fully delete it from the file system, please do it manually, or with rhodecode-cleanup-repos command available in rhodecode-tools."
7394 msgid "This repository will be renamed in a special way in order to make it inaccessible to RhodeCode Enterprise and its VCS systems. If you need to fully delete it from the file system, please do it manually, or with rhodecode-cleanup-repos command available in rhodecode-tools."
7241 msgstr ""
7395 msgstr ""
7242
7396
7243 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:268
7397 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:273
7244 msgid "Change repository"
7398 msgid "Change repository"
7245 msgstr ""
7399 msgstr ""
7246
7400
7247 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:268
7401 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:273
7248 msgid "Pick repository"
7402 msgid "Pick repository"
7249 msgstr ""
7403 msgstr ""
7250
7404
7251 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:7
7405 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:7
7252 msgid "Repository Audit Logs"
7406 msgid "Repository Audit Logs"
7253 msgstr ""
7407 msgstr ""
7254
7408
7255 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:14
7409 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:14
7256 #: rhodecode/templates/admin/users/user_edit_audit.mako:17
7410 #: rhodecode/templates/admin/users/user_edit_audit.mako:17
7257 msgid "audit filter..."
7411 msgid "audit filter..."
7258 msgstr ""
7412 msgstr ""
7259
7413
7260 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:3
7414 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:3
7261 msgid "Repo Automation"
7415 msgid "Repo Automation"
7262 msgstr ""
7416 msgstr ""
7263
7417
7264 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:3
7418 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:3
7265 msgid "Invalidate Cache for Repository"
7419 msgid "Invalidate Cache for Repository"
7266 msgstr ""
7420 msgstr ""
7267
7421
7268 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:7
7422 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:7
7269 msgid "Manually invalidate the repository cache. On the next access a repository cache will be recreated."
7423 msgid "Manually invalidate the repository cache. On the next access a repository cache will be recreated."
7270 msgstr ""
7424 msgstr ""
7271
7425
7272 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:10
7426 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:10
7273 msgid "Cache purge can be automated by such api call. Can be called periodically in crontab etc."
7427 msgid "Cache purge can be automated by such api call. Can be called periodically in crontab etc."
7274 msgstr ""
7428 msgstr ""
7275
7429
7276 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:23
7430 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:23
7277 msgid "Invalidate repository cache"
7431 msgid "Invalidate repository cache"
7278 msgstr ""
7432 msgstr ""
7279
7433
7280 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:36
7434 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:36
7281 msgid "Invalidation keys"
7435 msgid "Invalidation keys"
7282 msgstr ""
7436 msgstr ""
7283
7437
7284 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:44
7438 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:44
7285 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:88
7439 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:88
7286 #: rhodecode/templates/admin/users/user_edit_caches.mako:22
7440 #: rhodecode/templates/admin/users/user_edit_caches.mako:22
7287 msgid "Show all"
7441 msgid "Show all"
7288 msgstr ""
7442 msgstr ""
7289
7443
7290 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:48
7444 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:48
7291 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:92
7445 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:92
7292 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:11
7446 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:11
7293 msgid "Key"
7447 msgid "Key"
7294 msgstr ""
7448 msgstr ""
7295
7449
7296 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:49
7450 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:49
7297 msgid "State UID"
7451 msgid "State UID"
7298 msgstr ""
7452 msgstr ""
7299
7453
7300 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:50
7454 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:50
7301 msgid "Namespace"
7455 msgid "Namespace"
7302 msgstr ""
7456 msgstr ""
7303
7457
7304 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:69
7458 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:69
7305 msgid "Cache keys"
7459 msgid "Cache keys"
7306 msgstr ""
7460 msgstr ""
7307
7461
7308 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:93
7462 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:93
7309 msgid "Region"
7463 msgid "Region"
7310 msgstr ""
7464 msgstr ""
7311
7465
7312 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:110
7466 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:110
7313 msgid "Shadow Repositories"
7467 msgid "Shadow Repositories"
7314 msgstr ""
7468 msgstr ""
7315
7469
7316 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:122
7470 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:122
7317 msgid "No Shadow repositories exist for this repository."
7471 msgid "No Shadow repositories exist for this repository."
7318 msgstr ""
7472 msgstr ""
7319
7473
7320 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:133
7474 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:133
7321 msgid "Diff Caches"
7475 msgid "Diff Caches"
7322 msgstr ""
7476 msgstr ""
7323
7477
7324 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:141
7478 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:141
7325 msgid "Cached diff name"
7479 msgid "Cached diff name"
7326 msgstr ""
7480 msgstr ""
7327
7481
7328 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:149
7482 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:149
7329 msgid "Cached diff files"
7483 msgid "Cached diff files"
7330 msgstr ""
7484 msgstr ""
7331
7485
7332 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:153
7486 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:153
7333 msgid "Cached diff size"
7487 msgid "Cached diff size"
7334 msgstr ""
7488 msgstr ""
7335
7489
7336 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:3
7490 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:3
7337 msgid "Custom extra fields for this repository"
7491 msgid "Custom extra fields for this repository"
7338 msgstr ""
7492 msgstr ""
7339
7493
7340 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:10
7494 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:10
7341 msgid "Label"
7495 msgid "Label"
7342 msgstr ""
7496 msgstr ""
7343
7497
7344 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:24
7498 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:24
7345 #, python-format
7499 #, python-format
7346 msgid "Confirm to delete this field: %s"
7500 msgid "Confirm to delete this field: %s"
7347 msgstr ""
7501 msgstr ""
7348
7502
7349 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:40
7503 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:40
7350 msgid "New Field Key"
7504 msgid "New Field Key"
7351 msgstr ""
7505 msgstr ""
7352
7506
7353 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:48
7507 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:48
7354 msgid "New Field Label"
7508 msgid "New Field Label"
7355 msgstr ""
7509 msgstr ""
7356
7510
7357 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:51
7511 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:51
7358 msgid "Enter short label"
7512 msgid "Enter short label"
7359 msgstr ""
7513 msgstr ""
7360
7514
7361 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:57
7515 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:57
7362 msgid "New Field Description"
7516 msgid "New Field Description"
7363 msgstr ""
7517 msgstr ""
7364
7518
7365 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:60
7519 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:60
7366 msgid "Enter a full description for the field"
7520 msgid "Enter a full description for the field"
7367 msgstr ""
7521 msgstr ""
7368
7522
7369 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:73
7523 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:73
7370 msgid "Extra fields are disabled. You can enable them from the Admin/Settings/Visual page."
7524 msgid "Extra fields are disabled. You can enable them from the Admin/Settings/Visual page."
7371 msgstr ""
7525 msgstr ""
7372
7526
7373 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:9
7527 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:9
7374 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:9
7528 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:9
7375 msgid "Inherit from global settings"
7529 msgid "Inherit from global settings"
7376 msgstr ""
7530 msgstr ""
7377
7531
7378 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:14
7532 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:14
7379 msgid "Select to inherit global patterns for issue tracker."
7533 msgid "Select to inherit global patterns for issue tracker."
7380 msgstr ""
7534 msgstr ""
7381
7535
7382 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:24
7536 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:24
7383 msgid "Inherited Issue Tracker Patterns"
7537 msgid "Inherited Issue Tracker Patterns"
7384 msgstr ""
7538 msgstr ""
7385
7539
7386 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:31
7540 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:31
7387 #: rhodecode/templates/base/issue_tracker_settings.mako:79
7541 #: rhodecode/templates/base/issue_tracker_settings.mako:79
7388 #: rhodecode/templates/base/perms_summary.mako:169
7542 #: rhodecode/templates/base/perms_summary.mako:174
7389 msgid "Pattern"
7543 msgid "Pattern"
7390 msgstr ""
7544 msgstr ""
7391
7545
7392 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:32
7546 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:32
7393 #: rhodecode/templates/base/issue_tracker_settings.mako:80
7547 #: rhodecode/templates/base/issue_tracker_settings.mako:80
7394 msgid "Url"
7548 msgid "Url"
7395 msgstr ""
7549 msgstr ""
7396
7550
7397 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:33
7551 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:33
7398 msgid "Prefix"
7552 msgid "Prefix"
7399 msgstr ""
7553 msgstr ""
7400
7554
7401 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:75
7555 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:75
7402 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:5
7556 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:5
7403 msgid "Issue Tracker / Wiki Patterns"
7557 msgid "Issue Tracker / Wiki Patterns"
7404 msgstr ""
7558 msgstr ""
7405
7559
7406 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:95
7560 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:95
7407 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:24
7561 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:24
7408 msgid "Test Patterns"
7562 msgid "Test Patterns"
7409 msgstr ""
7563 msgstr ""
7410
7564
7411 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:8
7565 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:8
7412 msgid "Perform maintenance tasks for this repo"
7566 msgid "Perform maintenance tasks for this repo"
7413 msgstr ""
7567 msgstr ""
7414
7568
7415 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:10
7569 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:10
7416 msgid "Following tasks will be performed"
7570 msgid "Following tasks will be performed"
7417 msgstr ""
7571 msgstr ""
7418
7572
7419 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:17
7573 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:17
7420 msgid "Maintenance can be automated by such api call. Can be called periodically in crontab etc."
7574 msgid "Maintenance can be automated by such api call. Can be called periodically in crontab etc."
7421 msgstr ""
7575 msgstr ""
7422
7576
7423 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:25
7577 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:25
7424 msgid "No maintenance tasks for this repo available"
7578 msgid "No maintenance tasks for this repo available"
7425 msgstr ""
7579 msgstr ""
7426
7580
7427 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:34
7581 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:34
7428 msgid "Run Maintenance"
7582 msgid "Run Maintenance"
7429 msgstr ""
7583 msgstr ""
7430
7584
7431 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:49
7585 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:49
7432 msgid "Performing Maintenance"
7586 msgid "Performing Maintenance"
7433 msgstr ""
7587 msgstr ""
7434
7588
7435 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:5
7589 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:5
7436 msgid "Repository Access Permissions"
7590 msgid "Repository Access Permissions"
7437 msgstr ""
7591 msgstr ""
7438
7592
7439 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:55
7593 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:55
7440 msgid "private repository"
7594 msgid "private repository"
7441 msgstr ""
7595 msgstr ""
7442
7596
7443 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:60
7597 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:60
7444 msgid "only users/user groups explicitly added here will have access"
7598 msgid "only users/user groups explicitly added here will have access"
7445 msgstr ""
7599 msgstr ""
7446
7600
7447 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:62
7601 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:62
7448 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:118
7602 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:124
7449 msgid "Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply"
7603 msgid "Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply"
7450 msgstr ""
7604 msgstr ""
7451
7605
7452 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:63
7606 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:63
7453 msgid "un-set private mode"
7607 msgid "un-set private mode"
7454 msgstr ""
7608 msgstr ""
7455
7609
7456 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:103
7610 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:109
7457 msgid "used by {} branch rule, requires write+ permissions"
7611 msgid "used by {} branch rule, requires write+ permissions"
7458 msgstr ""
7612 msgstr ""
7459
7613
7460 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:105
7614 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:111
7461 msgid "used by {} branch rules, requires write+ permissions"
7615 msgid "used by {} branch rules, requires write+ permissions"
7462 msgstr ""
7616 msgstr ""
7463
7617
7464 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:119
7618 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:125
7465 msgid "set private mode"
7619 msgid "set private mode"
7466 msgstr ""
7620 msgstr ""
7467
7621
7468 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:3
7622 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:3
7469 msgid "Repository Branch Permissions."
7623 msgid "Repository Branch Permissions."
7470 msgstr ""
7624 msgstr ""
7471
7625
7472 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:3
7626 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:3
7473 msgid "Remote Sync"
7627 msgid "Remote Sync"
7474 msgstr ""
7628 msgstr ""
7475
7629
7476 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:7
7630 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:7
7477 msgid "Manually pull/push changes from/to external URLs."
7631 msgid "Manually pull/push changes from/to external URLs."
7478 msgstr ""
7632 msgstr ""
7479
7633
7480 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:11
7634 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:11
7481 msgid "Pull url"
7635 msgid "Pull url"
7482 msgstr ""
7636 msgstr ""
7483
7637
7484 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:16
7638 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:16
7485 msgid "This repository does not have any pull url set."
7639 msgid "This repository does not have any pull url set."
7486 msgstr ""
7640 msgstr ""
7487
7641
7488 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:17
7642 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:17
7489 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:60
7643 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:60
7490 msgid "Set remote url."
7644 msgid "Set remote url."
7491 msgstr ""
7645 msgstr ""
7492
7646
7493 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:26
7647 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:26
7494 msgid "Pull can be automated by such api call. Can be called periodically in crontab etc."
7648 msgid "Pull can be automated by such api call. Can be called periodically in crontab etc."
7495 msgstr ""
7649 msgstr ""
7496
7650
7497 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:44
7651 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:44
7498 msgid "Pull changes from remote location"
7652 msgid "Pull changes from remote location"
7499 msgstr ""
7653 msgstr ""
7500
7654
7501 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:54
7655 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:54
7502 msgid "Push url"
7656 msgid "Push url"
7503 msgstr ""
7657 msgstr ""
7504
7658
7505 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:59
7659 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:59
7506 msgid "This repository does not have any push url set."
7660 msgid "This repository does not have any push url set."
7507 msgstr ""
7661 msgstr ""
7508
7662
7509 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:3
7663 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:3
7510 msgid "Default Reviewer Rules"
7664 msgid "Default Reviewer Rules"
7511 msgstr ""
7665 msgstr ""
7512
7666
7513 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:6
7667 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:6
7514 #, python-format
7668 #, python-format
7515 msgid "Settings for Repository: %s"
7669 msgid "Settings for Repository: %s"
7516 msgstr ""
7670 msgstr ""
7517
7671
7518 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7672 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7519 msgid "permalink id"
7673 msgid "permalink id"
7520 msgstr ""
7674 msgstr ""
7521
7675
7522 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7676 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7523 msgid "what is that ?"
7677 msgid "what is that ?"
7524 msgstr ""
7678 msgstr ""
7525
7679
7526 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:24
7680 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:24
7527 msgid "URL by id"
7681 msgid "URL by id"
7528 msgstr ""
7682 msgstr ""
7529
7683
7530 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:25
7684 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:25
7531 msgid ""
7685 msgid ""
7532 "In case this repository is renamed or moved into another group the repository url changes.\n"
7686 "In case this repository is renamed or moved into another group the repository url changes.\n"
7533 " Using above url guarantees that this repository will always be accessible under such url.\n"
7687 " Using above url guarantees that this repository will always be accessible under such url.\n"
7534 " Useful for CI systems, or any other cases that you need to hardcode the url into 3rd party service."
7688 " Useful for CI systems, or any other cases that you need to hardcode the url into 3rd party service."
7535 msgstr ""
7689 msgstr ""
7536
7690
7537 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:41
7691 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:41
7538 #, python-format
7692 #, python-format
7539 msgid "Select my personal group (`%(repo_group_name)s`)"
7693 msgid "Select my personal group (`%(repo_group_name)s`)"
7540 msgstr ""
7694 msgstr ""
7541
7695
7542 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:44
7696 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:44
7543 msgid "Optional select a group to put this repository into."
7697 msgid "Optional select a group to put this repository into."
7544 msgstr ""
7698 msgstr ""
7545
7699
7546 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:52
7700 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:52
7547 msgid "Remote pull uri"
7701 msgid "Remote pull uri"
7548 msgstr ""
7702 msgstr ""
7549
7703
7550 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:60
7704 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:60
7551 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:102
7705 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:102
7552 #: rhodecode/templates/base/perms_summary.mako:111
7706 #: rhodecode/templates/base/perms_summary.mako:116
7553 #: rhodecode/templates/base/perms_summary.mako:228
7707 #: rhodecode/templates/base/perms_summary.mako:233
7554 #: rhodecode/templates/base/perms_summary.mako:306
7708 #: rhodecode/templates/base/perms_summary.mako:311
7555 #: rhodecode/templates/base/perms_summary.mako:308
7709 #: rhodecode/templates/base/perms_summary.mako:313
7556 #: rhodecode/templates/debug_style/form-elements.html:45
7710 #: rhodecode/templates/debug_style/form-elements.html:45
7557 msgid "edit"
7711 msgid "edit"
7558 msgstr ""
7712 msgstr ""
7559
7713
7560 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:66
7714 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:66
7561 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:108
7715 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:108
7562 msgid "enter new value, or leave empty to remove"
7716 msgid "enter new value, or leave empty to remove"
7563 msgstr ""
7717 msgstr ""
7564
7718
7565 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:76
7719 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:76
7566 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:118
7720 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:118
7567 msgid "cancel"
7721 msgid "cancel"
7568 msgstr ""
7722 msgstr ""
7569
7723
7570 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:87
7724 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:87
7571 msgid "http[s] url where from repository was imported. This field can used for doing {sync_link}."
7725 msgid "http[s] url where from repository was imported. This field can used for doing {sync_link}."
7572 msgstr ""
7726 msgstr ""
7573
7727
7574 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:88
7728 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:88
7575 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:130
7729 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:130
7576 msgid "This field is stored encrypted inside Database, a format of http://user:password@server.com/repo_name can be used and will be hidden from display."
7730 msgid "This field is stored encrypted inside Database, a format of http://user:password@server.com/repo_name can be used and will be hidden from display."
7577 msgstr ""
7731 msgstr ""
7578
7732
7579 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:94
7733 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:94
7580 msgid "Remote push uri"
7734 msgid "Remote push uri"
7581 msgstr ""
7735 msgstr ""
7582
7736
7583 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:129
7737 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:129
7584 msgid "http[s] url to sync data back. This field can used for doing {sync_link}."
7738 msgid "http[s] url to sync data back. This field can used for doing {sync_link}."
7585 msgstr ""
7739 msgstr ""
7586
7740
7587 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:141
7741 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:141
7588 msgid "Landing commit"
7742 msgid "Landing commit"
7589 msgstr ""
7743 msgstr ""
7590
7744
7591 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:146
7745 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:146
7592 msgid "The default commit for file pages, downloads, full text search index, and README generation."
7746 msgid "The default commit for file pages, downloads, full text search index, and README generation."
7593 msgstr ""
7747 msgstr ""
7594
7748
7595 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:164
7749 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:164
7596 msgid "Change owner of this repository."
7750 msgid "Change owner of this repository."
7597 msgstr ""
7751 msgstr ""
7598
7752
7599 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:194
7753 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:194
7600 #: rhodecode/templates/data_table/_dt_elements.mako:104
7754 #: rhodecode/templates/data_table/_dt_elements.mako:104
7601 msgid "Private repository"
7755 msgid "Private repository"
7602 msgstr ""
7756 msgstr ""
7603
7757
7604 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:204
7758 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:204
7605 #: rhodecode/templates/summary/components.mako:238
7759 #: rhodecode/templates/summary/components.mako:263
7606 msgid "Enable statistics"
7760 msgid "Enable statistics"
7607 msgstr ""
7761 msgstr ""
7608
7762
7609 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:209
7763 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:209
7610 msgid "Enable statistics window on summary page."
7764 msgid "Enable statistics window on summary page."
7611 msgstr ""
7765 msgstr ""
7612
7766
7613 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:214
7767 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:214
7614 #: rhodecode/templates/summary/components.mako:184
7768 #: rhodecode/templates/summary/components.mako:184
7615 msgid "Enable downloads"
7769 msgid "Enable downloads"
7616 msgstr ""
7770 msgstr ""
7617
7771
7618 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:219
7772 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:219
7619 msgid "Enable download menu on summary page."
7773 msgid "Enable download menu on summary page."
7620 msgstr ""
7774 msgstr ""
7621
7775
7622 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:224
7776 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:224
7623 msgid "Enable automatic locking"
7777 msgid "Enable automatic locking"
7624 msgstr ""
7778 msgstr ""
7625
7779
7626 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:229
7780 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:229
7627 msgid "Enable automatic locking on repository. Pulling from this repository creates a lock that can be released by pushing back by the same user"
7781 msgid "Enable automatic locking on repository. Pulling from this repository creates a lock that can be released by pushing back by the same user"
7628 msgstr ""
7782 msgstr ""
7629
7783
7630 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:3
7784 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:3
7631 msgid "Repository statistics"
7785 msgid "Repository statistics"
7632 msgstr ""
7786 msgstr ""
7633
7787
7634 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:11
7788 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:11
7635 msgid "Processed commits"
7789 msgid "Processed commits"
7636 msgstr ""
7790 msgstr ""
7637
7791
7638 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:12
7792 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:12
7639 msgid "Processed progress"
7793 msgid "Processed progress"
7640 msgstr ""
7794 msgstr ""
7641
7795
7642 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7796 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7643 msgid "Reset statistics"
7797 msgid "Reset statistics"
7644 msgstr ""
7798 msgstr ""
7645
7799
7646 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7800 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7647 msgid "Confirm to remove current statistics"
7801 msgid "Confirm to remove current statistics"
7648 msgstr ""
7802 msgstr ""
7649
7803
7650 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:3
7804 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:3
7651 msgid "Strip commits from repository"
7805 msgid "Strip commits from repository"
7652 msgstr ""
7806 msgstr ""
7653
7807
7654 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:7
7808 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:7
7655 #, python-format
7809 #, python-format
7656 msgid "Please provide up to %d commits commits to strip"
7810 msgid "Please provide up to %d commits commits to strip"
7657 msgstr ""
7811 msgstr ""
7658
7812
7659 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:9
7813 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:9
7660 msgid "In the first step commits will be verified for existance in the repository"
7814 msgid "In the first step commits will be verified for existance in the repository"
7661 msgstr ""
7815 msgstr ""
7662
7816
7663 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:10
7817 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:10
7664 msgid "In the second step, correct commits will be available for stripping"
7818 msgid "In the second step, correct commits will be available for stripping"
7665 msgstr ""
7819 msgstr ""
7666
7820
7667 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:16
7821 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:16
7668 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:52
7822 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:52
7669 msgid "Enter full 40 character commit sha"
7823 msgid "Enter full 40 character commit sha"
7670 msgstr ""
7824 msgstr ""
7671
7825
7672 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:18
7826 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:18
7673 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:54
7827 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:54
7674 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:95
7828 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:95
7675 msgid "Add another commit"
7829 msgid "Add another commit"
7676 msgstr ""
7830 msgstr ""
7677
7831
7678 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:27
7832 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:27
7679 msgid "Check commits"
7833 msgid "Check commits"
7680 msgstr ""
7834 msgstr ""
7681
7835
7682 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:33
7836 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:33
7683 msgid "Sorry this functionality is not available for SVN repository"
7837 msgid "Sorry this functionality is not available for SVN repository"
7684 msgstr ""
7838 msgstr ""
7685
7839
7686 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:114
7840 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:114
7687 msgid "Checking commits"
7841 msgid "Checking commits"
7688 msgstr ""
7842 msgstr ""
7689
7843
7690 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:142
7844 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:142
7691 msgid " commit verified positive"
7845 msgid " commit verified positive"
7692 msgstr ""
7846 msgstr ""
7693
7847
7694 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:154
7848 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:154
7695 msgid " commit verified negative"
7849 msgid " commit verified negative"
7696 msgstr ""
7850 msgstr ""
7697
7851
7698 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:179
7852 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:179
7699 msgid " commit striped successfully"
7853 msgid " commit striped successfully"
7700 msgstr ""
7854 msgstr ""
7701
7855
7702 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:182
7856 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:182
7703 msgid " commit strip failed"
7857 msgid " commit strip failed"
7704 msgstr ""
7858 msgstr ""
7705
7859
7706 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:13
7860 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:13
7707 msgid "Select to inherit global vcs settings."
7861 msgid "Select to inherit global vcs settings."
7708 msgstr ""
7862 msgstr ""
7709
7863
7710 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:43
7864 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:43
7711 #: rhodecode/templates/admin/settings/settings_global.mako:140
7865 #: rhodecode/templates/admin/settings/settings_global.mako:140
7712 #: rhodecode/templates/admin/settings/settings_labs.mako:48
7866 #: rhodecode/templates/admin/settings/settings_labs.mako:48
7713 #: rhodecode/templates/admin/settings/settings_vcs.mako:13
7867 #: rhodecode/templates/admin/settings/settings_vcs.mako:13
7714 #: rhodecode/templates/admin/settings/settings_visual.mako:214
7868 #: rhodecode/templates/admin/settings/settings_visual.mako:214
7715 msgid "Save settings"
7869 msgid "Save settings"
7716 msgstr ""
7870 msgstr ""
7717
7871
7718 #: rhodecode/templates/admin/repos/repos.mako:5
7872 #: rhodecode/templates/admin/repos/repos.mako:5
7719 msgid "Repositories administration"
7873 msgid "Repositories administration"
7720 msgstr ""
7874 msgstr ""
7721
7875
7722 #: rhodecode/templates/admin/repos/repos.mako:110
7876 #: rhodecode/templates/admin/repos/repos.mako:110
7723 msgid "State"
7877 msgid "State"
7724 msgstr ""
7878 msgstr ""
7725
7879
7726 #: rhodecode/templates/admin/settings/settings_automation.mako:3
7880 #: rhodecode/templates/admin/settings/settings_automation.mako:3
7727 msgid "Admin Automation"
7881 msgid "Admin Automation"
7728 msgstr ""
7882 msgstr ""
7729
7883
7730 #: rhodecode/templates/admin/settings/settings_email.mako:3
7884 #: rhodecode/templates/admin/settings/settings_email.mako:3
7731 msgid "Email Configuration"
7885 msgid "Email Configuration"
7732 msgstr ""
7886 msgstr ""
7733
7887
7734 #: rhodecode/templates/admin/settings/settings_email.mako:8
7888 #: rhodecode/templates/admin/settings/settings_email.mako:8
7735 msgid "Email prefix"
7889 msgid "Email prefix"
7736 msgstr ""
7890 msgstr ""
7737
7891
7738 #: rhodecode/templates/admin/settings/settings_email.mako:9
7892 #: rhodecode/templates/admin/settings/settings_email.mako:9
7739 msgid "Email from"
7893 msgid "Email from"
7740 msgstr ""
7894 msgstr ""
7741
7895
7742 #: rhodecode/templates/admin/settings/settings_email.mako:11
7896 #: rhodecode/templates/admin/settings/settings_email.mako:11
7743 msgid "SMTP server"
7897 msgid "SMTP server"
7744 msgstr ""
7898 msgstr ""
7745
7899
7746 #: rhodecode/templates/admin/settings/settings_email.mako:12
7900 #: rhodecode/templates/admin/settings/settings_email.mako:12
7747 msgid "SMTP username"
7901 msgid "SMTP username"
7748 msgstr ""
7902 msgstr ""
7749
7903
7750 #: rhodecode/templates/admin/settings/settings_email.mako:13
7904 #: rhodecode/templates/admin/settings/settings_email.mako:13
7751 msgid "SMTP password"
7905 msgid "SMTP password"
7752 msgstr ""
7906 msgstr ""
7753
7907
7754 #: rhodecode/templates/admin/settings/settings_email.mako:14
7908 #: rhodecode/templates/admin/settings/settings_email.mako:14
7755 msgid "SMTP port"
7909 msgid "SMTP port"
7756 msgstr ""
7910 msgstr ""
7757
7911
7758 #: rhodecode/templates/admin/settings/settings_email.mako:16
7912 #: rhodecode/templates/admin/settings/settings_email.mako:16
7759 msgid "SMTP use TLS"
7913 msgid "SMTP use TLS"
7760 msgstr ""
7914 msgstr ""
7761
7915
7762 #: rhodecode/templates/admin/settings/settings_email.mako:17
7916 #: rhodecode/templates/admin/settings/settings_email.mako:17
7763 msgid "SMTP use SSL"
7917 msgid "SMTP use SSL"
7764 msgstr ""
7918 msgstr ""
7765
7919
7766 #: rhodecode/templates/admin/settings/settings_email.mako:28
7920 #: rhodecode/templates/admin/settings/settings_email.mako:28
7767 msgid "You can adjust those settings in [DEFAULT] section of .ini file located at"
7921 msgid "You can adjust those settings in [DEFAULT] section of .ini file located at"
7768 msgstr ""
7922 msgstr ""
7769
7923
7770 #: rhodecode/templates/admin/settings/settings_email.mako:36
7924 #: rhodecode/templates/admin/settings/settings_email.mako:36
7771 msgid "Test Email"
7925 msgid "Test Email"
7772 msgstr ""
7926 msgstr ""
7773
7927
7774 #: rhodecode/templates/admin/settings/settings_email.mako:42
7928 #: rhodecode/templates/admin/settings/settings_email.mako:42
7775 msgid "enter valid email"
7929 msgid "enter valid email"
7776 msgstr ""
7930 msgstr ""
7777
7931
7778 #: rhodecode/templates/admin/settings/settings_email.mako:46
7932 #: rhodecode/templates/admin/settings/settings_email.mako:46
7779 msgid "Send an auto-generated email from this server to above email..."
7933 msgid "Send an auto-generated email from this server to above email..."
7780 msgstr ""
7934 msgstr ""
7781
7935
7782 #: rhodecode/templates/admin/settings/settings_exceptions.mako:3
7936 #: rhodecode/templates/admin/settings/settings_exceptions.mako:3
7783 msgid "Exceptions Tracker - Exception ID"
7937 msgid "Exceptions Tracker - Exception ID"
7784 msgstr ""
7938 msgstr ""
7785
7939
7786 #: rhodecode/templates/admin/settings/settings_exceptions.mako:8
7940 #: rhodecode/templates/admin/settings/settings_exceptions.mako:8
7787 #: rhodecode/templates/email_templates/exception_tracker.mako:14
7941 #: rhodecode/templates/email_templates/exception_tracker.mako:14
7788 msgid "Exception `{}` generated on UTC date: {}"
7942 msgid "Exception `{}` generated on UTC date: {}"
7789 msgstr ""
7943 msgstr ""
7790
7944
7791 #: rhodecode/templates/admin/settings/settings_exceptions.mako:21
7945 #: rhodecode/templates/admin/settings/settings_exceptions.mako:21
7792 msgid "Unable to Read Exception. It might be removed or non-existing."
7946 msgid "Unable to Read Exception. It might be removed or non-existing."
7793 msgstr ""
7947 msgstr ""
7794
7948
7795 #: rhodecode/templates/admin/settings/settings_exceptions.mako:30
7949 #: rhodecode/templates/admin/settings/settings_exceptions.mako:30
7796 msgid "Delete this Exception"
7950 msgid "Delete this Exception"
7797 msgstr ""
7951 msgstr ""
7798
7952
7799 #: rhodecode/templates/admin/settings/settings_exceptions.mako:40
7953 #: rhodecode/templates/admin/settings/settings_exceptions.mako:40
7800 msgid "Delete This Exception"
7954 msgid "Delete This Exception"
7801 msgstr ""
7955 msgstr ""
7802
7956
7803 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:3
7957 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:3
7804 msgid "Exceptions Tracker "
7958 msgid "Exceptions Tracker "
7805 msgstr ""
7959 msgstr ""
7806
7960
7807 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:7
7961 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:7
7808 msgid "There is {} stored exception."
7962 msgid "There is {} stored exception."
7809 msgstr ""
7963 msgstr ""
7810
7964
7811 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:9
7965 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:9
7812 msgid "There are total {} stored exceptions."
7966 msgid "There are total {} stored exceptions."
7813 msgstr ""
7967 msgstr ""
7814
7968
7815 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:12
7969 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:12
7816 msgid "Store directory"
7970 msgid "Store directory"
7817 msgstr ""
7971 msgstr ""
7818
7972
7819 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:23
7973 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:23
7820 msgid "Delete All `{}`"
7974 msgid "Delete All `{}`"
7821 msgstr ""
7975 msgstr ""
7822
7976
7823 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:25
7977 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:25
7824 msgid "Delete All"
7978 msgid "Delete All"
7825 msgstr ""
7979 msgstr ""
7826
7980
7827 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:39
7981 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:39
7828 msgid "Exceptions Tracker - Showing the last {} Exceptions"
7982 msgid "Exceptions Tracker - Showing the last {} Exceptions"
7829 msgstr ""
7983 msgstr ""
7830
7984
7831 #: rhodecode/templates/admin/settings/settings_global.mako:5
7985 #: rhodecode/templates/admin/settings/settings_global.mako:5
7832 msgid "Branding"
7986 msgid "Branding"
7833 msgstr ""
7987 msgstr ""
7834
7988
7835 #: rhodecode/templates/admin/settings/settings_global.mako:16
7989 #: rhodecode/templates/admin/settings/settings_global.mako:16
7836 msgid "Set a custom title for your RhodeCode instance (limited to 40 characters)."
7990 msgid "Set a custom title for your RhodeCode instance (limited to 40 characters)."
7837 msgstr ""
7991 msgstr ""
7838
7992
7839 #: rhodecode/templates/admin/settings/settings_global.mako:20
7993 #: rhodecode/templates/admin/settings/settings_global.mako:20
7840 msgid "HTTP[S] authentication realm"
7994 msgid "HTTP[S] authentication realm"
7841 msgstr ""
7995 msgstr ""
7842
7996
7843 #: rhodecode/templates/admin/settings/settings_global.mako:27
7997 #: rhodecode/templates/admin/settings/settings_global.mako:27
7844 msgid "Set a custom text that is shown as authentication message to clients trying to connect."
7998 msgid "Set a custom text that is shown as authentication message to clients trying to connect."
7845 msgstr ""
7999 msgstr ""
7846
8000
7847 #: rhodecode/templates/admin/settings/settings_global.mako:36
8001 #: rhodecode/templates/admin/settings/settings_global.mako:36
7848 #: rhodecode/templates/admin/users/user_edit_advanced.mako:83
8002 #: rhodecode/templates/admin/users/user_edit_advanced.mako:83
7849 msgid "Personal Repository Group"
8003 msgid "Personal Repository Group"
7850 msgstr ""
8004 msgstr ""
7851
8005
7852 #: rhodecode/templates/admin/settings/settings_global.mako:41
8006 #: rhodecode/templates/admin/settings/settings_global.mako:41
7853 msgid "Create Personal Repository Group"
8007 msgid "Create Personal Repository Group"
7854 msgstr ""
8008 msgstr ""
7855
8009
7856 #: rhodecode/templates/admin/settings/settings_global.mako:44
8010 #: rhodecode/templates/admin/settings/settings_global.mako:44
7857 msgid "Always create Personal Repository Groups for new users."
8011 msgid "Always create Personal Repository Groups for new users."
7858 msgstr ""
8012 msgstr ""
7859
8013
7860 #: rhodecode/templates/admin/settings/settings_global.mako:45
8014 #: rhodecode/templates/admin/settings/settings_global.mako:45
7861 msgid "When creating new users from add user form or API you can still turn this off via a checkbox or flag"
8015 msgid "When creating new users from add user form or API you can still turn this off via a checkbox or flag"
7862 msgstr ""
8016 msgstr ""
7863
8017
7864 #: rhodecode/templates/admin/settings/settings_global.mako:49
8018 #: rhodecode/templates/admin/settings/settings_global.mako:49
7865 msgid "Personal Repo Group Pattern"
8019 msgid "Personal Repo Group Pattern"
7866 msgstr ""
8020 msgstr ""
7867
8021
7868 #: rhodecode/templates/admin/settings/settings_global.mako:55
8022 #: rhodecode/templates/admin/settings/settings_global.mako:55
7869 msgid "Pattern used to create Personal Repository Groups. Prefix can be other existing repository group path[s], eg. /u/${username}"
8023 msgid "Pattern used to create Personal Repository Groups. Prefix can be other existing repository group path[s], eg. /u/${username}"
7870 msgstr ""
8024 msgstr ""
7871
8025
7872 #: rhodecode/templates/admin/settings/settings_global.mako:56
8026 #: rhodecode/templates/admin/settings/settings_global.mako:56
7873 msgid "Available variables are currently ${username} and ${user_id}"
8027 msgid "Available variables are currently ${username} and ${user_id}"
7874 msgstr ""
8028 msgstr ""
7875
8029
7876 #: rhodecode/templates/admin/settings/settings_global.mako:64
8030 #: rhodecode/templates/admin/settings/settings_global.mako:64
7877 msgid "Registration Captcha"
8031 msgid "Registration Captcha"
7878 msgstr ""
8032 msgstr ""
7879
8033
7880 #: rhodecode/templates/admin/settings/settings_global.mako:68
8034 #: rhodecode/templates/admin/settings/settings_global.mako:68
7881 msgid "Google reCaptcha v2 site key."
8035 msgid "Google reCaptcha v2 site key."
7882 msgstr ""
8036 msgstr ""
7883
8037
7884 #: rhodecode/templates/admin/settings/settings_global.mako:75
8038 #: rhodecode/templates/admin/settings/settings_global.mako:75
7885 msgid "Site key for reCaptcha v2 system."
8039 msgid "Site key for reCaptcha v2 system."
7886 msgstr ""
8040 msgstr ""
7887
8041
7888 #: rhodecode/templates/admin/settings/settings_global.mako:80
8042 #: rhodecode/templates/admin/settings/settings_global.mako:80
7889 msgid "Google reCaptcha v2 secret key."
8043 msgid "Google reCaptcha v2 secret key."
7890 msgstr ""
8044 msgstr ""
7891
8045
7892 #: rhodecode/templates/admin/settings/settings_global.mako:87
8046 #: rhodecode/templates/admin/settings/settings_global.mako:87
7893 msgid "Secret key for reCaptcha v2 system. Setting this value will enable captcha on registration and password reset forms."
8047 msgid "Secret key for reCaptcha v2 system. Setting this value will enable captcha on registration and password reset forms."
7894 msgstr ""
8048 msgstr ""
7895
8049
7896 #: rhodecode/templates/admin/settings/settings_global.mako:95
8050 #: rhodecode/templates/admin/settings/settings_global.mako:95
7897 msgid "Custom Header Code"
8051 msgid "Custom Header Code"
7898 msgstr ""
8052 msgstr ""
7899
8053
7900 #: rhodecode/templates/admin/settings/settings_global.mako:100
8054 #: rhodecode/templates/admin/settings/settings_global.mako:100
7901 #: rhodecode/templates/admin/settings/settings_global.mako:124
8055 #: rhodecode/templates/admin/settings/settings_global.mako:124
7902 #: rhodecode/templates/debug_style/form-elements-small.html:59
8056 #: rhodecode/templates/debug_style/form-elements-small.html:59
7903 #: rhodecode/templates/debug_style/form-elements.html:57
8057 #: rhodecode/templates/debug_style/form-elements.html:57
7904 #: rhodecode/templates/debug_style/form-elements.html:82
8058 #: rhodecode/templates/debug_style/form-elements.html:82
7905 #: rhodecode/templates/debug_style/form-elements.html:225
8059 #: rhodecode/templates/debug_style/form-elements.html:225
7906 #: rhodecode/templates/debug_style/form-elements.html:381
8060 #: rhodecode/templates/debug_style/form-elements.html:381
7907 #: rhodecode/templates/debug_style/form-elements.html:407
8061 #: rhodecode/templates/debug_style/form-elements.html:407
7908 #: rhodecode/templates/debug_style/form-elements.html:515
8062 #: rhodecode/templates/debug_style/form-elements.html:515
7909 #: rhodecode/templates/debug_style/form-elements.html:519
8063 #: rhodecode/templates/debug_style/form-elements.html:519
7910 #: rhodecode/templates/debug_style/form-elements.html:537
8064 #: rhodecode/templates/debug_style/form-elements.html:537
7911 #: rhodecode/templates/debug_style/form-elements.html:581
8065 #: rhodecode/templates/debug_style/form-elements.html:581
7912 #: rhodecode/templates/debug_style/form-inline.html:38
8066 #: rhodecode/templates/debug_style/form-inline.html:38
7913 #: rhodecode/templates/debug_style/form-inline.html:139
8067 #: rhodecode/templates/debug_style/form-inline.html:139
7914 #: rhodecode/templates/debug_style/form-inline.html:147
8068 #: rhodecode/templates/debug_style/form-inline.html:147
7915 #: rhodecode/templates/debug_style/form-vertical.html:60
8069 #: rhodecode/templates/debug_style/form-vertical.html:60
7916 #: rhodecode/templates/debug_style/forms.html:37
8070 #: rhodecode/templates/debug_style/forms.html:37
7917 #: rhodecode/templates/debug_style/forms.html:60
8071 #: rhodecode/templates/debug_style/forms.html:60
7918 #: rhodecode/templates/debug_style/forms.html:78
8072 #: rhodecode/templates/debug_style/forms.html:78
7919 #: rhodecode/templates/debug_style/forms.html:96
8073 #: rhodecode/templates/debug_style/forms.html:96
7920 #: rhodecode/templates/debug_style/layout-form-sidebar.html:44
8074 #: rhodecode/templates/debug_style/layout-form-sidebar.html:44
7921 msgid "Templates..."
8075 msgid "Templates..."
7922 msgstr ""
8076 msgstr ""
7923
8077
7924 #: rhodecode/templates/admin/settings/settings_global.mako:103
8078 #: rhodecode/templates/admin/settings/settings_global.mako:103
7925 #: rhodecode/templates/admin/settings/settings_global.mako:127
8079 #: rhodecode/templates/admin/settings/settings_global.mako:127
7926 #: rhodecode/templates/debug_style/form-elements-small.html:62
8080 #: rhodecode/templates/debug_style/form-elements-small.html:62
7927 #: rhodecode/templates/debug_style/form-elements.html:60
8081 #: rhodecode/templates/debug_style/form-elements.html:60
7928 #: rhodecode/templates/debug_style/form-elements.html:85
8082 #: rhodecode/templates/debug_style/form-elements.html:85
7929 #: rhodecode/templates/debug_style/form-elements.html:228
8083 #: rhodecode/templates/debug_style/form-elements.html:228
7930 #: rhodecode/templates/debug_style/form-elements.html:384
8084 #: rhodecode/templates/debug_style/form-elements.html:384
7931 #: rhodecode/templates/debug_style/form-elements.html:410
8085 #: rhodecode/templates/debug_style/form-elements.html:410
7932 #: rhodecode/templates/debug_style/form-elements.html:518
8086 #: rhodecode/templates/debug_style/form-elements.html:518
7933 #: rhodecode/templates/debug_style/form-elements.html:522
8087 #: rhodecode/templates/debug_style/form-elements.html:522
7934 #: rhodecode/templates/debug_style/form-elements.html:540
8088 #: rhodecode/templates/debug_style/form-elements.html:540
7935 #: rhodecode/templates/debug_style/form-elements.html:584
8089 #: rhodecode/templates/debug_style/form-elements.html:584
7936 #: rhodecode/templates/debug_style/form-inline.html:41
8090 #: rhodecode/templates/debug_style/form-inline.html:41
7937 #: rhodecode/templates/debug_style/form-inline.html:142
8091 #: rhodecode/templates/debug_style/form-inline.html:142
7938 #: rhodecode/templates/debug_style/form-inline.html:150
8092 #: rhodecode/templates/debug_style/form-inline.html:150
7939 #: rhodecode/templates/debug_style/form-vertical.html:63
8093 #: rhodecode/templates/debug_style/form-vertical.html:63
7940 #: rhodecode/templates/debug_style/forms.html:40
8094 #: rhodecode/templates/debug_style/forms.html:40
7941 #: rhodecode/templates/debug_style/forms.html:63
8095 #: rhodecode/templates/debug_style/forms.html:63
7942 #: rhodecode/templates/debug_style/forms.html:81
8096 #: rhodecode/templates/debug_style/forms.html:81
7943 #: rhodecode/templates/debug_style/forms.html:99
8097 #: rhodecode/templates/debug_style/forms.html:99
7944 #: rhodecode/templates/debug_style/layout-form-sidebar.html:47
8098 #: rhodecode/templates/debug_style/layout-form-sidebar.html:47
7945 msgid "Server Announcement"
8099 msgid "Server Announcement"
7946 msgstr ""
8100 msgstr ""
7947
8101
7948 #: rhodecode/templates/admin/settings/settings_global.mako:104
8102 #: rhodecode/templates/admin/settings/settings_global.mako:104
7949 msgid "Flash message filtering"
8103 msgid "Flash message filtering"
7950 msgstr ""
8104 msgstr ""
7951
8105
7952 #: rhodecode/templates/admin/settings/settings_global.mako:105
8106 #: rhodecode/templates/admin/settings/settings_global.mako:105
7953 msgid "Custom logos"
8107 msgid "Custom logos"
7954 msgstr ""
8108 msgstr ""
7955
8109
7956 #: rhodecode/templates/admin/settings/settings_global.mako:111
8110 #: rhodecode/templates/admin/settings/settings_global.mako:111
7957 msgid "Custom js/css code added at the end of the <head/> tag."
8111 msgid "Custom js/css code added at the end of the <head/> tag."
7958 msgstr ""
8112 msgstr ""
7959
8113
7960 #: rhodecode/templates/admin/settings/settings_global.mako:112
8114 #: rhodecode/templates/admin/settings/settings_global.mako:112
7961 msgid "Use <script/> or <style/> tags to define custom scripting or styling."
8115 msgid "Use <script/> or <style/> tags to define custom scripting or styling."
7962 msgstr ""
8116 msgstr ""
7963
8117
7964 #: rhodecode/templates/admin/settings/settings_global.mako:119
8118 #: rhodecode/templates/admin/settings/settings_global.mako:119
7965 msgid "Custom Footer Code"
8119 msgid "Custom Footer Code"
7966 msgstr ""
8120 msgstr ""
7967
8121
7968 #: rhodecode/templates/admin/settings/settings_global.mako:133
8122 #: rhodecode/templates/admin/settings/settings_global.mako:133
7969 msgid "Custom js/css code added at the end of the <body> tag."
8123 msgid "Custom js/css code added at the end of the <body> tag."
7970 msgstr ""
8124 msgstr ""
7971
8125
7972 #: rhodecode/templates/admin/settings/settings_global.mako:134
8126 #: rhodecode/templates/admin/settings/settings_global.mako:134
7973 msgid "Use <script> or <style> tags to define custom scripting or styling."
8127 msgid "Use <script> or <style> tags to define custom scripting or styling."
7974 msgstr ""
8128 msgstr ""
7975
8129
7976 #: rhodecode/templates/admin/settings/settings_hooks.mako:3
8130 #: rhodecode/templates/admin/settings/settings_hooks.mako:3
7977 msgid "Built in Mercurial hooks - read only"
8131 msgid "Built in Mercurial hooks - read only"
7978 msgstr ""
8132 msgstr ""
7979
8133
7980 #: rhodecode/templates/admin/settings/settings_hooks.mako:19
8134 #: rhodecode/templates/admin/settings/settings_hooks.mako:19
7981 msgid "Hooks can be used to trigger actions on certain events such as push / pull. They can trigger Python functions or external applications."
8135 msgid "Hooks can be used to trigger actions on certain events such as push / pull. They can trigger Python functions or external applications."
7982 msgstr ""
8136 msgstr ""
7983
8137
7984 #: rhodecode/templates/admin/settings/settings_hooks.mako:27
8138 #: rhodecode/templates/admin/settings/settings_hooks.mako:27
7985 msgid "Custom hooks"
8139 msgid "Custom hooks"
7986 msgstr ""
8140 msgstr ""
7987
8141
7988 #: rhodecode/templates/admin/settings/settings_labs.mako:3
8142 #: rhodecode/templates/admin/settings/settings_labs.mako:3
7989 msgid "Labs Settings"
8143 msgid "Labs Settings"
7990 msgstr ""
8144 msgstr ""
7991
8145
7992 #: rhodecode/templates/admin/settings/settings_labs.mako:10
8146 #: rhodecode/templates/admin/settings/settings_labs.mako:10
7993 msgid "There are no Labs settings currently"
8147 msgid "There are no Labs settings currently"
7994 msgstr ""
8148 msgstr ""
7995
8149
7996 #: rhodecode/templates/admin/settings/settings_mapping.mako:5
8150 #: rhodecode/templates/admin/settings/settings_mapping.mako:5
7997 msgid "Import New Groups or Repositories"
8151 msgid "Import New Groups or Repositories"
7998 msgstr ""
8152 msgstr ""
7999
8153
8000 #: rhodecode/templates/admin/settings/settings_mapping.mako:10
8154 #: rhodecode/templates/admin/settings/settings_mapping.mako:10
8001 msgid "Destroy old data"
8155 msgid "Destroy old data"
8002 msgstr ""
8156 msgstr ""
8003
8157
8004 #: rhodecode/templates/admin/settings/settings_mapping.mako:12
8158 #: rhodecode/templates/admin/settings/settings_mapping.mako:12
8005 msgid "In case a repository or a group was deleted from the filesystem and it still exists in the database, check this option to remove obsolete data from the database."
8159 msgid "In case a repository or a group was deleted from the filesystem and it still exists in the database, check this option to remove obsolete data from the database."
8006 msgstr ""
8160 msgstr ""
8007
8161
8008 #: rhodecode/templates/admin/settings/settings_mapping.mako:16
8162 #: rhodecode/templates/admin/settings/settings_mapping.mako:16
8009 msgid "Invalidate cache for all repositories"
8163 msgid "Invalidate cache for all repositories"
8010 msgstr ""
8164 msgstr ""
8011
8165
8012 #: rhodecode/templates/admin/settings/settings_mapping.mako:18
8166 #: rhodecode/templates/admin/settings/settings_mapping.mako:18
8013 msgid "Each cache data for repositories will be cleaned with this option selected. Use this to reload data and clear cache keys."
8167 msgid "Each cache data for repositories will be cleaned with this option selected. Use this to reload data and clear cache keys."
8014 msgstr ""
8168 msgstr ""
8015
8169
8016 #: rhodecode/templates/admin/settings/settings_mapping.mako:21
8170 #: rhodecode/templates/admin/settings/settings_mapping.mako:21
8017 msgid "Rescan Filesystem"
8171 msgid "Rescan Filesystem"
8018 msgstr ""
8172 msgstr ""
8019
8173
8020 #: rhodecode/templates/admin/settings/settings_open_source.mako:11
8174 #: rhodecode/templates/admin/settings/settings_open_source.mako:11
8021 msgid "Licenses of Third Party Packages"
8175 msgid "Licenses of Third Party Packages"
8022 msgstr ""
8176 msgstr ""
8023
8177
8024 #: rhodecode/templates/admin/settings/settings_process_management.mako:3
8178 #: rhodecode/templates/admin/settings/settings_process_management.mako:3
8025 #: rhodecode/templates/admin/settings/settings_system.mako:3
8179 #: rhodecode/templates/admin/settings/settings_system.mako:3
8026 msgid "Checking for updates..."
8180 msgid "Checking for updates..."
8027 msgstr ""
8181 msgstr ""
8028
8182
8029 #: rhodecode/templates/admin/settings/settings_process_management.mako:9
8183 #: rhodecode/templates/admin/settings/settings_process_management.mako:9
8030 msgid "Gunicorn process management"
8184 msgid "Gunicorn process management"
8031 msgstr ""
8185 msgstr ""
8032
8186
8033 #: rhodecode/templates/admin/settings/settings_process_management.mako:11
8187 #: rhodecode/templates/admin/settings/settings_process_management.mako:11
8034 msgid "start auto refresh"
8188 msgid "start auto refresh"
8035 msgstr ""
8189 msgstr ""
8036
8190
8037 #: rhodecode/templates/admin/settings/settings_process_management.mako:12
8191 #: rhodecode/templates/admin/settings/settings_process_management.mako:12
8038 msgid "stop auto refresh"
8192 msgid "stop auto refresh"
8039 msgstr ""
8193 msgstr ""
8040
8194
8041 #: rhodecode/templates/admin/settings/settings_search.mako:3
8195 #: rhodecode/templates/admin/settings/settings_search.mako:3
8042 msgid "RhodeCode Full Text Search"
8196 msgid "RhodeCode Full Text Search"
8043 msgstr ""
8197 msgstr ""
8044
8198
8045 #: rhodecode/templates/admin/settings/settings_sessions.mako:3
8199 #: rhodecode/templates/admin/settings/settings_sessions.mako:3
8046 msgid "User Sessions Configuration"
8200 msgid "User Sessions Configuration"
8047 msgstr ""
8201 msgstr ""
8048
8202
8049 #: rhodecode/templates/admin/settings/settings_sessions.mako:8
8203 #: rhodecode/templates/admin/settings/settings_sessions.mako:8
8050 msgid "Session type"
8204 msgid "Session type"
8051 msgstr ""
8205 msgstr ""
8052
8206
8053 #: rhodecode/templates/admin/settings/settings_sessions.mako:9
8207 #: rhodecode/templates/admin/settings/settings_sessions.mako:9
8054 msgid "Session expiration period"
8208 msgid "Session expiration period"
8055 msgstr ""
8209 msgstr ""
8056
8210
8057 #: rhodecode/templates/admin/settings/settings_sessions.mako:11
8211 #: rhodecode/templates/admin/settings/settings_sessions.mako:11
8058 msgid "Total sessions"
8212 msgid "Total sessions"
8059 msgstr ""
8213 msgstr ""
8060
8214
8061 #: rhodecode/templates/admin/settings/settings_sessions.mako:12
8215 #: rhodecode/templates/admin/settings/settings_sessions.mako:12
8062 msgid "Expired sessions ({} days)"
8216 msgid "Expired sessions ({} days)"
8063 msgstr ""
8217 msgstr ""
8064
8218
8065 #: rhodecode/templates/admin/settings/settings_sessions.mako:28
8219 #: rhodecode/templates/admin/settings/settings_sessions.mako:28
8066 msgid "Cleanup Old Sessions"
8220 msgid "Cleanup Old Sessions"
8067 msgstr ""
8221 msgstr ""
8068
8222
8069 #: rhodecode/templates/admin/settings/settings_sessions.mako:34
8223 #: rhodecode/templates/admin/settings/settings_sessions.mako:34
8070 msgid "Cleanup user sessions that were not active during chosen time frame."
8224 msgid "Cleanup user sessions that were not active during chosen time frame."
8071 msgstr ""
8225 msgstr ""
8072
8226
8073 #: rhodecode/templates/admin/settings/settings_sessions.mako:35
8227 #: rhodecode/templates/admin/settings/settings_sessions.mako:35
8074 msgid "After performing this action users whose session will be removed will be required to log in again."
8228 msgid "After performing this action users whose session will be removed will be required to log in again."
8075 msgstr ""
8229 msgstr ""
8076
8230
8077 #: rhodecode/templates/admin/settings/settings_sessions.mako:36
8231 #: rhodecode/templates/admin/settings/settings_sessions.mako:36
8078 msgid "Picking `All` will log-out you, and all users in the system."
8232 msgid "Picking `All` will log-out you, and all users in the system."
8079 msgstr ""
8233 msgstr ""
8080
8234
8081 #: rhodecode/templates/admin/settings/settings_sessions.mako:55
8235 #: rhodecode/templates/admin/settings/settings_sessions.mako:55
8082 msgid "Confirm to cleanup user sessions"
8236 msgid "Confirm to cleanup user sessions"
8083 msgstr ""
8237 msgstr ""
8084
8238
8085 #: rhodecode/templates/admin/settings/settings_sessions.mako:56
8239 #: rhodecode/templates/admin/settings/settings_sessions.mako:56
8086 msgid "Cleanup sessions"
8240 msgid "Cleanup sessions"
8087 msgstr ""
8241 msgstr ""
8088
8242
8089 #: rhodecode/templates/admin/settings/settings_system.mako:9
8243 #: rhodecode/templates/admin/settings/settings_system.mako:9
8090 msgid "System Info"
8244 msgid "System Info"
8091 msgstr ""
8245 msgstr ""
8092
8246
8093 #: rhodecode/templates/admin/settings/settings_system.mako:11
8247 #: rhodecode/templates/admin/settings/settings_system.mako:11
8094 msgid "create summary snapshot"
8248 msgid "create summary snapshot"
8095 msgstr ""
8249 msgstr ""
8096
8250
8097 #: rhodecode/templates/admin/settings/settings_system.mako:46
8251 #: rhodecode/templates/admin/settings/settings_system.mako:46
8098 msgid "Python Packages"
8252 msgid "Python Packages"
8099 msgstr ""
8253 msgstr ""
8100
8254
8101 #: rhodecode/templates/admin/settings/settings_visual.mako:5
8255 #: rhodecode/templates/admin/settings/settings_visual.mako:5
8102 #: rhodecode/templates/base/vcs_settings.mako:10
8256 #: rhodecode/templates/base/vcs_settings.mako:10
8103 msgid "General"
8257 msgid "General"
8104 msgstr ""
8258 msgstr ""
8105
8259
8106 #: rhodecode/templates/admin/settings/settings_visual.mako:10
8260 #: rhodecode/templates/admin/settings/settings_visual.mako:10
8107 msgid "Use repository extra fields"
8261 msgid "Use repository extra fields"
8108 msgstr ""
8262 msgstr ""
8109
8263
8110 #: rhodecode/templates/admin/settings/settings_visual.mako:12
8264 #: rhodecode/templates/admin/settings/settings_visual.mako:12
8111 msgid "Allows storing additional customized fields per repository."
8265 msgid "Allows storing additional customized fields per repository."
8112 msgstr ""
8266 msgstr ""
8113
8267
8114 #: rhodecode/templates/admin/settings/settings_visual.mako:17
8268 #: rhodecode/templates/admin/settings/settings_visual.mako:17
8115 msgid "Show RhodeCode version"
8269 msgid "Show RhodeCode version"
8116 msgstr ""
8270 msgstr ""
8117
8271
8118 #: rhodecode/templates/admin/settings/settings_visual.mako:19
8272 #: rhodecode/templates/admin/settings/settings_visual.mako:19
8119 msgid "Shows or hides a version number of RhodeCode displayed in the footer."
8273 msgid "Shows or hides a version number of RhodeCode displayed in the footer."
8120 msgstr ""
8274 msgstr ""
8121
8275
8122 #: rhodecode/templates/admin/settings/settings_visual.mako:26
8276 #: rhodecode/templates/admin/settings/settings_visual.mako:26
8123 msgid "Gravatars"
8277 msgid "Gravatars"
8124 msgstr ""
8278 msgstr ""
8125
8279
8126 #: rhodecode/templates/admin/settings/settings_visual.mako:31
8280 #: rhodecode/templates/admin/settings/settings_visual.mako:31
8127 msgid "Use Gravatars based avatars"
8281 msgid "Use Gravatars based avatars"
8128 msgstr ""
8282 msgstr ""
8129
8283
8130 #: rhodecode/templates/admin/settings/settings_visual.mako:33
8284 #: rhodecode/templates/admin/settings/settings_visual.mako:33
8131 msgid "Use gravatar.com as avatar system for RhodeCode accounts. If this is disabled avatars are generated based on initials and email."
8285 msgid "Use gravatar.com as avatar system for RhodeCode accounts. If this is disabled avatars are generated based on initials and email."
8132 msgstr ""
8286 msgstr ""
8133
8287
8134 #: rhodecode/templates/admin/settings/settings_visual.mako:36
8288 #: rhodecode/templates/admin/settings/settings_visual.mako:36
8135 msgid "Gravatar URL"
8289 msgid "Gravatar URL"
8136 msgstr ""
8290 msgstr ""
8137
8291
8138 #: rhodecode/templates/admin/settings/settings_visual.mako:44
8292 #: rhodecode/templates/admin/settings/settings_visual.mako:44
8139 msgid ""
8293 msgid ""
8140 "Gravatar url allows you to use other avatar server application.\n"
8294 "Gravatar url allows you to use other avatar server application.\n"
8141 " Following variables of the URL will be replaced accordingly.\n"
8295 " Following variables of the URL will be replaced accordingly.\n"
8142 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8296 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8143 " {email} user email,\n"
8297 " {email} user email,\n"
8144 " {md5email} md5 hash of the user email (like at gravatar.com),\n"
8298 " {md5email} md5 hash of the user email (like at gravatar.com),\n"
8145 " {size} size of the image that is expected from the server application,\n"
8299 " {size} size of the image that is expected from the server application,\n"
8146 " {netloc} network location/server host of running RhodeCode server"
8300 " {netloc} network location/server host of running RhodeCode server"
8147 msgstr ""
8301 msgstr ""
8148
8302
8149 #: rhodecode/templates/admin/settings/settings_visual.mako:59
8303 #: rhodecode/templates/admin/settings/settings_visual.mako:59
8150 msgid "Meta-Tagging"
8304 msgid "Meta-Tagging"
8151 msgstr ""
8305 msgstr ""
8152
8306
8153 #: rhodecode/templates/admin/settings/settings_visual.mako:64
8307 #: rhodecode/templates/admin/settings/settings_visual.mako:64
8154 msgid "Stylify recognised meta tags"
8308 msgid "Stylify recognised meta tags"
8155 msgstr ""
8309 msgstr ""
8156
8310
8157 #: rhodecode/templates/admin/settings/settings_visual.mako:66
8311 #: rhodecode/templates/admin/settings/settings_visual.mako:66
8158 msgid "Parses meta tags from repository or repository group description fields and turns them into colored tags."
8312 msgid "Parses meta tags from repository or repository group description fields and turns them into colored tags."
8159 msgstr ""
8313 msgstr ""
8160
8314
8161 #: rhodecode/templates/admin/settings/settings_visual.mako:77
8315 #: rhodecode/templates/admin/settings/settings_visual.mako:77
8162 msgid "Dashboard Items"
8316 msgid "Dashboard Items"
8163 msgstr ""
8317 msgstr ""
8164
8318
8165 #: rhodecode/templates/admin/settings/settings_visual.mako:81
8319 #: rhodecode/templates/admin/settings/settings_visual.mako:81
8166 msgid "Main page dashboard items"
8320 msgid "Main page dashboard items"
8167 msgstr ""
8321 msgstr ""
8168
8322
8169 #: rhodecode/templates/admin/settings/settings_visual.mako:87
8323 #: rhodecode/templates/admin/settings/settings_visual.mako:87
8170 msgid "Number of items displayed in the main page dashboard before pagination is shown."
8324 msgid "Number of items displayed in the main page dashboard before pagination is shown."
8171 msgstr ""
8325 msgstr ""
8172
8326
8173 #: rhodecode/templates/admin/settings/settings_visual.mako:91
8327 #: rhodecode/templates/admin/settings/settings_visual.mako:91
8174 msgid "Admin pages items"
8328 msgid "Admin pages items"
8175 msgstr ""
8329 msgstr ""
8176
8330
8177 #: rhodecode/templates/admin/settings/settings_visual.mako:97
8331 #: rhodecode/templates/admin/settings/settings_visual.mako:97
8178 msgid "Number of items displayed in the admin pages grids before pagination is shown."
8332 msgid "Number of items displayed in the admin pages grids before pagination is shown."
8179 msgstr ""
8333 msgstr ""
8180
8334
8181 #: rhodecode/templates/admin/settings/settings_visual.mako:106
8335 #: rhodecode/templates/admin/settings/settings_visual.mako:106
8182 msgid "Commit ID Style"
8336 msgid "Commit ID Style"
8183 msgstr ""
8337 msgstr ""
8184
8338
8185 #: rhodecode/templates/admin/settings/settings_visual.mako:110
8339 #: rhodecode/templates/admin/settings/settings_visual.mako:110
8186 msgid "Commit sha length"
8340 msgid "Commit sha length"
8187 msgstr ""
8341 msgstr ""
8188
8342
8189 #: rhodecode/templates/admin/settings/settings_visual.mako:117
8343 #: rhodecode/templates/admin/settings/settings_visual.mako:117
8190 msgid ""
8344 msgid ""
8191 "Number of chars to show in commit sha displayed in web interface.\n"
8345 "Number of chars to show in commit sha displayed in web interface.\n"
8192 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8346 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8193 " length of the sha after the `r123:` part."
8347 " length of the sha after the `r123:` part."
8194 msgstr ""
8348 msgstr ""
8195
8349
8196 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8350 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8197 msgid "Show commit ID numeric reference"
8351 msgid "Show commit ID numeric reference"
8198 msgstr ""
8352 msgstr ""
8199
8353
8200 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8354 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8201 msgid "Commit show revision number"
8355 msgid "Commit show revision number"
8202 msgstr ""
8356 msgstr ""
8203
8357
8204 #: rhodecode/templates/admin/settings/settings_visual.mako:127
8358 #: rhodecode/templates/admin/settings/settings_visual.mako:127
8205 msgid ""
8359 msgid ""
8206 "Show revision number in commit sha displayed in web interface.\n"
8360 "Show revision number in commit sha displayed in web interface.\n"
8207 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8361 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8208 " if the `r123:` part is shown."
8362 " if the `r123:` part is shown."
8209 msgstr ""
8363 msgstr ""
8210
8364
8211 #: rhodecode/templates/admin/settings/settings_visual.mako:136
8365 #: rhodecode/templates/admin/settings/settings_visual.mako:136
8212 #: rhodecode/templates/debug_style/index.html:64
8366 #: rhodecode/templates/debug_style/index.html:64
8213 msgid "Icons"
8367 msgid "Icons"
8214 msgstr ""
8368 msgstr ""
8215
8369
8216 #: rhodecode/templates/admin/settings/settings_visual.mako:141
8370 #: rhodecode/templates/admin/settings/settings_visual.mako:141
8217 msgid "Show public repo icon on repositories"
8371 msgid "Show public repo icon on repositories"
8218 msgstr ""
8372 msgstr ""
8219
8373
8220 #: rhodecode/templates/admin/settings/settings_visual.mako:147
8374 #: rhodecode/templates/admin/settings/settings_visual.mako:147
8221 msgid "Show private repo icon on repositories"
8375 msgid "Show private repo icon on repositories"
8222 msgstr ""
8376 msgstr ""
8223
8377
8224 #: rhodecode/templates/admin/settings/settings_visual.mako:149
8378 #: rhodecode/templates/admin/settings/settings_visual.mako:149
8225 msgid "Show public/private icons next to repositories names."
8379 msgid "Show public/private icons next to repositories names."
8226 msgstr ""
8380 msgstr ""
8227
8381
8228 #: rhodecode/templates/admin/settings/settings_visual.mako:156
8382 #: rhodecode/templates/admin/settings/settings_visual.mako:156
8229 msgid "Markup Renderer"
8383 msgid "Markup Renderer"
8230 msgstr ""
8384 msgstr ""
8231
8385
8232 #: rhodecode/templates/admin/settings/settings_visual.mako:163
8386 #: rhodecode/templates/admin/settings/settings_visual.mako:163
8233 msgid "Default renderer used to render comments, pull request descriptions and other description elements. After change old entries will still work correctly."
8387 msgid "Default renderer used to render comments, pull request descriptions and other description elements. After change old entries will still work correctly."
8234 msgstr ""
8388 msgstr ""
8235
8389
8236 #: rhodecode/templates/admin/settings/settings_visual.mako:170
8390 #: rhodecode/templates/admin/settings/settings_visual.mako:170
8237 msgid "Clone URL templates"
8391 msgid "Clone URL templates"
8238 msgstr ""
8392 msgstr ""
8239
8393
8240 #: rhodecode/templates/admin/settings/settings_visual.mako:181
8394 #: rhodecode/templates/admin/settings/settings_visual.mako:181
8241 msgid ""
8395 msgid ""
8242 "Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
8396 "Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
8243 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8397 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8244 " {user} current user username,\n"
8398 " {user} current user username,\n"
8245 " {sys_user} current system user running this process, Useful for ssh,\n"
8399 " {sys_user} current system user running this process, Useful for ssh,\n"
8246 " {hostname} hostname of this server running RhodeCode,\n"
8400 " {hostname} hostname of this server running RhodeCode,\n"
8247 " {netloc} network location/server host of running RhodeCode server,\n"
8401 " {netloc} network location/server host of running RhodeCode server,\n"
8248 " {repo} full repository name,\n"
8402 " {repo} full repository name,\n"
8249 " {repoid} ID of repository, can be used to contruct clone-by-id"
8403 " {repoid} ID of repository, can be used to contruct clone-by-id"
8250 msgstr ""
8404 msgstr ""
8251
8405
8252 #: rhodecode/templates/admin/settings/settings_visual.mako:196
8406 #: rhodecode/templates/admin/settings/settings_visual.mako:196
8253 msgid "Custom Support Link"
8407 msgid "Custom Support Link"
8254 msgstr ""
8408 msgstr ""
8255
8409
8256 #: rhodecode/templates/admin/settings/settings_visual.mako:204
8410 #: rhodecode/templates/admin/settings/settings_visual.mako:204
8257 #, python-format
8411 #, python-format
8258 msgid ""
8412 msgid ""
8259 "Custom url for the support link located at the bottom.\n"
8413 "Custom url for the support link located at the bottom.\n"
8260 " The default is set to %(default_url)s. In case there's a need\n"
8414 " The default is set to %(default_url)s. In case there's a need\n"
8261 " to change the support link to internal issue tracker, it should be done here.\n"
8415 " to change the support link to internal issue tracker, it should be done here.\n"
8262 " "
8416 " "
8263 msgstr ""
8417 msgstr ""
8264
8418
8265 #: rhodecode/templates/admin/user_groups/user_group_add.mako:5
8419 #: rhodecode/templates/admin/user_groups/user_group_add.mako:5
8266 msgid "Add user group"
8420 msgid "Add user group"
8267 msgstr ""
8421 msgstr ""
8268
8422
8269 #: rhodecode/templates/admin/user_groups/user_group_add.mako:13
8423 #: rhodecode/templates/admin/user_groups/user_group_add.mako:13
8270 #: rhodecode/templates/admin/users/user_edit_advanced.mako:14
8424 #: rhodecode/templates/admin/users/user_edit_advanced.mako:14
8271 #: rhodecode/templates/base/base.mako:110
8425 #: rhodecode/templates/base/base.mako:115
8272 #: rhodecode/templates/base/base.mako:132
8426 #: rhodecode/templates/base/base.mako:137
8273 msgid "User groups"
8427 msgid "User groups"
8274 msgstr ""
8428 msgstr ""
8275
8429
8276 #: rhodecode/templates/admin/user_groups/user_group_add.mako:46
8430 #: rhodecode/templates/admin/user_groups/user_group_add.mako:46
8277 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:50
8431 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:50
8278 msgid "Short, optional description for this user group."
8432 msgid "Short, optional description for this user group."
8279 msgstr ""
8433 msgstr ""
8280
8434
8281 #: rhodecode/templates/admin/user_groups/user_group_add.mako:59
8435 #: rhodecode/templates/admin/user_groups/user_group_add.mako:59
8282 msgid "Create User Group"
8436 msgid "Create User Group"
8283 msgstr ""
8437 msgstr ""
8284
8438
8285 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:5
8439 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:5
8286 msgid "{} user group settings"
8440 msgid "{} user group settings"
8287 msgstr ""
8441 msgstr ""
8288
8442
8289 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:37
8443 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:37
8290 #: rhodecode/templates/admin/users/user_edit.mako:43
8444 #: rhodecode/templates/admin/users/user_edit.mako:43
8291 msgid "Global permissions"
8445 msgid "Global permissions"
8292 msgstr ""
8446 msgstr ""
8293
8447
8294 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:38
8448 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:38
8295 #: rhodecode/templates/admin/users/user_edit.mako:44
8449 #: rhodecode/templates/admin/users/user_edit.mako:44
8296 msgid "Permissions summary"
8450 msgid "Permissions summary"
8297 msgstr ""
8451 msgstr ""
8298
8452
8299 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:5
8453 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:5
8300 msgid "User Group ID"
8454 msgid "User Group ID"
8301 msgstr ""
8455 msgstr ""
8302
8456
8303 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:9
8457 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:9
8304 #: rhodecode/templates/admin/user_groups/user_groups.mako:80
8458 #: rhodecode/templates/admin/user_groups/user_groups.mako:80
8305 #: rhodecode/templates/debug_style/form-elements.html:509
8459 #: rhodecode/templates/debug_style/form-elements.html:509
8306 #: rhodecode/templates/user_group/profile.mako:55
8460 #: rhodecode/templates/user_group/profile.mako:55
8307 msgid "Members"
8461 msgid "Members"
8308 msgstr ""
8462 msgstr ""
8309
8463
8310 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:10
8464 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:10
8311 msgid "Automatic member sync"
8465 msgid "Automatic member sync"
8312 msgstr ""
8466 msgstr ""
8313
8467
8314 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:12
8468 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:12
8315 msgid "Assigned to repositories"
8469 msgid "Assigned to repositories"
8316 msgstr ""
8470 msgstr ""
8317
8471
8318 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:13
8472 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:13
8319 msgid "Assigned to repo groups"
8473 msgid "Assigned to repo groups"
8320 msgstr ""
8474 msgstr ""
8321
8475
8322 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:15
8476 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:15
8323 #: rhodecode/templates/admin/users/user_edit_advanced.mako:19
8477 #: rhodecode/templates/admin/users/user_edit_advanced.mako:19
8324 msgid "Assigned to review rules"
8478 msgid "Assigned to review rules"
8325 msgstr ""
8479 msgstr ""
8326
8480
8327 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:22
8481 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:22
8328 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:6
8482 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:6
8329 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:7
8483 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:7
8330 #: rhodecode/templates/data_table/_dt_elements.mako:305
8484 #: rhodecode/templates/data_table/_dt_elements.mako:305
8331 #: rhodecode/templates/user_group/user_group.mako:4
8485 #: rhodecode/templates/user_group/user_group.mako:4
8332 msgid "User group"
8486 msgid "User group"
8333 msgstr ""
8487 msgstr ""
8334
8488
8335 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:35
8489 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:35
8336 msgid "Group members sync"
8490 msgid "Group members sync"
8337 msgstr ""
8491 msgstr ""
8338
8492
8339 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:42
8493 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:42
8340 msgid "This group is set to be automatically synchronised."
8494 msgid "This group is set to be automatically synchronised."
8341 msgstr ""
8495 msgstr ""
8342
8496
8343 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:43
8497 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:43
8344 msgid "This group synchronization was set by"
8498 msgid "This group synchronization was set by"
8345 msgstr ""
8499 msgstr ""
8346
8500
8347 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:47
8501 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:47
8348 msgid "This group is not set to be automatically synchronised"
8502 msgid "This group is not set to be automatically synchronised"
8349 msgstr ""
8503 msgstr ""
8350
8504
8351 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:56
8505 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:56
8352 msgid "Disable synchronization"
8506 msgid "Disable synchronization"
8353 msgstr ""
8507 msgstr ""
8354
8508
8355 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:58
8509 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:58
8356 msgid "Enable synchronization"
8510 msgid "Enable synchronization"
8357 msgstr ""
8511 msgstr ""
8358
8512
8359 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:64
8513 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:64
8360 msgid "Users will be added or removed from this group when they authenticate with RhodeCode system, based on LDAP group membership. This requires `LDAP+User group` authentication plugin to be configured and enabled. (EE only feature)"
8514 msgid "Users will be added or removed from this group when they authenticate with RhodeCode system, based on LDAP group membership. This requires `LDAP+User group` authentication plugin to be configured and enabled. (EE only feature)"
8361 msgstr ""
8515 msgstr ""
8362
8516
8363 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:77
8517 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:77
8364 msgid "Delete User Group"
8518 msgid "Delete User Group"
8365 msgstr ""
8519 msgstr ""
8366
8520
8367 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:83
8521 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:83
8368 #, python-format
8522 #, python-format
8369 msgid "Confirm to delete user group `%(ugroup)s` with all permission assignments"
8523 msgid "Confirm to delete user group `%(ugroup)s` with all permission assignments"
8370 msgstr ""
8524 msgstr ""
8371
8525
8372 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:85
8526 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:85
8373 msgid "Delete This User Group"
8527 msgid "Delete This User Group"
8374 msgstr ""
8528 msgstr ""
8375
8529
8376 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:40
8530 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:40
8377 msgid "Change owner of this user group."
8531 msgid "Change owner of this user group."
8378 msgstr ""
8532 msgstr ""
8379
8533
8380 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:64
8534 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:64
8381 msgid "Add members"
8535 msgid "Add members"
8382 msgstr ""
8536 msgstr ""
8383
8537
8384 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:100
8538 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:100
8385 #: rhodecode/templates/user_group/profile.mako:78
8539 #: rhodecode/templates/user_group/profile.mako:78
8386 msgid "No members yet"
8540 msgid "No members yet"
8387 msgstr ""
8541 msgstr ""
8388
8542
8389 #: rhodecode/templates/admin/user_groups/user_groups.mako:5
8543 #: rhodecode/templates/admin/user_groups/user_groups.mako:5
8390 #: rhodecode/templates/admin/users/user_edit_groups.mako:8
8544 #: rhodecode/templates/admin/users/user_edit_groups.mako:8
8391 msgid "User groups administration"
8545 msgid "User groups administration"
8392 msgstr ""
8546 msgstr ""
8393
8547
8394 #: rhodecode/templates/admin/user_groups/user_groups.mako:82
8548 #: rhodecode/templates/admin/user_groups/user_groups.mako:82
8395 msgid "Sync"
8549 msgid "Sync"
8396 msgstr ""
8550 msgstr ""
8397
8551
8398 #: rhodecode/templates/admin/users/user_add.mako:5
8552 #: rhodecode/templates/admin/users/user_add.mako:5
8399 msgid "Add user"
8553 msgid "Add user"
8400 msgstr ""
8554 msgstr ""
8401
8555
8402 #: rhodecode/templates/admin/users/user_add.mako:13
8556 #: rhodecode/templates/admin/users/user_add.mako:13
8403 #: rhodecode/templates/admin/users/user_edit.mako:14
8557 #: rhodecode/templates/admin/users/user_edit.mako:14
8404 #: rhodecode/templates/base/base.mako:109
8558 #: rhodecode/templates/base/base.mako:114
8405 msgid "Users"
8559 msgid "Users"
8406 msgstr ""
8560 msgstr ""
8407
8561
8408 #: rhodecode/templates/admin/users/user_add.mako:15
8562 #: rhodecode/templates/admin/users/user_add.mako:15
8409 #: rhodecode/templates/admin/users/users.mako:31
8563 #: rhodecode/templates/admin/users/users.mako:31
8410 msgid "Add User"
8564 msgid "Add User"
8411 msgstr ""
8565 msgstr ""
8412
8566
8413 #: rhodecode/templates/admin/users/user_add.mako:53
8567 #: rhodecode/templates/admin/users/user_add.mako:53
8414 msgid "Password confirmation"
8568 msgid "Password confirmation"
8415 msgstr ""
8569 msgstr ""
8416
8570
8417 #: rhodecode/templates/admin/users/user_add.mako:59
8571 #: rhodecode/templates/admin/users/user_add.mako:59
8418 msgid "Generate password"
8572 msgid "Generate password"
8419 msgstr ""
8573 msgstr ""
8420
8574
8421 #: rhodecode/templates/admin/users/user_add.mako:106
8575 #: rhodecode/templates/admin/users/user_add.mako:106
8422 msgid "Password change"
8576 msgid "Password change"
8423 msgstr ""
8577 msgstr ""
8424
8578
8425 #: rhodecode/templates/admin/users/user_add.mako:110
8579 #: rhodecode/templates/admin/users/user_add.mako:110
8426 msgid "Force user to change his password on the next login"
8580 msgid "Force user to change his password on the next login"
8427 msgstr ""
8581 msgstr ""
8428
8582
8429 #: rhodecode/templates/admin/users/user_add.mako:116
8583 #: rhodecode/templates/admin/users/user_add.mako:116
8430 msgid "Add personal repository group"
8584 msgid "Add personal repository group"
8431 msgstr ""
8585 msgstr ""
8432
8586
8433 #: rhodecode/templates/admin/users/user_add.mako:121
8587 #: rhodecode/templates/admin/users/user_add.mako:121
8434 msgid "New group will be created at: `/{path}`"
8588 msgid "New group will be created at: `/{path}`"
8435 msgstr ""
8589 msgstr ""
8436
8590
8437 #: rhodecode/templates/admin/users/user_add.mako:122
8591 #: rhodecode/templates/admin/users/user_add.mako:122
8438 msgid "User will be automatically set as this group owner."
8592 msgid "User will be automatically set as this group owner."
8439 msgstr ""
8593 msgstr ""
8440
8594
8441 #: rhodecode/templates/admin/users/user_add.mako:128
8595 #: rhodecode/templates/admin/users/user_add.mako:128
8442 msgid "Create User"
8596 msgid "Create User"
8443 msgstr ""
8597 msgstr ""
8444
8598
8445 #: rhodecode/templates/admin/users/user_add.mako:139
8599 #: rhodecode/templates/admin/users/user_add.mako:139
8446 msgid "generated password:"
8600 msgid "generated password:"
8447 msgstr ""
8601 msgstr ""
8448
8602
8449 #: rhodecode/templates/admin/users/user_edit.mako:5
8603 #: rhodecode/templates/admin/users/user_edit.mako:5
8450 msgid "{} user settings"
8604 msgid "{} user settings"
8451 msgstr ""
8605 msgstr ""
8452
8606
8453 #: rhodecode/templates/admin/users/user_edit.mako:31
8607 #: rhodecode/templates/admin/users/user_edit.mako:31
8454 msgid "This user is set as disabled"
8608 msgid "This user is set as non-active and disabled."
8455 msgstr ""
8609 msgstr ""
8456
8610
8457 #: rhodecode/templates/admin/users/user_edit.mako:39
8611 #: rhodecode/templates/admin/users/user_edit.mako:39
8458 #: rhodecode/templates/admin/users/user_edit_profile.mako:7
8612 #: rhodecode/templates/admin/users/user_edit_profile.mako:7
8459 #: rhodecode/templates/users/user_profile.mako:6
8613 #: rhodecode/templates/users/user_profile.mako:6
8460 msgid "User Profile"
8614 msgid "User Profile"
8461 msgstr ""
8615 msgstr ""
8462
8616
8463 #: rhodecode/templates/admin/users/user_edit.mako:40
8617 #: rhodecode/templates/admin/users/user_edit.mako:40
8464 msgid "Auth tokens"
8618 msgid "Auth tokens"
8465 msgstr ""
8619 msgstr ""
8466
8620
8467 #: rhodecode/templates/admin/users/user_edit.mako:46
8621 #: rhodecode/templates/admin/users/user_edit.mako:46
8468 msgid "Ip Whitelist"
8622 msgid "Ip Whitelist"
8469 msgstr ""
8623 msgstr ""
8470
8624
8471 #: rhodecode/templates/admin/users/user_edit.mako:47
8625 #: rhodecode/templates/admin/users/user_edit.mako:47
8472 msgid "User Groups Management"
8626 msgid "User Groups Management"
8473 msgstr ""
8627 msgstr ""
8474
8628
8475 #: rhodecode/templates/admin/users/user_edit_advanced.mako:5
8629 #: rhodecode/templates/admin/users/user_edit_advanced.mako:5
8476 msgid "User ID"
8630 msgid "User ID"
8477 msgstr ""
8631 msgstr ""
8478
8632
8479 #: rhodecode/templates/admin/users/user_edit_advanced.mako:7
8633 #: rhodecode/templates/admin/users/user_edit_advanced.mako:7
8480 msgid "Source of Record"
8634 msgid "Source of Record"
8481 msgstr ""
8635 msgstr ""
8482
8636
8483 #: rhodecode/templates/admin/users/user_edit_advanced.mako:9
8637 #: rhodecode/templates/admin/users/user_edit_advanced.mako:9
8484 msgid "Last login"
8638 msgid "Last login"
8485 msgstr ""
8639 msgstr ""
8486
8640
8487 #: rhodecode/templates/admin/users/user_edit_advanced.mako:10
8641 #: rhodecode/templates/admin/users/user_edit_advanced.mako:10
8488 #: rhodecode/templates/admin/users/users.mako:83
8642 #: rhodecode/templates/admin/users/users.mako:83
8489 #: rhodecode/templates/forks/forks.mako:67
8643 #: rhodecode/templates/forks/forks.mako:67
8490 msgid "Last activity"
8644 msgid "Last activity"
8491 msgstr ""
8645 msgstr ""
8492
8646
8493 #: rhodecode/templates/admin/users/user_edit_advanced.mako:16
8647 #: rhodecode/templates/admin/users/user_edit_advanced.mako:16
8494 msgid "Owned Artifacts"
8648 msgid "Owned Artifacts"
8495 msgstr ""
8649 msgstr ""
8496
8650
8497 #: rhodecode/templates/admin/users/user_edit_advanced.mako:18
8651 #: rhodecode/templates/admin/users/user_edit_advanced.mako:18
8498 msgid "Reviewer of pull requests"
8652 msgid "Reviewer of pull requests"
8499 msgstr ""
8653 msgstr ""
8500
8654
8501 #: rhodecode/templates/admin/users/user_edit_advanced.mako:21
8655 #: rhodecode/templates/admin/users/user_edit_advanced.mako:21
8502 msgid "Member of User groups"
8656 msgid "Member of User groups"
8503 msgstr ""
8657 msgstr ""
8504
8658
8505 #: rhodecode/templates/admin/users/user_edit_advanced.mako:22
8659 #: rhodecode/templates/admin/users/user_edit_advanced.mako:22
8506 msgid "Force password change"
8660 msgid "Force password change"
8507 msgstr ""
8661 msgstr ""
8508
8662
8509 #: rhodecode/templates/admin/users/user_edit_advanced.mako:49
8663 #: rhodecode/templates/admin/users/user_edit_advanced.mako:49
8510 msgid "Force Password Reset"
8664 msgid "Force Password Reset"
8511 msgstr ""
8665 msgstr ""
8512
8666
8513 #: rhodecode/templates/admin/users/user_edit_advanced.mako:55
8667 #: rhodecode/templates/admin/users/user_edit_advanced.mako:55
8514 msgid "Disable forced password reset"
8668 msgid "Disable forced password reset"
8515 msgstr ""
8669 msgstr ""
8516
8670
8517 #: rhodecode/templates/admin/users/user_edit_advanced.mako:60
8671 #: rhodecode/templates/admin/users/user_edit_advanced.mako:60
8518 msgid "Clear the forced password change flag."
8672 msgid "Clear the forced password change flag."
8519 msgstr ""
8673 msgstr ""
8520
8674
8521 #: rhodecode/templates/admin/users/user_edit_advanced.mako:67
8675 #: rhodecode/templates/admin/users/user_edit_advanced.mako:67
8522 msgid "Confirm to enable forced password change"
8676 msgid "Confirm to enable forced password change"
8523 msgstr ""
8677 msgstr ""
8524
8678
8525 #: rhodecode/templates/admin/users/user_edit_advanced.mako:68
8679 #: rhodecode/templates/admin/users/user_edit_advanced.mako:68
8526 msgid "Enable forced password reset"
8680 msgid "Enable forced password reset"
8527 msgstr ""
8681 msgstr ""
8528
8682
8529 #: rhodecode/templates/admin/users/user_edit_advanced.mako:73
8683 #: rhodecode/templates/admin/users/user_edit_advanced.mako:73
8530 msgid "When this is enabled user will have to change they password when they next use RhodeCode system. This will also forbid vcs operations until someone makes a password change in the web interface"
8684 msgid "When this is enabled user will have to change they password when they next use RhodeCode system. This will also forbid vcs operations until someone makes a password change in the web interface"
8531 msgstr ""
8685 msgstr ""
8532
8686
8533 #: rhodecode/templates/admin/users/user_edit_advanced.mako:89
8687 #: rhodecode/templates/admin/users/user_edit_advanced.mako:89
8534 msgid "Users personal repository group"
8688 msgid "Users personal repository group"
8535 msgstr ""
8689 msgstr ""
8536
8690
8537 #: rhodecode/templates/admin/users/user_edit_advanced.mako:92
8691 #: rhodecode/templates/admin/users/user_edit_advanced.mako:92
8538 msgid "This user currently does not have a personal repository group"
8692 msgid "This user currently does not have a personal repository group"
8539 msgstr ""
8693 msgstr ""
8540
8694
8541 #: rhodecode/templates/admin/users/user_edit_advanced.mako:94
8695 #: rhodecode/templates/admin/users/user_edit_advanced.mako:94
8542 #, python-format
8696 #, python-format
8543 msgid "New group will be created at: `/%(path)s`"
8697 msgid "New group will be created at: `/%(path)s`"
8544 msgstr ""
8698 msgstr ""
8545
8699
8546 #: rhodecode/templates/admin/users/user_edit_advanced.mako:99
8700 #: rhodecode/templates/admin/users/user_edit_advanced.mako:99
8547 msgid "Create personal repository group"
8701 msgid "Create personal repository group"
8548 msgstr ""
8702 msgstr ""
8549
8703
8550 #: rhodecode/templates/admin/users/user_edit_advanced.mako:108
8704 #: rhodecode/templates/admin/users/user_edit_advanced.mako:108
8551 msgid "Delete User"
8705 msgid "Delete User"
8552 msgstr ""
8706 msgstr ""
8553
8707
8554 #: rhodecode/templates/admin/users/user_edit_advanced.mako:119
8708 #: rhodecode/templates/admin/users/user_edit_advanced.mako:119
8555 msgid "Detach repositories"
8709 msgid "Detach repositories"
8556 msgstr ""
8710 msgstr ""
8557
8711
8558 #: rhodecode/templates/admin/users/user_edit_advanced.mako:122
8712 #: rhodecode/templates/admin/users/user_edit_advanced.mako:122
8559 #: rhodecode/templates/admin/users/user_edit_advanced.mako:134
8713 #: rhodecode/templates/admin/users/user_edit_advanced.mako:134
8560 #: rhodecode/templates/admin/users/user_edit_advanced.mako:146
8714 #: rhodecode/templates/admin/users/user_edit_advanced.mako:146
8561 msgid "Delete repositories"
8715 msgid "Delete repositories"
8562 msgstr ""
8716 msgstr ""
8563
8717
8564 #: rhodecode/templates/admin/users/user_edit_advanced.mako:131
8718 #: rhodecode/templates/admin/users/user_edit_advanced.mako:131
8565 msgid "Detach repository groups"
8719 msgid "Detach repository groups"
8566 msgstr ""
8720 msgstr ""
8567
8721
8568 #: rhodecode/templates/admin/users/user_edit_advanced.mako:143
8722 #: rhodecode/templates/admin/users/user_edit_advanced.mako:143
8569 msgid "Detach user groups"
8723 msgid "Detach user groups"
8570 msgstr ""
8724 msgstr ""
8571
8725
8572 #: rhodecode/templates/admin/users/user_edit_advanced.mako:155
8726 #: rhodecode/templates/admin/users/user_edit_advanced.mako:155
8573 msgid "Detach pull requests"
8727 msgid "Detach pull requests"
8574 msgstr ""
8728 msgstr ""
8575
8729
8576 #: rhodecode/templates/admin/users/user_edit_advanced.mako:158
8730 #: rhodecode/templates/admin/users/user_edit_advanced.mako:158
8577 msgid "Delete pull requests"
8731 msgid "Delete pull requests"
8578 msgstr ""
8732 msgstr ""
8579
8733
8580 #: rhodecode/templates/admin/users/user_edit_advanced.mako:167
8734 #: rhodecode/templates/admin/users/user_edit_advanced.mako:167
8581 msgid "Detach Artifacts"
8735 msgid "Detach Artifacts"
8582 msgstr ""
8736 msgstr ""
8583
8737
8584 #: rhodecode/templates/admin/users/user_edit_advanced.mako:170
8738 #: rhodecode/templates/admin/users/user_edit_advanced.mako:170
8585 msgid "Delete Artifacts"
8739 msgid "Delete Artifacts"
8586 msgstr ""
8740 msgstr ""
8587
8741
8588 #: rhodecode/templates/admin/users/user_edit_advanced.mako:180
8742 #: rhodecode/templates/admin/users/user_edit_advanced.mako:180
8589 msgid "New owner for detached objects"
8743 msgid "New owner for detached objects"
8590 msgstr ""
8744 msgstr ""
8591
8745
8592 #: rhodecode/templates/admin/users/user_edit_advanced.mako:188
8746 #: rhodecode/templates/admin/users/user_edit_advanced.mako:188
8593 msgid "When selecting the detach option, the depending objects owned by this user will be assigned to the above user."
8747 msgid "When selecting the detach option, the depending objects owned by this user will be assigned to the above user."
8594 msgstr ""
8748 msgstr ""
8595
8749
8596 #: rhodecode/templates/admin/users/user_edit_advanced.mako:190
8750 #: rhodecode/templates/admin/users/user_edit_advanced.mako:190
8597 msgid "The delete option will delete the user and all his owned objects!"
8751 msgid "The delete option will delete the user and all his owned objects!"
8598 msgstr ""
8752 msgstr ""
8599
8753
8600 #: rhodecode/templates/admin/users/user_edit_advanced.mako:205
8754 #: rhodecode/templates/admin/users/user_edit_advanced.mako:205
8601 msgid "Delete this user"
8755 msgid "Delete this user"
8602 msgstr ""
8756 msgstr ""
8603
8757
8604 #: rhodecode/templates/admin/users/user_edit_audit.mako:9
8758 #: rhodecode/templates/admin/users/user_edit_audit.mako:9
8605 msgid "Audit Logs"
8759 msgid "Audit Logs"
8606 msgstr ""
8760 msgstr ""
8607
8761
8608 #: rhodecode/templates/admin/users/user_edit_audit.mako:12
8762 #: rhodecode/templates/admin/users/user_edit_audit.mako:12
8609 msgid "Download as JSON"
8763 msgid "Download as JSON"
8610 msgstr ""
8764 msgstr ""
8611
8765
8612 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:62
8766 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:68
8613 #, python-format
8767 #, python-format
8614 msgid "Confirm to remove this auth token: %s"
8768 msgid "Confirm to remove this auth token: %s"
8615 msgstr ""
8769 msgstr ""
8616
8770
8617 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8771 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8618 msgid "Invalidate user cache"
8772 msgid "Invalidate user cache"
8619 msgstr ""
8773 msgstr ""
8620
8774
8621 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8775 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8622 msgid "Confirm to invalidate user cache"
8776 msgid "Confirm to invalidate user cache"
8623 msgstr ""
8777 msgstr ""
8624
8778
8625 #: rhodecode/templates/admin/users/user_edit_emails.mako:7
8779 #: rhodecode/templates/admin/users/user_edit_emails.mako:7
8626 msgid "Additional Email Addresses"
8780 msgid "Additional Email Addresses"
8627 msgstr ""
8781 msgstr ""
8628
8782
8629 #: rhodecode/templates/admin/users/user_edit_emails.mako:33
8783 #: rhodecode/templates/admin/users/user_edit_emails.mako:33
8630 #, python-format
8784 #, python-format
8631 msgid "Confirm to delete this email: %s"
8785 msgid "Confirm to delete this email: %s"
8632 msgstr ""
8786 msgstr ""
8633
8787
8634 #: rhodecode/templates/admin/users/user_edit_emails.mako:58
8788 #: rhodecode/templates/admin/users/user_edit_emails.mako:58
8635 msgid "New email address"
8789 msgid "New email address"
8636 msgstr ""
8790 msgstr ""
8637
8791
8638 #: rhodecode/templates/admin/users/user_edit_groups.mako:15
8792 #: rhodecode/templates/admin/users/user_edit_groups.mako:15
8639 #, python-format
8793 #, python-format
8640 msgid "Add `%s` to user group"
8794 msgid "Add `%s` to user group"
8641 msgstr ""
8795 msgstr ""
8642
8796
8643 #: rhodecode/templates/admin/users/user_edit_ips.mako:7
8797 #: rhodecode/templates/admin/users/user_edit_ips.mako:7
8644 msgid "Custom IP Whitelist"
8798 msgid "Custom IP Whitelist"
8645 msgstr ""
8799 msgstr ""
8646
8800
8647 #: rhodecode/templates/admin/users/user_edit_ips.mako:15
8801 #: rhodecode/templates/admin/users/user_edit_ips.mako:15
8648 msgid "IP Address"
8802 msgid "IP Address"
8649 msgstr ""
8803 msgstr ""
8650
8804
8651 #: rhodecode/templates/admin/users/user_edit_ips.mako:16
8805 #: rhodecode/templates/admin/users/user_edit_ips.mako:16
8652 msgid "IP Range"
8806 msgid "IP Range"
8653 msgstr ""
8807 msgstr ""
8654
8808
8655 #: rhodecode/templates/admin/users/user_edit_ips.mako:25
8809 #: rhodecode/templates/admin/users/user_edit_ips.mako:25
8656 #, python-format
8810 #, python-format
8657 msgid "Inherited from %s"
8811 msgid "Inherited from %s"
8658 msgstr ""
8812 msgstr ""
8659
8813
8660 #: rhodecode/templates/admin/users/user_edit_ips.mako:69
8814 #: rhodecode/templates/admin/users/user_edit_ips.mako:69
8661 msgid ""
8815 msgid ""
8662 "Enter comma separated list of ip addresses like 10.0.0.1,10.0.0.2.\n"
8816 "Enter comma separated list of ip addresses like 10.0.0.1,10.0.0.2.\n"
8663 "Use a ip address with a mask 127.0.0.1/24, to create a network match pattern.\n"
8817 "Use a ip address with a mask 127.0.0.1/24, to create a network match pattern.\n"
8664 "To specify multiple entries on an address range use 127.0.0.1-127.0.0.10 syntax"
8818 "To specify multiple entries on an address range use 127.0.0.1-127.0.0.10 syntax"
8665 msgstr ""
8819 msgstr ""
8666
8820
8667 #: rhodecode/templates/admin/users/user_edit_profile.mako:31
8821 #: rhodecode/templates/admin/users/user_edit_profile.mako:31
8668 msgid "Change the avatar at"
8822 msgid "Change the avatar at"
8669 msgstr ""
8823 msgstr ""
8670
8824
8671 #: rhodecode/templates/admin/users/user_edit_profile.mako:94
8825 #: rhodecode/templates/admin/users/user_edit_profile.mako:94
8672 msgid "New Password"
8826 msgid "New Password"
8673 msgstr ""
8827 msgstr ""
8674
8828
8675 #: rhodecode/templates/admin/users/user_edit_profile.mako:102
8829 #: rhodecode/templates/admin/users/user_edit_profile.mako:102
8676 msgid "New Password Confirmation"
8830 msgid "New Password Confirmation"
8677 msgstr ""
8831 msgstr ""
8678
8832
8679 #: rhodecode/templates/admin/users/user_edit_profile.mako:118
8833 #: rhodecode/templates/admin/users/user_edit_profile.mako:118
8680 #: rhodecode/templates/admin/users/users.mako:87
8834 #: rhodecode/templates/admin/users/users.mako:87
8681 #: rhodecode/templates/base/perms_summary.mako:145
8835 #: rhodecode/templates/base/perms_summary.mako:150
8682 msgid "Super-admin"
8836 msgid "Super-admin"
8683 msgstr ""
8837 msgstr ""
8684
8838
8685 #: rhodecode/templates/admin/users/user_edit_profile.mako:126
8839 #: rhodecode/templates/admin/users/user_edit_profile.mako:126
8686 msgid "Authentication type"
8840 msgid "Authentication type"
8687 msgstr ""
8841 msgstr ""
8688
8842
8689 #: rhodecode/templates/admin/users/user_edit_profile.mako:130
8843 #: rhodecode/templates/admin/users/user_edit_profile.mako:130
8690 msgid "When user was created using an external source. He is bound to authentication using this method."
8844 msgid "When user was created using an external source. He is bound to authentication using this method."
8691 msgstr ""
8845 msgstr ""
8692
8846
8693 #: rhodecode/templates/admin/users/user_edit_profile.mako:135
8847 #: rhodecode/templates/admin/users/user_edit_profile.mako:135
8694 msgid "Name in Source of Record"
8848 msgid "Name in Source of Record"
8695 msgstr ""
8849 msgstr ""
8696
8850
8697 #: rhodecode/templates/admin/users/user_edit_profile.mako:144
8851 #: rhodecode/templates/admin/users/user_edit_profile.mako:144
8698 msgid "Language"
8852 msgid "Language"
8699 msgstr ""
8853 msgstr ""
8700
8854
8701 #: rhodecode/templates/admin/users/user_edit_profile.mako:150
8855 #: rhodecode/templates/admin/users/user_edit_profile.mako:150
8702 #, python-format
8856 #, python-format
8703 msgid "User interface language. Help translate %(rc_link)s into your language."
8857 msgid "User interface language. Help translate %(rc_link)s into your language."
8704 msgstr ""
8858 msgstr ""
8705
8859
8706 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:34
8860 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:34
8707 #, python-format
8861 #, python-format
8708 msgid "Confirm to remove ssh key %s"
8862 msgid "Confirm to remove ssh key %s"
8709 msgstr ""
8863 msgstr ""
8710
8864
8711 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:75
8865 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:75
8712 msgid "Click add to use this generate SSH key"
8866 msgid "Click add to use this generate SSH key"
8713 msgstr ""
8867 msgstr ""
8714
8868
8715 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:7
8869 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:7
8716 msgid "New SSH Key generation"
8870 msgid "New SSH Key generation"
8717 msgstr ""
8871 msgstr ""
8718
8872
8719 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8873 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8720 msgid "Below is a 2048 bit generated SSH RSA key."
8874 msgid "Below is a 2048 bit generated SSH RSA key."
8721 msgstr ""
8875 msgstr ""
8722
8876
8723 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8877 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8724 msgid "If you use older systems please try to generate a"
8878 msgid "If you use older systems please try to generate a"
8725 msgstr ""
8879 msgstr ""
8726
8880
8727 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8881 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8728 msgid "legacy format"
8882 msgid "legacy format"
8729 msgstr ""
8883 msgstr ""
8730
8884
8731 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:14
8885 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:14
8732 msgid "If You wish to use it to access RhodeCode via the SSH please save the private key and click `Use this generated key` at the bottom."
8886 msgid "If You wish to use it to access RhodeCode via the SSH please save the private key and click `Use this generated key` at the bottom."
8733 msgstr ""
8887 msgstr ""
8734
8888
8735 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:16
8889 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:16
8736 msgid "Private key"
8890 msgid "Private key"
8737 msgstr ""
8891 msgstr ""
8738
8892
8739 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:32
8893 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:32
8740 msgid "Public key"
8894 msgid "Public key"
8741 msgstr ""
8895 msgstr ""
8742
8896
8743 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:43
8897 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:43
8744 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:45
8898 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:45
8745 msgid "Use this generated key"
8899 msgid "Use this generated key"
8746 msgstr ""
8900 msgstr ""
8747
8901
8748 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:47
8902 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:47
8749 msgid "Confirmation required on the next screen"
8903 msgid "Confirmation required on the next screen"
8750 msgstr ""
8904 msgstr ""
8751
8905
8752 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:51
8906 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:51
8753 msgid "SSH key generator has been disabled."
8907 msgid "SSH key generator has been disabled."
8754 msgstr ""
8908 msgstr ""
8755
8909
8756 #: rhodecode/templates/admin/users/users.mako:5
8910 #: rhodecode/templates/admin/users/users.mako:5
8757 msgid "Users administration"
8911 msgid "Users administration"
8758 msgstr ""
8912 msgstr ""
8759
8913
8760 #: rhodecode/templates/admin/users/users.mako:89
8914 #: rhodecode/templates/admin/users/users.mako:89
8761 msgid "Auth type"
8915 msgid "Auth type"
8762 msgstr ""
8916 msgstr ""
8763
8917
8764 #: rhodecode/templates/artifacts/artifact_list.mako:5
8918 #: rhodecode/templates/artifacts/artifact_list.mako:5
8765 msgid "{} Artifacts"
8919 msgid "{} Artifacts"
8766 msgstr ""
8920 msgstr ""
8767
8921
8768 #: rhodecode/templates/base/base.mako:66
8922 #: rhodecode/templates/base/base.mako:71
8769 msgid "RhodeCode instance id: {}"
8923 msgid "RhodeCode instance id: {}"
8770 msgstr ""
8924 msgstr ""
8771
8925
8772 #: rhodecode/templates/base/base.mako:94
8926 #: rhodecode/templates/base/base.mako:99
8773 msgid "Super-admin Panel"
8927 msgid "Super-admin Panel"
8774 msgstr ""
8928 msgstr ""
8775
8929
8776 #: rhodecode/templates/base/base.mako:96
8930 #: rhodecode/templates/base/base.mako:101
8777 msgid "Delegated Admin Panel"
8931 msgid "Delegated Admin Panel"
8778 msgstr ""
8932 msgstr ""
8779
8933
8780 #: rhodecode/templates/base/base.mako:112
8934 #: rhodecode/templates/base/base.mako:117
8781 msgid "Authentication"
8935 msgid "Authentication"
8782 msgstr ""
8936 msgstr ""
8783
8937
8784 #: rhodecode/templates/base/base.mako:114
8938 #: rhodecode/templates/base/base.mako:119
8785 msgid "Defaults"
8939 msgid "Defaults"
8786 msgstr ""
8940 msgstr ""
8787
8941
8788 #: rhodecode/templates/base/base.mako:154
8942 #: rhodecode/templates/base/base.mako:159
8789 #: rhodecode/templates/base/base.mako:194
8943 #: rhodecode/templates/base/base.mako:199
8790 #: rhodecode/templates/changeset/changeset.mako:154
8944 #: rhodecode/templates/changeset/changeset.mako:154
8791 #: rhodecode/templates/files/files_source_header.mako:57
8945 #: rhodecode/templates/files/files_source_header.mako:57
8792 #: rhodecode/templates/files/files_tree_header.mako:44
8946 #: rhodecode/templates/files/files_tree_header.mako:44
8793 #: rhodecode/templates/summary/components.mako:250
8947 #: rhodecode/templates/summary/components.mako:275
8794 msgid "Show More"
8948 msgid "Show More"
8795 msgstr ""
8949 msgstr ""
8796
8950
8797 #: rhodecode/templates/base/base.mako:295
8951 #: rhodecode/templates/base/base.mako:302
8798 #: rhodecode/templates/base/base.mako:306
8952 #: rhodecode/templates/base/base.mako:313
8799 msgid "RSS Feed"
8953 msgid "RSS Feed"
8800 msgstr ""
8954 msgstr ""
8801
8955
8802 #: rhodecode/templates/base/base.mako:297
8956 #: rhodecode/templates/base/base.mako:304
8803 msgid "Watch this Repository and actions on it in your personalized journal"
8957 msgid "Watch this Repository and actions on it in your personalized journal"
8804 msgstr ""
8958 msgstr ""
8805
8959
8806 #: rhodecode/templates/base/base.mako:315
8960 #: rhodecode/templates/base/base.mako:322
8807 msgid "Fork of"
8961 msgid "Fork of"
8808 msgstr ""
8962 msgstr ""
8809
8963
8810 #: rhodecode/templates/base/base.mako:332
8964 #: rhodecode/templates/base/base.mako:339
8811 #, python-format
8965 #, python-format
8812 msgid "Repository locked by %(user)s"
8966 msgid "Repository locked by %(user)s"
8813 msgstr ""
8967 msgstr ""
8814
8968
8815 #: rhodecode/templates/base/base.mako:337
8969 #: rhodecode/templates/base/base.mako:344
8816 msgid "Repository not locked. Pull repository to lock it."
8970 msgid "Repository not locked. Pull repository to lock it."
8817 msgstr ""
8971 msgstr ""
8818
8972
8819 #: rhodecode/templates/base/base.mako:353
8973 #: rhodecode/templates/base/base.mako:360
8820 msgid "This repository has been archived. It is now read-only."
8974 msgid "This repository has been archived. It is now read-only."
8821 msgstr ""
8975 msgstr ""
8822
8976
8823 #: rhodecode/templates/base/base.mako:366
8977 #: rhodecode/templates/base/base.mako:373
8824 #: rhodecode/templates/data_table/_dt_elements.mako:58
8978 #: rhodecode/templates/data_table/_dt_elements.mako:58
8825 #: rhodecode/templates/data_table/_dt_elements.mako:59
8979 #: rhodecode/templates/data_table/_dt_elements.mako:59
8826 #: rhodecode/templates/data_table/_dt_elements.mako:207
8980 #: rhodecode/templates/data_table/_dt_elements.mako:207
8827 msgid "Summary"
8981 msgid "Summary"
8828 msgstr ""
8982 msgstr ""
8829
8983
8830 #: rhodecode/templates/base/base.mako:367
8984 #: rhodecode/templates/base/base.mako:374
8831 #: rhodecode/templates/data_table/_dt_elements.mako:63
8985 #: rhodecode/templates/data_table/_dt_elements.mako:63
8832 #: rhodecode/templates/data_table/_dt_elements.mako:64
8986 #: rhodecode/templates/data_table/_dt_elements.mako:64
8833 #: rhodecode/templates/files/file_authors_box.mako:30
8987 #: rhodecode/templates/files/file_authors_box.mako:30
8834 #: rhodecode/templates/search/search.mako:99
8988 #: rhodecode/templates/search/search.mako:99
8835 #: rhodecode/templates/summary/components.mako:119
8989 #: rhodecode/templates/summary/components.mako:119
8836 #: rhodecode/templates/summary/components.mako:127
8990 #: rhodecode/templates/summary/components.mako:127
8837 msgid "Commits"
8991 msgid "Commits"
8838 msgstr ""
8992 msgstr ""
8839
8993
8840 #: rhodecode/templates/base/base.mako:368
8994 #: rhodecode/templates/base/base.mako:375
8841 #: rhodecode/templates/data_table/_dt_elements.mako:68
8995 #: rhodecode/templates/data_table/_dt_elements.mako:68
8842 #: rhodecode/templates/data_table/_dt_elements.mako:69
8996 #: rhodecode/templates/data_table/_dt_elements.mako:69
8843 #: rhodecode/templates/files/files.mako:15
8997 #: rhodecode/templates/files/files.mako:15
8844 #: rhodecode/templates/search/search.mako:99
8998 #: rhodecode/templates/search/search.mako:99
8845 msgid "Files"
8999 msgid "Files"
8846 msgstr ""
9000 msgstr ""
8847
9001
8848 #: rhodecode/templates/base/base.mako:369
9002 #: rhodecode/templates/base/base.mako:376
8849 #: rhodecode/templates/bookmarks/bookmarks.mako:66
9003 #: rhodecode/templates/bookmarks/bookmarks.mako:66
8850 #: rhodecode/templates/branches/branches.mako:65
9004 #: rhodecode/templates/branches/branches.mako:65
8851 #: rhodecode/templates/tags/tags.mako:66
9005 #: rhodecode/templates/tags/tags.mako:66
8852 msgid "Compare"
9006 msgid "Compare"
8853 msgstr ""
9007 msgstr ""
8854
9008
8855 #: rhodecode/templates/base/base.mako:374
9009 #: rhodecode/templates/base/base.mako:381
8856 #, python-format
9010 #, python-format
8857 msgid "Show Pull Requests for %s"
9011 msgid "Show Pull Requests for %s"
8858 msgstr ""
9012 msgstr ""
8859
9013
8860 #: rhodecode/templates/base/base.mako:385
9014 #: rhodecode/templates/base/base.mako:392
8861 msgid "Artifacts"
9015 msgid "Artifacts"
8862 msgstr ""
9016 msgstr ""
8863
9017
8864 #: rhodecode/templates/base/base.mako:391
9018 #: rhodecode/templates/base/base.mako:398
8865 msgid "Repository Settings"
9019 msgid "Repository Settings"
8866 msgstr ""
9020 msgstr ""
8867
9021
8868 #: rhodecode/templates/base/base.mako:397
8869 msgid "Options"
8870 msgstr ""
8871
8872 #: rhodecode/templates/base/base.mako:402
8873 msgid "Unlock Repository"
8874 msgstr ""
8875
8876 #: rhodecode/templates/base/base.mako:404
9022 #: rhodecode/templates/base/base.mako:404
9023 msgid "Options"
9024 msgstr ""
9025
9026 #: rhodecode/templates/base/base.mako:409
9027 msgid "Unlock Repository"
9028 msgstr ""
9029
9030 #: rhodecode/templates/base/base.mako:411
8877 msgid "Lock Repository"
9031 msgid "Lock Repository"
8878 msgstr ""
9032 msgstr ""
8879
9033
8880 #: rhodecode/templates/base/base.mako:457
9034 #: rhodecode/templates/base/base.mako:464
8881 msgid "Group Home"
9035 msgid "Group Home"
8882 msgstr ""
9036 msgstr ""
8883
9037
8884 #: rhodecode/templates/base/base.mako:461
9038 #: rhodecode/templates/base/base.mako:468
8885 msgid "You have admin right to this group, and can edit it"
9039 msgid "You have admin right to this group, and can edit it"
8886 msgstr ""
9040 msgstr ""
8887
9041
8888 #: rhodecode/templates/base/base.mako:461
9042 #: rhodecode/templates/base/base.mako:468
8889 msgid "Group Settings"
9043 msgid "Group Settings"
8890 msgstr ""
9044 msgstr ""
8891
9045
8892 #: rhodecode/templates/base/base.mako:504
9046 #: rhodecode/templates/base/base.mako:519
8893 msgid "Create"
8894 msgstr ""
8895
8896 #: rhodecode/templates/base/base.mako:512
8897 msgid "This Repository"
9047 msgid "This Repository"
8898 msgstr ""
9048 msgstr ""
8899
9049
8900 #: rhodecode/templates/base/base.mako:514
9050 #: rhodecode/templates/base/base.mako:521
8901 msgid "Create Pull Request"
9051 msgid "Create Pull Request"
8902 msgstr ""
9052 msgstr ""
8903
9053
8904 #: rhodecode/templates/base/base.mako:518
8905 msgid "Fork this repository"
8906 msgstr ""
8907
8908 #: rhodecode/templates/base/base.mako:525
9054 #: rhodecode/templates/base/base.mako:525
9055 msgid "Fork this repository"
9056 msgstr ""
9057
9058 #: rhodecode/templates/base/base.mako:532
8909 msgid "This Repository Group"
9059 msgid "This Repository Group"
8910 msgstr ""
9060 msgstr ""
8911
9061
8912 #: rhodecode/templates/base/base.mako:529
9062 #: rhodecode/templates/base/base.mako:536
8913 #: rhodecode/templates/base/base.mako:545
9063 #: rhodecode/templates/base/base.mako:552
8914 #: rhodecode/templates/base/base.mako:557
9064 #: rhodecode/templates/base/base.mako:564
8915 msgid "New Repository"
9065 msgid "New Repository"
8916 msgstr ""
9066 msgstr ""
8917
9067
8918 #: rhodecode/templates/base/base.mako:535
9068 #: rhodecode/templates/base/base.mako:542
8919 #: rhodecode/templates/base/base.mako:549
9069 #: rhodecode/templates/base/base.mako:556
8920 #: rhodecode/templates/base/base.mako:563
9070 #: rhodecode/templates/base/base.mako:570
8921 msgid "New Repository Group"
9071 msgid "New Repository Group"
8922 msgstr ""
9072 msgstr ""
8923
9073
8924 #: rhodecode/templates/base/base.mako:590
9074 #: rhodecode/templates/base/base.mako:597
8925 msgid "Sign in"
9075 msgid "Sign in"
8926 msgstr ""
9076 msgstr ""
8927
9077
8928 #: rhodecode/templates/base/base.mako:615
9078 #: rhodecode/templates/base/base.mako:622
8929 msgid "My personal group"
9079 msgid "My personal group"
8930 msgstr ""
9080 msgstr ""
8931
9081
8932 #: rhodecode/templates/base/base.mako:621
9082 #: rhodecode/templates/base/base.mako:628
8933 #: rhodecode/templates/debug_style/alerts.html:5
9083 #: rhodecode/templates/debug_style/alerts.html:5
8934 #: rhodecode/templates/debug_style/buttons.html:5
9084 #: rhodecode/templates/debug_style/buttons.html:5
8935 #: rhodecode/templates/debug_style/code-block.html:6
9085 #: rhodecode/templates/debug_style/code-block.html:6
8936 #: rhodecode/templates/debug_style/collapsable-content.html:5
9086 #: rhodecode/templates/debug_style/collapsable-content.html:5
8937 #: rhodecode/templates/debug_style/emails.html:5
9087 #: rhodecode/templates/debug_style/emails.html:5
8938 #: rhodecode/templates/debug_style/form-elements-small.html:5
9088 #: rhodecode/templates/debug_style/form-elements-small.html:5
8939 #: rhodecode/templates/debug_style/form-elements.html:5
9089 #: rhodecode/templates/debug_style/form-elements.html:5
8940 #: rhodecode/templates/debug_style/form-inline.html:5
9090 #: rhodecode/templates/debug_style/form-inline.html:5
8941 #: rhodecode/templates/debug_style/form-vertical.html:5
9091 #: rhodecode/templates/debug_style/form-vertical.html:5
8942 #: rhodecode/templates/debug_style/forms.html:5
9092 #: rhodecode/templates/debug_style/forms.html:5
8943 #: rhodecode/templates/debug_style/icons.html:5
9093 #: rhodecode/templates/debug_style/icons.html:5
8944 #: rhodecode/templates/debug_style/index.html:12
9094 #: rhodecode/templates/debug_style/index.html:12
8945 #: rhodecode/templates/debug_style/labels.html:5
9095 #: rhodecode/templates/debug_style/labels.html:5
8946 #: rhodecode/templates/debug_style/layout-form-sidebar.html:5
9096 #: rhodecode/templates/debug_style/layout-form-sidebar.html:5
8947 #: rhodecode/templates/debug_style/login.html:6
9097 #: rhodecode/templates/debug_style/login.html:6
8948 #: rhodecode/templates/debug_style/panels.html:5
9098 #: rhodecode/templates/debug_style/panels.html:5
8949 #: rhodecode/templates/debug_style/tables-wide.html:5
9099 #: rhodecode/templates/debug_style/tables-wide.html:5
8950 #: rhodecode/templates/debug_style/tables.html:5
9100 #: rhodecode/templates/debug_style/tables.html:5
8951 #: rhodecode/templates/debug_style/typography.html:5
9101 #: rhodecode/templates/debug_style/typography.html:5
8952 msgid "Style"
9102 msgid "Style"
8953 msgstr ""
9103 msgstr ""
8954
9104
8955 #: rhodecode/templates/base/base.mako:622
9105 #: rhodecode/templates/base/base.mako:629
8956 msgid "[Style]"
9106 msgid "[Style]"
8957 msgstr ""
9107 msgstr ""
8958
9108
8959 #: rhodecode/templates/base/base.mako:639
9109 #: rhodecode/templates/base/base.mako:646
8960 msgid "No Bookmarks yet."
9110 msgid "No Bookmarks yet."
8961 msgstr ""
9111 msgstr ""
8962
9112
8963 #: rhodecode/templates/base/base.mako:677
9113 #: rhodecode/templates/base/base.mako:684
8964 msgid "Sign Out"
9114 msgid "Sign Out"
8965 msgstr ""
9115 msgstr ""
8966
9116
8967 #: rhodecode/templates/base/base.mako:725
9117 #: rhodecode/templates/base/base.mako:732
8968 msgid "dismiss"
9118 msgid "dismiss"
8969 msgstr ""
9119 msgstr ""
8970
9120
8971 #: rhodecode/templates/base/base.mako:766
9121 #: rhodecode/templates/base/base.mako:773
8972 msgid "search / go to..."
9122 msgid "search / go to..."
8973 msgstr ""
9123 msgstr ""
8974
9124
8975 #: rhodecode/templates/base/base.mako:811
9125 #: rhodecode/templates/base/base.mako:818
8976 msgid "Show activity journal"
9126 msgid "Show activity journal"
8977 msgstr ""
9127 msgstr ""
8978
9128
8979 #: rhodecode/templates/base/base.mako:812
9129 #: rhodecode/templates/base/base.mako:819
8980 #: rhodecode/templates/journal/journal.mako:4
9130 #: rhodecode/templates/journal/journal.mako:4
8981 #: rhodecode/templates/journal/journal.mako:14
9131 #: rhodecode/templates/journal/journal.mako:14
8982 msgid "Journal"
9132 msgid "Journal"
8983 msgstr ""
9133 msgstr ""
8984
9134
8985 #: rhodecode/templates/base/base.mako:817
9135 #: rhodecode/templates/base/base.mako:824
8986 msgid "Show Public activity journal"
9136 msgid "Show Public activity journal"
8987 msgstr ""
9137 msgstr ""
8988
9138
8989 #: rhodecode/templates/base/base.mako:818
8990 msgid "Public journal"
8991 msgstr ""
8992
8993 #: rhodecode/templates/base/base.mako:824
8994 msgid "Show Gists"
8995 msgstr ""
8996
8997 #: rhodecode/templates/base/base.mako:825
9139 #: rhodecode/templates/base/base.mako:825
8998 msgid "Gists"
9140 msgid "Public journal"
8999 msgstr ""
9141 msgstr ""
9000
9142
9001 #: rhodecode/templates/base/base.mako:831
9143 #: rhodecode/templates/base/base.mako:831
9144 msgid "Show Gists"
9145 msgstr ""
9146
9147 #: rhodecode/templates/base/base.mako:832
9148 msgid "Gists"
9149 msgstr ""
9150
9151 #: rhodecode/templates/base/base.mako:838
9002 msgid "Admin settings"
9152 msgid "Admin settings"
9003 msgstr ""
9153 msgstr ""
9004
9154
9005 #: rhodecode/templates/base/base.mako:1135
9155 #: rhodecode/templates/base/base.mako:1155
9006 msgid "Keyboard shortcuts"
9156 msgid "Keyboard shortcuts"
9007 msgstr ""
9157 msgstr ""
9008
9158
9009 #: rhodecode/templates/base/base.mako:1143
9159 #: rhodecode/templates/base/base.mako:1163
9010 msgid "Site-wide shortcuts"
9160 msgid "Site-wide shortcuts"
9011 msgstr ""
9161 msgstr ""
9012
9162
9013 #: rhodecode/templates/base/default_perms_box.mako:14
9163 #: rhodecode/templates/base/default_perms_box.mako:19
9014 msgid "Inherited Permissions"
9164 msgid "Inherited Permissions"
9015 msgstr ""
9165 msgstr ""
9016
9166
9017 #: rhodecode/templates/base/default_perms_box.mako:15
9167 #: rhodecode/templates/base/default_perms_box.mako:25
9018 msgid "Custom Permissions"
9168 msgid "Custom Permissions"
9019 msgstr ""
9169 msgstr ""
9020
9170
9021 #: rhodecode/templates/base/default_perms_box.mako:17
9171 #: rhodecode/templates/base/default_perms_box.mako:29
9022 msgid "Default Global Permissions"
9172 msgid "Default Global Permissions"
9023 msgstr ""
9173 msgstr ""
9024
9174
9025 #: rhodecode/templates/base/default_perms_box.mako:23
9175 #: rhodecode/templates/base/default_perms_box.mako:36
9026 msgid "The following options configure the default permissions each user or group will inherit. You can override these permissions for each individual user or user group using individual permissions settings."
9176 msgid "The following options configure the default permissions each user or group will inherit. You can override these permissions for each individual user or user group using individual permissions settings."
9027 msgstr ""
9177 msgstr ""
9028
9178
9029 #: rhodecode/templates/base/default_perms_box.mako:27
9179 #: rhodecode/templates/base/default_perms_box.mako:40
9030 msgid "Repository Creation"
9180 msgid "Repository Creation"
9031 msgstr ""
9181 msgstr ""
9032
9182
9033 #: rhodecode/templates/base/default_perms_box.mako:32
9183 #: rhodecode/templates/base/default_perms_box.mako:45
9034 msgid "Permission to create root level repositories. When disabled, users can still create repositories inside their own repository groups."
9184 msgid "Permission to create root level repositories. When disabled, users can still create repositories inside their own repository groups."
9035 msgstr ""
9185 msgstr ""
9036
9186
9037 #: rhodecode/templates/base/default_perms_box.mako:37
9187 #: rhodecode/templates/base/default_perms_box.mako:50
9038 msgid "Repository Creation With Group Write Access"
9188 msgid "Repository Creation With Group Write Access"
9039 msgstr ""
9189 msgstr ""
9040
9190
9041 #: rhodecode/templates/base/default_perms_box.mako:42
9191 #: rhodecode/templates/base/default_perms_box.mako:55
9042 msgid "Write permission given on a repository group will allow creating repositories inside that group."
9192 msgid "Write permission given on a repository group will allow creating repositories inside that group."
9043 msgstr ""
9193 msgstr ""
9044
9194
9045 #: rhodecode/templates/base/default_perms_box.mako:47
9195 #: rhodecode/templates/base/default_perms_box.mako:60
9046 msgid "Repository Forking"
9196 msgid "Repository Forking"
9047 msgstr ""
9197 msgstr ""
9048
9198
9049 #: rhodecode/templates/base/default_perms_box.mako:52
9199 #: rhodecode/templates/base/default_perms_box.mako:65
9050 msgid "Permission to create root level repository forks. When disabled, users can still fork repositories inside their own repository groups."
9200 msgid "Permission to create root level repository forks. When disabled, users can still fork repositories inside their own repository groups."
9051 msgstr ""
9201 msgstr ""
9052
9202
9053 #: rhodecode/templates/base/default_perms_box.mako:57
9203 #: rhodecode/templates/base/default_perms_box.mako:70
9054 msgid "Repository Group Creation"
9204 msgid "Repository Group Creation"
9055 msgstr ""
9205 msgstr ""
9056
9206
9057 #: rhodecode/templates/base/default_perms_box.mako:62
9207 #: rhodecode/templates/base/default_perms_box.mako:75
9058 msgid "Permission to create root level repository groups. When disabled, repository group admins can still create repository subgroups within their repository groups."
9208 msgid "Permission to create root level repository groups. When disabled, repository group admins can still create repository subgroups within their repository groups."
9059 msgstr ""
9209 msgstr ""
9060
9210
9061 #: rhodecode/templates/base/default_perms_box.mako:67
9211 #: rhodecode/templates/base/default_perms_box.mako:80
9062 msgid "User Group Creation"
9212 msgid "User Group Creation"
9063 msgstr ""
9213 msgstr ""
9064
9214
9065 #: rhodecode/templates/base/default_perms_box.mako:72
9215 #: rhodecode/templates/base/default_perms_box.mako:85
9066 msgid "Permission to allow user group creation."
9216 msgid "Permission to allow user group creation."
9067 msgstr ""
9217 msgstr ""
9068
9218
9069 #: rhodecode/templates/base/default_perms_box.mako:78
9219 #: rhodecode/templates/base/default_perms_box.mako:91
9070 msgid "Inherit Permissions From The Default User"
9220 msgid "Inherit Permissions From The Default User"
9071 msgstr ""
9221 msgstr ""
9072
9222
9073 #: rhodecode/templates/base/default_perms_box.mako:83
9223 #: rhodecode/templates/base/default_perms_box.mako:96
9074 msgid "Inherit default permissions from the default user. Turn off this option to force explicit permissions for users, even if they are more restrictive than the default user permissions."
9224 msgid "Inherit default permissions from the default user. Turn off this option to force explicit permissions for users, even if they are more restrictive than the default user permissions."
9075 msgstr ""
9225 msgstr ""
9076
9226
9077 #: rhodecode/templates/base/default_perms_box.mako:102
9227 #: rhodecode/templates/base/default_perms_box.mako:115
9078 msgid "Inherit from default settings"
9228 msgid "Inherit from default settings"
9079 msgstr ""
9229 msgstr ""
9080
9230
9081 #: rhodecode/templates/base/default_perms_box.mako:107
9231 #: rhodecode/templates/base/default_perms_box.mako:120
9082 #, python-format
9232 #, python-format
9083 msgid ""
9233 msgid ""
9084 "Select to inherit permissions from %s permissions settings, including default IP address whitelist and inheritance of \n"
9234 "Select to inherit permissions from %s permissions settings, including default IP address whitelist and inheritance of \n"
9085 "permission by members of user groups."
9235 "permission by members of user groups."
9086 msgstr ""
9236 msgstr ""
9087
9237
9088 #: rhodecode/templates/base/issue_tracker_settings.mako:81
9238 #: rhodecode/templates/base/issue_tracker_settings.mako:81
9089 msgid "Extra Prefix"
9239 msgid "Extra Prefix"
9090 msgstr ""
9240 msgstr ""
9091
9241
9092 #: rhodecode/templates/base/issue_tracker_settings.mako:92
9242 #: rhodecode/templates/base/issue_tracker_settings.mako:92
9093 msgid "show examples"
9243 msgid "show examples"
9094 msgstr ""
9244 msgstr ""
9095
9245
9096 #: rhodecode/templates/base/issue_tracker_settings.mako:160
9246 #: rhodecode/templates/base/issue_tracker_settings.mako:160
9097 msgid "Add new"
9247 msgid "Add new"
9098 msgstr ""
9248 msgstr ""
9099
9249
9100 #: rhodecode/templates/base/issue_tracker_settings.mako:168
9250 #: rhodecode/templates/base/issue_tracker_settings.mako:168
9101 msgid "New Entry"
9251 msgid "New Entry"
9102 msgstr ""
9252 msgstr ""
9103
9253
9104 #: rhodecode/templates/base/issue_tracker_settings.mako:172
9254 #: rhodecode/templates/base/issue_tracker_settings.mako:172
9105 msgid "Confirm to remove this pattern:"
9255 msgid "Confirm to remove this pattern:"
9106 msgstr ""
9256 msgstr ""
9107
9257
9108 #: rhodecode/templates/base/issue_tracker_settings.mako:293
9258 #: rhodecode/templates/base/issue_tracker_settings.mako:293
9109 #: rhodecode/templates/changeset/changeset_file_comment.mako:275
9259 #: rhodecode/templates/changeset/changeset_file_comment.mako:340
9110 #: rhodecode/templates/changeset/changeset_file_comment.mako:326
9260 #: rhodecode/templates/changeset/changeset_file_comment.mako:391
9111 #: rhodecode/templates/data_table/_dt_elements.mako:453
9261 #: rhodecode/templates/data_table/_dt_elements.mako:453
9112 #: rhodecode/templates/files/files_add.mako:60
9262 #: rhodecode/templates/files/files_add.mako:59
9113 #: rhodecode/templates/files/files_edit.mako:62
9263 #: rhodecode/templates/files/files_edit.mako:61
9114 msgid "Preview"
9264 msgid "Preview"
9115 msgstr ""
9265 msgstr ""
9116
9266
9117 #: rhodecode/templates/base/issue_tracker_settings.mako:294
9267 #: rhodecode/templates/base/issue_tracker_settings.mako:294
9118 msgid "Test Pattern Preview"
9268 msgid "Test Pattern Preview"
9119 msgstr ""
9269 msgstr ""
9120
9270
9121 #: rhodecode/templates/base/perms_summary.mako:26
9271 #: rhodecode/templates/base/perms_summary.mako:31
9122 msgid "in JSON format"
9272 msgid "in JSON format"
9123 msgstr ""
9273 msgstr ""
9124
9274
9125 #: rhodecode/templates/base/perms_summary.mako:35
9275 #: rhodecode/templates/base/perms_summary.mako:40
9126 #: rhodecode/templates/base/perms_summary.mako:43
9276 #: rhodecode/templates/base/perms_summary.mako:48
9127 msgid "show"
9277 msgid "show"
9128 msgstr ""
9278 msgstr ""
9129
9279
9130 #: rhodecode/templates/base/perms_summary.mako:36
9280 #: rhodecode/templates/base/perms_summary.mako:41
9131 #: rhodecode/templates/base/perms_summary.mako:44
9281 #: rhodecode/templates/base/perms_summary.mako:49
9132 msgid "none"
9282 msgid "none"
9133 msgstr ""
9283 msgstr ""
9134
9284
9135 #: rhodecode/templates/base/perms_summary.mako:37
9285 #: rhodecode/templates/base/perms_summary.mako:42
9136 #: rhodecode/templates/commits/changelog_elements.mako:102
9286 #: rhodecode/templates/commits/changelog_elements.mako:102
9137 #: rhodecode/templates/files/base.mako:26
9287 #: rhodecode/templates/files/base.mako:26
9138 msgid "merge"
9288 msgid "merge"
9139 msgstr ""
9289 msgstr ""
9140
9290
9141 #: rhodecode/templates/base/perms_summary.mako:38
9291 #: rhodecode/templates/base/perms_summary.mako:43
9142 msgid "push"
9292 msgid "push"
9143 msgstr ""
9293 msgstr ""
9144
9294
9145 #: rhodecode/templates/base/perms_summary.mako:39
9295 #: rhodecode/templates/base/perms_summary.mako:44
9146 msgid "push force"
9296 msgid "push force"
9147 msgstr ""
9297 msgstr ""
9148
9298
9149 #: rhodecode/templates/base/perms_summary.mako:45
9299 #: rhodecode/templates/base/perms_summary.mako:50
9150 msgid "read"
9300 msgid "read"
9151 msgstr ""
9301 msgstr ""
9152
9302
9153 #: rhodecode/templates/base/perms_summary.mako:46
9303 #: rhodecode/templates/base/perms_summary.mako:51
9154 msgid "write"
9304 msgid "write"
9155 msgstr ""
9305 msgstr ""
9156
9306
9157 #: rhodecode/templates/base/perms_summary.mako:47
9307 #: rhodecode/templates/base/perms_summary.mako:52
9158 msgid "admin"
9308 msgid "admin"
9159 msgstr ""
9309 msgstr ""
9160
9310
9161 #: rhodecode/templates/base/perms_summary.mako:55
9311 #: rhodecode/templates/base/perms_summary.mako:60
9162 msgid "No permissions defined"
9312 msgid "No permissions defined"
9163 msgstr ""
9313 msgstr ""
9164
9314
9165 #: rhodecode/templates/base/perms_summary.mako:63
9315 #: rhodecode/templates/base/perms_summary.mako:68
9166 #: rhodecode/templates/base/perms_summary.mako:170
9316 #: rhodecode/templates/base/perms_summary.mako:175
9167 #: rhodecode/templates/base/perms_summary.mako:243
9317 #: rhodecode/templates/base/perms_summary.mako:248
9168 msgid "Permission"
9318 msgid "Permission"
9169 msgstr ""
9319 msgstr ""
9170
9320
9171 #: rhodecode/templates/base/perms_summary.mako:65
9321 #: rhodecode/templates/base/perms_summary.mako:70
9172 #: rhodecode/templates/base/perms_summary.mako:245
9322 #: rhodecode/templates/base/perms_summary.mako:250
9173 msgid "Edit Permission"
9323 msgid "Edit Permission"
9174 msgstr ""
9324 msgstr ""
9175
9325
9176 #: rhodecode/templates/base/perms_summary.mako:119
9326 #: rhodecode/templates/base/perms_summary.mako:124
9177 #: rhodecode/templates/base/perms_summary.mako:128
9327 #: rhodecode/templates/base/perms_summary.mako:133
9178 msgid "edit global"
9328 msgid "edit global"
9179 msgstr ""
9329 msgstr ""
9180
9330
9181 #: rhodecode/templates/base/perms_summary.mako:136
9331 #: rhodecode/templates/base/perms_summary.mako:141
9182 msgid "Repository default permission"
9332 msgid "Repository default permission"
9183 msgstr ""
9333 msgstr ""
9184
9334
9185 #: rhodecode/templates/base/perms_summary.mako:139
9335 #: rhodecode/templates/base/perms_summary.mako:144
9186 msgid "Repository group default permission"
9336 msgid "Repository group default permission"
9187 msgstr ""
9337 msgstr ""
9188
9338
9189 #: rhodecode/templates/base/perms_summary.mako:142
9339 #: rhodecode/templates/base/perms_summary.mako:147
9190 msgid "User group default permission"
9340 msgid "User group default permission"
9191 msgstr ""
9341 msgstr ""
9192
9342
9193 #: rhodecode/templates/base/perms_summary.mako:148
9343 #: rhodecode/templates/base/perms_summary.mako:153
9194 msgid "Inherit permissions"
9344 msgid "Inherit permissions"
9195 msgstr ""
9345 msgstr ""
9196
9346
9197 #: rhodecode/templates/base/perms_summary.mako:151
9347 #: rhodecode/templates/base/perms_summary.mako:156
9198 msgid "Create repositories"
9348 msgid "Create repositories"
9199 msgstr ""
9349 msgstr ""
9200
9350
9201 #: rhodecode/templates/base/perms_summary.mako:154
9351 #: rhodecode/templates/base/perms_summary.mako:159
9202 msgid "Fork repositories"
9352 msgid "Fork repositories"
9203 msgstr ""
9353 msgstr ""
9204
9354
9205 #: rhodecode/templates/base/perms_summary.mako:157
9355 #: rhodecode/templates/base/perms_summary.mako:162
9206 msgid "Create repository groups"
9356 msgid "Create repository groups"
9207 msgstr ""
9357 msgstr ""
9208
9358
9209 #: rhodecode/templates/base/perms_summary.mako:160
9359 #: rhodecode/templates/base/perms_summary.mako:165
9210 msgid "Create user groups"
9360 msgid "Create user groups"
9211 msgstr ""
9361 msgstr ""
9212
9362
9213 #: rhodecode/templates/base/perms_summary.mako:172
9363 #: rhodecode/templates/base/perms_summary.mako:177
9214 msgid "Edit Branch Permission"
9364 msgid "Edit Branch Permission"
9215 msgstr ""
9365 msgstr ""
9216
9366
9217 #: rhodecode/templates/base/perms_summary.mako:286
9367 #: rhodecode/templates/base/perms_summary.mako:291
9218 msgid "overridden by"
9368 msgid "overridden by"
9219 msgstr ""
9369 msgstr ""
9220
9370
9221 #: rhodecode/templates/base/perms_summary.mako:321
9371 #: rhodecode/templates/base/perms_summary.mako:326
9222 msgid "No matching permission defined"
9372 msgid "No matching permission defined"
9223 msgstr ""
9373 msgstr ""
9224
9374
9225 #: rhodecode/templates/base/root.mako:156
9375 #: rhodecode/templates/base/root.mako:156
9226 msgid "Please enable JavaScript to use RhodeCode Enterprise"
9376 msgid "Please enable JavaScript to use RhodeCode Enterprise"
9227 msgstr ""
9377 msgstr ""
9228
9378
9229 #: rhodecode/templates/base/vcs_settings.mako:16
9379 #: rhodecode/templates/base/vcs_settings.mako:16
9230 msgid "Require SSL for vcs operations"
9380 msgid "Require SSL for vcs operations"
9231 msgstr ""
9381 msgstr ""
9232
9382
9233 #: rhodecode/templates/base/vcs_settings.mako:19
9383 #: rhodecode/templates/base/vcs_settings.mako:19
9234 msgid "Activate to set RhodeCode to require SSL for pushing or pulling. If SSL certificate is missing it will return a HTTP Error 406: Not Acceptable."
9384 msgid "Activate to set RhodeCode to require SSL for pushing or pulling. If SSL certificate is missing it will return a HTTP Error 406: Not Acceptable."
9235 msgstr ""
9385 msgstr ""
9236
9386
9237 #: rhodecode/templates/base/vcs_settings.mako:29
9387 #: rhodecode/templates/base/vcs_settings.mako:29
9238 msgid "Main Storage Location"
9388 msgid "Main Storage Location"
9239 msgstr ""
9389 msgstr ""
9240
9390
9241 #: rhodecode/templates/base/vcs_settings.mako:37
9391 #: rhodecode/templates/base/vcs_settings.mako:37
9242 msgid "Click to unlock. You must restart RhodeCode in order to make this setting take effect."
9392 msgid "Click to unlock. You must restart RhodeCode in order to make this setting take effect."
9243 msgstr ""
9393 msgstr ""
9244
9394
9245 #: rhodecode/templates/base/vcs_settings.mako:41
9395 #: rhodecode/templates/base/vcs_settings.mako:41
9246 msgid "Repository location change is disabled. You can enable this by changing the `allow_repo_location_change` inside .ini file."
9396 msgid "Repository location change is disabled. You can enable this by changing the `allow_repo_location_change` inside .ini file."
9247 msgstr ""
9397 msgstr ""
9248
9398
9249 #: rhodecode/templates/base/vcs_settings.mako:48
9399 #: rhodecode/templates/base/vcs_settings.mako:48
9250 msgid "Filesystem location where repositories should be stored. After changing this value a restart and rescan of the repository folder are required."
9400 msgid "Filesystem location where repositories should be stored. After changing this value a restart and rescan of the repository folder are required."
9251 msgstr ""
9401 msgstr ""
9252
9402
9253 #: rhodecode/templates/base/vcs_settings.mako:57
9403 #: rhodecode/templates/base/vcs_settings.mako:57
9254 msgid "Internal Hooks"
9404 msgid "Internal Hooks"
9255 msgstr ""
9405 msgstr ""
9256
9406
9257 #: rhodecode/templates/base/vcs_settings.mako:63
9407 #: rhodecode/templates/base/vcs_settings.mako:63
9258 msgid "Show repository size after push"
9408 msgid "Show repository size after push"
9259 msgstr ""
9409 msgstr ""
9260
9410
9261 #: rhodecode/templates/base/vcs_settings.mako:67
9411 #: rhodecode/templates/base/vcs_settings.mako:67
9262 msgid "Trigger a hook that calculates repository size after each push."
9412 msgid "Trigger a hook that calculates repository size after each push."
9263 msgstr ""
9413 msgstr ""
9264
9414
9265 #: rhodecode/templates/base/vcs_settings.mako:71
9415 #: rhodecode/templates/base/vcs_settings.mako:71
9266 msgid "Execute pre/post push hooks"
9416 msgid "Execute pre/post push hooks"
9267 msgstr ""
9417 msgstr ""
9268
9418
9269 #: rhodecode/templates/base/vcs_settings.mako:74
9419 #: rhodecode/templates/base/vcs_settings.mako:74
9270 msgid "Execute Built in pre/post push hooks. This also executes rcextensions hooks."
9420 msgid "Execute Built in pre/post push hooks. This also executes rcextensions hooks."
9271 msgstr ""
9421 msgstr ""
9272
9422
9273 #: rhodecode/templates/base/vcs_settings.mako:78
9423 #: rhodecode/templates/base/vcs_settings.mako:78
9274 msgid "Execute pre/post pull hooks"
9424 msgid "Execute pre/post pull hooks"
9275 msgstr ""
9425 msgstr ""
9276
9426
9277 #: rhodecode/templates/base/vcs_settings.mako:81
9427 #: rhodecode/templates/base/vcs_settings.mako:81
9278 msgid "Execute Built in pre/post pull hooks. This also executes rcextensions hooks."
9428 msgid "Execute Built in pre/post pull hooks. This also executes rcextensions hooks."
9279 msgstr ""
9429 msgstr ""
9280
9430
9281 #: rhodecode/templates/base/vcs_settings.mako:91
9431 #: rhodecode/templates/base/vcs_settings.mako:91
9282 msgid "Mercurial Settings"
9432 msgid "Mercurial Settings"
9283 msgstr ""
9433 msgstr ""
9284
9434
9285 #: rhodecode/templates/base/vcs_settings.mako:96
9435 #: rhodecode/templates/base/vcs_settings.mako:96
9286 msgid "Enable largefiles extension"
9436 msgid "Enable largefiles extension"
9287 msgstr ""
9437 msgstr ""
9288
9438
9289 #: rhodecode/templates/base/vcs_settings.mako:100
9439 #: rhodecode/templates/base/vcs_settings.mako:100
9290 msgid "Enable Largefiles extensions for all repositories."
9440 msgid "Enable Largefiles extensions for all repositories."
9291 msgstr ""
9441 msgstr ""
9292
9442
9293 #: rhodecode/templates/base/vcs_settings.mako:102
9443 #: rhodecode/templates/base/vcs_settings.mako:102
9294 msgid "Enable Largefiles extensions for this repository."
9444 msgid "Enable Largefiles extensions for this repository."
9295 msgstr ""
9445 msgstr ""
9296
9446
9297 #: rhodecode/templates/base/vcs_settings.mako:113
9447 #: rhodecode/templates/base/vcs_settings.mako:113
9298 msgid "Filesystem location where Mercurial largefile objects should be stored."
9448 msgid "Filesystem location where Mercurial largefile objects should be stored."
9299 msgstr ""
9449 msgstr ""
9300
9450
9301 #: rhodecode/templates/base/vcs_settings.mako:119
9451 #: rhodecode/templates/base/vcs_settings.mako:119
9302 msgid "Set repositories as publishing"
9452 msgid "Set repositories as publishing"
9303 msgstr ""
9453 msgstr ""
9304
9454
9305 #: rhodecode/templates/base/vcs_settings.mako:119
9455 #: rhodecode/templates/base/vcs_settings.mako:119
9306 msgid "Set repository as publishing"
9456 msgid "Set repository as publishing"
9307 msgstr ""
9457 msgstr ""
9308
9458
9309 #: rhodecode/templates/base/vcs_settings.mako:122
9459 #: rhodecode/templates/base/vcs_settings.mako:122
9310 msgid "When this is enabled all commits in the repository are seen as public commits by clients."
9460 msgid "When this is enabled all commits in the repository are seen as public commits by clients."
9311 msgstr ""
9461 msgstr ""
9312
9462
9313 #: rhodecode/templates/base/vcs_settings.mako:127
9463 #: rhodecode/templates/base/vcs_settings.mako:127
9314 msgid "Enable hgsubversion extension"
9464 msgid "Enable hgsubversion extension"
9315 msgstr ""
9465 msgstr ""
9316
9466
9317 #: rhodecode/templates/base/vcs_settings.mako:130
9467 #: rhodecode/templates/base/vcs_settings.mako:130
9318 msgid "Requires hgsubversion library to be installed. Allows cloning remote SVN repositories and migrates them to Mercurial type."
9468 msgid "Requires hgsubversion library to be installed. Allows cloning remote SVN repositories and migrates them to Mercurial type."
9319 msgstr ""
9469 msgstr ""
9320
9470
9321 #: rhodecode/templates/base/vcs_settings.mako:136
9471 #: rhodecode/templates/base/vcs_settings.mako:136
9322 msgid "Enable Evolve and Topic extension"
9472 msgid "Enable Evolve and Topic extension"
9323 msgstr ""
9473 msgstr ""
9324
9474
9325 #: rhodecode/templates/base/vcs_settings.mako:140
9475 #: rhodecode/templates/base/vcs_settings.mako:140
9326 msgid "Enable Evolve and Topic extensions for all repositories."
9476 msgid "Enable Evolve and Topic extensions for all repositories."
9327 msgstr ""
9477 msgstr ""
9328
9478
9329 #: rhodecode/templates/base/vcs_settings.mako:142
9479 #: rhodecode/templates/base/vcs_settings.mako:142
9330 msgid "Enable Evolve and Topic extensions for this repository."
9480 msgid "Enable Evolve and Topic extensions for this repository."
9331 msgstr ""
9481 msgstr ""
9332
9482
9333 #: rhodecode/templates/base/vcs_settings.mako:153
9483 #: rhodecode/templates/base/vcs_settings.mako:153
9334 msgid "Git Settings"
9484 msgid "Git Settings"
9335 msgstr ""
9485 msgstr ""
9336
9486
9337 #: rhodecode/templates/base/vcs_settings.mako:158
9487 #: rhodecode/templates/base/vcs_settings.mako:158
9338 msgid "Enable lfs extension"
9488 msgid "Enable lfs extension"
9339 msgstr ""
9489 msgstr ""
9340
9490
9341 #: rhodecode/templates/base/vcs_settings.mako:162
9491 #: rhodecode/templates/base/vcs_settings.mako:162
9342 msgid "Enable lfs extensions for all repositories."
9492 msgid "Enable lfs extensions for all repositories."
9343 msgstr ""
9493 msgstr ""
9344
9494
9345 #: rhodecode/templates/base/vcs_settings.mako:164
9495 #: rhodecode/templates/base/vcs_settings.mako:164
9346 msgid "Enable lfs extensions for this repository."
9496 msgid "Enable lfs extensions for this repository."
9347 msgstr ""
9497 msgstr ""
9348
9498
9349 #: rhodecode/templates/base/vcs_settings.mako:175
9499 #: rhodecode/templates/base/vcs_settings.mako:175
9350 msgid "Filesystem location where Git lfs objects should be stored."
9500 msgid "Filesystem location where Git lfs objects should be stored."
9351 msgstr ""
9501 msgstr ""
9352
9502
9353 #: rhodecode/templates/base/vcs_settings.mako:186
9503 #: rhodecode/templates/base/vcs_settings.mako:186
9354 msgid "Global Subversion Settings"
9504 msgid "Global Subversion Settings"
9355 msgstr ""
9505 msgstr ""
9356
9506
9357 #: rhodecode/templates/base/vcs_settings.mako:192
9507 #: rhodecode/templates/base/vcs_settings.mako:192
9358 msgid "Proxy subversion HTTP requests"
9508 msgid "Proxy subversion HTTP requests"
9359 msgstr ""
9509 msgstr ""
9360
9510
9361 #: rhodecode/templates/base/vcs_settings.mako:196
9511 #: rhodecode/templates/base/vcs_settings.mako:196
9362 msgid "Subversion HTTP Support. Enables communication with SVN over HTTP protocol."
9512 msgid "Subversion HTTP Support. Enables communication with SVN over HTTP protocol."
9363 msgstr ""
9513 msgstr ""
9364
9514
9365 #: rhodecode/templates/base/vcs_settings.mako:197
9515 #: rhodecode/templates/base/vcs_settings.mako:197
9366 msgid "SVN Protocol setup Documentation"
9516 msgid "SVN Protocol setup Documentation"
9367 msgstr ""
9517 msgstr ""
9368
9518
9369 #: rhodecode/templates/base/vcs_settings.mako:203
9519 #: rhodecode/templates/base/vcs_settings.mako:203
9370 msgid "Subversion HTTP Server URL"
9520 msgid "Subversion HTTP Server URL"
9371 msgstr ""
9521 msgstr ""
9372
9522
9373 #: rhodecode/templates/base/vcs_settings.mako:209
9523 #: rhodecode/templates/base/vcs_settings.mako:209
9374 msgid "Generate Apache Config"
9524 msgid "Generate Apache Config"
9375 msgstr ""
9525 msgstr ""
9376
9526
9377 #: rhodecode/templates/base/vcs_settings.mako:221
9527 #: rhodecode/templates/base/vcs_settings.mako:221
9378 msgid "Subversion Settings"
9528 msgid "Subversion Settings"
9379 msgstr ""
9529 msgstr ""
9380
9530
9381 #: rhodecode/templates/base/vcs_settings.mako:226
9531 #: rhodecode/templates/base/vcs_settings.mako:226
9382 msgid "Repository patterns"
9532 msgid "Repository patterns"
9383 msgstr ""
9533 msgstr ""
9384
9534
9385 #: rhodecode/templates/base/vcs_settings.mako:230
9535 #: rhodecode/templates/base/vcs_settings.mako:230
9386 msgid "Patterns for identifying SVN branches and tags. For recursive search, use \"*\". Eg.: \"/branches/*\""
9536 msgid "Patterns for identifying SVN branches and tags. For recursive search, use \"*\". Eg.: \"/branches/*\""
9387 msgstr ""
9537 msgstr ""
9388
9538
9389 #: rhodecode/templates/base/vcs_settings.mako:294
9539 #: rhodecode/templates/base/vcs_settings.mako:294
9390 msgid "Pull Request Settings"
9540 msgid "Pull Request Settings"
9391 msgstr ""
9541 msgstr ""
9392
9542
9393 #: rhodecode/templates/base/vcs_settings.mako:299
9543 #: rhodecode/templates/base/vcs_settings.mako:299
9394 msgid "Enable server-side merge for pull requests"
9544 msgid "Enable server-side merge for pull requests"
9395 msgstr ""
9545 msgstr ""
9396
9546
9397 #: rhodecode/templates/base/vcs_settings.mako:302
9547 #: rhodecode/templates/base/vcs_settings.mako:302
9398 msgid "Note: when this feature is enabled, it only runs hooks defined in the rcextension package. Custom hooks added on the Admin -> Settings -> Hooks page will not be run when pull requests are automatically merged from the web interface."
9548 msgid "Note: when this feature is enabled, it only runs hooks defined in the rcextension package. Custom hooks added on the Admin -> Settings -> Hooks page will not be run when pull requests are automatically merged from the web interface."
9399 msgstr ""
9549 msgstr ""
9400
9550
9401 #: rhodecode/templates/base/vcs_settings.mako:306
9551 #: rhodecode/templates/base/vcs_settings.mako:306
9402 msgid "Invalidate and relocate inline comments during update"
9552 msgid "Invalidate and relocate inline comments during update"
9403 msgstr ""
9553 msgstr ""
9404
9554
9405 #: rhodecode/templates/base/vcs_settings.mako:309
9555 #: rhodecode/templates/base/vcs_settings.mako:309
9406 msgid "During the update of a pull request, the position of inline comments will be updated and outdated inline comments will be hidden."
9556 msgid "During the update of a pull request, the position of inline comments will be updated and outdated inline comments will be hidden."
9407 msgstr ""
9557 msgstr ""
9408
9558
9409 #: rhodecode/templates/base/vcs_settings.mako:318
9559 #: rhodecode/templates/base/vcs_settings.mako:318
9410 msgid "Diff cache"
9560 msgid "Diff cache"
9411 msgstr ""
9561 msgstr ""
9412
9562
9413 #: rhodecode/templates/base/vcs_settings.mako:323
9563 #: rhodecode/templates/base/vcs_settings.mako:323
9414 msgid "Enable caching diffs for pull requests cache and commits"
9564 msgid "Enable caching diffs for pull requests cache and commits"
9415 msgstr ""
9565 msgstr ""
9416
9566
9417 #: rhodecode/templates/base/vcs_settings.mako:332
9567 #: rhodecode/templates/base/vcs_settings.mako:332
9418 msgid "Mercurial Pull Request Settings"
9568 msgid "Mercurial Pull Request Settings"
9419 msgstr ""
9569 msgstr ""
9420
9570
9421 #: rhodecode/templates/base/vcs_settings.mako:338
9571 #: rhodecode/templates/base/vcs_settings.mako:338
9422 msgid "Use rebase as merge strategy"
9572 msgid "Use rebase as merge strategy"
9423 msgstr ""
9573 msgstr ""
9424
9574
9425 #: rhodecode/templates/base/vcs_settings.mako:341
9575 #: rhodecode/templates/base/vcs_settings.mako:341
9426 msgid "Use rebase instead of creating a merge commit when merging via web interface."
9576 msgid "Use rebase instead of creating a merge commit when merging via web interface."
9427 msgstr ""
9577 msgstr ""
9428
9578
9429 #: rhodecode/templates/base/vcs_settings.mako:346
9579 #: rhodecode/templates/base/vcs_settings.mako:346
9430 msgid "Close branch before merging it"
9580 msgid "Close branch before merging it"
9431 msgstr ""
9581 msgstr ""
9432
9582
9433 #: rhodecode/templates/base/vcs_settings.mako:349
9583 #: rhodecode/templates/base/vcs_settings.mako:349
9434 msgid "Close branch before merging it into destination branch. No effect when rebase strategy is use."
9584 msgid "Close branch before merging it into destination branch. No effect when rebase strategy is use."
9435 msgstr ""
9585 msgstr ""
9436
9586
9437 #: rhodecode/templates/bookmarks/bookmarks.mako:5
9587 #: rhodecode/templates/bookmarks/bookmarks.mako:5
9438 #, python-format
9588 #, python-format
9439 msgid "%s Bookmarks"
9589 msgid "%s Bookmarks"
9440 msgstr ""
9590 msgstr ""
9441
9591
9442 #: rhodecode/templates/bookmarks/bookmarks.mako:28
9592 #: rhodecode/templates/bookmarks/bookmarks.mako:28
9443 msgid "Compare Selected Bookmarks"
9593 msgid "Compare Selected Bookmarks"
9444 msgstr ""
9594 msgstr ""
9445
9595
9446 #: rhodecode/templates/bookmarks/bookmarks.mako:34
9596 #: rhodecode/templates/bookmarks/bookmarks.mako:34
9447 msgid "bookmarks"
9597 msgid "bookmarks"
9448 msgstr ""
9598 msgstr ""
9449
9599
9450 #: rhodecode/templates/branches/branches.mako:5
9600 #: rhodecode/templates/branches/branches.mako:5
9451 #, python-format
9601 #, python-format
9452 msgid "%s Branches"
9602 msgid "%s Branches"
9453 msgstr ""
9603 msgstr ""
9454
9604
9455 #: rhodecode/templates/branches/branches.mako:28
9605 #: rhodecode/templates/branches/branches.mako:28
9456 msgid "Compare Selected Branches"
9606 msgid "Compare Selected Branches"
9457 msgstr ""
9607 msgstr ""
9458
9608
9459 #: rhodecode/templates/branches/branches.mako:34
9609 #: rhodecode/templates/branches/branches.mako:34
9460 msgid "branches"
9610 msgid "branches"
9461 msgstr ""
9611 msgstr ""
9462
9612
9463 #: rhodecode/templates/changeset/changeset.mako:9
9613 #: rhodecode/templates/changeset/changeset.mako:9
9464 msgid "{} Commit"
9614 msgid "{} Commit"
9465 msgstr ""
9615 msgstr ""
9466
9616
9467 #: rhodecode/templates/changeset/changeset.mako:78
9617 #: rhodecode/templates/changeset/changeset.mako:78
9468 #: rhodecode/templates/commits/changelog_elements.mako:56
9618 #: rhodecode/templates/commits/changelog_elements.mako:56
9469 #: rhodecode/templates/files/files_source_header.mako:48
9619 #: rhodecode/templates/files/files_source_header.mako:48
9470 #: rhodecode/templates/files/files_tree_header.mako:35
9620 #: rhodecode/templates/files/files_tree_header.mako:35
9471 #: rhodecode/templates/summary/summary_commits.mako:43
9621 #: rhodecode/templates/summary/summary_commits.mako:43
9472 msgid "Copy the full commit id"
9622 msgid "Copy the full commit id"
9473 msgstr ""
9623 msgstr ""
9474
9624
9475 #: rhodecode/templates/changeset/changeset.mako:83
9625 #: rhodecode/templates/changeset/changeset.mako:83
9476 msgid "Commit phase"
9626 msgid "Commit phase"
9477 msgstr ""
9627 msgstr ""
9478
9628
9479 #: rhodecode/templates/changeset/changeset.mako:90
9629 #: rhodecode/templates/changeset/changeset.mako:90
9480 #: rhodecode/templates/changeset/changeset.mako:97
9630 #: rhodecode/templates/changeset/changeset.mako:97
9481 msgid "Evolve State"
9631 msgid "Evolve State"
9482 msgstr ""
9632 msgstr ""
9483
9633
9484 #: rhodecode/templates/changeset/changeset.mako:91
9634 #: rhodecode/templates/changeset/changeset.mako:91
9485 msgid "obsolete"
9635 msgid "obsolete"
9486 msgstr ""
9636 msgstr ""
9487
9637
9488 #: rhodecode/templates/changeset/changeset.mako:98
9638 #: rhodecode/templates/changeset/changeset.mako:98
9489 msgid "hidden"
9639 msgid "hidden"
9490 msgstr ""
9640 msgstr ""
9491
9641
9492 #: rhodecode/templates/changeset/changeset.mako:117
9642 #: rhodecode/templates/changeset/changeset.mako:117
9493 msgid "Commit navigation"
9643 msgid "Commit navigation"
9494 msgstr ""
9644 msgstr ""
9495
9645
9496 #: rhodecode/templates/changeset/changeset.mako:120
9646 #: rhodecode/templates/changeset/changeset.mako:120
9497 msgid "Parent Commit"
9647 msgid "Parent Commit"
9498 msgstr ""
9648 msgstr ""
9499
9649
9500 #: rhodecode/templates/changeset/changeset.mako:120
9650 #: rhodecode/templates/changeset/changeset.mako:120
9501 msgid "parent"
9651 msgid "parent"
9502 msgstr ""
9652 msgstr ""
9503
9653
9504 #: rhodecode/templates/changeset/changeset.mako:124
9654 #: rhodecode/templates/changeset/changeset.mako:124
9505 msgid "Child Commit"
9655 msgid "Child Commit"
9506 msgstr ""
9656 msgstr ""
9507
9657
9508 #: rhodecode/templates/changeset/changeset.mako:124
9658 #: rhodecode/templates/changeset/changeset.mako:124
9509 msgid "child"
9659 msgid "child"
9510 msgstr ""
9660 msgstr ""
9511
9661
9512 #: rhodecode/templates/changeset/changeset.mako:132
9662 #: rhodecode/templates/changeset/changeset.mako:132
9513 msgid "Diff options"
9663 msgid "Diff options"
9514 msgstr ""
9664 msgstr ""
9515
9665
9516 #: rhodecode/templates/changeset/changeset.mako:136
9666 #: rhodecode/templates/changeset/changeset.mako:136
9517 msgid "Raw Diff"
9667 msgid "Raw Diff"
9518 msgstr ""
9668 msgstr ""
9519
9669
9520 #: rhodecode/templates/changeset/changeset.mako:140
9670 #: rhodecode/templates/changeset/changeset.mako:140
9521 msgid "Patch Diff"
9671 msgid "Patch Diff"
9522 msgstr ""
9672 msgstr ""
9523
9673
9524 #: rhodecode/templates/changeset/changeset.mako:144
9674 #: rhodecode/templates/changeset/changeset.mako:144
9525 msgid "Download Diff"
9675 msgid "Download Diff"
9526 msgstr ""
9676 msgstr ""
9527
9677
9528 #: rhodecode/templates/changeset/changeset.mako:224
9678 #: rhodecode/templates/changeset/changeset.mako:224
9529 msgid "No Child Commits"
9679 msgid "No Child Commits"
9530 msgstr ""
9680 msgstr ""
9531
9681
9532 #: rhodecode/templates/changeset/changeset.mako:263
9682 #: rhodecode/templates/changeset/changeset.mako:263
9533 msgid "No Parent Commits"
9683 msgid "No Parent Commits"
9534 msgstr ""
9684 msgstr ""
9535
9685
9536 #: rhodecode/templates/changeset/changeset_file_comment.mako:33
9686 #: rhodecode/templates/changeset/changeset_file_comment.mako:41
9537 #: rhodecode/templates/pullrequests/pullrequest_show.mako:401
9687 #: rhodecode/templates/pullrequests/pullrequest_show.mako:401
9538 msgid "Resolved by comment #{}"
9688 msgid "Resolved by comment #{}"
9539 msgstr ""
9689 msgstr ""
9540
9690
9541 #: rhodecode/templates/changeset/changeset_file_comment.mako:40
9691 #: rhodecode/templates/changeset/changeset_file_comment.mako:49
9542 msgid "Click to resolve this comment"
9692 msgid "Click to create resolution comment."
9543 msgstr ""
9693 msgstr ""
9544
9694
9545 #: rhodecode/templates/changeset/changeset_file_comment.mako:70
9695 #: rhodecode/templates/changeset/changeset_file_comment.mako:58
9546 #: rhodecode/templates/changeset/changeset_file_comment.mako:72
9696 msgid "This comment resolves TODO #{}"
9547 msgid "pull request !{}"
9697 msgstr ""
9548 msgstr ""
9698
9549
9699 #: rhodecode/templates/changeset/changeset_file_comment.mako:90
9550 #: rhodecode/templates/changeset/changeset_file_comment.mako:77
9700 msgid "Status from pull request."
9551 msgid "Status change on commit"
9552 msgstr ""
9553
9554 #: rhodecode/templates/changeset/changeset_file_comment.mako:85
9555 #: rhodecode/templates/compare/compare_diff.mako:139
9556 #: rhodecode/templates/email_templates/commit_comment.mako:53
9557 msgid "Commit status"
9558 msgstr ""
9559
9560 #: rhodecode/templates/changeset/changeset_file_comment.mako:94
9561 msgid "Pull request author"
9562 msgstr ""
9563
9564 #: rhodecode/templates/changeset/changeset_file_comment.mako:95
9565 msgid "author"
9566 msgstr ""
9567
9568 #: rhodecode/templates/changeset/changeset_file_comment.mako:103
9569 #: rhodecode/templates/changeset/changeset_file_comment.mako:119
9570 msgid "Outdated comment from pull request version v{0}, latest v{1}"
9571 msgstr ""
9701 msgstr ""
9572
9702
9573 #: rhodecode/templates/changeset/changeset_file_comment.mako:107
9703 #: rhodecode/templates/changeset/changeset_file_comment.mako:107
9574 #: rhodecode/templates/changeset/changeset_file_comment.mako:122
9704 msgid "Pull request author"
9705 msgstr ""
9706
9707 #: rhodecode/templates/changeset/changeset_file_comment.mako:108
9708 msgid "author"
9709 msgstr ""
9710
9711 #: rhodecode/templates/changeset/changeset_file_comment.mako:163
9712 #: rhodecode/templates/changeset/changeset_file_comment.mako:179
9713 msgid "Outdated comment from pull request version v{0}, latest v{1}"
9714 msgstr ""
9715
9716 #: rhodecode/templates/changeset/changeset_file_comment.mako:167
9717 #: rhodecode/templates/changeset/changeset_file_comment.mako:183
9575 msgid "Comment from pull request version v{0}, latest v{1}"
9718 msgid "Comment from pull request version v{0}, latest v{1}"
9576 msgstr ""
9719 msgstr ""
9577
9720
9578 #: rhodecode/templates/changeset/changeset_file_comment.mako:149
9721 #: rhodecode/templates/changeset/changeset_file_comment.mako:205
9579 #: rhodecode/templates/changeset/changeset_file_comment.mako:152
9722 #: rhodecode/templates/changeset/changeset_file_comment.mako:206
9580 msgid "Prev"
9723 #: rhodecode/templates/changeset/changeset_file_comment.mako:209
9581 msgstr ""
9724 #: rhodecode/templates/changeset/changeset_file_comment.mako:210
9582
9725 msgid "Action unavailable"
9583 #: rhodecode/templates/changeset/changeset_file_comment.mako:150
9726 msgstr ""
9584 #: rhodecode/templates/changeset/changeset_file_comment.mako:153
9727
9585 msgid "Next"
9728 #: rhodecode/templates/changeset/changeset_file_comment.mako:214
9586 msgstr ""
9729 msgid "Jump to the previous outdated comment"
9587
9730 msgstr ""
9588 #: rhodecode/templates/changeset/changeset_file_comment.mako:192
9731
9732 #: rhodecode/templates/changeset/changeset_file_comment.mako:215
9733 msgid "Jump to the next outdated comment"
9734 msgstr ""
9735
9736 #: rhodecode/templates/changeset/changeset_file_comment.mako:217
9737 msgid "Jump to the previous comment"
9738 msgstr ""
9739
9740 #: rhodecode/templates/changeset/changeset_file_comment.mako:218
9741 msgid "Jump to the next comment"
9742 msgstr ""
9743
9744 #: rhodecode/templates/changeset/changeset_file_comment.mako:257
9589 msgid "Leave a comment on this Pull Request."
9745 msgid "Leave a comment on this Pull Request."
9590 msgstr ""
9746 msgstr ""
9591
9747
9592 #: rhodecode/templates/changeset/changeset_file_comment.mako:194
9748 #: rhodecode/templates/changeset/changeset_file_comment.mako:259
9593 msgid "Leave a comment on {} commits in this range."
9749 msgid "Leave a comment on {} commits in this range."
9594 msgstr ""
9750 msgstr ""
9595
9751
9596 #: rhodecode/templates/changeset/changeset_file_comment.mako:196
9752 #: rhodecode/templates/changeset/changeset_file_comment.mako:261
9597 msgid "Leave a comment on this Commit."
9753 msgid "Leave a comment on this Commit."
9598 msgstr ""
9754 msgstr ""
9599
9755
9600 #: rhodecode/templates/changeset/changeset_file_comment.mako:283
9756 #: rhodecode/templates/changeset/changeset_file_comment.mako:348
9601 #: rhodecode/templates/codeblocks/diffs.mako:83
9757 #: rhodecode/templates/codeblocks/diffs.mako:83
9602 msgid "You need to be logged in to leave comments."
9758 msgid "You need to be logged in to leave comments."
9603 msgstr ""
9759 msgstr ""
9604
9760
9605 #: rhodecode/templates/changeset/changeset_file_comment.mako:284
9761 #: rhodecode/templates/changeset/changeset_file_comment.mako:349
9606 #: rhodecode/templates/codeblocks/diffs.mako:83
9762 #: rhodecode/templates/codeblocks/diffs.mako:83
9607 msgid "Login now"
9763 msgid "Login now"
9608 msgstr ""
9764 msgstr ""
9609
9765
9610 #: rhodecode/templates/changeset/changeset_file_comment.mako:331
9766 #: rhodecode/templates/changeset/changeset_file_comment.mako:396
9611 msgid "Mark as"
9767 msgid "Mark as"
9612 msgstr ""
9768 msgstr ""
9613
9769
9614 #: rhodecode/templates/changeset/changeset_file_comment.mako:354
9770 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9615 #: rhodecode/templates/files/files_upload.mako:86
9771 #: rhodecode/templates/files/files_upload.mako:86
9616 msgid "Drag'n Drop files here or"
9772 msgid "Drag'n Drop files here or"
9617 msgstr ""
9773 msgstr ""
9618
9774
9619 #: rhodecode/templates/changeset/changeset_file_comment.mako:354
9775 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9620 #: rhodecode/templates/files/files_upload.mako:86
9776 #: rhodecode/templates/files/files_upload.mako:86
9621 msgid "Choose your files"
9777 msgid "Choose your files"
9622 msgstr ""
9778 msgstr ""
9623
9779
9624 #: rhodecode/templates/changeset/changeset_file_comment.mako:357
9780 #: rhodecode/templates/changeset/changeset_file_comment.mako:422
9625 msgid "uploading..."
9781 msgid "uploading..."
9626 msgstr ""
9782 msgstr ""
9627
9783
9628 #: rhodecode/templates/changeset/changeset_file_comment.mako:388
9784 #: rhodecode/templates/changeset/changeset_file_comment.mako:453
9629 #: rhodecode/templates/compare/compare_diff.mako:108
9785 #: rhodecode/templates/compare/compare_diff.mako:108
9630 #: rhodecode/templates/compare/compare_diff.mako:116
9786 #: rhodecode/templates/compare/compare_diff.mako:116
9631 #: rhodecode/templates/compare/compare_diff.mako:124
9787 #: rhodecode/templates/compare/compare_diff.mako:124
9632 #: rhodecode/templates/compare/compare_diff.mako:126
9788 #: rhodecode/templates/compare/compare_diff.mako:126
9633 msgid "Comment"
9789 msgid "Comment"
9634 msgstr ""
9790 msgstr ""
9635
9791
9636 #: rhodecode/templates/changeset/changeset_file_comment.mako:407
9792 #: rhodecode/templates/changeset/changeset_file_comment.mako:472
9637 #: rhodecode/templates/pullrequests/pullrequest_show.mako:39
9793 #: rhodecode/templates/pullrequests/pullrequest_show.mako:39
9638 #: rhodecode/templates/pullrequests/pullrequest_show.mako:103
9794 #: rhodecode/templates/pullrequests/pullrequest_show.mako:103
9639 #: rhodecode/templates/pullrequests/pullrequests.mako:31
9795 #: rhodecode/templates/pullrequests/pullrequests.mako:31
9640 msgid "Closed"
9796 msgid "Closed"
9641 msgstr ""
9797 msgstr ""
9642
9798
9643 #: rhodecode/templates/changeset/changeset_file_comment.mako:416
9799 #: rhodecode/templates/changeset/changeset_file_comment.mako:481
9644 msgid "Comments parsed using {} syntax."
9800 msgid "Comments parsed using {} syntax."
9645 msgstr ""
9801 msgstr ""
9646
9802
9647 #: rhodecode/templates/changeset/changeset_file_comment.mako:417
9803 #: rhodecode/templates/changeset/changeset_file_comment.mako:482
9648 msgid "Use @username inside this text to send notification to this RhodeCode user"
9804 msgid "Use @username inside this text to send notification to this RhodeCode user"
9649 msgstr ""
9805 msgstr ""
9650
9806
9651 #: rhodecode/templates/changeset/changeset_file_comment.mako:418
9807 #: rhodecode/templates/changeset/changeset_file_comment.mako:483
9652 msgid "and"
9808 msgid "and"
9653 msgstr ""
9809 msgstr ""
9654
9810
9655 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9811 #: rhodecode/templates/changeset/changeset_file_comment.mako:484
9656 msgid "Start typing with / for certain actions to be triggered via text box."
9812 msgid "Start typing with / for certain actions to be triggered via text box."
9657 msgstr ""
9813 msgstr ""
9658
9814
9659 #: rhodecode/templates/changeset/changeset_file_comment.mako:420
9815 #: rhodecode/templates/changeset/changeset_file_comment.mako:485
9660 msgid "actions supported."
9816 msgid "actions supported."
9661 msgstr ""
9817 msgstr ""
9662
9818
9663 #: rhodecode/templates/changeset/changeset_range.mako:5
9819 #: rhodecode/templates/changeset/changeset_range.mako:5
9664 #, python-format
9820 #, python-format
9665 msgid "%s Commits"
9821 msgid "%s Commits"
9666 msgstr ""
9822 msgstr ""
9667
9823
9668 #: rhodecode/templates/changeset/changeset_range.mako:33
9824 #: rhodecode/templates/changeset/changeset_range.mako:33
9669 msgid "Commit Range"
9825 msgid "Commit Range"
9670 msgstr ""
9826 msgstr ""
9671
9827
9672 #: rhodecode/templates/changeset/changeset_range.mako:42
9828 #: rhodecode/templates/changeset/changeset_range.mako:42
9673 msgid "Range"
9829 msgid "Range"
9674 msgstr ""
9830 msgstr ""
9675
9831
9676 #: rhodecode/templates/changeset/changeset_range.mako:60
9832 #: rhodecode/templates/changeset/changeset_range.mako:60
9677 msgid "Diff Option"
9833 msgid "Diff Option"
9678 msgstr ""
9834 msgstr ""
9679
9835
9680 #: rhodecode/templates/changeset/changeset_range.mako:71
9836 #: rhodecode/templates/changeset/changeset_range.mako:71
9681 msgid "Show combined diff"
9837 msgid "Show combined diff"
9682 msgstr ""
9838 msgstr ""
9683
9839
9684 #: rhodecode/templates/changeset/diff_block.mako:7
9840 #: rhodecode/templates/changeset/diff_block.mako:7
9685 msgid "The requested commit is too big and content was truncated."
9841 msgid "The requested commit is too big and content was truncated."
9686 msgstr ""
9842 msgstr ""
9687
9843
9688 #: rhodecode/templates/changeset/diff_block.mako:7
9844 #: rhodecode/templates/changeset/diff_block.mako:7
9689 #: rhodecode/templates/changeset/diff_block.mako:10
9845 #: rhodecode/templates/changeset/diff_block.mako:10
9690 #: rhodecode/templates/changeset/diff_block.mako:25
9846 #: rhodecode/templates/changeset/diff_block.mako:25
9691 #: rhodecode/templates/changeset/diff_block.mako:46
9847 #: rhodecode/templates/changeset/diff_block.mako:46
9692 #: rhodecode/templates/codeblocks/diffs.mako:208
9848 #: rhodecode/templates/codeblocks/diffs.mako:208
9693 #: rhodecode/templates/codeblocks/diffs.mako:272
9849 #: rhodecode/templates/codeblocks/diffs.mako:283
9694 msgid "Showing a big diff might take some time and resources, continue?"
9850 msgid "Showing a big diff might take some time and resources, continue?"
9695 msgstr ""
9851 msgstr ""
9696
9852
9697 #: rhodecode/templates/changeset/diff_block.mako:7
9853 #: rhodecode/templates/changeset/diff_block.mako:7
9698 #: rhodecode/templates/changeset/diff_block.mako:10
9854 #: rhodecode/templates/changeset/diff_block.mako:10
9699 #: rhodecode/templates/changeset/diff_block.mako:25
9855 #: rhodecode/templates/changeset/diff_block.mako:25
9700 #: rhodecode/templates/changeset/diff_block.mako:46
9856 #: rhodecode/templates/changeset/diff_block.mako:46
9701 #: rhodecode/templates/codeblocks/diffs.mako:208
9857 #: rhodecode/templates/codeblocks/diffs.mako:208
9702 #: rhodecode/templates/codeblocks/diffs.mako:272
9858 #: rhodecode/templates/codeblocks/diffs.mako:283
9703 msgid "Show full diff"
9859 msgid "Show full diff"
9704 msgstr ""
9860 msgstr ""
9705
9861
9706 #: rhodecode/templates/changeset/diff_block.mako:10
9862 #: rhodecode/templates/changeset/diff_block.mako:10
9707 msgid "The requested file is too big and its content is not shown."
9863 msgid "The requested file is too big and its content is not shown."
9708 msgstr ""
9864 msgstr ""
9709
9865
9710 #: rhodecode/templates/changeset/diff_block.mako:25
9866 #: rhodecode/templates/changeset/diff_block.mako:25
9711 #: rhodecode/templates/changeset/diff_block.mako:46
9867 #: rhodecode/templates/changeset/diff_block.mako:46
9712 msgid "Diff was truncated. File content available only in full diff."
9868 msgid "Diff was truncated. File content available only in full diff."
9713 msgstr ""
9869 msgstr ""
9714
9870
9715 #: rhodecode/templates/codeblocks/diffs.mako:141
9871 #: rhodecode/templates/codeblocks/diffs.mako:141
9716 msgid "not available in this view"
9872 msgid "not available in this view"
9717 msgstr ""
9873 msgstr ""
9718
9874
9719 #: rhodecode/templates/codeblocks/diffs.mako:150
9875 #: rhodecode/templates/codeblocks/diffs.mako:150
9720 msgid "{} unresolved"
9876 msgid "{} unresolved"
9721 msgstr ""
9877 msgstr ""
9722
9878
9723 #: rhodecode/templates/codeblocks/diffs.mako:153
9879 #: rhodecode/templates/codeblocks/diffs.mako:153
9724 msgid "0 unresolved"
9880 msgid "0 unresolved"
9725 msgstr ""
9881 msgstr ""
9726
9882
9727 #: rhodecode/templates/codeblocks/diffs.mako:156
9883 #: rhodecode/templates/codeblocks/diffs.mako:156
9728 msgid "{} Resolved"
9884 msgid "{} Resolved"
9729 msgstr ""
9885 msgstr ""
9730
9886
9731 #: rhodecode/templates/codeblocks/diffs.mako:170
9887 #: rhodecode/templates/codeblocks/diffs.mako:170
9732 msgid "0 General"
9888 msgid "0 General"
9733 msgstr ""
9889 msgstr ""
9734
9890
9735 #: rhodecode/templates/codeblocks/diffs.mako:178
9891 #: rhodecode/templates/codeblocks/diffs.mako:178
9736 msgid "0 Inline"
9892 msgid "0 Inline"
9737 msgstr ""
9893 msgstr ""
9738
9894
9739 #: rhodecode/templates/codeblocks/diffs.mako:189
9895 #: rhodecode/templates/codeblocks/diffs.mako:189
9740 #: rhodecode/templates/codeblocks/diffs.mako:194
9896 #: rhodecode/templates/codeblocks/diffs.mako:194
9741 msgid "{} Outdated"
9897 msgid "{} Outdated"
9742 msgstr ""
9898 msgstr ""
9743
9899
9744 #: rhodecode/templates/codeblocks/diffs.mako:191
9900 #: rhodecode/templates/codeblocks/diffs.mako:191
9745 msgid "show outdated"
9901 msgid "show outdated"
9746 msgstr ""
9902 msgstr ""
9747
9903
9748 #: rhodecode/templates/codeblocks/diffs.mako:192
9904 #: rhodecode/templates/codeblocks/diffs.mako:192
9749 msgid "hide outdated"
9905 msgid "hide outdated"
9750 msgstr ""
9906 msgstr ""
9751
9907
9752 #: rhodecode/templates/codeblocks/diffs.mako:207
9908 #: rhodecode/templates/codeblocks/diffs.mako:207
9753 msgid "The requested changes are too big and content was truncated."
9909 msgid "The requested changes are too big and content was truncated."
9754 msgstr ""
9910 msgstr ""
9755
9911
9756 #: rhodecode/templates/codeblocks/diffs.mako:231
9912 #: rhodecode/templates/codeblocks/diffs.mako:231
9757 msgid "Some changes may be hidden"
9913 msgid "Some changes may be hidden"
9758 msgstr ""
9914 msgstr ""
9759
9915
9760 #: rhodecode/templates/codeblocks/diffs.mako:233
9916 #: rhodecode/templates/codeblocks/diffs.mako:233
9761 msgid "No files"
9917 msgid "No files"
9762 msgstr ""
9918 msgstr ""
9763
9919
9764 #: rhodecode/templates/codeblocks/diffs.mako:272
9920 #: rhodecode/templates/codeblocks/diffs.mako:283
9765 msgid "The requested commit or file is too big and content was truncated."
9921 msgid "The requested commit or file is too big and content was truncated."
9766 msgstr ""
9922 msgstr ""
9767
9923
9768 #: rhodecode/templates/codeblocks/diffs.mako:279
9924 #: rhodecode/templates/codeblocks/diffs.mako:290
9769 #, python-format
9925 #, python-format
9770 msgid "This diff has been collapsed as it changes many lines, (%i lines changed)"
9926 msgid "This diff has been collapsed as it changes many lines, (%i lines changed)"
9771 msgstr ""
9927 msgstr ""
9772
9928
9773 #: rhodecode/templates/codeblocks/diffs.mako:281
9929 #: rhodecode/templates/codeblocks/diffs.mako:292
9774 msgid "Show them"
9930 msgid "Show them"
9775 msgstr ""
9931 msgstr ""
9776
9932
9777 #: rhodecode/templates/codeblocks/diffs.mako:284
9933 #: rhodecode/templates/codeblocks/diffs.mako:295
9778 msgid "Hide them"
9934 msgid "Hide them"
9779 msgstr ""
9935 msgstr ""
9780
9936
9781 #: rhodecode/templates/codeblocks/diffs.mako:320
9937 #: rhodecode/templates/codeblocks/diffs.mako:332
9782 #: rhodecode/templates/codeblocks/diffs.mako:339
9938 #: rhodecode/templates/codeblocks/diffs.mako:351
9783 msgid "Unmatched/outdated inline comments below"
9939 msgid "Unmatched/outdated inline comments below"
9784 msgstr ""
9940 msgstr ""
9785
9941
9786 #: rhodecode/templates/codeblocks/diffs.mako:345
9942 #: rhodecode/templates/codeblocks/diffs.mako:357
9787 msgid "Unmatched/outdated comments below"
9943 msgid "Unmatched/outdated comments below"
9788 msgstr ""
9944 msgstr ""
9789
9945
9790 #: rhodecode/templates/codeblocks/diffs.mako:419
9946 #: rhodecode/templates/codeblocks/diffs.mako:431
9791 msgid "This file was removed from diff during updates to this pull-request."
9947 msgid "This file was removed from diff during updates to this pull-request."
9792 msgstr ""
9948 msgstr ""
9793
9949
9794 #: rhodecode/templates/codeblocks/diffs.mako:420
9950 #: rhodecode/templates/codeblocks/diffs.mako:432
9795 msgid "There are still outdated/unresolved comments attached to it."
9951 msgid "There are still outdated/unresolved comments attached to it."
9796 msgstr ""
9952 msgstr ""
9797
9953
9798 #: rhodecode/templates/codeblocks/diffs.mako:487
9954 #: rhodecode/templates/codeblocks/diffs.mako:499
9799 msgid "Copy file path"
9955 msgid "Copy file path"
9800 msgstr ""
9956 msgstr ""
9801
9957
9802 #: rhodecode/templates/codeblocks/diffs.mako:554
9958 #: rhodecode/templates/codeblocks/diffs.mako:566
9803 #: rhodecode/templates/codeblocks/diffs.mako:572
9959 #: rhodecode/templates/codeblocks/diffs.mako:584
9804 #, python-format
9960 #, python-format
9805 msgid "Show file at commit: %(commit_id)s"
9961 msgid "Show file at commit: %(commit_id)s"
9806 msgstr ""
9962 msgstr ""
9807
9963
9808 #: rhodecode/templates/codeblocks/diffs.mako:556
9964 #: rhodecode/templates/codeblocks/diffs.mako:568
9809 #: rhodecode/templates/codeblocks/diffs.mako:563
9965 #: rhodecode/templates/codeblocks/diffs.mako:575
9810 msgid "Show file before"
9966 msgid "Show file before"
9811 msgstr ""
9967 msgstr ""
9812
9968
9813 #: rhodecode/templates/codeblocks/diffs.mako:561
9969 #: rhodecode/templates/codeblocks/diffs.mako:573
9814 #: rhodecode/templates/codeblocks/diffs.mako:579
9970 #: rhodecode/templates/codeblocks/diffs.mako:591
9815 #, python-format
9971 #, python-format
9816 msgid "File not present at commit: %(commit_id)s"
9972 msgid "File not present at commit: %(commit_id)s"
9817 msgstr ""
9973 msgstr ""
9818
9974
9819 #: rhodecode/templates/codeblocks/diffs.mako:574
9975 #: rhodecode/templates/codeblocks/diffs.mako:586
9820 #: rhodecode/templates/codeblocks/diffs.mako:581
9976 #: rhodecode/templates/codeblocks/diffs.mako:593
9821 msgid "Show file after"
9977 msgid "Show file after"
9822 msgstr ""
9978 msgstr ""
9823
9979
9824 #: rhodecode/templates/codeblocks/diffs.mako:588
9980 #: rhodecode/templates/codeblocks/diffs.mako:600
9825 msgid "Show comments"
9981 msgid "Show comments"
9826 msgstr ""
9982 msgstr ""
9827
9983
9828 #: rhodecode/templates/codeblocks/diffs.mako:588
9984 #: rhodecode/templates/codeblocks/diffs.mako:600
9829 msgid "Hide comments"
9985 msgid "Hide comments"
9830 msgstr ""
9986 msgstr ""
9831
9987
9832 #: rhodecode/templates/codeblocks/diffs.mako:658
9988 #: rhodecode/templates/codeblocks/diffs.mako:691
9833 #: rhodecode/templates/codeblocks/diffs.mako:701
9989 #: rhodecode/templates/codeblocks/diffs.mako:734
9834 #: rhodecode/templates/codeblocks/diffs.mako:757
9990 #: rhodecode/templates/codeblocks/diffs.mako:796
9835 msgid "comments including outdated"
9991 msgid "comments including outdated: {}. Click here to display them."
9836 msgstr ""
9992 msgstr ""
9837
9993
9838 #: rhodecode/templates/codeblocks/diffs.mako:660
9994 #: rhodecode/templates/codeblocks/diffs.mako:693
9839 #: rhodecode/templates/codeblocks/diffs.mako:703
9995 #: rhodecode/templates/codeblocks/diffs.mako:736
9840 #: rhodecode/templates/codeblocks/diffs.mako:759
9996 #: rhodecode/templates/codeblocks/diffs.mako:798
9841 msgid "comments"
9997 msgid "comments: {}. Click to toggle them."
9842 msgstr ""
9998 msgstr ""
9843
9999
9844 #: rhodecode/templates/codeblocks/diffs.mako:828
10000 #: rhodecode/templates/codeblocks/diffs.mako:867
9845 msgid "Toggle wide diff"
10001 msgid "Toggle wide diff"
9846 msgstr ""
10002 msgstr ""
9847
10003
9848 #: rhodecode/templates/codeblocks/diffs.mako:836
10004 #: rhodecode/templates/codeblocks/diffs.mako:875
9849 msgid "View diff as side by side"
10005 msgid "View diff as side by side"
9850 msgstr ""
10006 msgstr ""
9851
10007
9852 #: rhodecode/templates/codeblocks/diffs.mako:838
10008 #: rhodecode/templates/codeblocks/diffs.mako:877
9853 msgid "Side by Side"
10009 msgid "Side by Side"
9854 msgstr ""
10010 msgstr ""
9855
10011
9856 #: rhodecode/templates/codeblocks/diffs.mako:843
10012 #: rhodecode/templates/codeblocks/diffs.mako:882
9857 msgid "View diff as unified"
10013 msgid "View diff as unified"
9858 msgstr ""
10014 msgstr ""
9859
10015
9860 #: rhodecode/templates/codeblocks/diffs.mako:844
10016 #: rhodecode/templates/codeblocks/diffs.mako:883
9861 msgid "Unified"
10017 msgid "Unified"
9862 msgstr ""
10018 msgstr ""
9863
10019
9864 #: rhodecode/templates/codeblocks/diffs.mako:849
10020 #: rhodecode/templates/codeblocks/diffs.mako:888
9865 msgid "Turn off: Show the diff as commit range"
10021 msgid "Turn off: Show the diff as commit range"
9866 msgstr ""
10022 msgstr ""
9867
10023
9868 #: rhodecode/templates/codeblocks/diffs.mako:852
10024 #: rhodecode/templates/codeblocks/diffs.mako:891
9869 #: rhodecode/templates/codeblocks/diffs.mako:859
10025 #: rhodecode/templates/codeblocks/diffs.mako:898
9870 msgid "Range Diff"
10026 msgid "Range Diff"
9871 msgstr ""
10027 msgstr ""
9872
10028
9873 #: rhodecode/templates/codeblocks/diffs.mako:856
10029 #: rhodecode/templates/codeblocks/diffs.mako:895
9874 msgid "Show the diff as commit range"
10030 msgid "Show the diff as commit range"
9875 msgstr ""
10031 msgstr ""
9876
10032
9877 #: rhodecode/templates/codeblocks/diffs.mako:900
10033 #: rhodecode/templates/codeblocks/diffs.mako:960
9878 msgid "Disabled on range diff"
10034 msgid "Disabled on range diff"
9879 msgstr ""
10035 msgstr ""
9880
10036
9881 #: rhodecode/templates/codeblocks/diffs.mako:1131
10037 #: rhodecode/templates/codeblocks/diffs.mako:1267
9882 msgid "..."
10038 msgid "..."
9883 msgstr ""
10039 msgstr ""
9884
10040
9885 #: rhodecode/templates/codeblocks/source.mako:22
10041 #: rhodecode/templates/codeblocks/source.mako:22
9886 msgid "view annotation from before this change"
10042 msgid "view annotation from before this change"
9887 msgstr ""
10043 msgstr ""
9888
10044
9889 #: rhodecode/templates/commits/changelog.mako:6
10045 #: rhodecode/templates/commits/changelog.mako:6
9890 #, python-format
10046 #, python-format
9891 msgid "%s Changelog"
10047 msgid "%s Changelog"
9892 msgstr ""
10048 msgstr ""
9893
10049
9894 #: rhodecode/templates/commits/changelog.mako:38
10050 #: rhodecode/templates/commits/changelog.mako:38
9895 msgid "Clear filter"
10051 msgid "Clear filter"
9896 msgstr ""
10052 msgstr ""
9897
10053
9898 #: rhodecode/templates/commits/changelog.mako:45
10054 #: rhodecode/templates/commits/changelog.mako:45
9899 msgid "Hide obsolete/hidden"
10055 msgid "Hide obsolete/hidden"
9900 msgstr ""
10056 msgstr ""
9901
10057
9902 #: rhodecode/templates/commits/changelog.mako:47
10058 #: rhodecode/templates/commits/changelog.mako:47
9903 msgid "Show obsolete/hidden"
10059 msgid "Show obsolete/hidden"
9904 msgstr ""
10060 msgstr ""
9905
10061
9906 #: rhodecode/templates/commits/changelog.mako:50
10062 #: rhodecode/templates/commits/changelog.mako:50
9907 msgid "Show hidden"
10063 msgid "Show hidden"
9908 msgstr ""
10064 msgstr ""
9909
10065
9910 #: rhodecode/templates/commits/changelog.mako:59
10066 #: rhodecode/templates/commits/changelog.mako:59
9911 #: rhodecode/templates/compare/compare_diff.mako:93
10067 #: rhodecode/templates/compare/compare_diff.mako:93
9912 #, python-format
10068 #, python-format
9913 msgid "Compare fork with %s"
10069 msgid "Compare fork with %s"
9914 msgstr ""
10070 msgstr ""
9915
10071
9916 #: rhodecode/templates/commits/changelog.mako:69
10072 #: rhodecode/templates/commits/changelog.mako:69
9917 #, python-format
10073 #, python-format
9918 msgid "Compare fork with Parent (%s)"
10074 msgid "Compare fork with Parent (%s)"
9919 msgstr ""
10075 msgstr ""
9920
10076
9921 #: rhodecode/templates/commits/changelog.mako:107
10077 #: rhodecode/templates/commits/changelog.mako:107
9922 msgid "Clear selection"
10078 msgid "Clear selection"
9923 msgstr ""
10079 msgstr ""
9924
10080
9925 #: rhodecode/templates/commits/changelog.mako:110
10081 #: rhodecode/templates/commits/changelog.mako:110
9926 msgid "Select second commit"
10082 msgid "Select second commit"
9927 msgstr ""
10083 msgstr ""
9928
10084
9929 #: rhodecode/templates/commits/changelog.mako:116
10085 #: rhodecode/templates/commits/changelog.mako:116
9930 msgid "Commit Message"
10086 msgid "Commit Message"
9931 msgstr ""
10087 msgstr ""
9932
10088
9933 #: rhodecode/templates/commits/changelog.mako:118
10089 #: rhodecode/templates/commits/changelog.mako:118
9934 #: rhodecode/templates/summary/summary_commits.mako:10
10090 #: rhodecode/templates/summary/summary_commits.mako:10
9935 msgid "Age"
10091 msgid "Age"
9936 msgstr ""
10092 msgstr ""
9937
10093
9938 #: rhodecode/templates/commits/changelog.mako:121
10094 #: rhodecode/templates/commits/changelog.mako:121
9939 #: rhodecode/templates/summary/summary_commits.mako:12
10095 #: rhodecode/templates/summary/summary_commits.mako:12
9940 msgid "Refs"
10096 msgid "Refs"
9941 msgstr ""
10097 msgstr ""
9942
10098
9943 #: rhodecode/templates/commits/changelog.mako:262
10099 #: rhodecode/templates/commits/changelog.mako:262
9944 msgid "Branch filter"
10100 msgid "Branch filter"
9945 msgstr ""
10101 msgstr ""
9946
10102
9947 #: rhodecode/templates/commits/changelog.mako:323
10103 #: rhodecode/templates/commits/changelog.mako:323
9948 msgid "There are no changes yet"
10104 msgid "There are no changes yet"
9949 msgstr ""
10105 msgstr ""
9950
10106
9951 #: rhodecode/templates/commits/changelog_elements.mako:8
10107 #: rhodecode/templates/commits/changelog_elements.mako:8
9952 msgid "load previous"
10108 msgid "load previous"
9953 msgstr ""
10109 msgstr ""
9954
10110
9955 #: rhodecode/templates/commits/changelog_elements.mako:35
10111 #: rhodecode/templates/commits/changelog_elements.mako:35
9956 #: rhodecode/templates/summary/summary_commits.mako:27
10112 #: rhodecode/templates/summary/summary_commits.mako:27
9957 #, python-format
10113 #, python-format
9958 msgid ""
10114 msgid ""
9959 "Commit status: %s\n"
10115 "Commit status: %s\n"
9960 "Click to open associated pull request #%s"
10116 "Click to open associated pull request #%s"
9961 msgstr ""
10117 msgstr ""
9962
10118
9963 #: rhodecode/templates/commits/changelog_elements.mako:39
10119 #: rhodecode/templates/commits/changelog_elements.mako:39
9964 #: rhodecode/templates/summary/summary_commits.mako:31
10120 #: rhodecode/templates/summary/summary_commits.mako:31
9965 msgid "Commit status: {}"
10121 msgid "Commit status: {}"
9966 msgstr ""
10122 msgstr ""
9967
10123
9968 #: rhodecode/templates/commits/changelog_elements.mako:45
10124 #: rhodecode/templates/commits/changelog_elements.mako:45
9969 #: rhodecode/templates/summary/summary_commits.mako:37
10125 #: rhodecode/templates/summary/summary_commits.mako:37
9970 msgid "Commit status: Not Reviewed"
10126 msgid "Commit status: Not Reviewed"
9971 msgstr ""
10127 msgstr ""
9972
10128
9973 #: rhodecode/templates/commits/changelog_elements.mako:63
10129 #: rhodecode/templates/commits/changelog_elements.mako:63
9974 msgid "{} commit phase"
10130 msgid "{} commit phase"
9975 msgstr ""
10131 msgstr ""
9976
10132
9977 #: rhodecode/templates/commits/changelog_elements.mako:69
10133 #: rhodecode/templates/commits/changelog_elements.mako:69
9978 msgid "Obsolete Evolve State"
10134 msgid "Obsolete Evolve State"
9979 msgstr ""
10135 msgstr ""
9980
10136
9981 #: rhodecode/templates/commits/changelog_elements.mako:74
10137 #: rhodecode/templates/commits/changelog_elements.mako:74
9982 msgid "Hidden Evolve State"
10138 msgid "Hidden Evolve State"
9983 msgstr ""
10139 msgstr ""
9984
10140
9985 #: rhodecode/templates/commits/changelog_elements.mako:80
10141 #: rhodecode/templates/commits/changelog_elements.mako:80
9986 #: rhodecode/templates/compare/compare_commits.mako:46
10142 #: rhodecode/templates/compare/compare_commits.mako:46
9987 #: rhodecode/templates/pullrequests/pullrequest_show.mako:597
10143 #: rhodecode/templates/pullrequests/pullrequest_show.mako:595
9988 #: rhodecode/templates/search/search_commit.mako:34
10144 #: rhodecode/templates/search/search_commit.mako:34
9989 msgid "Expand commit message"
10145 msgid "Expand commit message"
9990 msgstr ""
10146 msgstr ""
9991
10147
9992 #: rhodecode/templates/commits/changelog_elements.mako:108
10148 #: rhodecode/templates/commits/changelog_elements.mako:108
9993 #: rhodecode/templates/files/base.mako:51
10149 #: rhodecode/templates/files/base.mako:51
9994 #: rhodecode/templates/summary/summary_commits.mako:78
10150 #: rhodecode/templates/summary/summary_commits.mako:78
9995 #, python-format
10151 #, python-format
9996 msgid "Branch %s"
10152 msgid "Branch %s"
9997 msgstr ""
10153 msgstr ""
9998
10154
9999 #: rhodecode/templates/commits/changelog_elements.mako:116
10155 #: rhodecode/templates/commits/changelog_elements.mako:116
10000 #: rhodecode/templates/files/base.mako:32
10156 #: rhodecode/templates/files/base.mako:32
10001 #: rhodecode/templates/summary/summary_commits.mako:64
10157 #: rhodecode/templates/summary/summary_commits.mako:64
10002 #, python-format
10158 #, python-format
10003 msgid "Bookmark %s"
10159 msgid "Bookmark %s"
10004 msgstr ""
10160 msgstr ""
10005
10161
10006 #: rhodecode/templates/commits/changelog_elements.mako:124
10162 #: rhodecode/templates/commits/changelog_elements.mako:124
10007 #: rhodecode/templates/files/base.mako:42
10163 #: rhodecode/templates/files/base.mako:42
10008 #: rhodecode/templates/summary/summary_commits.mako:71
10164 #: rhodecode/templates/summary/summary_commits.mako:71
10009 #, python-format
10165 #, python-format
10010 msgid "Tag %s"
10166 msgid "Tag %s"
10011 msgstr ""
10167 msgstr ""
10012
10168
10013 #: rhodecode/templates/commits/changelog_elements.mako:135
10169 #: rhodecode/templates/commits/changelog_elements.mako:135
10014 #: rhodecode/templates/summary/summary_commits.mako:87
10170 #: rhodecode/templates/summary/summary_commits.mako:87
10015 msgid "Commit has comments"
10171 msgid "Commit has comments"
10016 msgstr ""
10172 msgstr ""
10017
10173
10018 #: rhodecode/templates/commits/changelog_elements.mako:150
10174 #: rhodecode/templates/commits/changelog_elements.mako:150
10019 msgid "load next"
10175 msgid "load next"
10020 msgstr ""
10176 msgstr ""
10021
10177
10022 #: rhodecode/templates/commits/changelog_file_history.mako:33
10178 #: rhodecode/templates/commits/changelog_file_history.mako:33
10023 msgid "Show File"
10179 msgid "Show File"
10024 msgstr ""
10180 msgstr ""
10025
10181
10026 #: rhodecode/templates/commits/changelog_file_history.mako:38
10182 #: rhodecode/templates/commits/changelog_file_history.mako:38
10027 msgid "Diff File"
10183 msgid "Diff File"
10028 msgstr ""
10184 msgstr ""
10029
10185
10030 #: rhodecode/templates/commits/changelog_file_history.mako:46
10186 #: rhodecode/templates/commits/changelog_file_history.mako:46
10031 msgid "Show Full History"
10187 msgid "Show Full History"
10032 msgstr ""
10188 msgstr ""
10033
10189
10034 #: rhodecode/templates/compare/compare_commits.mako:5
10190 #: rhodecode/templates/compare/compare_commits.mako:5
10035 msgid "Compare was calculated based on this common ancestor commit"
10191 msgid "Compare was calculated based on this common ancestor commit"
10036 msgstr ""
10192 msgstr ""
10037
10193
10038 #: rhodecode/templates/compare/compare_commits.mako:15
10194 #: rhodecode/templates/compare/compare_commits.mako:15
10039 #: rhodecode/templates/pullrequests/pullrequest_show.mako:558
10195 #: rhodecode/templates/pullrequests/pullrequest_show.mako:556
10040 msgid "Time"
10196 msgid "Time"
10041 msgstr ""
10197 msgstr ""
10042
10198
10043 #: rhodecode/templates/compare/compare_commits.mako:64
10199 #: rhodecode/templates/compare/compare_commits.mako:64
10044 msgid "No commits in this compare"
10200 msgid "No commits in this compare"
10045 msgstr ""
10201 msgstr ""
10046
10202
10047 #: rhodecode/templates/compare/compare_diff.mako:7
10203 #: rhodecode/templates/compare/compare_diff.mako:7
10048 #: rhodecode/templates/compare/compare_diff.mako:9
10204 #: rhodecode/templates/compare/compare_diff.mako:9
10049 #, python-format
10205 #, python-format
10050 msgid "%s Compare"
10206 msgid "%s Compare"
10051 msgstr ""
10207 msgstr ""
10052
10208
10053 #: rhodecode/templates/compare/compare_diff.mako:38
10209 #: rhodecode/templates/compare/compare_diff.mako:38
10054 #: rhodecode/templates/compare/compare_diff.mako:90
10210 #: rhodecode/templates/compare/compare_diff.mako:90
10055 #: rhodecode/templates/compare/compare_diff.mako:114
10211 #: rhodecode/templates/compare/compare_diff.mako:114
10056 #: rhodecode/templates/compare/compare_diff.mako:119
10212 #: rhodecode/templates/compare/compare_diff.mako:119
10057 msgid "Compare Commits"
10213 msgid "Compare Commits"
10058 msgstr ""
10214 msgstr ""
10059
10215
10060 #: rhodecode/templates/compare/compare_diff.mako:40
10216 #: rhodecode/templates/compare/compare_diff.mako:40
10061 msgid "for file"
10217 msgid "for file"
10062 msgstr ""
10218 msgstr ""
10063
10219
10064 #: rhodecode/templates/compare/compare_diff.mako:56
10220 #: rhodecode/templates/compare/compare_diff.mako:56
10065 msgid "Target"
10221 msgid "Target"
10066 msgstr ""
10222 msgstr ""
10067
10223
10068 #: rhodecode/templates/compare/compare_diff.mako:70
10224 #: rhodecode/templates/compare/compare_diff.mako:70
10069 #: rhodecode/templates/files/files_source.mako:100
10225 #: rhodecode/templates/files/files_source.mako:110
10070 msgid "Source"
10226 msgid "Source"
10071 msgstr ""
10227 msgstr ""
10072
10228
10073 #: rhodecode/templates/compare/compare_diff.mako:102
10229 #: rhodecode/templates/compare/compare_diff.mako:102
10074 msgid "Compare with origin"
10230 msgid "Compare with origin"
10075 msgstr ""
10231 msgstr ""
10076
10232
10077 #: rhodecode/templates/compare/compare_diff.mako:107
10233 #: rhodecode/templates/compare/compare_diff.mako:107
10078 #: rhodecode/templates/compare/compare_diff.mako:108
10234 #: rhodecode/templates/compare/compare_diff.mako:108
10079 #: rhodecode/templates/compare/compare_diff.mako:114
10235 #: rhodecode/templates/compare/compare_diff.mako:114
10080 #: rhodecode/templates/compare/compare_diff.mako:115
10236 #: rhodecode/templates/compare/compare_diff.mako:115
10081 #: rhodecode/templates/compare/compare_diff.mako:116
10237 #: rhodecode/templates/compare/compare_diff.mako:116
10082 #: rhodecode/templates/compare/compare_diff.mako:126
10238 #: rhodecode/templates/compare/compare_diff.mako:126
10083 msgid "Action unavailable in current view"
10239 msgid "Action unavailable in current view"
10084 msgstr ""
10240 msgstr ""
10085
10241
10086 #: rhodecode/templates/compare/compare_diff.mako:107
10242 #: rhodecode/templates/compare/compare_diff.mako:107
10087 #: rhodecode/templates/compare/compare_diff.mako:115
10243 #: rhodecode/templates/compare/compare_diff.mako:115
10088 #: rhodecode/templates/compare/compare_diff.mako:120
10244 #: rhodecode/templates/compare/compare_diff.mako:120
10089 msgid "Swap"
10245 msgid "Swap"
10090 msgstr ""
10246 msgstr ""
10091
10247
10092 #: rhodecode/templates/compare/compare_diff.mako:110
10248 #: rhodecode/templates/compare/compare_diff.mako:110
10093 msgid "Compare commits, branches, bookmarks or tags."
10249 msgid "Compare commits, branches, bookmarks or tags."
10094 msgstr ""
10250 msgstr ""
10095
10251
10252 #: rhodecode/templates/compare/compare_diff.mako:139
10253 #: rhodecode/templates/email_templates/commit_comment.mako:57
10254 msgid "Commit status"
10255 msgstr ""
10256
10096 #: rhodecode/templates/data_table/_dt_elements.mako:73
10257 #: rhodecode/templates/data_table/_dt_elements.mako:73
10097 #: rhodecode/templates/data_table/_dt_elements.mako:74
10258 #: rhodecode/templates/data_table/_dt_elements.mako:74
10098 msgid "Fork"
10259 msgid "Fork"
10099 msgstr ""
10260 msgstr ""
10100
10261
10101 #: rhodecode/templates/data_table/_dt_elements.mako:95
10262 #: rhodecode/templates/data_table/_dt_elements.mako:95
10102 msgid "Mercurial repository"
10263 msgid "Mercurial repository"
10103 msgstr ""
10264 msgstr ""
10104
10265
10105 #: rhodecode/templates/data_table/_dt_elements.mako:97
10266 #: rhodecode/templates/data_table/_dt_elements.mako:97
10106 msgid "Git repository"
10267 msgid "Git repository"
10107 msgstr ""
10268 msgstr ""
10108
10269
10109 #: rhodecode/templates/data_table/_dt_elements.mako:99
10270 #: rhodecode/templates/data_table/_dt_elements.mako:99
10110 msgid "Subversion repository"
10271 msgid "Subversion repository"
10111 msgstr ""
10272 msgstr ""
10112
10273
10113 #: rhodecode/templates/data_table/_dt_elements.mako:106
10274 #: rhodecode/templates/data_table/_dt_elements.mako:106
10114 msgid "Public repository"
10275 msgid "Public repository"
10115 msgstr ""
10276 msgstr ""
10116
10277
10117 #: rhodecode/templates/data_table/_dt_elements.mako:116
10278 #: rhodecode/templates/data_table/_dt_elements.mako:116
10118 msgid "This repository is being created in a background task"
10279 msgid "This repository is being created in a background task"
10119 msgstr ""
10280 msgstr ""
10120
10281
10121 #: rhodecode/templates/data_table/_dt_elements.mako:117
10282 #: rhodecode/templates/data_table/_dt_elements.mako:117
10122 msgid "creating..."
10283 msgid "creating..."
10123 msgstr ""
10284 msgstr ""
10124
10285
10125 #: rhodecode/templates/data_table/_dt_elements.mako:149
10286 #: rhodecode/templates/data_table/_dt_elements.mako:149
10126 msgid "No commits yet"
10287 msgid "No commits yet"
10127 msgstr ""
10288 msgstr ""
10128
10289
10129 #: rhodecode/templates/data_table/_dt_elements.mako:156
10290 #: rhodecode/templates/data_table/_dt_elements.mako:156
10130 #: rhodecode/templates/data_table/_dt_elements.mako:158
10291 #: rhodecode/templates/data_table/_dt_elements.mako:158
10131 #, python-format
10292 #, python-format
10132 msgid "Subscribe to %s rss feed"
10293 msgid "Subscribe to %s rss feed"
10133 msgstr ""
10294 msgstr ""
10134
10295
10135 #: rhodecode/templates/data_table/_dt_elements.mako:164
10296 #: rhodecode/templates/data_table/_dt_elements.mako:164
10136 #: rhodecode/templates/data_table/_dt_elements.mako:166
10297 #: rhodecode/templates/data_table/_dt_elements.mako:166
10137 #, python-format
10298 #, python-format
10138 msgid "Subscribe to %s atom feed"
10299 msgid "Subscribe to %s atom feed"
10139 msgstr ""
10300 msgstr ""
10140
10301
10141 #: rhodecode/templates/data_table/_dt_elements.mako:191
10302 #: rhodecode/templates/data_table/_dt_elements.mako:191
10142 msgid "Creating"
10303 msgid "Creating"
10143 msgstr ""
10304 msgstr ""
10144
10305
10145 #: rhodecode/templates/data_table/_dt_elements.mako:193
10306 #: rhodecode/templates/data_table/_dt_elements.mako:193
10146 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:10
10307 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:10
10147 msgid "Created"
10308 msgid "Created"
10148 msgstr ""
10309 msgstr ""
10149
10310
10150 #: rhodecode/templates/data_table/_dt_elements.mako:236
10311 #: rhodecode/templates/data_table/_dt_elements.mako:236
10151 msgid "personal"
10312 msgid "personal"
10152 msgstr ""
10313 msgstr ""
10153
10314
10154 #: rhodecode/templates/data_table/_dt_elements.mako:387
10315 #: rhodecode/templates/data_table/_dt_elements.mako:387
10155 #: rhodecode/templates/pullrequests/pullrequest_show.mako:50
10316 #: rhodecode/templates/pullrequests/pullrequest_show.mako:50
10156 msgid "Pull request !{}"
10317 msgid "Pull request !{}"
10157 msgstr ""
10318 msgstr ""
10158
10319
10159 #: rhodecode/templates/data_table/_dt_elements.mako:395
10320 #: rhodecode/templates/data_table/_dt_elements.mako:395
10160 msgid "Work in progress"
10321 msgid "Work in progress"
10161 msgstr ""
10322 msgstr ""
10162
10323
10163 #: rhodecode/templates/data_table/_dt_elements.mako:429
10324 #: rhodecode/templates/data_table/_dt_elements.mako:429
10164 msgid "Info"
10325 msgid "Info"
10165 msgstr ""
10326 msgstr ""
10166
10327
10167 #: rhodecode/templates/data_table/_dt_elements.mako:470
10328 #: rhodecode/templates/data_table/_dt_elements.mako:470
10168 #, python-format
10329 #, python-format
10169 msgid "Parsed using %s syntax"
10330 msgid "Parsed using %s syntax"
10170 msgstr ""
10331 msgstr ""
10171
10332
10172 #: rhodecode/templates/debug_style/buttons.html:131
10333 #: rhodecode/templates/debug_style/buttons.html:131
10173 msgid "Confirm to remove this field: Field"
10334 msgid "Confirm to remove this field: Field"
10174 msgstr ""
10335 msgstr ""
10175
10336
10176 #: rhodecode/templates/debug_style/form-elements.html:107
10337 #: rhodecode/templates/debug_style/form-elements.html:107
10177 msgid "Default"
10338 msgid "Default"
10178 msgstr ""
10339 msgstr ""
10179
10340
10180 #: rhodecode/templates/debug_style/form-elements.html:513
10341 #: rhodecode/templates/debug_style/form-elements.html:513
10181 #: rhodecode/templates/debug_style/form-elements.html:565
10342 #: rhodecode/templates/debug_style/form-elements.html:565
10182 #: rhodecode/templates/debug_style/forms.html:236
10343 #: rhodecode/templates/debug_style/forms.html:236
10183 msgid "Chosen group members"
10344 msgid "Chosen group members"
10184 msgstr ""
10345 msgstr ""
10185
10346
10186 #: rhodecode/templates/debug_style/form-elements.html:525
10347 #: rhodecode/templates/debug_style/form-elements.html:525
10187 #: rhodecode/templates/debug_style/form-elements.html:569
10348 #: rhodecode/templates/debug_style/form-elements.html:569
10188 #: rhodecode/templates/debug_style/forms.html:240
10349 #: rhodecode/templates/debug_style/forms.html:240
10189 msgid "Remove all elements"
10350 msgid "Remove all elements"
10190 msgstr ""
10351 msgstr ""
10191
10352
10192 #: rhodecode/templates/debug_style/form-elements.html:535
10353 #: rhodecode/templates/debug_style/form-elements.html:535
10193 #: rhodecode/templates/debug_style/form-elements.html:579
10354 #: rhodecode/templates/debug_style/form-elements.html:579
10194 #: rhodecode/templates/debug_style/forms.html:250
10355 #: rhodecode/templates/debug_style/forms.html:250
10195 msgid "Available members"
10356 msgid "Available members"
10196 msgstr ""
10357 msgstr ""
10197
10358
10198 #: rhodecode/templates/debug_style/form-elements.html:543
10359 #: rhodecode/templates/debug_style/form-elements.html:543
10199 #: rhodecode/templates/debug_style/form-elements.html:587
10360 #: rhodecode/templates/debug_style/form-elements.html:587
10200 #: rhodecode/templates/debug_style/forms.html:258
10361 #: rhodecode/templates/debug_style/forms.html:258
10201 msgid "Add all elements"
10362 msgid "Add all elements"
10202 msgstr ""
10363 msgstr ""
10203
10364
10204 #: rhodecode/templates/debug_style/forms.html:119
10365 #: rhodecode/templates/debug_style/forms.html:119
10205 msgid "Some text..."
10366 msgid "Some text..."
10206 msgstr ""
10367 msgstr ""
10207
10368
10208 #: rhodecode/templates/debug_style/forms.html:122
10369 #: rhodecode/templates/debug_style/forms.html:122
10209 #: rhodecode/templates/debug_style/forms.html:255
10370 #: rhodecode/templates/debug_style/forms.html:255
10210 msgid "Variable Item"
10371 msgid "Variable Item"
10211 msgstr ""
10372 msgstr ""
10212
10373
10213 #: rhodecode/templates/debug_style/forms.html:252
10374 #: rhodecode/templates/debug_style/forms.html:252
10214 msgid "Some example text..."
10375 msgid "Some example text..."
10215 msgstr ""
10376 msgstr ""
10216
10377
10217 #: rhodecode/templates/debug_style/index.html:5
10378 #: rhodecode/templates/debug_style/index.html:5
10218 msgid "Debug Style"
10379 msgid "Debug Style"
10219 msgstr ""
10380 msgstr ""
10220
10381
10221 #: rhodecode/templates/debug_style/index.html:54
10382 #: rhodecode/templates/debug_style/index.html:54
10222 msgid "Index"
10383 msgid "Index"
10223 msgstr ""
10384 msgstr ""
10224
10385
10225 #: rhodecode/templates/debug_style/index.html:56
10386 #: rhodecode/templates/debug_style/index.html:56
10226 msgid "Typography"
10387 msgid "Typography"
10227 msgstr ""
10388 msgstr ""
10228
10389
10229 #: rhodecode/templates/debug_style/index.html:57
10390 #: rhodecode/templates/debug_style/index.html:57
10230 msgid "Forms"
10391 msgid "Forms"
10231 msgstr ""
10392 msgstr ""
10232
10393
10233 #: rhodecode/templates/debug_style/index.html:58
10394 #: rhodecode/templates/debug_style/index.html:58
10234 msgid "Buttons"
10395 msgid "Buttons"
10235 msgstr ""
10396 msgstr ""
10236
10397
10237 #: rhodecode/templates/debug_style/index.html:59
10398 #: rhodecode/templates/debug_style/index.html:59
10238 msgid "Labels"
10399 msgid "Labels"
10239 msgstr ""
10400 msgstr ""
10240
10401
10241 #: rhodecode/templates/debug_style/index.html:60
10402 #: rhodecode/templates/debug_style/index.html:60
10242 msgid "Alerts"
10403 msgid "Alerts"
10243 msgstr ""
10404 msgstr ""
10244
10405
10245 #: rhodecode/templates/debug_style/index.html:61
10406 #: rhodecode/templates/debug_style/index.html:61
10246 msgid "Tables"
10407 msgid "Tables"
10247 msgstr ""
10408 msgstr ""
10248
10409
10249 #: rhodecode/templates/debug_style/index.html:62
10410 #: rhodecode/templates/debug_style/index.html:62
10250 msgid "Tables wide"
10411 msgid "Tables wide"
10251 msgstr ""
10412 msgstr ""
10252
10413
10253 #: rhodecode/templates/debug_style/index.html:63
10414 #: rhodecode/templates/debug_style/index.html:63
10254 msgid "Collapsable Content"
10415 msgid "Collapsable Content"
10255 msgstr ""
10416 msgstr ""
10256
10417
10257 #: rhodecode/templates/debug_style/index.html:65
10418 #: rhodecode/templates/debug_style/index.html:65
10258 msgid "Layout form with sidebar"
10419 msgid "Layout form with sidebar"
10259 msgstr ""
10420 msgstr ""
10260
10421
10261 #: rhodecode/templates/debug_style/index.html:66
10422 #: rhodecode/templates/debug_style/index.html:66
10262 msgid "Login"
10423 msgid "Login"
10263 msgstr ""
10424 msgstr ""
10264
10425
10265 #: rhodecode/templates/debug_style/index.html:67
10426 #: rhodecode/templates/debug_style/index.html:67
10266 msgid "Login 2"
10427 msgid "Login 2"
10267 msgstr ""
10428 msgstr ""
10268
10429
10269 #: rhodecode/templates/debug_style/index.html:68
10430 #: rhodecode/templates/debug_style/index.html:68
10270 msgid "Code blocks"
10431 msgid "Code blocks"
10271 msgstr ""
10432 msgstr ""
10272
10433
10273 #: rhodecode/templates/debug_style/index.html:71
10434 #: rhodecode/templates/debug_style/index.html:71
10274 msgid "Panels"
10435 msgid "Panels"
10275 msgstr ""
10436 msgstr ""
10276
10437
10277 #: rhodecode/templates/debug_style/index.html:74
10438 #: rhodecode/templates/debug_style/index.html:74
10278 msgid "Form elements"
10439 msgid "Form elements"
10279 msgstr ""
10440 msgstr ""
10280
10441
10281 #: rhodecode/templates/debug_style/index.html:75
10442 #: rhodecode/templates/debug_style/index.html:75
10282 msgid "Form elements small"
10443 msgid "Form elements small"
10283 msgstr ""
10444 msgstr ""
10284
10445
10285 #: rhodecode/templates/debug_style/index.html:76
10446 #: rhodecode/templates/debug_style/index.html:76
10286 msgid "Form inline elements"
10447 msgid "Form inline elements"
10287 msgstr ""
10448 msgstr ""
10288
10449
10289 #: rhodecode/templates/debug_style/index.html:77
10450 #: rhodecode/templates/debug_style/index.html:77
10290 msgid "Form vertical"
10451 msgid "Form vertical"
10291 msgstr ""
10452 msgstr ""
10292
10453
10293 #: rhodecode/templates/debug_style/login.html:28
10454 #: rhodecode/templates/debug_style/login.html:28
10294 msgid "Sign in to your account"
10455 msgid "Sign in to your account"
10295 msgstr ""
10456 msgstr ""
10296
10457
10297 #: rhodecode/templates/debug_style/login.html:46
10458 #: rhodecode/templates/debug_style/login.html:46
10298 msgid "(Forgot password?)"
10459 msgid "(Forgot password?)"
10299 msgstr ""
10460 msgstr ""
10300
10461
10301 #: rhodecode/templates/debug_style/login.html:56
10462 #: rhodecode/templates/debug_style/login.html:56
10302 msgid "Don't have an account ?"
10463 msgid "Don't have an account ?"
10303 msgstr ""
10464 msgstr ""
10304
10465
10305 #: rhodecode/templates/email_templates/base.mako:75
10466 #: rhodecode/templates/email_templates/base.mako:72
10306 #: rhodecode/templates/email_templates/base.mako:597
10467 #: rhodecode/templates/email_templates/base.mako:633
10307 msgid "This is a notification from RhodeCode."
10468 msgid "This is a notification from RhodeCode."
10308 msgstr ""
10469 msgstr ""
10309
10470
10310 #: rhodecode/templates/email_templates/base.mako:577
10471 #: rhodecode/templates/email_templates/base.mako:613
10311 msgid "RhodeCode"
10472 msgid "RhodeCode"
10312 msgstr ""
10473 msgstr ""
10313
10474
10314 #: rhodecode/templates/email_templates/commit_comment.mako:23
10475 #: rhodecode/templates/email_templates/commit_comment.mako:24
10315 #: rhodecode/templates/email_templates/commit_comment.mako:26
10476 msgid "{mention_prefix}{user} left a {comment_type} on file `{comment_file}` in commit `{commit_id}` in the `{repo_name}` repository"
10316 #: rhodecode/templates/email_templates/commit_comment.mako:28
10317 #: rhodecode/templates/email_templates/pull_request_comment.mako:24
10318 #: rhodecode/templates/email_templates/pull_request_comment.mako:27
10319 #: rhodecode/templates/email_templates/pull_request_comment.mako:29
10320 msgid "[mention]"
10321 msgstr ""
10322
10323 #: rhodecode/templates/email_templates/commit_comment.mako:23
10324 msgid "{user} left a {comment_type} on file `{comment_file}` in commit `{commit_id}`"
10325 msgstr ""
10326
10327 #: rhodecode/templates/email_templates/commit_comment.mako:23
10328 #: rhodecode/templates/email_templates/commit_comment.mako:26
10329 #: rhodecode/templates/email_templates/commit_comment.mako:28
10330 msgid "in the `{repo_name}` repository"
10331 msgstr ""
10332
10333 #: rhodecode/templates/email_templates/commit_comment.mako:26
10334 msgid "[status: {status}] {user} left a {comment_type} on commit `{commit_id}`"
10335 msgstr ""
10477 msgstr ""
10336
10478
10337 #: rhodecode/templates/email_templates/commit_comment.mako:28
10479 #: rhodecode/templates/email_templates/commit_comment.mako:28
10338 msgid "{user} left a {comment_type} on commit `{commit_id}`"
10480 msgid "{mention_prefix}[status: {status}] {user} left a {comment_type} on commit `{commit_id}` in the `{repo_name}` repository"
10339 msgstr ""
10481 msgstr ""
10340
10482
10341 #: rhodecode/templates/email_templates/commit_comment.mako:50
10483 #: rhodecode/templates/email_templates/commit_comment.mako:31
10342 #: rhodecode/templates/email_templates/pull_request_comment.mako:60
10484 msgid "{mention_prefix}{user} left a {comment_type} on commit `{commit_id}` in the `{repo_name}` repository"
10485 msgstr ""
10486
10487 #: rhodecode/templates/email_templates/commit_comment.mako:54
10488 #: rhodecode/templates/email_templates/pull_request_comment.mako:63
10343 msgid "Comment link"
10489 msgid "Comment link"
10344 msgstr ""
10490 msgstr ""
10345
10491
10346 #: rhodecode/templates/email_templates/commit_comment.mako:53
10492 #: rhodecode/templates/email_templates/commit_comment.mako:57
10347 #: rhodecode/templates/email_templates/commit_comment.mako:129
10493 #: rhodecode/templates/email_templates/commit_comment.mako:135
10348 msgid "Status was changed to"
10494 msgid "Status was changed to"
10349 msgstr ""
10495 msgstr ""
10350
10496
10351 #: rhodecode/templates/email_templates/commit_comment.mako:58
10497 #: rhodecode/templates/email_templates/commit_comment.mako:62
10352 #: rhodecode/templates/email_templates/commit_comment.mako:141
10498 #: rhodecode/templates/email_templates/commit_comment.mako:147
10353 #: rhodecode/templates/search/search_commit.mako:12
10499 #: rhodecode/templates/search/search_commit.mako:12
10354 #: rhodecode/templates/summary/summary_commits.mako:9
10500 #: rhodecode/templates/summary/summary_commits.mako:9
10355 msgid "Commit message"
10501 msgid "Commit message"
10356 msgstr ""
10502 msgstr ""
10357
10503
10358 #: rhodecode/templates/email_templates/commit_comment.mako:61
10504 #: rhodecode/templates/email_templates/commit_comment.mako:65
10359 #: rhodecode/templates/email_templates/pull_request_comment.mako:74
10505 #: rhodecode/templates/email_templates/pull_request_comment.mako:77
10360 msgid "File: {comment_file} on line {comment_line}"
10506 msgid "File: {comment_file} on line {comment_line}"
10361 msgstr ""
10507 msgstr ""
10362
10508
10363 #: rhodecode/templates/email_templates/commit_comment.mako:65
10509 #: rhodecode/templates/email_templates/commit_comment.mako:69
10364 #: rhodecode/templates/email_templates/commit_comment.mako:155
10510 #: rhodecode/templates/email_templates/commit_comment.mako:161
10365 #: rhodecode/templates/email_templates/pull_request_comment.mako:78
10511 #: rhodecode/templates/email_templates/pull_request_comment.mako:81
10366 #: rhodecode/templates/email_templates/pull_request_comment.mako:186
10512 #: rhodecode/templates/email_templates/pull_request_comment.mako:191
10367 msgid "`TODO` number"
10513 msgid "`TODO` number"
10368 msgstr ""
10514 msgstr ""
10369
10515
10370 #: rhodecode/templates/email_templates/commit_comment.mako:67
10516 #: rhodecode/templates/email_templates/commit_comment.mako:71
10371 #: rhodecode/templates/email_templates/commit_comment.mako:157
10517 #: rhodecode/templates/email_templates/commit_comment.mako:163
10372 #: rhodecode/templates/email_templates/pull_request_comment.mako:80
10518 #: rhodecode/templates/email_templates/pull_request_comment.mako:83
10373 #: rhodecode/templates/email_templates/pull_request_comment.mako:188
10519 #: rhodecode/templates/email_templates/pull_request_comment.mako:193
10374 msgid "`Note` number"
10520 msgid "`Note` number"
10375 msgstr ""
10521 msgstr ""
10376
10522
10377 #: rhodecode/templates/email_templates/commit_comment.mako:99
10378 #: rhodecode/templates/email_templates/pull_request_comment.mako:120
10379 msgid "left a"
10380 msgstr ""
10381
10382 #: rhodecode/templates/email_templates/commit_comment.mako:102
10383 msgid "{comment_type} on file `{comment_file}` in commit."
10384 msgstr ""
10385
10386 #: rhodecode/templates/email_templates/commit_comment.mako:104
10523 #: rhodecode/templates/email_templates/commit_comment.mako:104
10387 msgid "{comment_type} on commit."
10524 #: rhodecode/templates/email_templates/pull_request_comment.mako:124
10525 msgid "left a"
10526 msgstr ""
10527
10528 #: rhodecode/templates/email_templates/commit_comment.mako:107
10529 msgid "{comment_type} on file `{comment_file}` in commit."
10388 msgstr ""
10530 msgstr ""
10389
10531
10390 #: rhodecode/templates/email_templates/commit_comment.mako:109
10532 #: rhodecode/templates/email_templates/commit_comment.mako:109
10533 msgid "{comment_type} on commit."
10534 msgstr ""
10535
10536 #: rhodecode/templates/email_templates/commit_comment.mako:114
10391 msgid "of repository"
10537 msgid "of repository"
10392 msgstr ""
10538 msgstr ""
10393
10539
10394 #: rhodecode/templates/email_templates/commit_comment.mako:127
10540 #: rhodecode/templates/email_templates/commit_comment.mako:133
10395 msgid "Commit Status"
10541 msgid "Commit Status"
10396 msgstr ""
10542 msgstr ""
10397
10543
10398 #: rhodecode/templates/email_templates/commit_comment.mako:147
10544 #: rhodecode/templates/email_templates/commit_comment.mako:153
10399 #: rhodecode/templates/email_templates/pull_request_comment.mako:178
10545 #: rhodecode/templates/email_templates/pull_request_comment.mako:183
10400 #: rhodecode/templates/search/search_path.mako:9
10546 #: rhodecode/templates/search/search_path.mako:9
10401 msgid "File"
10547 msgid "File"
10402 msgstr ""
10548 msgstr ""
10403
10549
10404 #: rhodecode/templates/email_templates/commit_comment.mako:148
10550 #: rhodecode/templates/email_templates/commit_comment.mako:154
10405 #: rhodecode/templates/email_templates/pull_request_comment.mako:179
10551 #: rhodecode/templates/email_templates/pull_request_comment.mako:184
10406 msgid "`{comment_file}` on line {comment_line}"
10552 msgid "`{comment_file}` on line {comment_line}"
10407 msgstr ""
10553 msgstr ""
10408
10554
10409 #: rhodecode/templates/email_templates/commit_comment.mako:167
10555 #: rhodecode/templates/email_templates/commit_comment.mako:173
10410 #: rhodecode/templates/email_templates/pull_request_comment.mako:198
10556 #: rhodecode/templates/email_templates/pull_request_comment.mako:203
10411 msgid "Reply"
10557 msgid "Reply"
10412 msgstr ""
10558 msgstr ""
10413
10559
10414 #: rhodecode/templates/email_templates/pull_request_comment.mako:24
10560 #: rhodecode/templates/email_templates/pull_request_comment.mako:24
10415 msgid "{user} left a {comment_type} on file `{comment_file}` in pull request !{pr_id}: \"{pr_title}\""
10561 msgid "{mention_prefix}{user} left a {comment_type} on file `{comment_file}` in pull request !{pr_id}: \"{pr_title}\""
10416 msgstr ""
10562 msgstr ""
10417
10563
10418 #: rhodecode/templates/email_templates/pull_request_comment.mako:27
10564 #: rhodecode/templates/email_templates/pull_request_comment.mako:28
10419 msgid "[status: {status}] {user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10565 msgid "{mention_prefix}[status: {status}] {user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10420 msgstr ""
10566 msgstr ""
10421
10567
10422 #: rhodecode/templates/email_templates/pull_request_comment.mako:29
10568 #: rhodecode/templates/email_templates/pull_request_comment.mako:31
10423 msgid "{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10569 msgid "{mention_prefix}{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10424 msgstr ""
10570 msgstr ""
10425
10571
10426 #: rhodecode/templates/email_templates/pull_request_comment.mako:62
10572 #: rhodecode/templates/email_templates/pull_request_comment.mako:65
10427 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:24
10573 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:24
10428 msgid "Pull Request"
10574 msgid "Pull Request"
10429 msgstr ""
10575 msgstr ""
10430
10576
10431 #: rhodecode/templates/email_templates/pull_request_comment.mako:64
10432 #: rhodecode/templates/email_templates/pull_request_review.mako:39
10433 #: rhodecode/templates/email_templates/pull_request_update.mako:39
10434 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10435 msgstr ""
10436
10437 #: rhodecode/templates/email_templates/pull_request_comment.mako:67
10577 #: rhodecode/templates/email_templates/pull_request_comment.mako:67
10438 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10578 #: rhodecode/templates/email_templates/pull_request_review.mako:41
10579 #: rhodecode/templates/email_templates/pull_request_update.mako:41
10580 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10439 msgstr ""
10581 msgstr ""
10440
10582
10441 #: rhodecode/templates/email_templates/pull_request_comment.mako:70
10583 #: rhodecode/templates/email_templates/pull_request_comment.mako:70
10584 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10585 msgstr ""
10586
10587 #: rhodecode/templates/email_templates/pull_request_comment.mako:73
10442 msgid "{user} submitted pull request !{pr_id} status: *{status} and closed*"
10588 msgid "{user} submitted pull request !{pr_id} status: *{status} and closed*"
10443 msgstr ""
10589 msgstr ""
10444
10590
10445 #: rhodecode/templates/email_templates/pull_request_comment.mako:123
10591 #: rhodecode/templates/email_templates/pull_request_comment.mako:127
10446 msgid "{comment_type} on file `{comment_file}` in pull request."
10592 msgid "{comment_type} on file `{comment_file}` in pull request."
10447 msgstr ""
10593 msgstr ""
10448
10594
10449 #: rhodecode/templates/email_templates/pull_request_comment.mako:125
10595 #: rhodecode/templates/email_templates/pull_request_comment.mako:129
10450 msgid "{comment_type} on pull request."
10596 msgid "{comment_type} on pull request."
10451 msgstr ""
10597 msgstr ""
10452
10598
10453 #: rhodecode/templates/email_templates/pull_request_comment.mako:130
10599 #: rhodecode/templates/email_templates/pull_request_comment.mako:134
10454 #: rhodecode/templates/email_templates/pull_request_comment.mako:159
10600 #: rhodecode/templates/email_templates/pull_request_comment.mako:164
10455 #: rhodecode/templates/email_templates/pull_request_review.mako:89
10601 #: rhodecode/templates/email_templates/pull_request_review.mako:91
10456 #: rhodecode/templates/email_templates/pull_request_review.mako:105
10602 #: rhodecode/templates/email_templates/pull_request_review.mako:108
10457 #: rhodecode/templates/email_templates/pull_request_update.mako:101
10603 #: rhodecode/templates/email_templates/pull_request_update.mako:104
10458 #: rhodecode/templates/email_templates/pull_request_update.mako:117
10604 #: rhodecode/templates/email_templates/pull_request_update.mako:121
10459 msgid "Pull request"
10605 msgid "Pull request"
10460 msgstr ""
10606 msgstr ""
10461
10607
10462 #: rhodecode/templates/email_templates/pull_request_comment.mako:148
10463 msgid "Review Status"
10464 msgstr ""
10465
10466 #: rhodecode/templates/email_templates/pull_request_comment.mako:151
10467 msgid "Closed pull request with status"
10468 msgstr ""
10469
10470 #: rhodecode/templates/email_templates/pull_request_comment.mako:153
10608 #: rhodecode/templates/email_templates/pull_request_comment.mako:153
10609 msgid "Review Status"
10610 msgstr ""
10611
10612 #: rhodecode/templates/email_templates/pull_request_comment.mako:156
10613 msgid "Closed pull request with status"
10614 msgstr ""
10615
10616 #: rhodecode/templates/email_templates/pull_request_comment.mako:158
10471 msgid "Submitted review status"
10617 msgid "Submitted review status"
10472 msgstr ""
10618 msgstr ""
10473
10619
10474 #: rhodecode/templates/email_templates/pull_request_comment.mako:168
10620 #: rhodecode/templates/email_templates/pull_request_comment.mako:173
10475 #: rhodecode/templates/email_templates/pull_request_review.mako:114
10621 #: rhodecode/templates/email_templates/pull_request_review.mako:117
10476 #: rhodecode/templates/email_templates/pull_request_update.mako:126
10622 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10477 msgid "Commit Flow"
10623 msgid "Commit Flow"
10478 msgstr ""
10624 msgstr ""
10479
10625
10480 #: rhodecode/templates/email_templates/pull_request_comment.mako:170
10626 #: rhodecode/templates/email_templates/pull_request_comment.mako:175
10481 #: rhodecode/templates/email_templates/pull_request_comment.mako:172
10627 #: rhodecode/templates/email_templates/pull_request_comment.mako:177
10482 #: rhodecode/templates/email_templates/pull_request_review.mako:116
10628 #: rhodecode/templates/email_templates/pull_request_review.mako:119
10483 #: rhodecode/templates/email_templates/pull_request_review.mako:118
10629 #: rhodecode/templates/email_templates/pull_request_review.mako:121
10484 #: rhodecode/templates/email_templates/pull_request_update.mako:128
10630 #: rhodecode/templates/email_templates/pull_request_update.mako:132
10485 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10631 #: rhodecode/templates/email_templates/pull_request_update.mako:134
10486 #: rhodecode/templates/pullrequests/pullrequest_show.mako:128
10632 #: rhodecode/templates/pullrequests/pullrequest_show.mako:128
10487 #: rhodecode/templates/pullrequests/pullrequest_show.mako:137
10633 #: rhodecode/templates/pullrequests/pullrequest_show.mako:137
10488 msgid "of"
10634 msgid "of"
10489 msgstr ""
10635 msgstr ""
10490
10636
10491 #: rhodecode/templates/email_templates/pull_request_review.mako:15
10637 #: rhodecode/templates/email_templates/pull_request_review.mako:14
10492 msgid "{user} requested a pull request review. !{pr_id}: \"{pr_title}\""
10638 msgid "{user} requested a pull request review. !{pr_id}: \"{pr_title}\""
10493 msgstr ""
10639 msgstr ""
10494
10640
10495 #: rhodecode/templates/email_templates/pull_request_review.mako:37
10641 #: rhodecode/templates/email_templates/pull_request_review.mako:39
10496 #: rhodecode/templates/email_templates/pull_request_update.mako:37
10642 #: rhodecode/templates/email_templates/pull_request_update.mako:39
10497 msgid "Pull Request link"
10643 msgid "Pull Request link"
10498 msgstr ""
10644 msgstr ""
10499
10645
10500 #: rhodecode/templates/email_templates/pull_request_review.mako:83
10501 msgid "requested a"
10502 msgstr ""
10503
10504 #: rhodecode/templates/email_templates/pull_request_review.mako:85
10646 #: rhodecode/templates/email_templates/pull_request_review.mako:85
10647 msgid "requested a"
10648 msgstr ""
10649
10650 #: rhodecode/templates/email_templates/pull_request_review.mako:87
10505 msgid "pull request review."
10651 msgid "pull request review."
10506 msgstr ""
10652 msgstr ""
10507
10653
10508 #: rhodecode/templates/email_templates/pull_request_update.mako:15
10654 #: rhodecode/templates/email_templates/pull_request_update.mako:14
10509 msgid "{updating_user} updated pull request. !{pr_id}: \"{pr_title}\""
10655 msgid "{updating_user} updated pull request. !{pr_id}: \"{pr_title}\""
10510 msgstr ""
10656 msgstr ""
10511
10657
10512 #: rhodecode/templates/email_templates/pull_request_update.mako:95
10658 #: rhodecode/templates/email_templates/pull_request_update.mako:98
10513 msgid "updated"
10659 msgid "updated"
10514 msgstr ""
10660 msgstr ""
10515
10661
10516 #: rhodecode/templates/email_templates/pull_request_update.mako:97
10662 #: rhodecode/templates/email_templates/pull_request_update.mako:100
10517 msgid "pull request."
10663 msgid "pull request."
10518 msgstr ""
10664 msgstr ""
10519
10665
10520 #: rhodecode/templates/email_templates/pull_request_update.mako:139
10666 #: rhodecode/templates/email_templates/pull_request_update.mako:143
10521 msgid "Changes"
10667 msgid "Changes"
10522 msgstr ""
10668 msgstr ""
10523
10669
10524 #: rhodecode/templates/email_templates/test.mako:5
10670 #: rhodecode/templates/email_templates/test.mako:5
10525 msgid "hello \"world\""
10671 msgid "hello \"world\""
10526 msgstr ""
10672 msgstr ""
10527
10673
10528 #: rhodecode/templates/email_templates/test.mako:22
10674 #: rhodecode/templates/email_templates/test.mako:18
10529 msgid "Translation String"
10675 msgid "Translation String"
10530 msgstr ""
10676 msgstr ""
10531
10677
10532 #: rhodecode/templates/email_templates/user_registration.mako:28
10678 #: rhodecode/templates/email_templates/user_registration.mako:28
10533 msgid "New user {user} has registered on {date}"
10679 msgid "New user {user} has registered on {date}"
10534 msgstr ""
10680 msgstr ""
10535
10681
10536 #: rhodecode/templates/email_templates/user_registration.mako:46
10682 #: rhodecode/templates/email_templates/user_registration.mako:47
10537 msgid "Full Name"
10683 msgid "Full Name"
10538 msgstr ""
10684 msgstr ""
10539
10685
10540 #: rhodecode/templates/errors/error_document.mako:48
10686 #: rhodecode/templates/errors/error_document.mako:48
10541 #, python-format
10687 #, python-format
10542 msgid "You will be redirected to %s in %s seconds"
10688 msgid "You will be redirected to %s in %s seconds"
10543 msgstr ""
10689 msgstr ""
10544
10690
10545 #: rhodecode/templates/errors/error_document.mako:66
10691 #: rhodecode/templates/errors/error_document.mako:66
10546 msgid "Support Page"
10692 msgid "Support Page"
10547 msgstr ""
10693 msgstr ""
10548
10694
10549 #: rhodecode/templates/feed/atom_feed_entry.mako:3
10695 #: rhodecode/templates/feed/atom_feed_entry.mako:3
10550 #, python-format
10696 #, python-format
10551 msgid "%(user)s commited on %(date)s UTC"
10697 msgid "%(user)s commited on %(date)s UTC"
10552 msgstr ""
10698 msgstr ""
10553
10699
10554 #: rhodecode/templates/feed/atom_feed_entry.mako:30
10700 #: rhodecode/templates/feed/atom_feed_entry.mako:30
10555 msgid "Commit was too big and was cut off..."
10701 msgid "Commit was too big and was cut off..."
10556 msgstr ""
10702 msgstr ""
10557
10703
10558 #: rhodecode/templates/files/file_authors_box.mako:18
10704 #: rhodecode/templates/files/file_authors_box.mako:18
10559 msgid "Load All Authors"
10705 msgid "Load All Authors"
10560 msgstr ""
10706 msgstr ""
10561
10707
10562 #: rhodecode/templates/files/file_authors_box.mako:20
10708 #: rhodecode/templates/files/file_authors_box.mako:20
10563 msgid "last author"
10709 msgid "last author"
10564 msgstr ""
10710 msgstr ""
10565
10711
10566 #: rhodecode/templates/files/files.mako:4
10712 #: rhodecode/templates/files/files.mako:4
10567 #: rhodecode/templates/files/files_pjax.mako:2
10713 #: rhodecode/templates/files/files_pjax.mako:2
10568 msgid "{} Files"
10714 msgid "{} Files"
10569 msgstr ""
10715 msgstr ""
10570
10716
10571 #: rhodecode/templates/files/files_add.mako:4
10717 #: rhodecode/templates/files/files_add.mako:4
10572 msgid "{} Files Add"
10718 msgid "{} Files Add"
10573 msgstr ""
10719 msgstr ""
10574
10720
10575 #: rhodecode/templates/files/files_add.mako:25
10721 #: rhodecode/templates/files/files_add.mako:25
10576 msgid "Add new file"
10722 msgid "Add new file"
10577 msgstr ""
10723 msgstr ""
10578
10724
10579 #: rhodecode/templates/files/files_add.mako:44
10725 #: rhodecode/templates/files/files_add.mako:43
10580 #: rhodecode/templates/files/files_edit.mako:45
10726 #: rhodecode/templates/files/files_edit.mako:44
10581 msgid "Filename e.g example.py, or docs/readme.md"
10727 msgid "Filename e.g example.py, or docs/readme.md"
10582 msgstr ""
10728 msgstr ""
10583
10729
10584 #: rhodecode/templates/files/files_add.mako:64
10730 #: rhodecode/templates/files/files_add.mako:63
10585 #: rhodecode/templates/files/files_edit.mako:66
10731 #: rhodecode/templates/files/files_edit.mako:65
10586 msgid "Line wraps on"
10732 msgid "Line wraps on"
10587 msgstr ""
10733 msgstr ""
10588
10734
10589 #: rhodecode/templates/files/files_add.mako:64
10735 #: rhodecode/templates/files/files_add.mako:63
10590 #: rhodecode/templates/files/files_edit.mako:66
10736 #: rhodecode/templates/files/files_edit.mako:65
10591 msgid "line wraps off"
10737 msgid "line wraps off"
10592 msgstr ""
10738 msgstr ""
10593
10739
10594 #: rhodecode/templates/files/files_add.mako:87
10740 #: rhodecode/templates/files/files_add.mako:86
10595 #: rhodecode/templates/files/files_delete.mako:72
10741 #: rhodecode/templates/files/files_delete.mako:71
10596 #: rhodecode/templates/files/files_edit.mako:89
10742 #: rhodecode/templates/files/files_edit.mako:88
10597 #: rhodecode/templates/files/files_upload.mako:102
10743 #: rhodecode/templates/files/files_upload.mako:102
10598 msgid "Commit changes"
10744 msgid "Commit changes"
10599 msgstr ""
10745 msgstr ""
10600
10746
10601 #: rhodecode/templates/files/files_browser.mako:9
10747 #: rhodecode/templates/files/files_browser.mako:9
10602 msgid "Previous commit"
10748 msgid "Previous commit"
10603 msgstr ""
10749 msgstr ""
10604
10750
10605 #: rhodecode/templates/files/files_browser.mako:15
10751 #: rhodecode/templates/files/files_browser.mako:15
10606 msgid "Next commit"
10752 msgid "Next commit"
10607 msgstr ""
10753 msgstr ""
10608
10754
10609 #: rhodecode/templates/files/files_browser.mako:22
10755 #: rhodecode/templates/files/files_browser.mako:24
10610 msgid "Upload File"
10611 msgstr ""
10612
10613 #: rhodecode/templates/files/files_browser.mako:25
10614 msgid "Add File"
10756 msgid "Add File"
10615 msgstr ""
10757 msgstr ""
10616
10758
10617 #: rhodecode/templates/files/files_browser.mako:35
10759 #: rhodecode/templates/files/files_browser.mako:27
10760 msgid "more options"
10761 msgstr ""
10762
10763 #: rhodecode/templates/files/files_browser.mako:36
10764 msgid "Upload File"
10765 msgstr ""
10766
10767 #: rhodecode/templates/files/files_browser.mako:51
10618 msgid "Download full tree ZIP"
10768 msgid "Download full tree ZIP"
10619 msgstr ""
10769 msgstr ""
10620
10770
10621 #: rhodecode/templates/files/files_browser.mako:39
10771 #: rhodecode/templates/files/files_browser.mako:55
10622 msgid "Download this tree ZIP"
10772 msgid "Download this tree ZIP"
10623 msgstr ""
10773 msgstr ""
10624
10774
10625 #: rhodecode/templates/files/files_browser.mako:67
10775 #: rhodecode/templates/files/files_browser.mako:83
10626 #: rhodecode/templates/summary/summary.mako:37
10776 #: rhodecode/templates/summary/summary.mako:37
10627 #, python-format
10777 #, python-format
10628 msgid "Readme file from commit %s:%s"
10778 msgid "Readme file from commit %s:%s"
10629 msgstr ""
10779 msgstr ""
10630
10780
10631 #: rhodecode/templates/files/files_browser_tree.mako:14
10781 #: rhodecode/templates/files/files_browser_tree.mako:17
10632 #: rhodecode/templates/search/search_path.mako:12
10782 #: rhodecode/templates/search/search_path.mako:12
10633 msgid "Size"
10783 msgid "Size"
10634 msgstr ""
10784 msgstr ""
10635
10785
10636 #: rhodecode/templates/files/files_browser_tree.mako:15
10786 #: rhodecode/templates/files/files_browser_tree.mako:18
10637 msgid "Modified"
10787 msgid "Modified"
10638 msgstr ""
10788 msgstr ""
10639
10789
10640 #: rhodecode/templates/files/files_browser_tree.mako:16
10790 #: rhodecode/templates/files/files_browser_tree.mako:19
10641 msgid "Last Commit"
10791 msgid "Last Commit"
10642 msgstr ""
10792 msgstr ""
10643
10793
10644 #: rhodecode/templates/files/files_delete.mako:4
10794 #: rhodecode/templates/files/files_delete.mako:4
10645 msgid "{} Files Delete"
10795 msgid "{} Files Delete"
10646 msgstr ""
10796 msgstr ""
10647
10797
10648 #: rhodecode/templates/files/files_delete.mako:25
10798 #: rhodecode/templates/files/files_delete.mako:25
10649 msgid "Delete file"
10799 msgid "Delete file"
10650 msgstr ""
10800 msgstr ""
10651
10801
10652 #: rhodecode/templates/files/files_delete.mako:53
10802 #: rhodecode/templates/files/files_delete.mako:52
10653 #, python-format
10803 #, python-format
10654 msgid "Binary file (%s)"
10804 msgid "Binary file (%s)"
10655 msgstr ""
10805 msgstr ""
10656
10806
10657 #: rhodecode/templates/files/files_delete.mako:58
10807 #: rhodecode/templates/files/files_delete.mako:57
10658 #: rhodecode/templates/files/files_source.mako:128
10808 #: rhodecode/templates/files/files_source.mako:138
10659 msgid "File size {} is bigger then allowed limit {}. "
10809 msgid "File size {} is bigger then allowed limit {}. "
10660 msgstr ""
10810 msgstr ""
10661
10811
10662 #: rhodecode/templates/files/files_edit.mako:4
10812 #: rhodecode/templates/files/files_edit.mako:4
10663 msgid "{} Files Edit"
10813 msgid "{} Files Edit"
10664 msgstr ""
10814 msgstr ""
10665
10815
10666 #: rhodecode/templates/files/files_edit.mako:25
10816 #: rhodecode/templates/files/files_edit.mako:25
10667 msgid "Edit file"
10817 msgid "Edit file"
10668 msgstr ""
10818 msgstr ""
10669
10819
10670 #: rhodecode/templates/files/files_source.mako:16
10820 #: rhodecode/templates/files/files_source.mako:26
10671 msgid "Download largefile"
10821 msgid "Download largefile"
10672 msgstr ""
10822 msgstr ""
10673
10823
10674 #: rhodecode/templates/files/files_source.mako:20
10824 #: rhodecode/templates/files/files_source.mako:30
10675 msgid "Download file"
10825 msgid "Download file"
10676 msgstr ""
10826 msgstr ""
10677
10827
10678 #: rhodecode/templates/files/files_source.mako:29
10828 #: rhodecode/templates/files/files_source.mako:39
10679 msgid "Editing binary files not allowed"
10829 msgid "Editing binary files not allowed"
10680 msgstr ""
10830 msgstr ""
10681
10831
10682 #: rhodecode/templates/files/files_source.mako:33
10683 msgid "Edit on branch: "
10684 msgstr ""
10685
10686 #: rhodecode/templates/files/files_source.mako:42
10687 msgid "Editing files allowed only when on branch head commit"
10688 msgstr ""
10689
10690 #: rhodecode/templates/files/files_source.mako:43
10832 #: rhodecode/templates/files/files_source.mako:43
10833 msgid "Edit on branch: "
10834 msgstr ""
10835
10836 #: rhodecode/templates/files/files_source.mako:52
10837 msgid "Editing files allowed only when on branch head commit"
10838 msgstr ""
10839
10840 #: rhodecode/templates/files/files_source.mako:53
10691 msgid "Deleting files allowed only when on branch head commit"
10841 msgid "Deleting files allowed only when on branch head commit"
10692 msgstr ""
10842 msgstr ""
10693
10843
10694 #: rhodecode/templates/files/files_source.mako:65
10844 #: rhodecode/templates/files/files_source.mako:75
10695 msgid "lines"
10845 msgid "lines"
10696 msgstr ""
10846 msgstr ""
10697
10847
10698 #: rhodecode/templates/files/files_source.mako:73
10848 #: rhodecode/templates/files/files_source.mako:83
10699 msgid "This file is a pointer to large binary file"
10849 msgid "This file is a pointer to large binary file"
10700 msgstr ""
10850 msgstr ""
10701
10851
10702 #: rhodecode/templates/files/files_source.mako:73
10852 #: rhodecode/templates/files/files_source.mako:83
10703 msgid "LargeFile"
10853 msgid "LargeFile"
10704 msgstr ""
10854 msgstr ""
10705
10855
10706 #: rhodecode/templates/files/files_source.mako:96
10856 #: rhodecode/templates/files/files_source.mako:106
10707 msgid "History"
10857 msgid "History"
10708 msgstr ""
10858 msgstr ""
10709
10859
10710 #: rhodecode/templates/files/files_source.mako:102
10860 #: rhodecode/templates/files/files_source.mako:112
10711 msgid "Annotation"
10861 msgid "Annotation"
10712 msgstr ""
10862 msgstr ""
10713
10863
10714 #: rhodecode/templates/files/files_source.mako:104
10864 #: rhodecode/templates/files/files_source.mako:114
10715 msgid "Raw"
10865 msgid "Raw"
10716 msgstr ""
10866 msgstr ""
10717
10867
10718 #: rhodecode/templates/files/files_source.mako:107
10868 #: rhodecode/templates/files/files_source.mako:117
10719 msgid "Copy permalink"
10869 msgid "Copy permalink"
10720 msgstr ""
10870 msgstr ""
10721
10871
10722 #: rhodecode/templates/files/files_source.mako:123
10872 #: rhodecode/templates/files/files_source.mako:133
10723 msgid "Binary file ({})"
10873 msgid "Binary file ({})"
10724 msgstr ""
10874 msgstr ""
10725
10875
10726 #: rhodecode/templates/files/files_source_header.mako:33
10876 #: rhodecode/templates/files/files_source_header.mako:33
10727 msgid "File last commit"
10877 msgid "File last commit"
10728 msgstr ""
10878 msgstr ""
10729
10879
10730 #: rhodecode/templates/files/files_upload.mako:4
10880 #: rhodecode/templates/files/files_upload.mako:4
10731 msgid "{} Files Upload"
10881 msgid "{} Files Upload"
10732 msgstr ""
10882 msgstr ""
10733
10883
10734 #: rhodecode/templates/files/files_upload.mako:36
10884 #: rhodecode/templates/files/files_upload.mako:36
10735 msgid "Uploading..."
10885 msgid "Uploading..."
10736 msgstr ""
10886 msgstr ""
10737
10887
10738 #: rhodecode/templates/files/files_upload.mako:38
10888 #: rhodecode/templates/files/files_upload.mako:38
10739 msgid "Uploaded"
10889 msgid "Uploaded"
10740 msgstr ""
10890 msgstr ""
10741
10891
10742 #: rhodecode/templates/files/files_upload.mako:52
10892 #: rhodecode/templates/files/files_upload.mako:52
10743 msgid "Upload new file"
10893 msgid "Upload new file"
10744 msgstr ""
10894 msgstr ""
10745
10895
10746 #: rhodecode/templates/files/files_upload.mako:109
10896 #: rhodecode/templates/files/files_upload.mako:109
10747 msgid "Committing..."
10897 msgid "Committing..."
10748 msgstr ""
10898 msgstr ""
10749
10899
10750 #: rhodecode/templates/files/files_upload.mako:110
10900 #: rhodecode/templates/files/files_upload.mako:110
10751 msgid "Please wait while the files are being uploaded"
10901 msgid "Please wait while the files are being uploaded"
10752 msgstr ""
10902 msgstr ""
10753
10903
10754 #: rhodecode/templates/forks/fork.mako:5
10904 #: rhodecode/templates/forks/fork.mako:5
10755 #, python-format
10905 #, python-format
10756 msgid "Fork repository %s"
10906 msgid "Fork repository %s"
10757 msgstr ""
10907 msgstr ""
10758
10908
10759 #: rhodecode/templates/forks/fork.mako:30
10909 #: rhodecode/templates/forks/fork.mako:30
10760 #: rhodecode/templates/forks/forks.mako:60
10910 #: rhodecode/templates/forks/forks.mako:60
10761 msgid "Fork name"
10911 msgid "Fork name"
10762 msgstr ""
10912 msgstr ""
10763
10913
10914 #: rhodecode/templates/forks/fork.mako:47
10915 #, python-format
10916 msgid "Select my personal group (%(repo_group_name)s)"
10917 msgstr ""
10918
10764 #: rhodecode/templates/forks/fork.mako:78
10919 #: rhodecode/templates/forks/fork.mako:78
10765 msgid "Copy permissions"
10920 msgid "Copy permissions"
10766 msgstr ""
10921 msgstr ""
10767
10922
10768 #: rhodecode/templates/forks/fork.mako:82
10923 #: rhodecode/templates/forks/fork.mako:82
10769 msgid "Copy permissions from parent repository."
10924 msgid "Copy permissions from parent repository."
10770 msgstr ""
10925 msgstr ""
10771
10926
10772 #: rhodecode/templates/forks/fork.mako:88
10927 #: rhodecode/templates/forks/fork.mako:88
10773 msgid "Private"
10928 msgid "Private"
10774 msgstr ""
10929 msgstr ""
10775
10930
10776 #: rhodecode/templates/forks/fork.mako:97
10931 #: rhodecode/templates/forks/fork.mako:97
10777 msgid "Fork this Repository"
10932 msgid "Fork this Repository"
10778 msgstr ""
10933 msgstr ""
10779
10934
10780 #: rhodecode/templates/forks/forks.mako:5
10935 #: rhodecode/templates/forks/forks.mako:5
10781 #, python-format
10936 #, python-format
10782 msgid "%s Forks"
10937 msgid "%s Forks"
10783 msgstr ""
10938 msgstr ""
10784
10939
10785 #: rhodecode/templates/forks/forks.mako:28
10940 #: rhodecode/templates/forks/forks.mako:28
10786 msgid "Create new fork"
10941 msgid "Create new fork"
10787 msgstr ""
10942 msgstr ""
10788
10943
10789 #: rhodecode/templates/forks/forks.mako:64
10944 #: rhodecode/templates/forks/forks.mako:64
10790 msgid "Forked"
10945 msgid "Forked"
10791 msgstr ""
10946 msgstr ""
10792
10947
10793 #: rhodecode/templates/journal/journal.mako:25
10948 #: rhodecode/templates/journal/journal.mako:25
10794 msgid "ATOM journal feed"
10949 msgid "ATOM journal feed"
10795 msgstr ""
10950 msgstr ""
10796
10951
10797 #: rhodecode/templates/journal/journal.mako:26
10952 #: rhodecode/templates/journal/journal.mako:26
10798 msgid "RSS journal feed"
10953 msgid "RSS journal feed"
10799 msgstr ""
10954 msgstr ""
10800
10955
10801 #: rhodecode/templates/journal/journal_data.mako:45
10956 #: rhodecode/templates/journal/journal_data.mako:45
10802 msgid "No entries yet"
10957 msgid "No entries yet"
10803 msgstr ""
10958 msgstr ""
10804
10959
10805 #: rhodecode/templates/journal/public_journal.mako:4
10960 #: rhodecode/templates/journal/public_journal.mako:4
10806 #: rhodecode/templates/journal/public_journal.mako:12
10961 #: rhodecode/templates/journal/public_journal.mako:12
10807 msgid "Public Journal"
10962 msgid "Public Journal"
10808 msgstr ""
10963 msgstr ""
10809
10964
10810 #: rhodecode/templates/journal/public_journal.mako:21
10965 #: rhodecode/templates/journal/public_journal.mako:21
10811 msgid "ATOM public journal feed"
10966 msgid "ATOM public journal feed"
10812 msgstr ""
10967 msgstr ""
10813
10968
10814 #: rhodecode/templates/journal/public_journal.mako:22
10969 #: rhodecode/templates/journal/public_journal.mako:22
10815 msgid "RSS public journal feed"
10970 msgid "RSS public journal feed"
10816 msgstr ""
10971 msgstr ""
10817
10972
10818 #: rhodecode/templates/pullrequests/pullrequest.mako:5
10973 #: rhodecode/templates/pullrequests/pullrequest.mako:5
10819 #: rhodecode/templates/pullrequests/pullrequest.mako:28
10974 #: rhodecode/templates/pullrequests/pullrequest.mako:28
10820 msgid "New pull request"
10975 msgid "New pull request"
10821 msgstr ""
10976 msgstr ""
10822
10977
10823 #: rhodecode/templates/pullrequests/pullrequest.mako:60
10978 #: rhodecode/templates/pullrequests/pullrequest.mako:60
10824 #: rhodecode/templates/pullrequests/pullrequest_show.mako:118
10979 #: rhodecode/templates/pullrequests/pullrequest_show.mako:118
10825 msgid "Commit flow"
10980 msgid "Commit flow"
10826 msgstr ""
10981 msgstr ""
10827
10982
10828 #: rhodecode/templates/pullrequests/pullrequest.mako:68
10983 #: rhodecode/templates/pullrequests/pullrequest.mako:68
10829 msgid "Source repository"
10984 msgid "Source repository"
10830 msgstr ""
10985 msgstr ""
10831
10986
10832 #: rhodecode/templates/pullrequests/pullrequest.mako:86
10987 #: rhodecode/templates/pullrequests/pullrequest.mako:86
10833 msgid "Loading refs..."
10988 msgid "Loading refs..."
10834 msgstr ""
10989 msgstr ""
10835
10990
10836 #: rhodecode/templates/pullrequests/pullrequest.mako:97
10991 #: rhodecode/templates/pullrequests/pullrequest.mako:97
10837 msgid "Submit Pull Request"
10992 msgid "Submit Pull Request"
10838 msgstr ""
10993 msgstr ""
10839
10994
10840 #: rhodecode/templates/pullrequests/pullrequest.mako:111
10995 #: rhodecode/templates/pullrequests/pullrequest.mako:111
10841 msgid "Author of this pull request"
10996 msgid "Author of this pull request"
10842 msgstr ""
10997 msgstr ""
10843
10998
10844 #: rhodecode/templates/pullrequests/pullrequest.mako:125
10999 #: rhodecode/templates/pullrequests/pullrequest.mako:125
10845 #: rhodecode/templates/pullrequests/pullrequest_show.mako:286
11000 #: rhodecode/templates/pullrequests/pullrequest_show.mako:286
10846 msgid "Reviewer rules"
11001 msgid "Reviewer rules"
10847 msgstr ""
11002 msgstr ""
10848
11003
10849 #: rhodecode/templates/pullrequests/pullrequest.mako:135
11004 #: rhodecode/templates/pullrequests/pullrequest.mako:135
10850 #: rhodecode/templates/pullrequests/pullrequest_show.mako:300
11005 #: rhodecode/templates/pullrequests/pullrequest_show.mako:300
10851 msgid "Pull request reviewers"
11006 msgid "Pull request reviewers"
10852 msgstr ""
11007 msgstr ""
10853
11008
10854 #: rhodecode/templates/pullrequests/pullrequest.mako:146
11009 #: rhodecode/templates/pullrequests/pullrequest.mako:146
10855 #: rhodecode/templates/pullrequests/pullrequest_show.mako:344
11010 #: rhodecode/templates/pullrequests/pullrequest_show.mako:344
10856 msgid "Add reviewer or reviewer group"
11011 msgid "Add reviewer or reviewer group"
10857 msgstr ""
11012 msgstr ""
10858
11013
10859 #: rhodecode/templates/pullrequests/pullrequest.mako:317
11014 #: rhodecode/templates/pullrequests/pullrequest.mako:317
10860 msgid "Show detailed compare."
11015 msgid "Show detailed compare."
10861 msgstr ""
11016 msgstr ""
10862
11017
10863 #: rhodecode/templates/pullrequests/pullrequest.mako:324
11018 #: rhodecode/templates/pullrequests/pullrequest.mako:324
10864 msgid "There are no commits to merge."
11019 msgid "There are no commits to merge."
10865 msgstr ""
11020 msgstr ""
10866
11021
10867 #: rhodecode/templates/pullrequests/pullrequest.mako:418
11022 #: rhodecode/templates/pullrequests/pullrequest.mako:418
10868 #: rhodecode/templates/pullrequests/pullrequest.mako:444
11023 #: rhodecode/templates/pullrequests/pullrequest.mako:444
10869 msgid "Select commit reference"
11024 msgid "Select commit reference"
10870 msgstr ""
11025 msgstr ""
10871
11026
10872 #: rhodecode/templates/pullrequests/pullrequest.mako:434
11027 #: rhodecode/templates/pullrequests/pullrequest.mako:434
10873 msgid "Target repository"
11028 msgid "Target repository"
10874 msgstr ""
11029 msgstr ""
10875
11030
10876 #: rhodecode/templates/pullrequests/pullrequest.mako:513
11031 #: rhodecode/templates/pullrequests/pullrequest.mako:513
10877 msgid "Please select source and target"
11032 msgid "Please select source and target"
10878 msgstr ""
11033 msgstr ""
10879
11034
10880 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:7
11035 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:7
10881 msgid "This pull request can be merged automatically."
11036 msgid "This pull request can be merged automatically."
10882 msgstr ""
11037 msgstr ""
10883
11038
10884 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:12
11039 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:12
10885 msgid "Merge is not currently possible because of below failed checks."
11040 msgid "Merge is not currently possible because of below failed checks."
10886 msgstr ""
11041 msgstr ""
10887
11042
10888 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:57
11043 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:57
10889 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:61
11044 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:61
10890 msgid "Close with status {}"
11045 msgid "Close with status {}"
10891 msgstr ""
11046 msgstr ""
10892
11047
10893 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:66
11048 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:66
10894 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
11049 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
10895 msgid "Merge and close Pull Request"
11050 msgid "Merge and close Pull Request"
10896 msgstr ""
11051 msgstr ""
10897
11052
10898 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:70
11053 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:70
10899 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:75
11054 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:75
10900 msgid "refresh checks"
11055 msgid "refresh checks"
10901 msgstr ""
11056 msgstr ""
10902
11057
10903 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
11058 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
10904 msgid "You are not allowed to merge this pull request."
11059 msgid "You are not allowed to merge this pull request."
10905 msgstr ""
11060 msgstr ""
10906
11061
10907 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:78
11062 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:78
10908 msgid "Login to Merge this Pull Request"
11063 msgid "Login to Merge this Pull Request"
10909 msgstr ""
11064 msgstr ""
10910
11065
10911 #: rhodecode/templates/pullrequests/pullrequest_show.mako:6
11066 #: rhodecode/templates/pullrequests/pullrequest_show.mako:6
10912 msgid "{} Pull Request !{}"
11067 msgid "{} Pull Request !{}"
10913 msgstr ""
11068 msgstr ""
10914
11069
10915 #: rhodecode/templates/pullrequests/pullrequest_show.mako:52
11070 #: rhodecode/templates/pullrequests/pullrequest_show.mako:52
10916 msgid "Last updated on"
11071 msgid "Last updated on"
10917 msgstr ""
11072 msgstr ""
10918
11073
10919 #: rhodecode/templates/pullrequests/pullrequest_show.mako:53
11074 #: rhodecode/templates/pullrequests/pullrequest_show.mako:53
10920 msgid "by"
11075 msgid "by"
10921 msgstr ""
11076 msgstr ""
10922
11077
10923 #: rhodecode/templates/pullrequests/pullrequest_show.mako:62
11078 #: rhodecode/templates/pullrequests/pullrequest_show.mako:62
10924 msgid "Update title & description"
11079 msgid "Update title & description"
10925 msgstr ""
11080 msgstr ""
10926
11081
10927 #: rhodecode/templates/pullrequests/pullrequest_show.mako:68
11082 #: rhodecode/templates/pullrequests/pullrequest_show.mako:68
10928 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
11083 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
10929 msgid "Delete pull request"
11084 msgid "Delete pull request"
10930 msgstr ""
11085 msgstr ""
10931
11086
10932 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
11087 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
10933 msgid "Not allowed to delete this pull request"
11088 msgid "Not allowed to delete this pull request"
10934 msgstr ""
11089 msgstr ""
10935
11090
10936 #: rhodecode/templates/pullrequests/pullrequest_show.mako:81
11091 #: rhodecode/templates/pullrequests/pullrequest_show.mako:81
10937 msgid "Rendered using {} renderer"
11092 msgid "Rendered using {} renderer"
10938 msgstr ""
11093 msgstr ""
10939
11094
10940 #: rhodecode/templates/pullrequests/pullrequest_show.mako:95
11095 #: rhodecode/templates/pullrequests/pullrequest_show.mako:95
10941 msgid "Review status"
11096 msgid "Review status"
10942 msgstr ""
11097 msgstr ""
10943
11098
10944 #: rhodecode/templates/pullrequests/pullrequest_show.mako:151
11099 #: rhodecode/templates/pullrequests/pullrequest_show.mako:151
10945 msgid "Common ancestor"
11100 msgid "Common ancestor"
10946 msgstr ""
11101 msgstr ""
10947
11102
10948 #: rhodecode/templates/pullrequests/pullrequest_show.mako:155
11103 #: rhodecode/templates/pullrequests/pullrequest_show.mako:155
10949 msgid "not available"
11104 msgid "not available"
10950 msgstr ""
11105 msgstr ""
10951
11106
10952 #: rhodecode/templates/pullrequests/pullrequest_show.mako:167
11107 #: rhodecode/templates/pullrequests/pullrequest_show.mako:167
10953 msgid "Pull changes from source"
11108 msgid "Pull changes from source"
10954 msgstr ""
11109 msgstr ""
10955
11110
10956 #: rhodecode/templates/pullrequests/pullrequest_show.mako:168
11111 #: rhodecode/templates/pullrequests/pullrequest_show.mako:168
10957 msgid "Copy the pull url"
11112 msgid "Copy the pull url"
10958 msgstr ""
11113 msgstr ""
10959
11114
10960 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
11115 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
10961 msgid "Clone repository in its merged state using shadow repository"
11116 msgid "Clone repository in its merged state using shadow repository"
10962 msgstr ""
11117 msgstr ""
10963
11118
10964 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
11119 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
10965 msgid "Clone from shadow repository"
11120 msgid "Clone from shadow repository"
10966 msgstr ""
11121 msgstr ""
10967
11122
10968 #: rhodecode/templates/pullrequests/pullrequest_show.mako:181
11123 #: rhodecode/templates/pullrequests/pullrequest_show.mako:181
10969 #: rhodecode/templates/summary/components.mako:78
11124 #: rhodecode/templates/summary/components.mako:78
10970 msgid "Copy the clone url"
11125 msgid "Copy the clone url"
10971 msgstr ""
11126 msgstr ""
10972
11127
10973 #: rhodecode/templates/pullrequests/pullrequest_show.mako:185
11128 #: rhodecode/templates/pullrequests/pullrequest_show.mako:185
10974 msgid "Shadow repository data not available"
11129 msgid "Shadow repository data not available"
10975 msgstr ""
11130 msgstr ""
10976
11131
10977 #: rhodecode/templates/pullrequests/pullrequest_show.mako:201
11132 #: rhodecode/templates/pullrequests/pullrequest_show.mako:201
10978 msgid "Versions"
11133 msgid "Versions"
10979 msgstr ""
11134 msgstr ""
10980
11135
10981 #: rhodecode/templates/pullrequests/pullrequest_show.mako:213
11136 #: rhodecode/templates/pullrequests/pullrequest_show.mako:213
10982 #: rhodecode/templates/pullrequests/pullrequest_show.mako:215
11137 #: rhodecode/templates/pullrequests/pullrequest_show.mako:215
10983 msgid "show versions"
11138 msgid "show versions"
10984 msgstr ""
11139 msgstr ""
10985
11140
10986 #: rhodecode/templates/pullrequests/pullrequest_show.mako:214
11141 #: rhodecode/templates/pullrequests/pullrequest_show.mako:214
10987 msgid "hide versions"
11142 msgid "hide versions"
10988 msgstr ""
11143 msgstr ""
10989
11144
10990 #: rhodecode/templates/pullrequests/pullrequest_show.mako:239
11145 #: rhodecode/templates/pullrequests/pullrequest_show.mako:239
10991 msgid "Your review status at this version"
11146 msgid "Your review status at this version"
10992 msgstr ""
11147 msgstr ""
10993
11148
10994 #: rhodecode/templates/pullrequests/pullrequest_show.mako:244
11149 #: rhodecode/templates/pullrequests/pullrequest_show.mako:244
10995 msgid "Comments from pull request version v{0}"
11150 msgid "Comments from pull request version v{0}"
10996 msgstr ""
11151 msgstr ""
10997
11152
10998 #: rhodecode/templates/pullrequests/pullrequest_show.mako:262
11153 #: rhodecode/templates/pullrequests/pullrequest_show.mako:262
10999 #: rhodecode/templates/pullrequests/pullrequest_show.mako:266
11154 #: rhodecode/templates/pullrequests/pullrequest_show.mako:266
11000 msgid "select versions to show changes"
11155 msgid "select versions to show changes"
11001 msgstr ""
11156 msgstr ""
11002
11157
11003 #: rhodecode/templates/pullrequests/pullrequest_show.mako:263
11158 #: rhodecode/templates/pullrequests/pullrequest_show.mako:263
11004 msgid "show changes between versions"
11159 msgid "show changes between versions"
11005 msgstr ""
11160 msgstr ""
11006
11161
11007 #: rhodecode/templates/pullrequests/pullrequest_show.mako:264
11162 #: rhodecode/templates/pullrequests/pullrequest_show.mako:264
11008 msgid "show pull request for this version"
11163 msgid "show pull request for this version"
11009 msgstr ""
11164 msgstr ""
11010
11165
11011 #: rhodecode/templates/pullrequests/pullrequest_show.mako:273
11166 #: rhodecode/templates/pullrequests/pullrequest_show.mako:273
11012 msgid "Pull request versions not available"
11167 msgid "Pull request versions not available"
11013 msgstr ""
11168 msgstr ""
11014
11169
11015 #: rhodecode/templates/pullrequests/pullrequest_show.mako:349
11170 #: rhodecode/templates/pullrequests/pullrequest_show.mako:349
11016 msgid "Save Changes"
11171 msgid "Save Changes"
11017 msgstr ""
11172 msgstr ""
11018
11173
11019 #: rhodecode/templates/pullrequests/pullrequest_show.mako:386
11174 #: rhodecode/templates/pullrequests/pullrequest_show.mako:386
11020 msgid "unresolved TODOs unavailable in this view"
11175 msgid "unresolved TODOs unavailable in this view"
11021 msgstr ""
11176 msgstr ""
11022
11177
11023 #: rhodecode/templates/pullrequests/pullrequest_show.mako:422
11178 #: rhodecode/templates/pullrequests/pullrequest_show.mako:422
11024 msgid "No unresolved TODOs"
11179 msgid "No unresolved TODOs"
11025 msgstr ""
11180 msgstr ""
11026
11181
11027 #: rhodecode/templates/pullrequests/pullrequest_show.mako:440
11182 #: rhodecode/templates/pullrequests/pullrequest_show.mako:440
11028 msgid "Cannot show diff when pull request state is changing. Current progress state"
11183 msgid "Cannot show diff when pull request state is changing. Current progress state"
11029 msgstr ""
11184 msgstr ""
11030
11185
11031 #: rhodecode/templates/pullrequests/pullrequest_show.mako:458
11186 #: rhodecode/templates/pullrequests/pullrequest_show.mako:458
11032 msgid "Missing requirements:"
11187 msgid "Missing requirements:"
11033 msgstr ""
11188 msgstr ""
11034
11189
11035 #: rhodecode/templates/pullrequests/pullrequest_show.mako:459
11190 #: rhodecode/templates/pullrequests/pullrequest_show.mako:459
11036 msgid "These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled."
11191 msgid "These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled."
11037 msgstr ""
11192 msgstr ""
11038
11193
11039 #: rhodecode/templates/pullrequests/pullrequest_show.mako:467
11194 #: rhodecode/templates/pullrequests/pullrequest_show.mako:467
11040 msgid "Missing commits"
11195 msgid "Missing commits"
11041 msgstr ""
11196 msgstr ""
11042
11197
11043 #: rhodecode/templates/pullrequests/pullrequest_show.mako:468
11198 #: rhodecode/templates/pullrequests/pullrequest_show.mako:468
11044 msgid "This pull request cannot be displayed, because one or more commits no longer exist in the source repository."
11199 msgid "This pull request cannot be displayed, because one or more commits no longer exist in the source repository."
11045 msgstr ""
11200 msgstr ""
11046
11201
11047 #: rhodecode/templates/pullrequests/pullrequest_show.mako:469
11202 #: rhodecode/templates/pullrequests/pullrequest_show.mako:469
11048 msgid "Please update this pull request, push the commits back into the source repository, or consider closing this pull request."
11203 msgid "Please update this pull request, push the commits back into the source repository, or consider closing this pull request."
11049 msgstr ""
11204 msgstr ""
11050
11205
11051 #: rhodecode/templates/pullrequests/pullrequest_show.mako:470
11206 #: rhodecode/templates/pullrequests/pullrequest_show.mako:470
11052 msgid "Consider doing a {force_refresh_url} in case you think this is an error."
11207 msgid "Consider doing a `force update commits` in case you think this is an error."
11053 msgstr ""
11208 msgstr ""
11054
11209
11055 #: rhodecode/templates/pullrequests/pullrequest_show.mako:479
11210 #: rhodecode/templates/pullrequests/pullrequest_show.mako:478
11056 msgid "There are new changes for {}:{} in source repository, please consider updating this pull request."
11211 msgid "There are new changes for `{}:{}` in source repository, please consider updating this pull request."
11057 msgstr ""
11212 msgstr ""
11058
11213
11059 #: rhodecode/templates/pullrequests/pullrequest_show.mako:491
11214 #: rhodecode/templates/pullrequests/pullrequest_show.mako:489
11060 #, python-format
11215 #, python-format
11061 msgid "Showing changes at v%d, commenting is disabled."
11216 msgid "Showing changes at v%d, commenting is disabled."
11062 msgstr ""
11217 msgstr ""
11063
11218
11064 #: rhodecode/templates/pullrequests/pullrequest_show.mako:514
11219 #: rhodecode/templates/pullrequests/pullrequest_show.mako:512
11065 #: rhodecode/templates/pullrequests/pullrequest_show.mako:536
11220 #: rhodecode/templates/pullrequests/pullrequest_show.mako:534
11066 msgid "Update commits"
11221 msgid "Update commits"
11067 msgstr ""
11222 msgstr ""
11068
11223
11069 #: rhodecode/templates/pullrequests/pullrequest_show.mako:517
11224 #: rhodecode/templates/pullrequests/pullrequest_show.mako:515
11070 msgid "more update options"
11225 msgid "more update options"
11071 msgstr ""
11226 msgstr ""
11072
11227
11073 #: rhodecode/templates/pullrequests/pullrequest_show.mako:525
11228 #: rhodecode/templates/pullrequests/pullrequest_show.mako:523
11074 msgid "Force update commits"
11229 msgid "Force update commits"
11075 msgstr ""
11230 msgstr ""
11076
11231
11077 #: rhodecode/templates/pullrequests/pullrequest_show.mako:528
11232 #: rhodecode/templates/pullrequests/pullrequest_show.mako:526
11078 msgid "Update commits and force refresh this pull request."
11233 msgid "Update commits and force refresh this pull request."
11079 msgstr ""
11234 msgstr ""
11080
11235
11081 #: rhodecode/templates/pullrequests/pullrequest_show.mako:536
11236 #: rhodecode/templates/pullrequests/pullrequest_show.mako:534
11082 msgid "Update is disabled for current view"
11237 msgid "Update is disabled for current view"
11083 msgstr ""
11238 msgstr ""
11084
11239
11085 #: rhodecode/templates/pullrequests/pullrequest_show.mako:547
11240 #: rhodecode/templates/pullrequests/pullrequest_show.mako:545
11086 msgid "Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled"
11241 msgid "Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled"
11087 msgstr ""
11242 msgstr ""
11088
11243
11089 #: rhodecode/templates/pullrequests/pullrequest_show.mako:551
11244 #: rhodecode/templates/pullrequests/pullrequest_show.mako:549
11090 msgid "commits added: {}, removed: {}"
11245 msgid "commits added: {}, removed: {}"
11091 msgstr ""
11246 msgstr ""
11092
11247
11248 #: rhodecode/templates/pullrequests/pullrequest_show.mako:567
11249 msgid "Commit added in displayed changes"
11250 msgstr ""
11251
11093 #: rhodecode/templates/pullrequests/pullrequest_show.mako:569
11252 #: rhodecode/templates/pullrequests/pullrequest_show.mako:569
11094 msgid "Commit added in displayed changes"
11095 msgstr ""
11096
11097 #: rhodecode/templates/pullrequests/pullrequest_show.mako:571
11098 msgid "Commit removed in displayed changes"
11253 msgid "Commit removed in displayed changes"
11099 msgstr ""
11254 msgstr ""
11100
11255
11256 #: rhodecode/templates/pullrequests/pullrequest_show.mako:678
11257 msgid "there is {num} general comment from older versions"
11258 msgstr ""
11259
11101 #: rhodecode/templates/pullrequests/pullrequest_show.mako:679
11260 #: rhodecode/templates/pullrequests/pullrequest_show.mako:679
11102 msgid "there is {num} general comment from older versions"
11103 msgstr ""
11104
11105 #: rhodecode/templates/pullrequests/pullrequest_show.mako:680
11106 msgid "show it"
11261 msgid "show it"
11107 msgstr ""
11262 msgstr ""
11108
11263
11264 #: rhodecode/templates/pullrequests/pullrequest_show.mako:681
11265 msgid "there are {num} general comments from older versions"
11266 msgstr ""
11267
11109 #: rhodecode/templates/pullrequests/pullrequest_show.mako:682
11268 #: rhodecode/templates/pullrequests/pullrequest_show.mako:682
11110 msgid "there are {num} general comments from older versions"
11111 msgstr ""
11112
11113 #: rhodecode/templates/pullrequests/pullrequest_show.mako:683
11114 msgid "show them"
11269 msgid "show them"
11115 msgstr ""
11270 msgstr ""
11116
11271
11117 #: rhodecode/templates/pullrequests/pullrequests.mako:4
11272 #: rhodecode/templates/pullrequests/pullrequests.mako:4
11118 msgid "{} Pull Requests"
11273 msgid "{} Pull Requests"
11119 msgstr ""
11274 msgstr ""
11120
11275
11121 #: rhodecode/templates/pullrequests/pullrequests.mako:27
11276 #: rhodecode/templates/pullrequests/pullrequests.mako:27
11122 msgid "Opened"
11277 msgid "Opened"
11123 msgstr ""
11278 msgstr ""
11124
11279
11125 #: rhodecode/templates/pullrequests/pullrequests.mako:28
11280 #: rhodecode/templates/pullrequests/pullrequests.mako:28
11126 msgid "Opened by me"
11281 msgid "Opened by me"
11127 msgstr ""
11282 msgstr ""
11128
11283
11129 #: rhodecode/templates/pullrequests/pullrequests.mako:29
11284 #: rhodecode/templates/pullrequests/pullrequests.mako:29
11130 msgid "Awaiting review"
11285 msgid "Awaiting review"
11131 msgstr ""
11286 msgstr ""
11132
11287
11133 #: rhodecode/templates/pullrequests/pullrequests.mako:30
11288 #: rhodecode/templates/pullrequests/pullrequests.mako:30
11134 msgid "Awaiting my review"
11289 msgid "Awaiting my review"
11135 msgstr ""
11290 msgstr ""
11136
11291
11137 #: rhodecode/templates/pullrequests/pullrequests.mako:32
11292 #: rhodecode/templates/pullrequests/pullrequests.mako:32
11138 msgid "From this repo"
11293 msgid "From this repo"
11139 msgstr ""
11294 msgstr ""
11140
11295
11141 #: rhodecode/templates/pullrequests/pullrequests.mako:40
11296 #: rhodecode/templates/pullrequests/pullrequests.mako:40
11142 msgid "Open new Pull Request"
11297 msgid "Open new Pull Request"
11143 msgstr ""
11298 msgstr ""
11144
11299
11145 #: rhodecode/templates/search/search.mako:6
11300 #: rhodecode/templates/search/search.mako:6
11146 #: rhodecode/templates/search/search.mako:19
11301 #: rhodecode/templates/search/search.mako:19
11147 msgid "Search inside repository {repo_name}"
11302 msgid "Search inside repository {repo_name}"
11148 msgstr ""
11303 msgstr ""
11149
11304
11150 #: rhodecode/templates/search/search.mako:8
11305 #: rhodecode/templates/search/search.mako:8
11151 #: rhodecode/templates/search/search.mako:21
11306 #: rhodecode/templates/search/search.mako:21
11152 msgid "Search inside repository group {repo_group_name}"
11307 msgid "Search inside repository group {repo_group_name}"
11153 msgstr ""
11308 msgstr ""
11154
11309
11155 #: rhodecode/templates/search/search.mako:10
11310 #: rhodecode/templates/search/search.mako:10
11156 #: rhodecode/templates/search/search.mako:23
11311 #: rhodecode/templates/search/search.mako:23
11157 msgid "Search inside all accessible repositories"
11312 msgid "Search inside all accessible repositories"
11158 msgstr ""
11313 msgstr ""
11159
11314
11160 #: rhodecode/templates/search/search.mako:99
11315 #: rhodecode/templates/search/search.mako:99
11161 msgid "File path"
11316 msgid "File path"
11162 msgstr ""
11317 msgstr ""
11163
11318
11164 #: rhodecode/templates/search/search.mako:102
11319 #: rhodecode/templates/search/search.mako:102
11165 msgid "Search"
11320 msgid "Search"
11166 msgstr ""
11321 msgstr ""
11167
11322
11168 #: rhodecode/templates/search/search.mako:108
11323 #: rhodecode/templates/search/search.mako:108
11169 #: rhodecode/templates/search/search.mako:110
11324 #: rhodecode/templates/search/search.mako:110
11170 #: rhodecode/templates/search/search.mako:112
11325 #: rhodecode/templates/search/search.mako:112
11171 msgid "Global Search"
11326 msgid "Global Search"
11172 msgstr ""
11327 msgstr ""
11173
11328
11174 #: rhodecode/templates/search/search.mako:138
11329 #: rhodecode/templates/search/search.mako:138
11175 msgid "sort"
11330 msgid "sort"
11176 msgstr ""
11331 msgstr ""
11177
11332
11178 #: rhodecode/templates/search/search.mako:157
11333 #: rhodecode/templates/search/search.mako:157
11179 msgid "Query Language examples"
11334 msgid "Query Language examples"
11180 msgstr ""
11335 msgstr ""
11181
11336
11182 #: rhodecode/templates/search/search_commit.mako:15
11337 #: rhodecode/templates/search/search_commit.mako:15
11183 msgid "Commit date"
11338 msgid "Commit date"
11184 msgstr ""
11339 msgstr ""
11185
11340
11186 #: rhodecode/templates/search/search_content.mako:7
11341 #: rhodecode/templates/search/search_content.mako:7
11187 msgid "No content matched"
11342 msgid "No content matched"
11188 msgstr ""
11343 msgstr ""
11189
11344
11190 #: rhodecode/templates/search/search_content.mako:12
11345 #: rhodecode/templates/search/search_content.mako:12
11191 msgid "more matches in this file"
11346 msgid "more matches in this file"
11192 msgstr ""
11347 msgstr ""
11193
11348
11194 #: rhodecode/templates/search/search_content.mako:112
11349 #: rhodecode/templates/search/search_content.mako:112
11195 msgid "Narrow to this repository group"
11350 msgid "Narrow to this repository group"
11196 msgstr ""
11351 msgstr ""
11197
11352
11198 #: rhodecode/templates/search/search_content.mako:119
11353 #: rhodecode/templates/search/search_content.mako:119
11199 msgid "Narrow to this repository"
11354 msgid "Narrow to this repository"
11200 msgstr ""
11355 msgstr ""
11201
11356
11202 #: rhodecode/templates/search/search_path.mako:15
11357 #: rhodecode/templates/search/search_path.mako:15
11203 msgid "Lines"
11358 msgid "Lines"
11204 msgstr ""
11359 msgstr ""
11205
11360
11206 #: rhodecode/templates/summary/components.mako:20
11361 #: rhodecode/templates/summary/components.mako:20
11207 msgid "Closed Branch"
11362 msgid "Closed Branch"
11208 msgstr ""
11363 msgstr ""
11209
11364
11210 #: rhodecode/templates/summary/components.mako:83
11365 #: rhodecode/templates/summary/components.mako:83
11211 msgid "Copy the clone by id url"
11366 msgid "Copy the clone by id url"
11212 msgstr ""
11367 msgstr ""
11213
11368
11214 #: rhodecode/templates/summary/components.mako:88
11369 #: rhodecode/templates/summary/components.mako:88
11215 msgid "Copy the clone by ssh url"
11370 msgid "Copy the clone by ssh url"
11216 msgstr ""
11371 msgstr ""
11217
11372
11218 #: rhodecode/templates/summary/components.mako:92
11373 #: rhodecode/templates/summary/components.mako:92
11219 msgid "SVN Protocol is disabled. To enable it, see the"
11374 msgid "SVN Protocol is disabled. To enable it, see the"
11220 msgstr ""
11375 msgstr ""
11221
11376
11222 #: rhodecode/templates/summary/components.mako:92
11377 #: rhodecode/templates/summary/components.mako:92
11223 msgid "documentation here"
11378 msgid "documentation here"
11224 msgstr ""
11379 msgstr ""
11225
11380
11226 #: rhodecode/templates/summary/components.mako:135
11381 #: rhodecode/templates/summary/components.mako:135
11227 msgid "Number of Repository Forks"
11382 msgid "Number of Repository Forks"
11228 msgstr ""
11383 msgstr ""
11229
11384
11230 #: rhodecode/templates/summary/components.mako:172
11385 #: rhodecode/templates/summary/components.mako:172
11231 msgid "Downloads"
11386 msgid "Downloads"
11232 msgstr ""
11387 msgstr ""
11233
11388
11234 #: rhodecode/templates/summary/components.mako:177
11389 #: rhodecode/templates/summary/components.mako:177
11235 msgid "There are no downloads yet"
11390 msgid "There are no downloads yet"
11236 msgstr ""
11391 msgstr ""
11237
11392
11238 #: rhodecode/templates/summary/components.mako:181
11393 #: rhodecode/templates/summary/components.mako:181
11239 msgid "Downloads are disabled for this repository"
11394 msgid "Downloads are disabled for this repository"
11240 msgstr ""
11395 msgstr ""
11241
11396
11242 #: rhodecode/templates/summary/components.mako:203
11397 #: rhodecode/templates/summary/components.mako:196
11398 msgid "more download options"
11399 msgstr ""
11400
11401 #: rhodecode/templates/summary/components.mako:228
11243 msgid "Repository size"
11402 msgid "Repository size"
11244 msgstr ""
11403 msgstr ""
11245
11404
11246 #: rhodecode/templates/summary/components.mako:215
11405 #: rhodecode/templates/summary/components.mako:240
11247 msgid "Calculating Repository Size..."
11406 msgid "Calculating Repository Size..."
11248 msgstr ""
11407 msgstr ""
11249
11408
11250 #: rhodecode/templates/summary/components.mako:226
11409 #: rhodecode/templates/summary/components.mako:251
11251 msgid "Code Statistics"
11410 msgid "Code Statistics"
11252 msgstr ""
11411 msgstr ""
11253
11412
11254 #: rhodecode/templates/summary/components.mako:235
11413 #: rhodecode/templates/summary/components.mako:260
11255 msgid "Statistics are disabled for this repository"
11414 msgid "Statistics are disabled for this repository"
11256 msgstr ""
11415 msgstr ""
11257
11416
11258 #: rhodecode/templates/summary/summary.mako:21
11417 #: rhodecode/templates/summary/summary.mako:21
11259 msgid "Quick start"
11418 msgid "Quick start"
11260 msgstr ""
11419 msgstr ""
11261
11420
11262 #: rhodecode/templates/summary/summary_base.mako:5
11421 #: rhodecode/templates/summary/summary_base.mako:5
11263 msgid "{} Summary"
11422 msgid "{} Summary"
11264 msgstr ""
11423 msgstr ""
11265
11424
11266 #: rhodecode/templates/summary/summary_base.mako:13
11425 #: rhodecode/templates/summary/summary_base.mako:13
11267 #, python-format
11426 #, python-format
11268 msgid "%s ATOM feed"
11427 msgid "%s ATOM feed"
11269 msgstr ""
11428 msgstr ""
11270
11429
11271 #: rhodecode/templates/summary/summary_base.mako:14
11430 #: rhodecode/templates/summary/summary_base.mako:14
11272 #, python-format
11431 #, python-format
11273 msgid "%s RSS feed"
11432 msgid "%s RSS feed"
11274 msgstr ""
11433 msgstr ""
11275
11434
11276 #: rhodecode/templates/summary/summary_commits.mako:117
11435 #: rhodecode/templates/summary/summary_commits.mako:117
11277 msgid "Add or upload files directly via RhodeCode:"
11436 msgid "Add or upload files directly via RhodeCode:"
11278 msgstr ""
11437 msgstr ""
11279
11438
11280 #: rhodecode/templates/summary/summary_commits.mako:119
11439 #: rhodecode/templates/summary/summary_commits.mako:119
11281 msgid "Add New File"
11440 msgid "Add New File"
11282 msgstr ""
11441 msgstr ""
11283
11442
11284 #: rhodecode/templates/summary/summary_commits.mako:122
11443 #: rhodecode/templates/summary/summary_commits.mako:122
11285 msgid "Upload New File"
11444 msgid "Upload New File"
11286 msgstr ""
11445 msgstr ""
11287
11446
11288 #: rhodecode/templates/summary/summary_commits.mako:128
11447 #: rhodecode/templates/summary/summary_commits.mako:128
11289 msgid "Push new repo:"
11448 msgid "Push new repo:"
11290 msgstr ""
11449 msgstr ""
11291
11450
11292 #: rhodecode/templates/summary/summary_commits.mako:151
11451 #: rhodecode/templates/summary/summary_commits.mako:151
11293 msgid "Existing repository?"
11452 msgid "Existing repository?"
11294 msgstr ""
11453 msgstr ""
11295
11454
11296 #: rhodecode/templates/tags/tags.mako:5
11455 #: rhodecode/templates/tags/tags.mako:5
11297 #, python-format
11456 #, python-format
11298 msgid "%s Tags"
11457 msgid "%s Tags"
11299 msgstr ""
11458 msgstr ""
11300
11459
11301 #: rhodecode/templates/tags/tags.mako:28
11460 #: rhodecode/templates/tags/tags.mako:28
11302 msgid "Compare Selected Tags"
11461 msgid "Compare Selected Tags"
11303 msgstr ""
11462 msgstr ""
11304
11463
11305 #: rhodecode/templates/tags/tags.mako:34
11464 #: rhodecode/templates/tags/tags.mako:34
11306 msgid "tags"
11465 msgid "tags"
11307 msgstr ""
11466 msgstr ""
11308
11467
11309 #: rhodecode/templates/user_group/profile.mako:6
11468 #: rhodecode/templates/user_group/profile.mako:6
11310 msgid "User Group Profile"
11469 msgid "User Group Profile"
11311 msgstr ""
11470 msgstr ""
11312
11471
11313 #: rhodecode/templates/user_group/profile.mako:15
11472 #: rhodecode/templates/user_group/profile.mako:15
11314 msgid "Group Name"
11473 msgid "Group Name"
11315 msgstr ""
11474 msgstr ""
11316
11475
11317 #: rhodecode/templates/users/user_profile.mako:39
11476 #: rhodecode/templates/users/user_profile.mako:39
11318 msgid "First name"
11477 msgid "First name"
11319 msgstr ""
11478 msgstr ""
11320
11479
11321 #: rhodecode/templates/users/user_profile.mako:49
11480 #: rhodecode/templates/users/user_profile.mako:49
11322 msgid "Last name"
11481 msgid "Last name"
11323 msgstr ""
11482 msgstr ""
11324
11483
11325 #: rhodecode/tests/lib/test_ext_json.py:162
11484 #: rhodecode/tests/lib/test_ext_json.py:162
11326 msgid "hello"
11485 msgid "hello"
11327 msgstr ""
11486 msgstr ""
11328
11487
@@ -1,800 +1,800 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2020 RhodeCode GmbH
3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Utilities library for RhodeCode
22 Utilities library for RhodeCode
23 """
23 """
24
24
25 import datetime
25 import datetime
26 import decorator
26 import decorator
27 import json
27 import json
28 import logging
28 import logging
29 import os
29 import os
30 import re
30 import re
31 import sys
31 import sys
32 import shutil
32 import shutil
33 import socket
33 import socket
34 import tempfile
34 import tempfile
35 import traceback
35 import traceback
36 import tarfile
36 import tarfile
37 import warnings
37 import warnings
38 import hashlib
38 import hashlib
39 from os.path import join as jn
39 from os.path import join as jn
40
40
41 import paste
41 import paste
42 import pkg_resources
42 import pkg_resources
43 from webhelpers2.text import collapse, remove_formatting
43 from webhelpers2.text import collapse, remove_formatting
44 from mako import exceptions
44 from mako import exceptions
45 from pyramid.threadlocal import get_current_registry
45 from pyramid.threadlocal import get_current_registry
46 from rhodecode.lib.request import Request
46 from rhodecode.lib.request import Request
47
47
48 from rhodecode.lib.vcs.backends.base import Config
48 from rhodecode.lib.vcs.backends.base import Config
49 from rhodecode.lib.vcs.exceptions import VCSError
49 from rhodecode.lib.vcs.exceptions import VCSError
50 from rhodecode.lib.vcs.utils.helpers import get_scm, get_scm_backend
50 from rhodecode.lib.vcs.utils.helpers import get_scm, get_scm_backend
51 from rhodecode.lib.utils2 import (
51 from rhodecode.lib.utils2 import (
52 safe_str, safe_unicode, get_current_rhodecode_user, md5, sha1)
52 safe_str, safe_unicode, get_current_rhodecode_user, md5, sha1)
53 from rhodecode.model import meta
53 from rhodecode.model import meta
54 from rhodecode.model.db import (
54 from rhodecode.model.db import (
55 Repository, User, RhodeCodeUi, UserLog, RepoGroup, UserGroup)
55 Repository, User, RhodeCodeUi, UserLog, RepoGroup, UserGroup)
56 from rhodecode.model.meta import Session
56 from rhodecode.model.meta import Session
57
57
58
58
59 log = logging.getLogger(__name__)
59 log = logging.getLogger(__name__)
60
60
61 REMOVED_REPO_PAT = re.compile(r'rm__\d{8}_\d{6}_\d{6}__.*')
61 REMOVED_REPO_PAT = re.compile(r'rm__\d{8}_\d{6}_\d{6}__.*')
62
62
63 # String which contains characters that are not allowed in slug names for
63 # String which contains characters that are not allowed in slug names for
64 # repositories or repository groups. It is properly escaped to use it in
64 # repositories or repository groups. It is properly escaped to use it in
65 # regular expressions.
65 # regular expressions.
66 SLUG_BAD_CHARS = re.escape('`?=[]\;\'"<>,/~!@#$%^&*()+{}|:')
66 SLUG_BAD_CHARS = re.escape('`?=[]\;\'"<>,/~!@#$%^&*()+{}|:')
67
67
68 # Regex that matches forbidden characters in repo/group slugs.
68 # Regex that matches forbidden characters in repo/group slugs.
69 SLUG_BAD_CHAR_RE = re.compile('[{}]'.format(SLUG_BAD_CHARS))
69 SLUG_BAD_CHAR_RE = re.compile('[{}]'.format(SLUG_BAD_CHARS))
70
70
71 # Regex that matches allowed characters in repo/group slugs.
71 # Regex that matches allowed characters in repo/group slugs.
72 SLUG_GOOD_CHAR_RE = re.compile('[^{}]'.format(SLUG_BAD_CHARS))
72 SLUG_GOOD_CHAR_RE = re.compile('[^{}]'.format(SLUG_BAD_CHARS))
73
73
74 # Regex that matches whole repo/group slugs.
74 # Regex that matches whole repo/group slugs.
75 SLUG_RE = re.compile('[^{}]+'.format(SLUG_BAD_CHARS))
75 SLUG_RE = re.compile('[^{}]+'.format(SLUG_BAD_CHARS))
76
76
77 _license_cache = None
77 _license_cache = None
78
78
79
79
80 def repo_name_slug(value):
80 def repo_name_slug(value):
81 """
81 """
82 Return slug of name of repository
82 Return slug of name of repository
83 This function is called on each creation/modification
83 This function is called on each creation/modification
84 of repository to prevent bad names in repo
84 of repository to prevent bad names in repo
85 """
85 """
86 replacement_char = '-'
86 replacement_char = '-'
87
87
88 slug = remove_formatting(value)
88 slug = remove_formatting(value)
89 slug = SLUG_BAD_CHAR_RE.sub('', slug)
89 slug = SLUG_BAD_CHAR_RE.sub('', slug)
90 slug = re.sub('[\s]+', '-', slug)
90 slug = re.sub('[\s]+', '-', slug)
91 slug = collapse(slug, replacement_char)
91 slug = collapse(slug, replacement_char)
92 return slug
92 return slug
93
93
94
94
95 #==============================================================================
95 #==============================================================================
96 # PERM DECORATOR HELPERS FOR EXTRACTING NAMES FOR PERM CHECKS
96 # PERM DECORATOR HELPERS FOR EXTRACTING NAMES FOR PERM CHECKS
97 #==============================================================================
97 #==============================================================================
98 def get_repo_slug(request):
98 def get_repo_slug(request):
99 _repo = ''
99 _repo = ''
100
100
101 if hasattr(request, 'db_repo'):
101 if hasattr(request, 'db_repo'):
102 # if our requests has set db reference use it for name, this
102 # if our requests has set db reference use it for name, this
103 # translates the example.com/_<id> into proper repo names
103 # translates the example.com/_<id> into proper repo names
104 _repo = request.db_repo.repo_name
104 _repo = request.db_repo.repo_name
105 elif getattr(request, 'matchdict', None):
105 elif getattr(request, 'matchdict', None):
106 # pyramid
106 # pyramid
107 _repo = request.matchdict.get('repo_name')
107 _repo = request.matchdict.get('repo_name')
108
108
109 if _repo:
109 if _repo:
110 _repo = _repo.rstrip('/')
110 _repo = _repo.rstrip('/')
111 return _repo
111 return _repo
112
112
113
113
114 def get_repo_group_slug(request):
114 def get_repo_group_slug(request):
115 _group = ''
115 _group = ''
116 if hasattr(request, 'db_repo_group'):
116 if hasattr(request, 'db_repo_group'):
117 # if our requests has set db reference use it for name, this
117 # if our requests has set db reference use it for name, this
118 # translates the example.com/_<id> into proper repo group names
118 # translates the example.com/_<id> into proper repo group names
119 _group = request.db_repo_group.group_name
119 _group = request.db_repo_group.group_name
120 elif getattr(request, 'matchdict', None):
120 elif getattr(request, 'matchdict', None):
121 # pyramid
121 # pyramid
122 _group = request.matchdict.get('repo_group_name')
122 _group = request.matchdict.get('repo_group_name')
123
123
124 if _group:
124 if _group:
125 _group = _group.rstrip('/')
125 _group = _group.rstrip('/')
126 return _group
126 return _group
127
127
128
128
129 def get_user_group_slug(request):
129 def get_user_group_slug(request):
130 _user_group = ''
130 _user_group = ''
131
131
132 if hasattr(request, 'db_user_group'):
132 if hasattr(request, 'db_user_group'):
133 _user_group = request.db_user_group.users_group_name
133 _user_group = request.db_user_group.users_group_name
134 elif getattr(request, 'matchdict', None):
134 elif getattr(request, 'matchdict', None):
135 # pyramid
135 # pyramid
136 _user_group = request.matchdict.get('user_group_id')
136 _user_group = request.matchdict.get('user_group_id')
137 _user_group_name = request.matchdict.get('user_group_name')
137 _user_group_name = request.matchdict.get('user_group_name')
138 try:
138 try:
139 if _user_group:
139 if _user_group:
140 _user_group = UserGroup.get(_user_group)
140 _user_group = UserGroup.get(_user_group)
141 elif _user_group_name:
141 elif _user_group_name:
142 _user_group = UserGroup.get_by_group_name(_user_group_name)
142 _user_group = UserGroup.get_by_group_name(_user_group_name)
143
143
144 if _user_group:
144 if _user_group:
145 _user_group = _user_group.users_group_name
145 _user_group = _user_group.users_group_name
146 except Exception:
146 except Exception:
147 log.exception('Failed to get user group by id and name')
147 log.exception('Failed to get user group by id and name')
148 # catch all failures here
148 # catch all failures here
149 return None
149 return None
150
150
151 return _user_group
151 return _user_group
152
152
153
153
154 def get_filesystem_repos(path, recursive=False, skip_removed_repos=True):
154 def get_filesystem_repos(path, recursive=False, skip_removed_repos=True):
155 """
155 """
156 Scans given path for repos and return (name,(type,path)) tuple
156 Scans given path for repos and return (name,(type,path)) tuple
157
157
158 :param path: path to scan for repositories
158 :param path: path to scan for repositories
159 :param recursive: recursive search and return names with subdirs in front
159 :param recursive: recursive search and return names with subdirs in front
160 """
160 """
161
161
162 # remove ending slash for better results
162 # remove ending slash for better results
163 path = path.rstrip(os.sep)
163 path = path.rstrip(os.sep)
164 log.debug('now scanning in %s location recursive:%s...', path, recursive)
164 log.debug('now scanning in %s location recursive:%s...', path, recursive)
165
165
166 def _get_repos(p):
166 def _get_repos(p):
167 dirpaths = _get_dirpaths(p)
167 dirpaths = _get_dirpaths(p)
168 if not _is_dir_writable(p):
168 if not _is_dir_writable(p):
169 log.warning('repo path without write access: %s', p)
169 log.warning('repo path without write access: %s', p)
170
170
171 for dirpath in dirpaths:
171 for dirpath in dirpaths:
172 if os.path.isfile(os.path.join(p, dirpath)):
172 if os.path.isfile(os.path.join(p, dirpath)):
173 continue
173 continue
174 cur_path = os.path.join(p, dirpath)
174 cur_path = os.path.join(p, dirpath)
175
175
176 # skip removed repos
176 # skip removed repos
177 if skip_removed_repos and REMOVED_REPO_PAT.match(dirpath):
177 if skip_removed_repos and REMOVED_REPO_PAT.match(dirpath):
178 continue
178 continue
179
179
180 #skip .<somethin> dirs
180 #skip .<somethin> dirs
181 if dirpath.startswith('.'):
181 if dirpath.startswith('.'):
182 continue
182 continue
183
183
184 try:
184 try:
185 scm_info = get_scm(cur_path)
185 scm_info = get_scm(cur_path)
186 yield scm_info[1].split(path, 1)[-1].lstrip(os.sep), scm_info
186 yield scm_info[1].split(path, 1)[-1].lstrip(os.sep), scm_info
187 except VCSError:
187 except VCSError:
188 if not recursive:
188 if not recursive:
189 continue
189 continue
190 #check if this dir containts other repos for recursive scan
190 #check if this dir containts other repos for recursive scan
191 rec_path = os.path.join(p, dirpath)
191 rec_path = os.path.join(p, dirpath)
192 if os.path.isdir(rec_path):
192 if os.path.isdir(rec_path):
193 for inner_scm in _get_repos(rec_path):
193 for inner_scm in _get_repos(rec_path):
194 yield inner_scm
194 yield inner_scm
195
195
196 return _get_repos(path)
196 return _get_repos(path)
197
197
198
198
199 def _get_dirpaths(p):
199 def _get_dirpaths(p):
200 try:
200 try:
201 # OS-independable way of checking if we have at least read-only
201 # OS-independable way of checking if we have at least read-only
202 # access or not.
202 # access or not.
203 dirpaths = os.listdir(p)
203 dirpaths = os.listdir(p)
204 except OSError:
204 except OSError:
205 log.warning('ignoring repo path without read access: %s', p)
205 log.warning('ignoring repo path without read access: %s', p)
206 return []
206 return []
207
207
208 # os.listpath has a tweak: If a unicode is passed into it, then it tries to
208 # os.listpath has a tweak: If a unicode is passed into it, then it tries to
209 # decode paths and suddenly returns unicode objects itself. The items it
209 # decode paths and suddenly returns unicode objects itself. The items it
210 # cannot decode are returned as strings and cause issues.
210 # cannot decode are returned as strings and cause issues.
211 #
211 #
212 # Those paths are ignored here until a solid solution for path handling has
212 # Those paths are ignored here until a solid solution for path handling has
213 # been built.
213 # been built.
214 expected_type = type(p)
214 expected_type = type(p)
215
215
216 def _has_correct_type(item):
216 def _has_correct_type(item):
217 if type(item) is not expected_type:
217 if type(item) is not expected_type:
218 log.error(
218 log.error(
219 u"Ignoring path %s since it cannot be decoded into unicode.",
219 u"Ignoring path %s since it cannot be decoded into unicode.",
220 # Using "repr" to make sure that we see the byte value in case
220 # Using "repr" to make sure that we see the byte value in case
221 # of support.
221 # of support.
222 repr(item))
222 repr(item))
223 return False
223 return False
224 return True
224 return True
225
225
226 dirpaths = [item for item in dirpaths if _has_correct_type(item)]
226 dirpaths = [item for item in dirpaths if _has_correct_type(item)]
227
227
228 return dirpaths
228 return dirpaths
229
229
230
230
231 def _is_dir_writable(path):
231 def _is_dir_writable(path):
232 """
232 """
233 Probe if `path` is writable.
233 Probe if `path` is writable.
234
234
235 Due to trouble on Cygwin / Windows, this is actually probing if it is
235 Due to trouble on Cygwin / Windows, this is actually probing if it is
236 possible to create a file inside of `path`, stat does not produce reliable
236 possible to create a file inside of `path`, stat does not produce reliable
237 results in this case.
237 results in this case.
238 """
238 """
239 try:
239 try:
240 with tempfile.TemporaryFile(dir=path):
240 with tempfile.TemporaryFile(dir=path):
241 pass
241 pass
242 except OSError:
242 except OSError:
243 return False
243 return False
244 return True
244 return True
245
245
246
246
247 def is_valid_repo(repo_name, base_path, expect_scm=None, explicit_scm=None, config=None):
247 def is_valid_repo(repo_name, base_path, expect_scm=None, explicit_scm=None, config=None):
248 """
248 """
249 Returns True if given path is a valid repository False otherwise.
249 Returns True if given path is a valid repository False otherwise.
250 If expect_scm param is given also, compare if given scm is the same
250 If expect_scm param is given also, compare if given scm is the same
251 as expected from scm parameter. If explicit_scm is given don't try to
251 as expected from scm parameter. If explicit_scm is given don't try to
252 detect the scm, just use the given one to check if repo is valid
252 detect the scm, just use the given one to check if repo is valid
253
253
254 :param repo_name:
254 :param repo_name:
255 :param base_path:
255 :param base_path:
256 :param expect_scm:
256 :param expect_scm:
257 :param explicit_scm:
257 :param explicit_scm:
258 :param config:
258 :param config:
259
259
260 :return True: if given path is a valid repository
260 :return True: if given path is a valid repository
261 """
261 """
262 full_path = os.path.join(safe_str(base_path), safe_str(repo_name))
262 full_path = os.path.join(safe_str(base_path), safe_str(repo_name))
263 log.debug('Checking if `%s` is a valid path for repository. '
263 log.debug('Checking if `%s` is a valid path for repository. '
264 'Explicit type: %s', repo_name, explicit_scm)
264 'Explicit type: %s', repo_name, explicit_scm)
265
265
266 try:
266 try:
267 if explicit_scm:
267 if explicit_scm:
268 detected_scms = [get_scm_backend(explicit_scm)(
268 detected_scms = [get_scm_backend(explicit_scm)(
269 full_path, config=config).alias]
269 full_path, config=config).alias]
270 else:
270 else:
271 detected_scms = get_scm(full_path)
271 detected_scms = get_scm(full_path)
272
272
273 if expect_scm:
273 if expect_scm:
274 return detected_scms[0] == expect_scm
274 return detected_scms[0] == expect_scm
275 log.debug('path: %s is an vcs object:%s', full_path, detected_scms)
275 log.debug('path: %s is an vcs object:%s', full_path, detected_scms)
276 return True
276 return True
277 except VCSError:
277 except VCSError:
278 log.debug('path: %s is not a valid repo !', full_path)
278 log.debug('path: %s is not a valid repo !', full_path)
279 return False
279 return False
280
280
281
281
282 def is_valid_repo_group(repo_group_name, base_path, skip_path_check=False):
282 def is_valid_repo_group(repo_group_name, base_path, skip_path_check=False):
283 """
283 """
284 Returns True if given path is a repository group, False otherwise
284 Returns True if given path is a repository group, False otherwise
285
285
286 :param repo_name:
286 :param repo_name:
287 :param base_path:
287 :param base_path:
288 """
288 """
289 full_path = os.path.join(safe_str(base_path), safe_str(repo_group_name))
289 full_path = os.path.join(safe_str(base_path), safe_str(repo_group_name))
290 log.debug('Checking if `%s` is a valid path for repository group',
290 log.debug('Checking if `%s` is a valid path for repository group',
291 repo_group_name)
291 repo_group_name)
292
292
293 # check if it's not a repo
293 # check if it's not a repo
294 if is_valid_repo(repo_group_name, base_path):
294 if is_valid_repo(repo_group_name, base_path):
295 log.debug('Repo called %s exist, it is not a valid repo group', repo_group_name)
295 log.debug('Repo called %s exist, it is not a valid repo group', repo_group_name)
296 return False
296 return False
297
297
298 try:
298 try:
299 # we need to check bare git repos at higher level
299 # we need to check bare git repos at higher level
300 # since we might match branches/hooks/info/objects or possible
300 # since we might match branches/hooks/info/objects or possible
301 # other things inside bare git repo
301 # other things inside bare git repo
302 maybe_repo = os.path.dirname(full_path)
302 maybe_repo = os.path.dirname(full_path)
303 if maybe_repo == base_path:
303 if maybe_repo == base_path:
304 # skip root level repo check, we know root location CANNOT BE a repo group
304 # skip root level repo check, we know root location CANNOT BE a repo group
305 return False
305 return False
306
306
307 scm_ = get_scm(maybe_repo)
307 scm_ = get_scm(maybe_repo)
308 log.debug('path: %s is a vcs object:%s, not valid repo group', full_path, scm_)
308 log.debug('path: %s is a vcs object:%s, not valid repo group', full_path, scm_)
309 return False
309 return False
310 except VCSError:
310 except VCSError:
311 pass
311 pass
312
312
313 # check if it's a valid path
313 # check if it's a valid path
314 if skip_path_check or os.path.isdir(full_path):
314 if skip_path_check or os.path.isdir(full_path):
315 log.debug('path: %s is a valid repo group !', full_path)
315 log.debug('path: %s is a valid repo group !', full_path)
316 return True
316 return True
317
317
318 log.debug('path: %s is not a valid repo group !', full_path)
318 log.debug('path: %s is not a valid repo group !', full_path)
319 return False
319 return False
320
320
321
321
322 def ask_ok(prompt, retries=4, complaint='[y]es or [n]o please!'):
322 def ask_ok(prompt, retries=4, complaint='[y]es or [n]o please!'):
323 while True:
323 while True:
324 ok = raw_input(prompt)
324 ok = raw_input(prompt)
325 if ok.lower() in ('y', 'ye', 'yes'):
325 if ok.lower() in ('y', 'ye', 'yes'):
326 return True
326 return True
327 if ok.lower() in ('n', 'no', 'nop', 'nope'):
327 if ok.lower() in ('n', 'no', 'nop', 'nope'):
328 return False
328 return False
329 retries = retries - 1
329 retries = retries - 1
330 if retries < 0:
330 if retries < 0:
331 raise IOError
331 raise IOError
332 print(complaint)
332 print(complaint)
333
333
334 # propagated from mercurial documentation
334 # propagated from mercurial documentation
335 ui_sections = [
335 ui_sections = [
336 'alias', 'auth',
336 'alias', 'auth',
337 'decode/encode', 'defaults',
337 'decode/encode', 'defaults',
338 'diff', 'email',
338 'diff', 'email',
339 'extensions', 'format',
339 'extensions', 'format',
340 'merge-patterns', 'merge-tools',
340 'merge-patterns', 'merge-tools',
341 'hooks', 'http_proxy',
341 'hooks', 'http_proxy',
342 'smtp', 'patch',
342 'smtp', 'patch',
343 'paths', 'profiling',
343 'paths', 'profiling',
344 'server', 'trusted',
344 'server', 'trusted',
345 'ui', 'web', ]
345 'ui', 'web', ]
346
346
347
347
348 def config_data_from_db(clear_session=True, repo=None):
348 def config_data_from_db(clear_session=True, repo=None):
349 """
349 """
350 Read the configuration data from the database and return configuration
350 Read the configuration data from the database and return configuration
351 tuples.
351 tuples.
352 """
352 """
353 from rhodecode.model.settings import VcsSettingsModel
353 from rhodecode.model.settings import VcsSettingsModel
354
354
355 config = []
355 config = []
356
356
357 sa = meta.Session()
357 sa = meta.Session()
358 settings_model = VcsSettingsModel(repo=repo, sa=sa)
358 settings_model = VcsSettingsModel(repo=repo, sa=sa)
359
359
360 ui_settings = settings_model.get_ui_settings()
360 ui_settings = settings_model.get_ui_settings()
361
361
362 ui_data = []
362 ui_data = []
363 for setting in ui_settings:
363 for setting in ui_settings:
364 if setting.active:
364 if setting.active:
365 ui_data.append((setting.section, setting.key, setting.value))
365 ui_data.append((setting.section, setting.key, setting.value))
366 config.append((
366 config.append((
367 safe_str(setting.section), safe_str(setting.key),
367 safe_str(setting.section), safe_str(setting.key),
368 safe_str(setting.value)))
368 safe_str(setting.value)))
369 if setting.key == 'push_ssl':
369 if setting.key == 'push_ssl':
370 # force set push_ssl requirement to False, rhodecode
370 # force set push_ssl requirement to False, rhodecode
371 # handles that
371 # handles that
372 config.append((
372 config.append((
373 safe_str(setting.section), safe_str(setting.key), False))
373 safe_str(setting.section), safe_str(setting.key), False))
374 log.debug(
374 log.debug(
375 'settings ui from db@repo[%s]: %s',
375 'settings ui from db@repo[%s]: %s',
376 repo,
376 repo,
377 ','.join(map(lambda s: '[{}] {}={}'.format(*s), ui_data)))
377 ','.join(map(lambda s: '[{}] {}={}'.format(*s), ui_data)))
378 if clear_session:
378 if clear_session:
379 meta.Session.remove()
379 meta.Session.remove()
380
380
381 # TODO: mikhail: probably it makes no sense to re-read hooks information.
381 # TODO: mikhail: probably it makes no sense to re-read hooks information.
382 # It's already there and activated/deactivated
382 # It's already there and activated/deactivated
383 skip_entries = []
383 skip_entries = []
384 enabled_hook_classes = get_enabled_hook_classes(ui_settings)
384 enabled_hook_classes = get_enabled_hook_classes(ui_settings)
385 if 'pull' not in enabled_hook_classes:
385 if 'pull' not in enabled_hook_classes:
386 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PULL))
386 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PULL))
387 if 'push' not in enabled_hook_classes:
387 if 'push' not in enabled_hook_classes:
388 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PUSH))
388 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PUSH))
389 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRETX_PUSH))
389 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRETX_PUSH))
390 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PUSH_KEY))
390 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PUSH_KEY))
391
391
392 config = [entry for entry in config if entry[:2] not in skip_entries]
392 config = [entry for entry in config if entry[:2] not in skip_entries]
393
393
394 return config
394 return config
395
395
396
396
397 def make_db_config(clear_session=True, repo=None):
397 def make_db_config(clear_session=True, repo=None):
398 """
398 """
399 Create a :class:`Config` instance based on the values in the database.
399 Create a :class:`Config` instance based on the values in the database.
400 """
400 """
401 config = Config()
401 config = Config()
402 config_data = config_data_from_db(clear_session=clear_session, repo=repo)
402 config_data = config_data_from_db(clear_session=clear_session, repo=repo)
403 for section, option, value in config_data:
403 for section, option, value in config_data:
404 config.set(section, option, value)
404 config.set(section, option, value)
405 return config
405 return config
406
406
407
407
408 def get_enabled_hook_classes(ui_settings):
408 def get_enabled_hook_classes(ui_settings):
409 """
409 """
410 Return the enabled hook classes.
410 Return the enabled hook classes.
411
411
412 :param ui_settings: List of ui_settings as returned
412 :param ui_settings: List of ui_settings as returned
413 by :meth:`VcsSettingsModel.get_ui_settings`
413 by :meth:`VcsSettingsModel.get_ui_settings`
414
414
415 :return: a list with the enabled hook classes. The order is not guaranteed.
415 :return: a list with the enabled hook classes. The order is not guaranteed.
416 :rtype: list
416 :rtype: list
417 """
417 """
418 enabled_hooks = []
418 enabled_hooks = []
419 active_hook_keys = [
419 active_hook_keys = [
420 key for section, key, value, active in ui_settings
420 key for section, key, value, active in ui_settings
421 if section == 'hooks' and active]
421 if section == 'hooks' and active]
422
422
423 hook_names = {
423 hook_names = {
424 RhodeCodeUi.HOOK_PUSH: 'push',
424 RhodeCodeUi.HOOK_PUSH: 'push',
425 RhodeCodeUi.HOOK_PULL: 'pull',
425 RhodeCodeUi.HOOK_PULL: 'pull',
426 RhodeCodeUi.HOOK_REPO_SIZE: 'repo_size'
426 RhodeCodeUi.HOOK_REPO_SIZE: 'repo_size'
427 }
427 }
428
428
429 for key in active_hook_keys:
429 for key in active_hook_keys:
430 hook = hook_names.get(key)
430 hook = hook_names.get(key)
431 if hook:
431 if hook:
432 enabled_hooks.append(hook)
432 enabled_hooks.append(hook)
433
433
434 return enabled_hooks
434 return enabled_hooks
435
435
436
436
437 def set_rhodecode_config(config):
437 def set_rhodecode_config(config):
438 """
438 """
439 Updates pyramid config with new settings from database
439 Updates pyramid config with new settings from database
440
440
441 :param config:
441 :param config:
442 """
442 """
443 from rhodecode.model.settings import SettingsModel
443 from rhodecode.model.settings import SettingsModel
444 app_settings = SettingsModel().get_all_settings()
444 app_settings = SettingsModel().get_all_settings()
445
445
446 for k, v in app_settings.items():
446 for k, v in app_settings.items():
447 config[k] = v
447 config[k] = v
448
448
449
449
450 def get_rhodecode_realm():
450 def get_rhodecode_realm():
451 """
451 """
452 Return the rhodecode realm from database.
452 Return the rhodecode realm from database.
453 """
453 """
454 from rhodecode.model.settings import SettingsModel
454 from rhodecode.model.settings import SettingsModel
455 realm = SettingsModel().get_setting_by_name('realm')
455 realm = SettingsModel().get_setting_by_name('realm')
456 return safe_str(realm.app_settings_value)
456 return safe_str(realm.app_settings_value)
457
457
458
458
459 def get_rhodecode_base_path():
459 def get_rhodecode_base_path():
460 """
460 """
461 Returns the base path. The base path is the filesystem path which points
461 Returns the base path. The base path is the filesystem path which points
462 to the repository store.
462 to the repository store.
463 """
463 """
464 from rhodecode.model.settings import SettingsModel
464 from rhodecode.model.settings import SettingsModel
465 paths_ui = SettingsModel().get_ui_by_section_and_key('paths', '/')
465 paths_ui = SettingsModel().get_ui_by_section_and_key('paths', '/')
466 return safe_str(paths_ui.ui_value)
466 return safe_str(paths_ui.ui_value)
467
467
468
468
469 def map_groups(path):
469 def map_groups(path):
470 """
470 """
471 Given a full path to a repository, create all nested groups that this
471 Given a full path to a repository, create all nested groups that this
472 repo is inside. This function creates parent-child relationships between
472 repo is inside. This function creates parent-child relationships between
473 groups and creates default perms for all new groups.
473 groups and creates default perms for all new groups.
474
474
475 :param paths: full path to repository
475 :param paths: full path to repository
476 """
476 """
477 from rhodecode.model.repo_group import RepoGroupModel
477 from rhodecode.model.repo_group import RepoGroupModel
478 sa = meta.Session()
478 sa = meta.Session()
479 groups = path.split(Repository.NAME_SEP)
479 groups = path.split(Repository.NAME_SEP)
480 parent = None
480 parent = None
481 group = None
481 group = None
482
482
483 # last element is repo in nested groups structure
483 # last element is repo in nested groups structure
484 groups = groups[:-1]
484 groups = groups[:-1]
485 rgm = RepoGroupModel(sa)
485 rgm = RepoGroupModel(sa)
486 owner = User.get_first_super_admin()
486 owner = User.get_first_super_admin()
487 for lvl, group_name in enumerate(groups):
487 for lvl, group_name in enumerate(groups):
488 group_name = '/'.join(groups[:lvl] + [group_name])
488 group_name = '/'.join(groups[:lvl] + [group_name])
489 group = RepoGroup.get_by_group_name(group_name)
489 group = RepoGroup.get_by_group_name(group_name)
490 desc = '%s group' % group_name
490 desc = '%s group' % group_name
491
491
492 # skip folders that are now removed repos
492 # skip folders that are now removed repos
493 if REMOVED_REPO_PAT.match(group_name):
493 if REMOVED_REPO_PAT.match(group_name):
494 break
494 break
495
495
496 if group is None:
496 if group is None:
497 log.debug('creating group level: %s group_name: %s',
497 log.debug('creating group level: %s group_name: %s',
498 lvl, group_name)
498 lvl, group_name)
499 group = RepoGroup(group_name, parent)
499 group = RepoGroup(group_name, parent)
500 group.group_description = desc
500 group.group_description = desc
501 group.user = owner
501 group.user = owner
502 sa.add(group)
502 sa.add(group)
503 perm_obj = rgm._create_default_perms(group)
503 perm_obj = rgm._create_default_perms(group)
504 sa.add(perm_obj)
504 sa.add(perm_obj)
505 sa.flush()
505 sa.flush()
506
506
507 parent = group
507 parent = group
508 return group
508 return group
509
509
510
510
511 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
511 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
512 """
512 """
513 maps all repos given in initial_repo_list, non existing repositories
513 maps all repos given in initial_repo_list, non existing repositories
514 are created, if remove_obsolete is True it also checks for db entries
514 are created, if remove_obsolete is True it also checks for db entries
515 that are not in initial_repo_list and removes them.
515 that are not in initial_repo_list and removes them.
516
516
517 :param initial_repo_list: list of repositories found by scanning methods
517 :param initial_repo_list: list of repositories found by scanning methods
518 :param remove_obsolete: check for obsolete entries in database
518 :param remove_obsolete: check for obsolete entries in database
519 """
519 """
520 from rhodecode.model.repo import RepoModel
520 from rhodecode.model.repo import RepoModel
521 from rhodecode.model.repo_group import RepoGroupModel
521 from rhodecode.model.repo_group import RepoGroupModel
522 from rhodecode.model.settings import SettingsModel
522 from rhodecode.model.settings import SettingsModel
523
523
524 sa = meta.Session()
524 sa = meta.Session()
525 repo_model = RepoModel()
525 repo_model = RepoModel()
526 user = User.get_first_super_admin()
526 user = User.get_first_super_admin()
527 added = []
527 added = []
528
528
529 # creation defaults
529 # creation defaults
530 defs = SettingsModel().get_default_repo_settings(strip_prefix=True)
530 defs = SettingsModel().get_default_repo_settings(strip_prefix=True)
531 enable_statistics = defs.get('repo_enable_statistics')
531 enable_statistics = defs.get('repo_enable_statistics')
532 enable_locking = defs.get('repo_enable_locking')
532 enable_locking = defs.get('repo_enable_locking')
533 enable_downloads = defs.get('repo_enable_downloads')
533 enable_downloads = defs.get('repo_enable_downloads')
534 private = defs.get('repo_private')
534 private = defs.get('repo_private')
535
535
536 for name, repo in initial_repo_list.items():
536 for name, repo in initial_repo_list.items():
537 group = map_groups(name)
537 group = map_groups(name)
538 unicode_name = safe_unicode(name)
538 unicode_name = safe_unicode(name)
539 db_repo = repo_model.get_by_repo_name(unicode_name)
539 db_repo = repo_model.get_by_repo_name(unicode_name)
540 # found repo that is on filesystem not in RhodeCode database
540 # found repo that is on filesystem not in RhodeCode database
541 if not db_repo:
541 if not db_repo:
542 log.info('repository %s not found, creating now', name)
542 log.info('repository %s not found, creating now', name)
543 added.append(name)
543 added.append(name)
544 desc = (repo.description
544 desc = (repo.description
545 if repo.description != 'unknown'
545 if repo.description != 'unknown'
546 else '%s repository' % name)
546 else '%s repository' % name)
547
547
548 db_repo = repo_model._create_repo(
548 db_repo = repo_model._create_repo(
549 repo_name=name,
549 repo_name=name,
550 repo_type=repo.alias,
550 repo_type=repo.alias,
551 description=desc,
551 description=desc,
552 repo_group=getattr(group, 'group_id', None),
552 repo_group=getattr(group, 'group_id', None),
553 owner=user,
553 owner=user,
554 enable_locking=enable_locking,
554 enable_locking=enable_locking,
555 enable_downloads=enable_downloads,
555 enable_downloads=enable_downloads,
556 enable_statistics=enable_statistics,
556 enable_statistics=enable_statistics,
557 private=private,
557 private=private,
558 state=Repository.STATE_CREATED
558 state=Repository.STATE_CREATED
559 )
559 )
560 sa.commit()
560 sa.commit()
561 # we added that repo just now, and make sure we updated server info
561 # we added that repo just now, and make sure we updated server info
562 if db_repo.repo_type == 'git':
562 if db_repo.repo_type == 'git':
563 git_repo = db_repo.scm_instance()
563 git_repo = db_repo.scm_instance()
564 # update repository server-info
564 # update repository server-info
565 log.debug('Running update server info')
565 log.debug('Running update server info')
566 git_repo._update_server_info()
566 git_repo._update_server_info()
567
567
568 db_repo.update_commit_cache()
568 db_repo.update_commit_cache()
569
569
570 config = db_repo._config
570 config = db_repo._config
571 config.set('extensions', 'largefiles', '')
571 config.set('extensions', 'largefiles', '')
572 repo = db_repo.scm_instance(config=config)
572 repo = db_repo.scm_instance(config=config)
573 repo.install_hooks()
573 repo.install_hooks()
574
574
575 removed = []
575 removed = []
576 if remove_obsolete:
576 if remove_obsolete:
577 # remove from database those repositories that are not in the filesystem
577 # remove from database those repositories that are not in the filesystem
578 for repo in sa.query(Repository).all():
578 for repo in sa.query(Repository).all():
579 if repo.repo_name not in initial_repo_list.keys():
579 if repo.repo_name not in initial_repo_list.keys():
580 log.debug("Removing non-existing repository found in db `%s`",
580 log.debug("Removing non-existing repository found in db `%s`",
581 repo.repo_name)
581 repo.repo_name)
582 try:
582 try:
583 RepoModel(sa).delete(repo, forks='detach', fs_remove=False)
583 RepoModel(sa).delete(repo, forks='detach', fs_remove=False)
584 sa.commit()
584 sa.commit()
585 removed.append(repo.repo_name)
585 removed.append(repo.repo_name)
586 except Exception:
586 except Exception:
587 # don't hold further removals on error
587 # don't hold further removals on error
588 log.error(traceback.format_exc())
588 log.error(traceback.format_exc())
589 sa.rollback()
589 sa.rollback()
590
590
591 def splitter(full_repo_name):
591 def splitter(full_repo_name):
592 _parts = full_repo_name.rsplit(RepoGroup.url_sep(), 1)
592 _parts = full_repo_name.rsplit(RepoGroup.url_sep(), 1)
593 gr_name = None
593 gr_name = None
594 if len(_parts) == 2:
594 if len(_parts) == 2:
595 gr_name = _parts[0]
595 gr_name = _parts[0]
596 return gr_name
596 return gr_name
597
597
598 initial_repo_group_list = [splitter(x) for x in
598 initial_repo_group_list = [splitter(x) for x in
599 initial_repo_list.keys() if splitter(x)]
599 initial_repo_list.keys() if splitter(x)]
600
600
601 # remove from database those repository groups that are not in the
601 # remove from database those repository groups that are not in the
602 # filesystem due to parent child relationships we need to delete them
602 # filesystem due to parent child relationships we need to delete them
603 # in a specific order of most nested first
603 # in a specific order of most nested first
604 all_groups = [x.group_name for x in sa.query(RepoGroup).all()]
604 all_groups = [x.group_name for x in sa.query(RepoGroup).all()]
605 nested_sort = lambda gr: len(gr.split('/'))
605 nested_sort = lambda gr: len(gr.split('/'))
606 for group_name in sorted(all_groups, key=nested_sort, reverse=True):
606 for group_name in sorted(all_groups, key=nested_sort, reverse=True):
607 if group_name not in initial_repo_group_list:
607 if group_name not in initial_repo_group_list:
608 repo_group = RepoGroup.get_by_group_name(group_name)
608 repo_group = RepoGroup.get_by_group_name(group_name)
609 if (repo_group.children.all() or
609 if (repo_group.children.all() or
610 not RepoGroupModel().check_exist_filesystem(
610 not RepoGroupModel().check_exist_filesystem(
611 group_name=group_name, exc_on_failure=False)):
611 group_name=group_name, exc_on_failure=False)):
612 continue
612 continue
613
613
614 log.info(
614 log.info(
615 'Removing non-existing repository group found in db `%s`',
615 'Removing non-existing repository group found in db `%s`',
616 group_name)
616 group_name)
617 try:
617 try:
618 RepoGroupModel(sa).delete(group_name, fs_remove=False)
618 RepoGroupModel(sa).delete(group_name, fs_remove=False)
619 sa.commit()
619 sa.commit()
620 removed.append(group_name)
620 removed.append(group_name)
621 except Exception:
621 except Exception:
622 # don't hold further removals on error
622 # don't hold further removals on error
623 log.exception(
623 log.exception(
624 'Unable to remove repository group `%s`',
624 'Unable to remove repository group `%s`',
625 group_name)
625 group_name)
626 sa.rollback()
626 sa.rollback()
627 raise
627 raise
628
628
629 return added, removed
629 return added, removed
630
630
631
631
632 def load_rcextensions(root_path):
632 def load_rcextensions(root_path):
633 import rhodecode
633 import rhodecode
634 from rhodecode.config import conf
634 from rhodecode.config import conf
635
635
636 path = os.path.join(root_path)
636 path = os.path.join(root_path)
637 sys.path.append(path)
637 sys.path.append(path)
638
638
639 try:
639 try:
640 rcextensions = __import__('rcextensions')
640 rcextensions = __import__('rcextensions')
641 except ImportError:
641 except ImportError:
642 if os.path.isdir(os.path.join(path, 'rcextensions')):
642 if os.path.isdir(os.path.join(path, 'rcextensions')):
643 log.warn('Unable to load rcextensions from %s', path)
643 log.warn('Unable to load rcextensions from %s', path)
644 rcextensions = None
644 rcextensions = None
645
645
646 if rcextensions:
646 if rcextensions:
647 log.debug('Found rcextensions module loaded %s...', rcextensions)
647 log.info('Loaded rcextensions from %s...', rcextensions)
648 rhodecode.EXTENSIONS = rcextensions
648 rhodecode.EXTENSIONS = rcextensions
649
649
650 # Additional mappings that are not present in the pygments lexers
650 # Additional mappings that are not present in the pygments lexers
651 conf.LANGUAGES_EXTENSIONS_MAP.update(
651 conf.LANGUAGES_EXTENSIONS_MAP.update(
652 getattr(rhodecode.EXTENSIONS, 'EXTRA_MAPPINGS', {}))
652 getattr(rhodecode.EXTENSIONS, 'EXTRA_MAPPINGS', {}))
653
653
654
654
655 def get_custom_lexer(extension):
655 def get_custom_lexer(extension):
656 """
656 """
657 returns a custom lexer if it is defined in rcextensions module, or None
657 returns a custom lexer if it is defined in rcextensions module, or None
658 if there's no custom lexer defined
658 if there's no custom lexer defined
659 """
659 """
660 import rhodecode
660 import rhodecode
661 from pygments import lexers
661 from pygments import lexers
662
662
663 # custom override made by RhodeCode
663 # custom override made by RhodeCode
664 if extension in ['mako']:
664 if extension in ['mako']:
665 return lexers.get_lexer_by_name('html+mako')
665 return lexers.get_lexer_by_name('html+mako')
666
666
667 # check if we didn't define this extension as other lexer
667 # check if we didn't define this extension as other lexer
668 extensions = rhodecode.EXTENSIONS and getattr(rhodecode.EXTENSIONS, 'EXTRA_LEXERS', None)
668 extensions = rhodecode.EXTENSIONS and getattr(rhodecode.EXTENSIONS, 'EXTRA_LEXERS', None)
669 if extensions and extension in rhodecode.EXTENSIONS.EXTRA_LEXERS:
669 if extensions and extension in rhodecode.EXTENSIONS.EXTRA_LEXERS:
670 _lexer_name = rhodecode.EXTENSIONS.EXTRA_LEXERS[extension]
670 _lexer_name = rhodecode.EXTENSIONS.EXTRA_LEXERS[extension]
671 return lexers.get_lexer_by_name(_lexer_name)
671 return lexers.get_lexer_by_name(_lexer_name)
672
672
673
673
674 #==============================================================================
674 #==============================================================================
675 # TEST FUNCTIONS AND CREATORS
675 # TEST FUNCTIONS AND CREATORS
676 #==============================================================================
676 #==============================================================================
677 def create_test_index(repo_location, config):
677 def create_test_index(repo_location, config):
678 """
678 """
679 Makes default test index.
679 Makes default test index.
680 """
680 """
681 import rc_testdata
681 import rc_testdata
682
682
683 rc_testdata.extract_search_index(
683 rc_testdata.extract_search_index(
684 'vcs_search_index', os.path.dirname(config['search.location']))
684 'vcs_search_index', os.path.dirname(config['search.location']))
685
685
686
686
687 def create_test_directory(test_path):
687 def create_test_directory(test_path):
688 """
688 """
689 Create test directory if it doesn't exist.
689 Create test directory if it doesn't exist.
690 """
690 """
691 if not os.path.isdir(test_path):
691 if not os.path.isdir(test_path):
692 log.debug('Creating testdir %s', test_path)
692 log.debug('Creating testdir %s', test_path)
693 os.makedirs(test_path)
693 os.makedirs(test_path)
694
694
695
695
696 def create_test_database(test_path, config):
696 def create_test_database(test_path, config):
697 """
697 """
698 Makes a fresh database.
698 Makes a fresh database.
699 """
699 """
700 from rhodecode.lib.db_manage import DbManage
700 from rhodecode.lib.db_manage import DbManage
701
701
702 # PART ONE create db
702 # PART ONE create db
703 dbconf = config['sqlalchemy.db1.url']
703 dbconf = config['sqlalchemy.db1.url']
704 log.debug('making test db %s', dbconf)
704 log.debug('making test db %s', dbconf)
705
705
706 dbmanage = DbManage(log_sql=False, dbconf=dbconf, root=config['here'],
706 dbmanage = DbManage(log_sql=False, dbconf=dbconf, root=config['here'],
707 tests=True, cli_args={'force_ask': True})
707 tests=True, cli_args={'force_ask': True})
708 dbmanage.create_tables(override=True)
708 dbmanage.create_tables(override=True)
709 dbmanage.set_db_version()
709 dbmanage.set_db_version()
710 # for tests dynamically set new root paths based on generated content
710 # for tests dynamically set new root paths based on generated content
711 dbmanage.create_settings(dbmanage.config_prompt(test_path))
711 dbmanage.create_settings(dbmanage.config_prompt(test_path))
712 dbmanage.create_default_user()
712 dbmanage.create_default_user()
713 dbmanage.create_test_admin_and_users()
713 dbmanage.create_test_admin_and_users()
714 dbmanage.create_permissions()
714 dbmanage.create_permissions()
715 dbmanage.populate_default_permissions()
715 dbmanage.populate_default_permissions()
716 Session().commit()
716 Session().commit()
717
717
718
718
719 def create_test_repositories(test_path, config):
719 def create_test_repositories(test_path, config):
720 """
720 """
721 Creates test repositories in the temporary directory. Repositories are
721 Creates test repositories in the temporary directory. Repositories are
722 extracted from archives within the rc_testdata package.
722 extracted from archives within the rc_testdata package.
723 """
723 """
724 import rc_testdata
724 import rc_testdata
725 from rhodecode.tests import HG_REPO, GIT_REPO, SVN_REPO
725 from rhodecode.tests import HG_REPO, GIT_REPO, SVN_REPO
726
726
727 log.debug('making test vcs repositories')
727 log.debug('making test vcs repositories')
728
728
729 idx_path = config['search.location']
729 idx_path = config['search.location']
730 data_path = config['cache_dir']
730 data_path = config['cache_dir']
731
731
732 # clean index and data
732 # clean index and data
733 if idx_path and os.path.exists(idx_path):
733 if idx_path and os.path.exists(idx_path):
734 log.debug('remove %s', idx_path)
734 log.debug('remove %s', idx_path)
735 shutil.rmtree(idx_path)
735 shutil.rmtree(idx_path)
736
736
737 if data_path and os.path.exists(data_path):
737 if data_path and os.path.exists(data_path):
738 log.debug('remove %s', data_path)
738 log.debug('remove %s', data_path)
739 shutil.rmtree(data_path)
739 shutil.rmtree(data_path)
740
740
741 rc_testdata.extract_hg_dump('vcs_test_hg', jn(test_path, HG_REPO))
741 rc_testdata.extract_hg_dump('vcs_test_hg', jn(test_path, HG_REPO))
742 rc_testdata.extract_git_dump('vcs_test_git', jn(test_path, GIT_REPO))
742 rc_testdata.extract_git_dump('vcs_test_git', jn(test_path, GIT_REPO))
743
743
744 # Note: Subversion is in the process of being integrated with the system,
744 # Note: Subversion is in the process of being integrated with the system,
745 # until we have a properly packed version of the test svn repository, this
745 # until we have a properly packed version of the test svn repository, this
746 # tries to copy over the repo from a package "rc_testdata"
746 # tries to copy over the repo from a package "rc_testdata"
747 svn_repo_path = rc_testdata.get_svn_repo_archive()
747 svn_repo_path = rc_testdata.get_svn_repo_archive()
748 with tarfile.open(svn_repo_path) as tar:
748 with tarfile.open(svn_repo_path) as tar:
749 tar.extractall(jn(test_path, SVN_REPO))
749 tar.extractall(jn(test_path, SVN_REPO))
750
750
751
751
752 def password_changed(auth_user, session):
752 def password_changed(auth_user, session):
753 # Never report password change in case of default user or anonymous user.
753 # Never report password change in case of default user or anonymous user.
754 if auth_user.username == User.DEFAULT_USER or auth_user.user_id is None:
754 if auth_user.username == User.DEFAULT_USER or auth_user.user_id is None:
755 return False
755 return False
756
756
757 password_hash = md5(auth_user.password) if auth_user.password else None
757 password_hash = md5(auth_user.password) if auth_user.password else None
758 rhodecode_user = session.get('rhodecode_user', {})
758 rhodecode_user = session.get('rhodecode_user', {})
759 session_password_hash = rhodecode_user.get('password', '')
759 session_password_hash = rhodecode_user.get('password', '')
760 return password_hash != session_password_hash
760 return password_hash != session_password_hash
761
761
762
762
763 def read_opensource_licenses():
763 def read_opensource_licenses():
764 global _license_cache
764 global _license_cache
765
765
766 if not _license_cache:
766 if not _license_cache:
767 licenses = pkg_resources.resource_string(
767 licenses = pkg_resources.resource_string(
768 'rhodecode', 'config/licenses.json')
768 'rhodecode', 'config/licenses.json')
769 _license_cache = json.loads(licenses)
769 _license_cache = json.loads(licenses)
770
770
771 return _license_cache
771 return _license_cache
772
772
773
773
774 def generate_platform_uuid():
774 def generate_platform_uuid():
775 """
775 """
776 Generates platform UUID based on it's name
776 Generates platform UUID based on it's name
777 """
777 """
778 import platform
778 import platform
779
779
780 try:
780 try:
781 uuid_list = [platform.platform()]
781 uuid_list = [platform.platform()]
782 return hashlib.sha256(':'.join(uuid_list)).hexdigest()
782 return hashlib.sha256(':'.join(uuid_list)).hexdigest()
783 except Exception as e:
783 except Exception as e:
784 log.error('Failed to generate host uuid: %s', e)
784 log.error('Failed to generate host uuid: %s', e)
785 return 'UNDEFINED'
785 return 'UNDEFINED'
786
786
787
787
788 def send_test_email(recipients, email_body='TEST EMAIL'):
788 def send_test_email(recipients, email_body='TEST EMAIL'):
789 """
789 """
790 Simple code for generating test emails.
790 Simple code for generating test emails.
791 Usage::
791 Usage::
792
792
793 from rhodecode.lib import utils
793 from rhodecode.lib import utils
794 utils.send_test_email()
794 utils.send_test_email()
795 """
795 """
796 from rhodecode.lib.celerylib import tasks, run_task
796 from rhodecode.lib.celerylib import tasks, run_task
797
797
798 email_body = email_body_plaintext = email_body
798 email_body = email_body_plaintext = email_body
799 subject = 'SUBJECT FROM: {}'.format(socket.gethostname())
799 subject = 'SUBJECT FROM: {}'.format(socket.gethostname())
800 tasks.send_email(recipients, subject, email_body_plaintext, email_body)
800 tasks.send_email(recipients, subject, email_body_plaintext, email_body)
@@ -1,1104 +1,1070 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2020 RhodeCode GmbH
3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 """
22 """
23 Some simple helper functions
23 Some simple helper functions
24 """
24 """
25
25
26 import collections
26 import collections
27 import datetime
27 import datetime
28 import dateutil.relativedelta
28 import dateutil.relativedelta
29 import hashlib
29 import hashlib
30 import logging
30 import logging
31 import re
31 import re
32 import sys
32 import sys
33 import time
33 import time
34 import urllib
34 import urllib
35 import urlobject
35 import urlobject
36 import uuid
36 import uuid
37 import getpass
37 import getpass
38 from functools import update_wrapper, partial
38 from functools import update_wrapper, partial
39
39
40 import pygments.lexers
40 import pygments.lexers
41 import sqlalchemy
41 import sqlalchemy
42 import sqlalchemy.engine.url
42 import sqlalchemy.engine.url
43 import sqlalchemy.exc
43 import sqlalchemy.exc
44 import sqlalchemy.sql
44 import sqlalchemy.sql
45 import webob
45 import webob
46 import pyramid.threadlocal
46 import pyramid.threadlocal
47 from pyramid import compat
47 from pyramid import compat
48 from pyramid.settings import asbool
48 from pyramid.settings import asbool
49
49
50 import rhodecode
50 import rhodecode
51 from rhodecode.translation import _, _pluralize
51 from rhodecode.translation import _, _pluralize
52
52
53
53
54 def md5(s):
54 def md5(s):
55 return hashlib.md5(s).hexdigest()
55 return hashlib.md5(s).hexdigest()
56
56
57
57
58 def md5_safe(s):
58 def md5_safe(s):
59 return md5(safe_str(s))
59 return md5(safe_str(s))
60
60
61
61
62 def sha1(s):
62 def sha1(s):
63 return hashlib.sha1(s).hexdigest()
63 return hashlib.sha1(s).hexdigest()
64
64
65
65
66 def sha1_safe(s):
66 def sha1_safe(s):
67 return sha1(safe_str(s))
67 return sha1(safe_str(s))
68
68
69
69
70 def __get_lem(extra_mapping=None):
70 def __get_lem(extra_mapping=None):
71 """
71 """
72 Get language extension map based on what's inside pygments lexers
72 Get language extension map based on what's inside pygments lexers
73 """
73 """
74 d = collections.defaultdict(lambda: [])
74 d = collections.defaultdict(lambda: [])
75
75
76 def __clean(s):
76 def __clean(s):
77 s = s.lstrip('*')
77 s = s.lstrip('*')
78 s = s.lstrip('.')
78 s = s.lstrip('.')
79
79
80 if s.find('[') != -1:
80 if s.find('[') != -1:
81 exts = []
81 exts = []
82 start, stop = s.find('['), s.find(']')
82 start, stop = s.find('['), s.find(']')
83
83
84 for suffix in s[start + 1:stop]:
84 for suffix in s[start + 1:stop]:
85 exts.append(s[:s.find('[')] + suffix)
85 exts.append(s[:s.find('[')] + suffix)
86 return [e.lower() for e in exts]
86 return [e.lower() for e in exts]
87 else:
87 else:
88 return [s.lower()]
88 return [s.lower()]
89
89
90 for lx, t in sorted(pygments.lexers.LEXERS.items()):
90 for lx, t in sorted(pygments.lexers.LEXERS.items()):
91 m = map(__clean, t[-2])
91 m = map(__clean, t[-2])
92 if m:
92 if m:
93 m = reduce(lambda x, y: x + y, m)
93 m = reduce(lambda x, y: x + y, m)
94 for ext in m:
94 for ext in m:
95 desc = lx.replace('Lexer', '')
95 desc = lx.replace('Lexer', '')
96 d[ext].append(desc)
96 d[ext].append(desc)
97
97
98 data = dict(d)
98 data = dict(d)
99
99
100 extra_mapping = extra_mapping or {}
100 extra_mapping = extra_mapping or {}
101 if extra_mapping:
101 if extra_mapping:
102 for k, v in extra_mapping.items():
102 for k, v in extra_mapping.items():
103 if k not in data:
103 if k not in data:
104 # register new mapping2lexer
104 # register new mapping2lexer
105 data[k] = [v]
105 data[k] = [v]
106
106
107 return data
107 return data
108
108
109
109
110 def str2bool(_str):
110 def str2bool(_str):
111 """
111 """
112 returns True/False value from given string, it tries to translate the
112 returns True/False value from given string, it tries to translate the
113 string into boolean
113 string into boolean
114
114
115 :param _str: string value to translate into boolean
115 :param _str: string value to translate into boolean
116 :rtype: boolean
116 :rtype: boolean
117 :returns: boolean from given string
117 :returns: boolean from given string
118 """
118 """
119 if _str is None:
119 if _str is None:
120 return False
120 return False
121 if _str in (True, False):
121 if _str in (True, False):
122 return _str
122 return _str
123 _str = str(_str).strip().lower()
123 _str = str(_str).strip().lower()
124 return _str in ('t', 'true', 'y', 'yes', 'on', '1')
124 return _str in ('t', 'true', 'y', 'yes', 'on', '1')
125
125
126
126
127 def aslist(obj, sep=None, strip=True):
127 def aslist(obj, sep=None, strip=True):
128 """
128 """
129 Returns given string separated by sep as list
129 Returns given string separated by sep as list
130
130
131 :param obj:
131 :param obj:
132 :param sep:
132 :param sep:
133 :param strip:
133 :param strip:
134 """
134 """
135 if isinstance(obj, (basestring,)):
135 if isinstance(obj, (basestring,)):
136 lst = obj.split(sep)
136 lst = obj.split(sep)
137 if strip:
137 if strip:
138 lst = [v.strip() for v in lst]
138 lst = [v.strip() for v in lst]
139 return lst
139 return lst
140 elif isinstance(obj, (list, tuple)):
140 elif isinstance(obj, (list, tuple)):
141 return obj
141 return obj
142 elif obj is None:
142 elif obj is None:
143 return []
143 return []
144 else:
144 else:
145 return [obj]
145 return [obj]
146
146
147
147
148 def convert_line_endings(line, mode):
148 def convert_line_endings(line, mode):
149 """
149 """
150 Converts a given line "line end" accordingly to given mode
150 Converts a given line "line end" accordingly to given mode
151
151
152 Available modes are::
152 Available modes are::
153 0 - Unix
153 0 - Unix
154 1 - Mac
154 1 - Mac
155 2 - DOS
155 2 - DOS
156
156
157 :param line: given line to convert
157 :param line: given line to convert
158 :param mode: mode to convert to
158 :param mode: mode to convert to
159 :rtype: str
159 :rtype: str
160 :return: converted line according to mode
160 :return: converted line according to mode
161 """
161 """
162 if mode == 0:
162 if mode == 0:
163 line = line.replace('\r\n', '\n')
163 line = line.replace('\r\n', '\n')
164 line = line.replace('\r', '\n')
164 line = line.replace('\r', '\n')
165 elif mode == 1:
165 elif mode == 1:
166 line = line.replace('\r\n', '\r')
166 line = line.replace('\r\n', '\r')
167 line = line.replace('\n', '\r')
167 line = line.replace('\n', '\r')
168 elif mode == 2:
168 elif mode == 2:
169 line = re.sub('\r(?!\n)|(?<!\r)\n', '\r\n', line)
169 line = re.sub('\r(?!\n)|(?<!\r)\n', '\r\n', line)
170 return line
170 return line
171
171
172
172
173 def detect_mode(line, default):
173 def detect_mode(line, default):
174 """
174 """
175 Detects line break for given line, if line break couldn't be found
175 Detects line break for given line, if line break couldn't be found
176 given default value is returned
176 given default value is returned
177
177
178 :param line: str line
178 :param line: str line
179 :param default: default
179 :param default: default
180 :rtype: int
180 :rtype: int
181 :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS
181 :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS
182 """
182 """
183 if line.endswith('\r\n'):
183 if line.endswith('\r\n'):
184 return 2
184 return 2
185 elif line.endswith('\n'):
185 elif line.endswith('\n'):
186 return 0
186 return 0
187 elif line.endswith('\r'):
187 elif line.endswith('\r'):
188 return 1
188 return 1
189 else:
189 else:
190 return default
190 return default
191
191
192
192
193 def safe_int(val, default=None):
193 def safe_int(val, default=None):
194 """
194 """
195 Returns int() of val if val is not convertable to int use default
195 Returns int() of val if val is not convertable to int use default
196 instead
196 instead
197
197
198 :param val:
198 :param val:
199 :param default:
199 :param default:
200 """
200 """
201
201
202 try:
202 try:
203 val = int(val)
203 val = int(val)
204 except (ValueError, TypeError):
204 except (ValueError, TypeError):
205 val = default
205 val = default
206
206
207 return val
207 return val
208
208
209
209
210 def safe_unicode(str_, from_encoding=None, use_chardet=False):
210 def safe_unicode(str_, from_encoding=None, use_chardet=False):
211 """
211 """
212 safe unicode function. Does few trick to turn str_ into unicode
212 safe unicode function. Does few trick to turn str_ into unicode
213
213
214 In case of UnicodeDecode error, we try to return it with encoding detected
214 In case of UnicodeDecode error, we try to return it with encoding detected
215 by chardet library if it fails fallback to unicode with errors replaced
215 by chardet library if it fails fallback to unicode with errors replaced
216
216
217 :param str_: string to decode
217 :param str_: string to decode
218 :rtype: unicode
218 :rtype: unicode
219 :returns: unicode object
219 :returns: unicode object
220 """
220 """
221 if isinstance(str_, unicode):
221 if isinstance(str_, unicode):
222 return str_
222 return str_
223
223
224 if not from_encoding:
224 if not from_encoding:
225 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
225 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
226 'utf8'), sep=',')
226 'utf8'), sep=',')
227 from_encoding = DEFAULT_ENCODINGS
227 from_encoding = DEFAULT_ENCODINGS
228
228
229 if not isinstance(from_encoding, (list, tuple)):
229 if not isinstance(from_encoding, (list, tuple)):
230 from_encoding = [from_encoding]
230 from_encoding = [from_encoding]
231
231
232 try:
232 try:
233 return unicode(str_)
233 return unicode(str_)
234 except UnicodeDecodeError:
234 except UnicodeDecodeError:
235 pass
235 pass
236
236
237 for enc in from_encoding:
237 for enc in from_encoding:
238 try:
238 try:
239 return unicode(str_, enc)
239 return unicode(str_, enc)
240 except UnicodeDecodeError:
240 except UnicodeDecodeError:
241 pass
241 pass
242
242
243 if use_chardet:
243 if use_chardet:
244 try:
244 try:
245 import chardet
245 import chardet
246 encoding = chardet.detect(str_)['encoding']
246 encoding = chardet.detect(str_)['encoding']
247 if encoding is None:
247 if encoding is None:
248 raise Exception()
248 raise Exception()
249 return str_.decode(encoding)
249 return str_.decode(encoding)
250 except (ImportError, UnicodeDecodeError, Exception):
250 except (ImportError, UnicodeDecodeError, Exception):
251 return unicode(str_, from_encoding[0], 'replace')
251 return unicode(str_, from_encoding[0], 'replace')
252 else:
252 else:
253 return unicode(str_, from_encoding[0], 'replace')
253 return unicode(str_, from_encoding[0], 'replace')
254
254
255 def safe_str(unicode_, to_encoding=None, use_chardet=False):
255 def safe_str(unicode_, to_encoding=None, use_chardet=False):
256 """
256 """
257 safe str function. Does few trick to turn unicode_ into string
257 safe str function. Does few trick to turn unicode_ into string
258
258
259 In case of UnicodeEncodeError, we try to return it with encoding detected
259 In case of UnicodeEncodeError, we try to return it with encoding detected
260 by chardet library if it fails fallback to string with errors replaced
260 by chardet library if it fails fallback to string with errors replaced
261
261
262 :param unicode_: unicode to encode
262 :param unicode_: unicode to encode
263 :rtype: str
263 :rtype: str
264 :returns: str object
264 :returns: str object
265 """
265 """
266
266
267 # if it's not basestr cast to str
267 # if it's not basestr cast to str
268 if not isinstance(unicode_, compat.string_types):
268 if not isinstance(unicode_, compat.string_types):
269 return str(unicode_)
269 return str(unicode_)
270
270
271 if isinstance(unicode_, str):
271 if isinstance(unicode_, str):
272 return unicode_
272 return unicode_
273
273
274 if not to_encoding:
274 if not to_encoding:
275 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
275 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
276 'utf8'), sep=',')
276 'utf8'), sep=',')
277 to_encoding = DEFAULT_ENCODINGS
277 to_encoding = DEFAULT_ENCODINGS
278
278
279 if not isinstance(to_encoding, (list, tuple)):
279 if not isinstance(to_encoding, (list, tuple)):
280 to_encoding = [to_encoding]
280 to_encoding = [to_encoding]
281
281
282 for enc in to_encoding:
282 for enc in to_encoding:
283 try:
283 try:
284 return unicode_.encode(enc)
284 return unicode_.encode(enc)
285 except UnicodeEncodeError:
285 except UnicodeEncodeError:
286 pass
286 pass
287
287
288 if use_chardet:
288 if use_chardet:
289 try:
289 try:
290 import chardet
290 import chardet
291 encoding = chardet.detect(unicode_)['encoding']
291 encoding = chardet.detect(unicode_)['encoding']
292 if encoding is None:
292 if encoding is None:
293 raise UnicodeEncodeError()
293 raise UnicodeEncodeError()
294
294
295 return unicode_.encode(encoding)
295 return unicode_.encode(encoding)
296 except (ImportError, UnicodeEncodeError):
296 except (ImportError, UnicodeEncodeError):
297 return unicode_.encode(to_encoding[0], 'replace')
297 return unicode_.encode(to_encoding[0], 'replace')
298 else:
298 else:
299 return unicode_.encode(to_encoding[0], 'replace')
299 return unicode_.encode(to_encoding[0], 'replace')
300
300
301
301
302 def remove_suffix(s, suffix):
302 def remove_suffix(s, suffix):
303 if s.endswith(suffix):
303 if s.endswith(suffix):
304 s = s[:-1 * len(suffix)]
304 s = s[:-1 * len(suffix)]
305 return s
305 return s
306
306
307
307
308 def remove_prefix(s, prefix):
308 def remove_prefix(s, prefix):
309 if s.startswith(prefix):
309 if s.startswith(prefix):
310 s = s[len(prefix):]
310 s = s[len(prefix):]
311 return s
311 return s
312
312
313
313
314 def find_calling_context(ignore_modules=None):
314 def find_calling_context(ignore_modules=None):
315 """
315 """
316 Look through the calling stack and return the frame which called
316 Look through the calling stack and return the frame which called
317 this function and is part of core module ( ie. rhodecode.* )
317 this function and is part of core module ( ie. rhodecode.* )
318
318
319 :param ignore_modules: list of modules to ignore eg. ['rhodecode.lib']
319 :param ignore_modules: list of modules to ignore eg. ['rhodecode.lib']
320 """
320 """
321
321
322 ignore_modules = ignore_modules or []
322 ignore_modules = ignore_modules or []
323
323
324 f = sys._getframe(2)
324 f = sys._getframe(2)
325 while f.f_back is not None:
325 while f.f_back is not None:
326 name = f.f_globals.get('__name__')
326 name = f.f_globals.get('__name__')
327 if name and name.startswith(__name__.split('.')[0]):
327 if name and name.startswith(__name__.split('.')[0]):
328 if name not in ignore_modules:
328 if name not in ignore_modules:
329 return f
329 return f
330 f = f.f_back
330 f = f.f_back
331 return None
331 return None
332
332
333
333
334 def ping_connection(connection, branch):
334 def ping_connection(connection, branch):
335 if branch:
335 if branch:
336 # "branch" refers to a sub-connection of a connection,
336 # "branch" refers to a sub-connection of a connection,
337 # we don't want to bother pinging on these.
337 # we don't want to bother pinging on these.
338 return
338 return
339
339
340 # turn off "close with result". This flag is only used with
340 # turn off "close with result". This flag is only used with
341 # "connectionless" execution, otherwise will be False in any case
341 # "connectionless" execution, otherwise will be False in any case
342 save_should_close_with_result = connection.should_close_with_result
342 save_should_close_with_result = connection.should_close_with_result
343 connection.should_close_with_result = False
343 connection.should_close_with_result = False
344
344
345 try:
345 try:
346 # run a SELECT 1. use a core select() so that
346 # run a SELECT 1. use a core select() so that
347 # the SELECT of a scalar value without a table is
347 # the SELECT of a scalar value without a table is
348 # appropriately formatted for the backend
348 # appropriately formatted for the backend
349 connection.scalar(sqlalchemy.sql.select([1]))
349 connection.scalar(sqlalchemy.sql.select([1]))
350 except sqlalchemy.exc.DBAPIError as err:
350 except sqlalchemy.exc.DBAPIError as err:
351 # catch SQLAlchemy's DBAPIError, which is a wrapper
351 # catch SQLAlchemy's DBAPIError, which is a wrapper
352 # for the DBAPI's exception. It includes a .connection_invalidated
352 # for the DBAPI's exception. It includes a .connection_invalidated
353 # attribute which specifies if this connection is a "disconnect"
353 # attribute which specifies if this connection is a "disconnect"
354 # condition, which is based on inspection of the original exception
354 # condition, which is based on inspection of the original exception
355 # by the dialect in use.
355 # by the dialect in use.
356 if err.connection_invalidated:
356 if err.connection_invalidated:
357 # run the same SELECT again - the connection will re-validate
357 # run the same SELECT again - the connection will re-validate
358 # itself and establish a new connection. The disconnect detection
358 # itself and establish a new connection. The disconnect detection
359 # here also causes the whole connection pool to be invalidated
359 # here also causes the whole connection pool to be invalidated
360 # so that all stale connections are discarded.
360 # so that all stale connections are discarded.
361 connection.scalar(sqlalchemy.sql.select([1]))
361 connection.scalar(sqlalchemy.sql.select([1]))
362 else:
362 else:
363 raise
363 raise
364 finally:
364 finally:
365 # restore "close with result"
365 # restore "close with result"
366 connection.should_close_with_result = save_should_close_with_result
366 connection.should_close_with_result = save_should_close_with_result
367
367
368
368
369 def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs):
369 def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs):
370 """Custom engine_from_config functions."""
370 """Custom engine_from_config functions."""
371 log = logging.getLogger('sqlalchemy.engine')
371 log = logging.getLogger('sqlalchemy.engine')
372 use_ping_connection = asbool(configuration.pop('sqlalchemy.db1.ping_connection', None))
372 use_ping_connection = asbool(configuration.pop('sqlalchemy.db1.ping_connection', None))
373 debug = asbool(configuration.pop('sqlalchemy.db1.debug_query', None))
373 debug = asbool(configuration.pop('sqlalchemy.db1.debug_query', None))
374
374
375 engine = sqlalchemy.engine_from_config(configuration, prefix, **kwargs)
375 engine = sqlalchemy.engine_from_config(configuration, prefix, **kwargs)
376
376
377 def color_sql(sql):
377 def color_sql(sql):
378 color_seq = '\033[1;33m' # This is yellow: code 33
378 color_seq = '\033[1;33m' # This is yellow: code 33
379 normal = '\x1b[0m'
379 normal = '\x1b[0m'
380 return ''.join([color_seq, sql, normal])
380 return ''.join([color_seq, sql, normal])
381
381
382 if use_ping_connection:
382 if use_ping_connection:
383 log.debug('Adding ping_connection on the engine config.')
383 log.debug('Adding ping_connection on the engine config.')
384 sqlalchemy.event.listen(engine, "engine_connect", ping_connection)
384 sqlalchemy.event.listen(engine, "engine_connect", ping_connection)
385
385
386 if debug:
386 if debug:
387 # attach events only for debug configuration
387 # attach events only for debug configuration
388 def before_cursor_execute(conn, cursor, statement,
388 def before_cursor_execute(conn, cursor, statement,
389 parameters, context, executemany):
389 parameters, context, executemany):
390 setattr(conn, 'query_start_time', time.time())
390 setattr(conn, 'query_start_time', time.time())
391 log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
391 log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
392 calling_context = find_calling_context(ignore_modules=[
392 calling_context = find_calling_context(ignore_modules=[
393 'rhodecode.lib.caching_query',
393 'rhodecode.lib.caching_query',
394 'rhodecode.model.settings',
394 'rhodecode.model.settings',
395 ])
395 ])
396 if calling_context:
396 if calling_context:
397 log.info(color_sql('call context %s:%s' % (
397 log.info(color_sql('call context %s:%s' % (
398 calling_context.f_code.co_filename,
398 calling_context.f_code.co_filename,
399 calling_context.f_lineno,
399 calling_context.f_lineno,
400 )))
400 )))
401
401
402 def after_cursor_execute(conn, cursor, statement,
402 def after_cursor_execute(conn, cursor, statement,
403 parameters, context, executemany):
403 parameters, context, executemany):
404 delattr(conn, 'query_start_time')
404 delattr(conn, 'query_start_time')
405
405
406 sqlalchemy.event.listen(engine, "before_cursor_execute", before_cursor_execute)
406 sqlalchemy.event.listen(engine, "before_cursor_execute", before_cursor_execute)
407 sqlalchemy.event.listen(engine, "after_cursor_execute", after_cursor_execute)
407 sqlalchemy.event.listen(engine, "after_cursor_execute", after_cursor_execute)
408
408
409 return engine
409 return engine
410
410
411
411
412 def get_encryption_key(config):
412 def get_encryption_key(config):
413 secret = config.get('rhodecode.encrypted_values.secret')
413 secret = config.get('rhodecode.encrypted_values.secret')
414 default = config['beaker.session.secret']
414 default = config['beaker.session.secret']
415 return secret or default
415 return secret or default
416
416
417
417
418 def age(prevdate, now=None, show_short_version=False, show_suffix=True,
418 def age(prevdate, now=None, show_short_version=False, show_suffix=True,
419 short_format=False):
419 short_format=False):
420 """
420 """
421 Turns a datetime into an age string.
421 Turns a datetime into an age string.
422 If show_short_version is True, this generates a shorter string with
422 If show_short_version is True, this generates a shorter string with
423 an approximate age; ex. '1 day ago', rather than '1 day and 23 hours ago'.
423 an approximate age; ex. '1 day ago', rather than '1 day and 23 hours ago'.
424
424
425 * IMPORTANT*
425 * IMPORTANT*
426 Code of this function is written in special way so it's easier to
426 Code of this function is written in special way so it's easier to
427 backport it to javascript. If you mean to update it, please also update
427 backport it to javascript. If you mean to update it, please also update
428 `jquery.timeago-extension.js` file
428 `jquery.timeago-extension.js` file
429
429
430 :param prevdate: datetime object
430 :param prevdate: datetime object
431 :param now: get current time, if not define we use
431 :param now: get current time, if not define we use
432 `datetime.datetime.now()`
432 `datetime.datetime.now()`
433 :param show_short_version: if it should approximate the date and
433 :param show_short_version: if it should approximate the date and
434 return a shorter string
434 return a shorter string
435 :param show_suffix:
435 :param show_suffix:
436 :param short_format: show short format, eg 2D instead of 2 days
436 :param short_format: show short format, eg 2D instead of 2 days
437 :rtype: unicode
437 :rtype: unicode
438 :returns: unicode words describing age
438 :returns: unicode words describing age
439 """
439 """
440
440
441 def _get_relative_delta(now, prevdate):
441 def _get_relative_delta(now, prevdate):
442 base = dateutil.relativedelta.relativedelta(now, prevdate)
442 base = dateutil.relativedelta.relativedelta(now, prevdate)
443 return {
443 return {
444 'year': base.years,
444 'year': base.years,
445 'month': base.months,
445 'month': base.months,
446 'day': base.days,
446 'day': base.days,
447 'hour': base.hours,
447 'hour': base.hours,
448 'minute': base.minutes,
448 'minute': base.minutes,
449 'second': base.seconds,
449 'second': base.seconds,
450 }
450 }
451
451
452 def _is_leap_year(year):
452 def _is_leap_year(year):
453 return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
453 return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
454
454
455 def get_month(prevdate):
455 def get_month(prevdate):
456 return prevdate.month
456 return prevdate.month
457
457
458 def get_year(prevdate):
458 def get_year(prevdate):
459 return prevdate.year
459 return prevdate.year
460
460
461 now = now or datetime.datetime.now()
461 now = now or datetime.datetime.now()
462 order = ['year', 'month', 'day', 'hour', 'minute', 'second']
462 order = ['year', 'month', 'day', 'hour', 'minute', 'second']
463 deltas = {}
463 deltas = {}
464 future = False
464 future = False
465
465
466 if prevdate > now:
466 if prevdate > now:
467 now_old = now
467 now_old = now
468 now = prevdate
468 now = prevdate
469 prevdate = now_old
469 prevdate = now_old
470 future = True
470 future = True
471 if future:
471 if future:
472 prevdate = prevdate.replace(microsecond=0)
472 prevdate = prevdate.replace(microsecond=0)
473 # Get date parts deltas
473 # Get date parts deltas
474 for part in order:
474 for part in order:
475 rel_delta = _get_relative_delta(now, prevdate)
475 rel_delta = _get_relative_delta(now, prevdate)
476 deltas[part] = rel_delta[part]
476 deltas[part] = rel_delta[part]
477
477
478 # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00,
478 # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00,
479 # not 1 hour, -59 minutes and -59 seconds)
479 # not 1 hour, -59 minutes and -59 seconds)
480 offsets = [[5, 60], [4, 60], [3, 24]]
480 offsets = [[5, 60], [4, 60], [3, 24]]
481 for element in offsets: # seconds, minutes, hours
481 for element in offsets: # seconds, minutes, hours
482 num = element[0]
482 num = element[0]
483 length = element[1]
483 length = element[1]
484
484
485 part = order[num]
485 part = order[num]
486 carry_part = order[num - 1]
486 carry_part = order[num - 1]
487
487
488 if deltas[part] < 0:
488 if deltas[part] < 0:
489 deltas[part] += length
489 deltas[part] += length
490 deltas[carry_part] -= 1
490 deltas[carry_part] -= 1
491
491
492 # Same thing for days except that the increment depends on the (variable)
492 # Same thing for days except that the increment depends on the (variable)
493 # number of days in the month
493 # number of days in the month
494 month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
494 month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
495 if deltas['day'] < 0:
495 if deltas['day'] < 0:
496 if get_month(prevdate) == 2 and _is_leap_year(get_year(prevdate)):
496 if get_month(prevdate) == 2 and _is_leap_year(get_year(prevdate)):
497 deltas['day'] += 29
497 deltas['day'] += 29
498 else:
498 else:
499 deltas['day'] += month_lengths[get_month(prevdate) - 1]
499 deltas['day'] += month_lengths[get_month(prevdate) - 1]
500
500
501 deltas['month'] -= 1
501 deltas['month'] -= 1
502
502
503 if deltas['month'] < 0:
503 if deltas['month'] < 0:
504 deltas['month'] += 12
504 deltas['month'] += 12
505 deltas['year'] -= 1
505 deltas['year'] -= 1
506
506
507 # Format the result
507 # Format the result
508 if short_format:
508 if short_format:
509 fmt_funcs = {
509 fmt_funcs = {
510 'year': lambda d: u'%dy' % d,
510 'year': lambda d: u'%dy' % d,
511 'month': lambda d: u'%dm' % d,
511 'month': lambda d: u'%dm' % d,
512 'day': lambda d: u'%dd' % d,
512 'day': lambda d: u'%dd' % d,
513 'hour': lambda d: u'%dh' % d,
513 'hour': lambda d: u'%dh' % d,
514 'minute': lambda d: u'%dmin' % d,
514 'minute': lambda d: u'%dmin' % d,
515 'second': lambda d: u'%dsec' % d,
515 'second': lambda d: u'%dsec' % d,
516 }
516 }
517 else:
517 else:
518 fmt_funcs = {
518 fmt_funcs = {
519 'year': lambda d: _pluralize(u'${num} year', u'${num} years', d, mapping={'num': d}).interpolate(),
519 'year': lambda d: _pluralize(u'${num} year', u'${num} years', d, mapping={'num': d}).interpolate(),
520 'month': lambda d: _pluralize(u'${num} month', u'${num} months', d, mapping={'num': d}).interpolate(),
520 'month': lambda d: _pluralize(u'${num} month', u'${num} months', d, mapping={'num': d}).interpolate(),
521 'day': lambda d: _pluralize(u'${num} day', u'${num} days', d, mapping={'num': d}).interpolate(),
521 'day': lambda d: _pluralize(u'${num} day', u'${num} days', d, mapping={'num': d}).interpolate(),
522 'hour': lambda d: _pluralize(u'${num} hour', u'${num} hours', d, mapping={'num': d}).interpolate(),
522 'hour': lambda d: _pluralize(u'${num} hour', u'${num} hours', d, mapping={'num': d}).interpolate(),
523 'minute': lambda d: _pluralize(u'${num} minute', u'${num} minutes', d, mapping={'num': d}).interpolate(),
523 'minute': lambda d: _pluralize(u'${num} minute', u'${num} minutes', d, mapping={'num': d}).interpolate(),
524 'second': lambda d: _pluralize(u'${num} second', u'${num} seconds', d, mapping={'num': d}).interpolate(),
524 'second': lambda d: _pluralize(u'${num} second', u'${num} seconds', d, mapping={'num': d}).interpolate(),
525 }
525 }
526
526
527 i = 0
527 i = 0
528 for part in order:
528 for part in order:
529 value = deltas[part]
529 value = deltas[part]
530 if value != 0:
530 if value != 0:
531
531
532 if i < 5:
532 if i < 5:
533 sub_part = order[i + 1]
533 sub_part = order[i + 1]
534 sub_value = deltas[sub_part]
534 sub_value = deltas[sub_part]
535 else:
535 else:
536 sub_value = 0
536 sub_value = 0
537
537
538 if sub_value == 0 or show_short_version:
538 if sub_value == 0 or show_short_version:
539 _val = fmt_funcs[part](value)
539 _val = fmt_funcs[part](value)
540 if future:
540 if future:
541 if show_suffix:
541 if show_suffix:
542 return _(u'in ${ago}', mapping={'ago': _val})
542 return _(u'in ${ago}', mapping={'ago': _val})
543 else:
543 else:
544 return _(_val)
544 return _(_val)
545
545
546 else:
546 else:
547 if show_suffix:
547 if show_suffix:
548 return _(u'${ago} ago', mapping={'ago': _val})
548 return _(u'${ago} ago', mapping={'ago': _val})
549 else:
549 else:
550 return _(_val)
550 return _(_val)
551
551
552 val = fmt_funcs[part](value)
552 val = fmt_funcs[part](value)
553 val_detail = fmt_funcs[sub_part](sub_value)
553 val_detail = fmt_funcs[sub_part](sub_value)
554 mapping = {'val': val, 'detail': val_detail}
554 mapping = {'val': val, 'detail': val_detail}
555
555
556 if short_format:
556 if short_format:
557 datetime_tmpl = _(u'${val}, ${detail}', mapping=mapping)
557 datetime_tmpl = _(u'${val}, ${detail}', mapping=mapping)
558 if show_suffix:
558 if show_suffix:
559 datetime_tmpl = _(u'${val}, ${detail} ago', mapping=mapping)
559 datetime_tmpl = _(u'${val}, ${detail} ago', mapping=mapping)
560 if future:
560 if future:
561 datetime_tmpl = _(u'in ${val}, ${detail}', mapping=mapping)
561 datetime_tmpl = _(u'in ${val}, ${detail}', mapping=mapping)
562 else:
562 else:
563 datetime_tmpl = _(u'${val} and ${detail}', mapping=mapping)
563 datetime_tmpl = _(u'${val} and ${detail}', mapping=mapping)
564 if show_suffix:
564 if show_suffix:
565 datetime_tmpl = _(u'${val} and ${detail} ago', mapping=mapping)
565 datetime_tmpl = _(u'${val} and ${detail} ago', mapping=mapping)
566 if future:
566 if future:
567 datetime_tmpl = _(u'in ${val} and ${detail}', mapping=mapping)
567 datetime_tmpl = _(u'in ${val} and ${detail}', mapping=mapping)
568
568
569 return datetime_tmpl
569 return datetime_tmpl
570 i += 1
570 i += 1
571 return _(u'just now')
571 return _(u'just now')
572
572
573
573
574 def age_from_seconds(seconds):
574 def age_from_seconds(seconds):
575 seconds = safe_int(seconds) or 0
575 seconds = safe_int(seconds) or 0
576 prevdate = time_to_datetime(time.time() + seconds)
576 prevdate = time_to_datetime(time.time() + seconds)
577 return age(prevdate, show_suffix=False, show_short_version=True)
577 return age(prevdate, show_suffix=False, show_short_version=True)
578
578
579
579
580 def cleaned_uri(uri):
580 def cleaned_uri(uri):
581 """
581 """
582 Quotes '[' and ']' from uri if there is only one of them.
582 Quotes '[' and ']' from uri if there is only one of them.
583 according to RFC3986 we cannot use such chars in uri
583 according to RFC3986 we cannot use such chars in uri
584 :param uri:
584 :param uri:
585 :return: uri without this chars
585 :return: uri without this chars
586 """
586 """
587 return urllib.quote(uri, safe='@$:/')
587 return urllib.quote(uri, safe='@$:/')
588
588
589
589
590 def uri_filter(uri):
591 """
592 Removes user:password from given url string
593
594 :param uri:
595 :rtype: unicode
596 :returns: filtered list of strings
597 """
598 if not uri:
599 return ''
600
601 proto = ''
602
603 for pat in ('https://', 'http://'):
604 if uri.startswith(pat):
605 uri = uri[len(pat):]
606 proto = pat
607 break
608
609 # remove passwords and username
610 uri = uri[uri.find('@') + 1:]
611
612 # get the port
613 cred_pos = uri.find(':')
614 if cred_pos == -1:
615 host, port = uri, None
616 else:
617 host, port = uri[:cred_pos], uri[cred_pos + 1:]
618
619 return filter(None, [proto, host, port])
620
621
622 def credentials_filter(uri):
590 def credentials_filter(uri):
623 """
591 """
624 Returns a url with removed credentials
592 Returns a url with removed credentials
625
593
626 :param uri:
594 :param uri:
627 """
595 """
596 import urlobject
597 url_obj = urlobject.URLObject(cleaned_uri(uri))
598 url_obj = url_obj.without_password().without_username()
628
599
629 uri = uri_filter(uri)
600 return url_obj
630 # check if we have port
631 if len(uri) > 2 and uri[2]:
632 uri[2] = ':' + uri[2]
633
634 return ''.join(uri)
635
601
636
602
637 def get_host_info(request):
603 def get_host_info(request):
638 """
604 """
639 Generate host info, to obtain full url e.g https://server.com
605 Generate host info, to obtain full url e.g https://server.com
640 use this
606 use this
641 `{scheme}://{netloc}`
607 `{scheme}://{netloc}`
642 """
608 """
643 if not request:
609 if not request:
644 return {}
610 return {}
645
611
646 qualified_home_url = request.route_url('home')
612 qualified_home_url = request.route_url('home')
647 parsed_url = urlobject.URLObject(qualified_home_url)
613 parsed_url = urlobject.URLObject(qualified_home_url)
648 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
614 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
649
615
650 return {
616 return {
651 'scheme': parsed_url.scheme,
617 'scheme': parsed_url.scheme,
652 'netloc': parsed_url.netloc+decoded_path,
618 'netloc': parsed_url.netloc+decoded_path,
653 'hostname': parsed_url.hostname,
619 'hostname': parsed_url.hostname,
654 }
620 }
655
621
656
622
657 def get_clone_url(request, uri_tmpl, repo_name, repo_id, repo_type, **override):
623 def get_clone_url(request, uri_tmpl, repo_name, repo_id, repo_type, **override):
658 qualified_home_url = request.route_url('home')
624 qualified_home_url = request.route_url('home')
659 parsed_url = urlobject.URLObject(qualified_home_url)
625 parsed_url = urlobject.URLObject(qualified_home_url)
660 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
626 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
661
627
662 args = {
628 args = {
663 'scheme': parsed_url.scheme,
629 'scheme': parsed_url.scheme,
664 'user': '',
630 'user': '',
665 'sys_user': getpass.getuser(),
631 'sys_user': getpass.getuser(),
666 # path if we use proxy-prefix
632 # path if we use proxy-prefix
667 'netloc': parsed_url.netloc+decoded_path,
633 'netloc': parsed_url.netloc+decoded_path,
668 'hostname': parsed_url.hostname,
634 'hostname': parsed_url.hostname,
669 'prefix': decoded_path,
635 'prefix': decoded_path,
670 'repo': repo_name,
636 'repo': repo_name,
671 'repoid': str(repo_id),
637 'repoid': str(repo_id),
672 'repo_type': repo_type
638 'repo_type': repo_type
673 }
639 }
674 args.update(override)
640 args.update(override)
675 args['user'] = urllib.quote(safe_str(args['user']))
641 args['user'] = urllib.quote(safe_str(args['user']))
676
642
677 for k, v in args.items():
643 for k, v in args.items():
678 uri_tmpl = uri_tmpl.replace('{%s}' % k, v)
644 uri_tmpl = uri_tmpl.replace('{%s}' % k, v)
679
645
680 # special case for SVN clone url
646 # special case for SVN clone url
681 if repo_type == 'svn':
647 if repo_type == 'svn':
682 uri_tmpl = uri_tmpl.replace('ssh://', 'svn+ssh://')
648 uri_tmpl = uri_tmpl.replace('ssh://', 'svn+ssh://')
683
649
684 # remove leading @ sign if it's present. Case of empty user
650 # remove leading @ sign if it's present. Case of empty user
685 url_obj = urlobject.URLObject(uri_tmpl)
651 url_obj = urlobject.URLObject(uri_tmpl)
686 url = url_obj.with_netloc(url_obj.netloc.lstrip('@'))
652 url = url_obj.with_netloc(url_obj.netloc.lstrip('@'))
687
653
688 return safe_unicode(url)
654 return safe_unicode(url)
689
655
690
656
691 def get_commit_safe(repo, commit_id=None, commit_idx=None, pre_load=None,
657 def get_commit_safe(repo, commit_id=None, commit_idx=None, pre_load=None,
692 maybe_unreachable=False):
658 maybe_unreachable=False):
693 """
659 """
694 Safe version of get_commit if this commit doesn't exists for a
660 Safe version of get_commit if this commit doesn't exists for a
695 repository it returns a Dummy one instead
661 repository it returns a Dummy one instead
696
662
697 :param repo: repository instance
663 :param repo: repository instance
698 :param commit_id: commit id as str
664 :param commit_id: commit id as str
699 :param commit_idx: numeric commit index
665 :param commit_idx: numeric commit index
700 :param pre_load: optional list of commit attributes to load
666 :param pre_load: optional list of commit attributes to load
701 :param maybe_unreachable: translate unreachable commits on git repos
667 :param maybe_unreachable: translate unreachable commits on git repos
702 """
668 """
703 # TODO(skreft): remove these circular imports
669 # TODO(skreft): remove these circular imports
704 from rhodecode.lib.vcs.backends.base import BaseRepository, EmptyCommit
670 from rhodecode.lib.vcs.backends.base import BaseRepository, EmptyCommit
705 from rhodecode.lib.vcs.exceptions import RepositoryError
671 from rhodecode.lib.vcs.exceptions import RepositoryError
706 if not isinstance(repo, BaseRepository):
672 if not isinstance(repo, BaseRepository):
707 raise Exception('You must pass an Repository '
673 raise Exception('You must pass an Repository '
708 'object as first argument got %s', type(repo))
674 'object as first argument got %s', type(repo))
709
675
710 try:
676 try:
711 commit = repo.get_commit(
677 commit = repo.get_commit(
712 commit_id=commit_id, commit_idx=commit_idx, pre_load=pre_load,
678 commit_id=commit_id, commit_idx=commit_idx, pre_load=pre_load,
713 maybe_unreachable=maybe_unreachable)
679 maybe_unreachable=maybe_unreachable)
714 except (RepositoryError, LookupError):
680 except (RepositoryError, LookupError):
715 commit = EmptyCommit()
681 commit = EmptyCommit()
716 return commit
682 return commit
717
683
718
684
719 def datetime_to_time(dt):
685 def datetime_to_time(dt):
720 if dt:
686 if dt:
721 return time.mktime(dt.timetuple())
687 return time.mktime(dt.timetuple())
722
688
723
689
724 def time_to_datetime(tm):
690 def time_to_datetime(tm):
725 if tm:
691 if tm:
726 if isinstance(tm, compat.string_types):
692 if isinstance(tm, compat.string_types):
727 try:
693 try:
728 tm = float(tm)
694 tm = float(tm)
729 except ValueError:
695 except ValueError:
730 return
696 return
731 return datetime.datetime.fromtimestamp(tm)
697 return datetime.datetime.fromtimestamp(tm)
732
698
733
699
734 def time_to_utcdatetime(tm):
700 def time_to_utcdatetime(tm):
735 if tm:
701 if tm:
736 if isinstance(tm, compat.string_types):
702 if isinstance(tm, compat.string_types):
737 try:
703 try:
738 tm = float(tm)
704 tm = float(tm)
739 except ValueError:
705 except ValueError:
740 return
706 return
741 return datetime.datetime.utcfromtimestamp(tm)
707 return datetime.datetime.utcfromtimestamp(tm)
742
708
743
709
744 MENTIONS_REGEX = re.compile(
710 MENTIONS_REGEX = re.compile(
745 # ^@ or @ without any special chars in front
711 # ^@ or @ without any special chars in front
746 r'(?:^@|[^a-zA-Z0-9\-\_\.]@)'
712 r'(?:^@|[^a-zA-Z0-9\-\_\.]@)'
747 # main body starts with letter, then can be . - _
713 # main body starts with letter, then can be . - _
748 r'([a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+)',
714 r'([a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+)',
749 re.VERBOSE | re.MULTILINE)
715 re.VERBOSE | re.MULTILINE)
750
716
751
717
752 def extract_mentioned_users(s):
718 def extract_mentioned_users(s):
753 """
719 """
754 Returns unique usernames from given string s that have @mention
720 Returns unique usernames from given string s that have @mention
755
721
756 :param s: string to get mentions
722 :param s: string to get mentions
757 """
723 """
758 usrs = set()
724 usrs = set()
759 for username in MENTIONS_REGEX.findall(s):
725 for username in MENTIONS_REGEX.findall(s):
760 usrs.add(username)
726 usrs.add(username)
761
727
762 return sorted(list(usrs), key=lambda k: k.lower())
728 return sorted(list(usrs), key=lambda k: k.lower())
763
729
764
730
765 class AttributeDictBase(dict):
731 class AttributeDictBase(dict):
766 def __getstate__(self):
732 def __getstate__(self):
767 odict = self.__dict__ # get attribute dictionary
733 odict = self.__dict__ # get attribute dictionary
768 return odict
734 return odict
769
735
770 def __setstate__(self, dict):
736 def __setstate__(self, dict):
771 self.__dict__ = dict
737 self.__dict__ = dict
772
738
773 __setattr__ = dict.__setitem__
739 __setattr__ = dict.__setitem__
774 __delattr__ = dict.__delitem__
740 __delattr__ = dict.__delitem__
775
741
776
742
777 class StrictAttributeDict(AttributeDictBase):
743 class StrictAttributeDict(AttributeDictBase):
778 """
744 """
779 Strict Version of Attribute dict which raises an Attribute error when
745 Strict Version of Attribute dict which raises an Attribute error when
780 requested attribute is not set
746 requested attribute is not set
781 """
747 """
782 def __getattr__(self, attr):
748 def __getattr__(self, attr):
783 try:
749 try:
784 return self[attr]
750 return self[attr]
785 except KeyError:
751 except KeyError:
786 raise AttributeError('%s object has no attribute %s' % (
752 raise AttributeError('%s object has no attribute %s' % (
787 self.__class__, attr))
753 self.__class__, attr))
788
754
789
755
790 class AttributeDict(AttributeDictBase):
756 class AttributeDict(AttributeDictBase):
791 def __getattr__(self, attr):
757 def __getattr__(self, attr):
792 return self.get(attr, None)
758 return self.get(attr, None)
793
759
794
760
795
761
796 class OrderedDefaultDict(collections.OrderedDict, collections.defaultdict):
762 class OrderedDefaultDict(collections.OrderedDict, collections.defaultdict):
797 def __init__(self, default_factory=None, *args, **kwargs):
763 def __init__(self, default_factory=None, *args, **kwargs):
798 # in python3 you can omit the args to super
764 # in python3 you can omit the args to super
799 super(OrderedDefaultDict, self).__init__(*args, **kwargs)
765 super(OrderedDefaultDict, self).__init__(*args, **kwargs)
800 self.default_factory = default_factory
766 self.default_factory = default_factory
801
767
802
768
803 def fix_PATH(os_=None):
769 def fix_PATH(os_=None):
804 """
770 """
805 Get current active python path, and append it to PATH variable to fix
771 Get current active python path, and append it to PATH variable to fix
806 issues of subprocess calls and different python versions
772 issues of subprocess calls and different python versions
807 """
773 """
808 if os_ is None:
774 if os_ is None:
809 import os
775 import os
810 else:
776 else:
811 os = os_
777 os = os_
812
778
813 cur_path = os.path.split(sys.executable)[0]
779 cur_path = os.path.split(sys.executable)[0]
814 if not os.environ['PATH'].startswith(cur_path):
780 if not os.environ['PATH'].startswith(cur_path):
815 os.environ['PATH'] = '%s:%s' % (cur_path, os.environ['PATH'])
781 os.environ['PATH'] = '%s:%s' % (cur_path, os.environ['PATH'])
816
782
817
783
818 def obfuscate_url_pw(engine):
784 def obfuscate_url_pw(engine):
819 _url = engine or ''
785 _url = engine or ''
820 try:
786 try:
821 _url = sqlalchemy.engine.url.make_url(engine)
787 _url = sqlalchemy.engine.url.make_url(engine)
822 if _url.password:
788 if _url.password:
823 _url.password = 'XXXXX'
789 _url.password = 'XXXXX'
824 except Exception:
790 except Exception:
825 pass
791 pass
826 return unicode(_url)
792 return unicode(_url)
827
793
828
794
829 def get_server_url(environ):
795 def get_server_url(environ):
830 req = webob.Request(environ)
796 req = webob.Request(environ)
831 return req.host_url + req.script_name
797 return req.host_url + req.script_name
832
798
833
799
834 def unique_id(hexlen=32):
800 def unique_id(hexlen=32):
835 alphabet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz"
801 alphabet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz"
836 return suuid(truncate_to=hexlen, alphabet=alphabet)
802 return suuid(truncate_to=hexlen, alphabet=alphabet)
837
803
838
804
839 def suuid(url=None, truncate_to=22, alphabet=None):
805 def suuid(url=None, truncate_to=22, alphabet=None):
840 """
806 """
841 Generate and return a short URL safe UUID.
807 Generate and return a short URL safe UUID.
842
808
843 If the url parameter is provided, set the namespace to the provided
809 If the url parameter is provided, set the namespace to the provided
844 URL and generate a UUID.
810 URL and generate a UUID.
845
811
846 :param url to get the uuid for
812 :param url to get the uuid for
847 :truncate_to: truncate the basic 22 UUID to shorter version
813 :truncate_to: truncate the basic 22 UUID to shorter version
848
814
849 The IDs won't be universally unique any longer, but the probability of
815 The IDs won't be universally unique any longer, but the probability of
850 a collision will still be very low.
816 a collision will still be very low.
851 """
817 """
852 # Define our alphabet.
818 # Define our alphabet.
853 _ALPHABET = alphabet or "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
819 _ALPHABET = alphabet or "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
854
820
855 # If no URL is given, generate a random UUID.
821 # If no URL is given, generate a random UUID.
856 if url is None:
822 if url is None:
857 unique_id = uuid.uuid4().int
823 unique_id = uuid.uuid4().int
858 else:
824 else:
859 unique_id = uuid.uuid3(uuid.NAMESPACE_URL, url).int
825 unique_id = uuid.uuid3(uuid.NAMESPACE_URL, url).int
860
826
861 alphabet_length = len(_ALPHABET)
827 alphabet_length = len(_ALPHABET)
862 output = []
828 output = []
863 while unique_id > 0:
829 while unique_id > 0:
864 digit = unique_id % alphabet_length
830 digit = unique_id % alphabet_length
865 output.append(_ALPHABET[digit])
831 output.append(_ALPHABET[digit])
866 unique_id = int(unique_id / alphabet_length)
832 unique_id = int(unique_id / alphabet_length)
867 return "".join(output)[:truncate_to]
833 return "".join(output)[:truncate_to]
868
834
869
835
870 def get_current_rhodecode_user(request=None):
836 def get_current_rhodecode_user(request=None):
871 """
837 """
872 Gets rhodecode user from request
838 Gets rhodecode user from request
873 """
839 """
874 pyramid_request = request or pyramid.threadlocal.get_current_request()
840 pyramid_request = request or pyramid.threadlocal.get_current_request()
875
841
876 # web case
842 # web case
877 if pyramid_request and hasattr(pyramid_request, 'user'):
843 if pyramid_request and hasattr(pyramid_request, 'user'):
878 return pyramid_request.user
844 return pyramid_request.user
879
845
880 # api case
846 # api case
881 if pyramid_request and hasattr(pyramid_request, 'rpc_user'):
847 if pyramid_request and hasattr(pyramid_request, 'rpc_user'):
882 return pyramid_request.rpc_user
848 return pyramid_request.rpc_user
883
849
884 return None
850 return None
885
851
886
852
887 def action_logger_generic(action, namespace=''):
853 def action_logger_generic(action, namespace=''):
888 """
854 """
889 A generic logger for actions useful to the system overview, tries to find
855 A generic logger for actions useful to the system overview, tries to find
890 an acting user for the context of the call otherwise reports unknown user
856 an acting user for the context of the call otherwise reports unknown user
891
857
892 :param action: logging message eg 'comment 5 deleted'
858 :param action: logging message eg 'comment 5 deleted'
893 :param type: string
859 :param type: string
894
860
895 :param namespace: namespace of the logging message eg. 'repo.comments'
861 :param namespace: namespace of the logging message eg. 'repo.comments'
896 :param type: string
862 :param type: string
897
863
898 """
864 """
899
865
900 logger_name = 'rhodecode.actions'
866 logger_name = 'rhodecode.actions'
901
867
902 if namespace:
868 if namespace:
903 logger_name += '.' + namespace
869 logger_name += '.' + namespace
904
870
905 log = logging.getLogger(logger_name)
871 log = logging.getLogger(logger_name)
906
872
907 # get a user if we can
873 # get a user if we can
908 user = get_current_rhodecode_user()
874 user = get_current_rhodecode_user()
909
875
910 logfunc = log.info
876 logfunc = log.info
911
877
912 if not user:
878 if not user:
913 user = '<unknown user>'
879 user = '<unknown user>'
914 logfunc = log.warning
880 logfunc = log.warning
915
881
916 logfunc('Logging action by {}: {}'.format(user, action))
882 logfunc('Logging action by {}: {}'.format(user, action))
917
883
918
884
919 def escape_split(text, sep=',', maxsplit=-1):
885 def escape_split(text, sep=',', maxsplit=-1):
920 r"""
886 r"""
921 Allows for escaping of the separator: e.g. arg='foo\, bar'
887 Allows for escaping of the separator: e.g. arg='foo\, bar'
922
888
923 It should be noted that the way bash et. al. do command line parsing, those
889 It should be noted that the way bash et. al. do command line parsing, those
924 single quotes are required.
890 single quotes are required.
925 """
891 """
926 escaped_sep = r'\%s' % sep
892 escaped_sep = r'\%s' % sep
927
893
928 if escaped_sep not in text:
894 if escaped_sep not in text:
929 return text.split(sep, maxsplit)
895 return text.split(sep, maxsplit)
930
896
931 before, _mid, after = text.partition(escaped_sep)
897 before, _mid, after = text.partition(escaped_sep)
932 startlist = before.split(sep, maxsplit) # a regular split is fine here
898 startlist = before.split(sep, maxsplit) # a regular split is fine here
933 unfinished = startlist[-1]
899 unfinished = startlist[-1]
934 startlist = startlist[:-1]
900 startlist = startlist[:-1]
935
901
936 # recurse because there may be more escaped separators
902 # recurse because there may be more escaped separators
937 endlist = escape_split(after, sep, maxsplit)
903 endlist = escape_split(after, sep, maxsplit)
938
904
939 # finish building the escaped value. we use endlist[0] becaue the first
905 # finish building the escaped value. we use endlist[0] becaue the first
940 # part of the string sent in recursion is the rest of the escaped value.
906 # part of the string sent in recursion is the rest of the escaped value.
941 unfinished += sep + endlist[0]
907 unfinished += sep + endlist[0]
942
908
943 return startlist + [unfinished] + endlist[1:] # put together all the parts
909 return startlist + [unfinished] + endlist[1:] # put together all the parts
944
910
945
911
946 class OptionalAttr(object):
912 class OptionalAttr(object):
947 """
913 """
948 Special Optional Option that defines other attribute. Example::
914 Special Optional Option that defines other attribute. Example::
949
915
950 def test(apiuser, userid=Optional(OAttr('apiuser')):
916 def test(apiuser, userid=Optional(OAttr('apiuser')):
951 user = Optional.extract(userid)
917 user = Optional.extract(userid)
952 # calls
918 # calls
953
919
954 """
920 """
955
921
956 def __init__(self, attr_name):
922 def __init__(self, attr_name):
957 self.attr_name = attr_name
923 self.attr_name = attr_name
958
924
959 def __repr__(self):
925 def __repr__(self):
960 return '<OptionalAttr:%s>' % self.attr_name
926 return '<OptionalAttr:%s>' % self.attr_name
961
927
962 def __call__(self):
928 def __call__(self):
963 return self
929 return self
964
930
965
931
966 # alias
932 # alias
967 OAttr = OptionalAttr
933 OAttr = OptionalAttr
968
934
969
935
970 class Optional(object):
936 class Optional(object):
971 """
937 """
972 Defines an optional parameter::
938 Defines an optional parameter::
973
939
974 param = param.getval() if isinstance(param, Optional) else param
940 param = param.getval() if isinstance(param, Optional) else param
975 param = param() if isinstance(param, Optional) else param
941 param = param() if isinstance(param, Optional) else param
976
942
977 is equivalent of::
943 is equivalent of::
978
944
979 param = Optional.extract(param)
945 param = Optional.extract(param)
980
946
981 """
947 """
982
948
983 def __init__(self, type_):
949 def __init__(self, type_):
984 self.type_ = type_
950 self.type_ = type_
985
951
986 def __repr__(self):
952 def __repr__(self):
987 return '<Optional:%s>' % self.type_.__repr__()
953 return '<Optional:%s>' % self.type_.__repr__()
988
954
989 def __call__(self):
955 def __call__(self):
990 return self.getval()
956 return self.getval()
991
957
992 def getval(self):
958 def getval(self):
993 """
959 """
994 returns value from this Optional instance
960 returns value from this Optional instance
995 """
961 """
996 if isinstance(self.type_, OAttr):
962 if isinstance(self.type_, OAttr):
997 # use params name
963 # use params name
998 return self.type_.attr_name
964 return self.type_.attr_name
999 return self.type_
965 return self.type_
1000
966
1001 @classmethod
967 @classmethod
1002 def extract(cls, val):
968 def extract(cls, val):
1003 """
969 """
1004 Extracts value from Optional() instance
970 Extracts value from Optional() instance
1005
971
1006 :param val:
972 :param val:
1007 :return: original value if it's not Optional instance else
973 :return: original value if it's not Optional instance else
1008 value of instance
974 value of instance
1009 """
975 """
1010 if isinstance(val, cls):
976 if isinstance(val, cls):
1011 return val.getval()
977 return val.getval()
1012 return val
978 return val
1013
979
1014
980
1015 def glob2re(pat):
981 def glob2re(pat):
1016 """
982 """
1017 Translate a shell PATTERN to a regular expression.
983 Translate a shell PATTERN to a regular expression.
1018
984
1019 There is no way to quote meta-characters.
985 There is no way to quote meta-characters.
1020 """
986 """
1021
987
1022 i, n = 0, len(pat)
988 i, n = 0, len(pat)
1023 res = ''
989 res = ''
1024 while i < n:
990 while i < n:
1025 c = pat[i]
991 c = pat[i]
1026 i = i+1
992 i = i+1
1027 if c == '*':
993 if c == '*':
1028 #res = res + '.*'
994 #res = res + '.*'
1029 res = res + '[^/]*'
995 res = res + '[^/]*'
1030 elif c == '?':
996 elif c == '?':
1031 #res = res + '.'
997 #res = res + '.'
1032 res = res + '[^/]'
998 res = res + '[^/]'
1033 elif c == '[':
999 elif c == '[':
1034 j = i
1000 j = i
1035 if j < n and pat[j] == '!':
1001 if j < n and pat[j] == '!':
1036 j = j+1
1002 j = j+1
1037 if j < n and pat[j] == ']':
1003 if j < n and pat[j] == ']':
1038 j = j+1
1004 j = j+1
1039 while j < n and pat[j] != ']':
1005 while j < n and pat[j] != ']':
1040 j = j+1
1006 j = j+1
1041 if j >= n:
1007 if j >= n:
1042 res = res + '\\['
1008 res = res + '\\['
1043 else:
1009 else:
1044 stuff = pat[i:j].replace('\\','\\\\')
1010 stuff = pat[i:j].replace('\\','\\\\')
1045 i = j+1
1011 i = j+1
1046 if stuff[0] == '!':
1012 if stuff[0] == '!':
1047 stuff = '^' + stuff[1:]
1013 stuff = '^' + stuff[1:]
1048 elif stuff[0] == '^':
1014 elif stuff[0] == '^':
1049 stuff = '\\' + stuff
1015 stuff = '\\' + stuff
1050 res = '%s[%s]' % (res, stuff)
1016 res = '%s[%s]' % (res, stuff)
1051 else:
1017 else:
1052 res = res + re.escape(c)
1018 res = res + re.escape(c)
1053 return res + '\Z(?ms)'
1019 return res + '\Z(?ms)'
1054
1020
1055
1021
1056 def parse_byte_string(size_str):
1022 def parse_byte_string(size_str):
1057 match = re.match(r'(\d+)(MB|KB)', size_str, re.IGNORECASE)
1023 match = re.match(r'(\d+)(MB|KB)', size_str, re.IGNORECASE)
1058 if not match:
1024 if not match:
1059 raise ValueError('Given size:%s is invalid, please make sure '
1025 raise ValueError('Given size:%s is invalid, please make sure '
1060 'to use format of <num>(MB|KB)' % size_str)
1026 'to use format of <num>(MB|KB)' % size_str)
1061
1027
1062 _parts = match.groups()
1028 _parts = match.groups()
1063 num, type_ = _parts
1029 num, type_ = _parts
1064 return long(num) * {'mb': 1024*1024, 'kb': 1024}[type_.lower()]
1030 return long(num) * {'mb': 1024*1024, 'kb': 1024}[type_.lower()]
1065
1031
1066
1032
1067 class CachedProperty(object):
1033 class CachedProperty(object):
1068 """
1034 """
1069 Lazy Attributes. With option to invalidate the cache by running a method
1035 Lazy Attributes. With option to invalidate the cache by running a method
1070
1036
1071 class Foo():
1037 class Foo():
1072
1038
1073 @CachedProperty
1039 @CachedProperty
1074 def heavy_func():
1040 def heavy_func():
1075 return 'super-calculation'
1041 return 'super-calculation'
1076
1042
1077 foo = Foo()
1043 foo = Foo()
1078 foo.heavy_func() # first computions
1044 foo.heavy_func() # first computions
1079 foo.heavy_func() # fetch from cache
1045 foo.heavy_func() # fetch from cache
1080 foo._invalidate_prop_cache('heavy_func')
1046 foo._invalidate_prop_cache('heavy_func')
1081 # at this point calling foo.heavy_func() will be re-computed
1047 # at this point calling foo.heavy_func() will be re-computed
1082 """
1048 """
1083
1049
1084 def __init__(self, func, func_name=None):
1050 def __init__(self, func, func_name=None):
1085
1051
1086 if func_name is None:
1052 if func_name is None:
1087 func_name = func.__name__
1053 func_name = func.__name__
1088 self.data = (func, func_name)
1054 self.data = (func, func_name)
1089 update_wrapper(self, func)
1055 update_wrapper(self, func)
1090
1056
1091 def __get__(self, inst, class_):
1057 def __get__(self, inst, class_):
1092 if inst is None:
1058 if inst is None:
1093 return self
1059 return self
1094
1060
1095 func, func_name = self.data
1061 func, func_name = self.data
1096 value = func(inst)
1062 value = func(inst)
1097 inst.__dict__[func_name] = value
1063 inst.__dict__[func_name] = value
1098 if '_invalidate_prop_cache' not in inst.__dict__:
1064 if '_invalidate_prop_cache' not in inst.__dict__:
1099 inst.__dict__['_invalidate_prop_cache'] = partial(
1065 inst.__dict__['_invalidate_prop_cache'] = partial(
1100 self._invalidate_prop_cache, inst)
1066 self._invalidate_prop_cache, inst)
1101 return value
1067 return value
1102
1068
1103 def _invalidate_prop_cache(self, inst, name):
1069 def _invalidate_prop_cache(self, inst, name):
1104 inst.__dict__.pop(name, None)
1070 inst.__dict__.pop(name, None)
@@ -1,427 +1,435 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2020 RhodeCode GmbH
3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 """
22 """
23 Model for notifications
23 Model for notifications
24 """
24 """
25
25
26 import logging
26 import logging
27 import traceback
27 import traceback
28
28
29 import premailer
29 import premailer
30 from pyramid.threadlocal import get_current_request
30 from pyramid.threadlocal import get_current_request
31 from sqlalchemy.sql.expression import false, true
31 from sqlalchemy.sql.expression import false, true
32
32
33 import rhodecode
33 import rhodecode
34 from rhodecode.lib import helpers as h
34 from rhodecode.lib import helpers as h
35 from rhodecode.model import BaseModel
35 from rhodecode.model import BaseModel
36 from rhodecode.model.db import Notification, User, UserNotification
36 from rhodecode.model.db import Notification, User, UserNotification
37 from rhodecode.model.meta import Session
37 from rhodecode.model.meta import Session
38 from rhodecode.translation import TranslationString
38 from rhodecode.translation import TranslationString
39
39
40 log = logging.getLogger(__name__)
40 log = logging.getLogger(__name__)
41
41
42
42
43 class NotificationModel(BaseModel):
43 class NotificationModel(BaseModel):
44
44
45 cls = Notification
45 cls = Notification
46
46
47 def __get_notification(self, notification):
47 def __get_notification(self, notification):
48 if isinstance(notification, Notification):
48 if isinstance(notification, Notification):
49 return notification
49 return notification
50 elif isinstance(notification, (int, long)):
50 elif isinstance(notification, (int, long)):
51 return Notification.get(notification)
51 return Notification.get(notification)
52 else:
52 else:
53 if notification:
53 if notification:
54 raise Exception('notification must be int, long or Instance'
54 raise Exception('notification must be int, long or Instance'
55 ' of Notification got %s' % type(notification))
55 ' of Notification got %s' % type(notification))
56
56
57 def create(
57 def create(
58 self, created_by, notification_subject, notification_body,
58 self, created_by, notification_subject, notification_body,
59 notification_type=Notification.TYPE_MESSAGE, recipients=None,
59 notification_type=Notification.TYPE_MESSAGE, recipients=None,
60 mention_recipients=None, with_email=True, email_kwargs=None):
60 mention_recipients=None, with_email=True, email_kwargs=None):
61 """
61 """
62
62
63 Creates notification of given type
63 Creates notification of given type
64
64
65 :param created_by: int, str or User instance. User who created this
65 :param created_by: int, str or User instance. User who created this
66 notification
66 notification
67 :param notification_subject: subject of notification itself
67 :param notification_subject: subject of notification itself
68 :param notification_body: body of notification text
68 :param notification_body: body of notification text
69 :param notification_type: type of notification, based on that we
69 :param notification_type: type of notification, based on that we
70 pick templates
70 pick templates
71
71
72 :param recipients: list of int, str or User objects, when None
72 :param recipients: list of int, str or User objects, when None
73 is given send to all admins
73 is given send to all admins
74 :param mention_recipients: list of int, str or User objects,
74 :param mention_recipients: list of int, str or User objects,
75 that were mentioned
75 that were mentioned
76 :param with_email: send email with this notification
76 :param with_email: send email with this notification
77 :param email_kwargs: dict with arguments to generate email
77 :param email_kwargs: dict with arguments to generate email
78 """
78 """
79
79
80 from rhodecode.lib.celerylib import tasks, run_task
80 from rhodecode.lib.celerylib import tasks, run_task
81
81
82 if recipients and not getattr(recipients, '__iter__', False):
82 if recipients and not getattr(recipients, '__iter__', False):
83 raise Exception('recipients must be an iterable object')
83 raise Exception('recipients must be an iterable object')
84
84
85 created_by_obj = self._get_user(created_by)
85 created_by_obj = self._get_user(created_by)
86 # default MAIN body if not given
86 # default MAIN body if not given
87 email_kwargs = email_kwargs or {'body': notification_body}
87 email_kwargs = email_kwargs or {'body': notification_body}
88 mention_recipients = mention_recipients or set()
88 mention_recipients = mention_recipients or set()
89
89
90 if not created_by_obj:
90 if not created_by_obj:
91 raise Exception('unknown user %s' % created_by)
91 raise Exception('unknown user %s' % created_by)
92
92
93 if recipients is None:
93 if recipients is None:
94 # recipients is None means to all admins
94 # recipients is None means to all admins
95 recipients_objs = User.query().filter(User.admin == true()).all()
95 recipients_objs = User.query().filter(User.admin == true()).all()
96 log.debug('sending notifications %s to admins: %s',
96 log.debug('sending notifications %s to admins: %s',
97 notification_type, recipients_objs)
97 notification_type, recipients_objs)
98 else:
98 else:
99 recipients_objs = set()
99 recipients_objs = set()
100 for u in recipients:
100 for u in recipients:
101 obj = self._get_user(u)
101 obj = self._get_user(u)
102 if obj:
102 if obj:
103 recipients_objs.add(obj)
103 recipients_objs.add(obj)
104 else: # we didn't find this user, log the error and carry on
104 else: # we didn't find this user, log the error and carry on
105 log.error('cannot notify unknown user %r', u)
105 log.error('cannot notify unknown user %r', u)
106
106
107 if not recipients_objs:
107 if not recipients_objs:
108 raise Exception('no valid recipients specified')
108 raise Exception('no valid recipients specified')
109
109
110 log.debug('sending notifications %s to %s',
110 log.debug('sending notifications %s to %s',
111 notification_type, recipients_objs)
111 notification_type, recipients_objs)
112
112
113 # add mentioned users into recipients
113 # add mentioned users into recipients
114 final_recipients = set(recipients_objs).union(mention_recipients)
114 final_recipients = set(recipients_objs).union(mention_recipients)
115
115
116 notification = Notification.create(
116 notification = Notification.create(
117 created_by=created_by_obj, subject=notification_subject,
117 created_by=created_by_obj, subject=notification_subject,
118 body=notification_body, recipients=final_recipients,
118 body=notification_body, recipients=final_recipients,
119 type_=notification_type
119 type_=notification_type
120 )
120 )
121
121
122 if not with_email: # skip sending email, and just create notification
122 if not with_email: # skip sending email, and just create notification
123 return notification
123 return notification
124
124
125 # don't send email to person who created this comment
125 # don't send email to person who created this comment
126 rec_objs = set(recipients_objs).difference({created_by_obj})
126 rec_objs = set(recipients_objs).difference({created_by_obj})
127
127
128 # now notify all recipients in question
128 # now notify all recipients in question
129
129
130 for recipient in rec_objs.union(mention_recipients):
130 for recipient in rec_objs.union(mention_recipients):
131 # inject current recipient
131 # inject current recipient
132 email_kwargs['recipient'] = recipient
132 email_kwargs['recipient'] = recipient
133 email_kwargs['mention'] = recipient in mention_recipients
133 email_kwargs['mention'] = recipient in mention_recipients
134 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
134 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
135 notification_type, **email_kwargs)
135 notification_type, **email_kwargs)
136
136
137 extra_headers = None
137 extra_headers = None
138 if 'thread_ids' in email_kwargs:
138 if 'thread_ids' in email_kwargs:
139 extra_headers = {'thread_ids': email_kwargs.pop('thread_ids')}
139 extra_headers = {'thread_ids': email_kwargs.pop('thread_ids')}
140
140
141 log.debug('Creating notification email task for user:`%s`', recipient)
141 log.debug('Creating notification email task for user:`%s`', recipient)
142 task = run_task(
142 task = run_task(
143 tasks.send_email, recipient.email, subject,
143 tasks.send_email, recipient.email, subject,
144 email_body_plaintext, email_body, extra_headers=extra_headers)
144 email_body_plaintext, email_body, extra_headers=extra_headers)
145 log.debug('Created email task: %s', task)
145 log.debug('Created email task: %s', task)
146
146
147 return notification
147 return notification
148
148
149 def delete(self, user, notification):
149 def delete(self, user, notification):
150 # we don't want to remove actual notification just the assignment
150 # we don't want to remove actual notification just the assignment
151 try:
151 try:
152 notification = self.__get_notification(notification)
152 notification = self.__get_notification(notification)
153 user = self._get_user(user)
153 user = self._get_user(user)
154 if notification and user:
154 if notification and user:
155 obj = UserNotification.query()\
155 obj = UserNotification.query()\
156 .filter(UserNotification.user == user)\
156 .filter(UserNotification.user == user)\
157 .filter(UserNotification.notification == notification)\
157 .filter(UserNotification.notification == notification)\
158 .one()
158 .one()
159 Session().delete(obj)
159 Session().delete(obj)
160 return True
160 return True
161 except Exception:
161 except Exception:
162 log.error(traceback.format_exc())
162 log.error(traceback.format_exc())
163 raise
163 raise
164
164
165 def get_for_user(self, user, filter_=None):
165 def get_for_user(self, user, filter_=None):
166 """
166 """
167 Get mentions for given user, filter them if filter dict is given
167 Get mentions for given user, filter them if filter dict is given
168 """
168 """
169 user = self._get_user(user)
169 user = self._get_user(user)
170
170
171 q = UserNotification.query()\
171 q = UserNotification.query()\
172 .filter(UserNotification.user == user)\
172 .filter(UserNotification.user == user)\
173 .join((
173 .join((
174 Notification, UserNotification.notification_id ==
174 Notification, UserNotification.notification_id ==
175 Notification.notification_id))
175 Notification.notification_id))
176 if filter_ == ['all']:
176 if filter_ == ['all']:
177 q = q # no filter
177 q = q # no filter
178 elif filter_ == ['unread']:
178 elif filter_ == ['unread']:
179 q = q.filter(UserNotification.read == false())
179 q = q.filter(UserNotification.read == false())
180 elif filter_:
180 elif filter_:
181 q = q.filter(Notification.type_.in_(filter_))
181 q = q.filter(Notification.type_.in_(filter_))
182
182
183 return q
183 return q
184
184
185 def mark_read(self, user, notification):
185 def mark_read(self, user, notification):
186 try:
186 try:
187 notification = self.__get_notification(notification)
187 notification = self.__get_notification(notification)
188 user = self._get_user(user)
188 user = self._get_user(user)
189 if notification and user:
189 if notification and user:
190 obj = UserNotification.query()\
190 obj = UserNotification.query()\
191 .filter(UserNotification.user == user)\
191 .filter(UserNotification.user == user)\
192 .filter(UserNotification.notification == notification)\
192 .filter(UserNotification.notification == notification)\
193 .one()
193 .one()
194 obj.read = True
194 obj.read = True
195 Session().add(obj)
195 Session().add(obj)
196 return True
196 return True
197 except Exception:
197 except Exception:
198 log.error(traceback.format_exc())
198 log.error(traceback.format_exc())
199 raise
199 raise
200
200
201 def mark_all_read_for_user(self, user, filter_=None):
201 def mark_all_read_for_user(self, user, filter_=None):
202 user = self._get_user(user)
202 user = self._get_user(user)
203 q = UserNotification.query()\
203 q = UserNotification.query()\
204 .filter(UserNotification.user == user)\
204 .filter(UserNotification.user == user)\
205 .filter(UserNotification.read == false())\
205 .filter(UserNotification.read == false())\
206 .join((
206 .join((
207 Notification, UserNotification.notification_id ==
207 Notification, UserNotification.notification_id ==
208 Notification.notification_id))
208 Notification.notification_id))
209 if filter_ == ['unread']:
209 if filter_ == ['unread']:
210 q = q.filter(UserNotification.read == false())
210 q = q.filter(UserNotification.read == false())
211 elif filter_:
211 elif filter_:
212 q = q.filter(Notification.type_.in_(filter_))
212 q = q.filter(Notification.type_.in_(filter_))
213
213
214 # this is a little inefficient but sqlalchemy doesn't support
214 # this is a little inefficient but sqlalchemy doesn't support
215 # update on joined tables :(
215 # update on joined tables :(
216 for obj in q.all():
216 for obj in q.all():
217 obj.read = True
217 obj.read = True
218 Session().add(obj)
218 Session().add(obj)
219
219
220 def get_unread_cnt_for_user(self, user):
220 def get_unread_cnt_for_user(self, user):
221 user = self._get_user(user)
221 user = self._get_user(user)
222 return UserNotification.query()\
222 return UserNotification.query()\
223 .filter(UserNotification.read == false())\
223 .filter(UserNotification.read == false())\
224 .filter(UserNotification.user == user).count()
224 .filter(UserNotification.user == user).count()
225
225
226 def get_unread_for_user(self, user):
226 def get_unread_for_user(self, user):
227 user = self._get_user(user)
227 user = self._get_user(user)
228 return [x.notification for x in UserNotification.query()
228 return [x.notification for x in UserNotification.query()
229 .filter(UserNotification.read == false())
229 .filter(UserNotification.read == false())
230 .filter(UserNotification.user == user).all()]
230 .filter(UserNotification.user == user).all()]
231
231
232 def get_user_notification(self, user, notification):
232 def get_user_notification(self, user, notification):
233 user = self._get_user(user)
233 user = self._get_user(user)
234 notification = self.__get_notification(notification)
234 notification = self.__get_notification(notification)
235
235
236 return UserNotification.query()\
236 return UserNotification.query()\
237 .filter(UserNotification.notification == notification)\
237 .filter(UserNotification.notification == notification)\
238 .filter(UserNotification.user == user).scalar()
238 .filter(UserNotification.user == user).scalar()
239
239
240 def make_description(self, notification, translate, show_age=True):
240 def make_description(self, notification, translate, show_age=True):
241 """
241 """
242 Creates a human readable description based on properties
242 Creates a human readable description based on properties
243 of notification object
243 of notification object
244 """
244 """
245 _ = translate
245 _ = translate
246 _map = {
246 _map = {
247 notification.TYPE_CHANGESET_COMMENT: [
247 notification.TYPE_CHANGESET_COMMENT: [
248 _('%(user)s commented on commit %(date_or_age)s'),
248 _('%(user)s commented on commit %(date_or_age)s'),
249 _('%(user)s commented on commit at %(date_or_age)s'),
249 _('%(user)s commented on commit at %(date_or_age)s'),
250 ],
250 ],
251 notification.TYPE_MESSAGE: [
251 notification.TYPE_MESSAGE: [
252 _('%(user)s sent message %(date_or_age)s'),
252 _('%(user)s sent message %(date_or_age)s'),
253 _('%(user)s sent message at %(date_or_age)s'),
253 _('%(user)s sent message at %(date_or_age)s'),
254 ],
254 ],
255 notification.TYPE_MENTION: [
255 notification.TYPE_MENTION: [
256 _('%(user)s mentioned you %(date_or_age)s'),
256 _('%(user)s mentioned you %(date_or_age)s'),
257 _('%(user)s mentioned you at %(date_or_age)s'),
257 _('%(user)s mentioned you at %(date_or_age)s'),
258 ],
258 ],
259 notification.TYPE_REGISTRATION: [
259 notification.TYPE_REGISTRATION: [
260 _('%(user)s registered in RhodeCode %(date_or_age)s'),
260 _('%(user)s registered in RhodeCode %(date_or_age)s'),
261 _('%(user)s registered in RhodeCode at %(date_or_age)s'),
261 _('%(user)s registered in RhodeCode at %(date_or_age)s'),
262 ],
262 ],
263 notification.TYPE_PULL_REQUEST: [
263 notification.TYPE_PULL_REQUEST: [
264 _('%(user)s opened new pull request %(date_or_age)s'),
264 _('%(user)s opened new pull request %(date_or_age)s'),
265 _('%(user)s opened new pull request at %(date_or_age)s'),
265 _('%(user)s opened new pull request at %(date_or_age)s'),
266 ],
266 ],
267 notification.TYPE_PULL_REQUEST_UPDATE: [
267 notification.TYPE_PULL_REQUEST_UPDATE: [
268 _('%(user)s updated pull request %(date_or_age)s'),
268 _('%(user)s updated pull request %(date_or_age)s'),
269 _('%(user)s updated pull request at %(date_or_age)s'),
269 _('%(user)s updated pull request at %(date_or_age)s'),
270 ],
270 ],
271 notification.TYPE_PULL_REQUEST_COMMENT: [
271 notification.TYPE_PULL_REQUEST_COMMENT: [
272 _('%(user)s commented on pull request %(date_or_age)s'),
272 _('%(user)s commented on pull request %(date_or_age)s'),
273 _('%(user)s commented on pull request at %(date_or_age)s'),
273 _('%(user)s commented on pull request at %(date_or_age)s'),
274 ],
274 ],
275 }
275 }
276
276
277 templates = _map[notification.type_]
277 templates = _map[notification.type_]
278
278
279 if show_age:
279 if show_age:
280 template = templates[0]
280 template = templates[0]
281 date_or_age = h.age(notification.created_on)
281 date_or_age = h.age(notification.created_on)
282 if translate:
282 if translate:
283 date_or_age = translate(date_or_age)
283 date_or_age = translate(date_or_age)
284
284
285 if isinstance(date_or_age, TranslationString):
285 if isinstance(date_or_age, TranslationString):
286 date_or_age = date_or_age.interpolate()
286 date_or_age = date_or_age.interpolate()
287
287
288 else:
288 else:
289 template = templates[1]
289 template = templates[1]
290 date_or_age = h.format_date(notification.created_on)
290 date_or_age = h.format_date(notification.created_on)
291
291
292 return template % {
292 return template % {
293 'user': notification.created_by_user.username,
293 'user': notification.created_by_user.username,
294 'date_or_age': date_or_age,
294 'date_or_age': date_or_age,
295 }
295 }
296
296
297
297
298 # Templates for Titles, that could be overwritten by rcextensions
298 # Templates for Titles, that could be overwritten by rcextensions
299 # Title of email for pull-request update
299 # Title of email for pull-request update
300 EMAIL_PR_UPDATE_SUBJECT_TEMPLATE = ''
300 EMAIL_PR_UPDATE_SUBJECT_TEMPLATE = ''
301 # Title of email for request for pull request review
301 # Title of email for request for pull request review
302 EMAIL_PR_REVIEW_SUBJECT_TEMPLATE = ''
302 EMAIL_PR_REVIEW_SUBJECT_TEMPLATE = ''
303
303
304 # Title of email for general comment on pull request
304 # Title of email for general comment on pull request
305 EMAIL_PR_COMMENT_SUBJECT_TEMPLATE = ''
305 EMAIL_PR_COMMENT_SUBJECT_TEMPLATE = ''
306 # Title of email for general comment which includes status change on pull request
306 # Title of email for general comment which includes status change on pull request
307 EMAIL_PR_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
307 EMAIL_PR_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
308 # Title of email for inline comment on a file in pull request
308 # Title of email for inline comment on a file in pull request
309 EMAIL_PR_COMMENT_FILE_SUBJECT_TEMPLATE = ''
309 EMAIL_PR_COMMENT_FILE_SUBJECT_TEMPLATE = ''
310
310
311 # Title of email for general comment on commit
311 # Title of email for general comment on commit
312 EMAIL_COMMENT_SUBJECT_TEMPLATE = ''
312 EMAIL_COMMENT_SUBJECT_TEMPLATE = ''
313 # Title of email for general comment which includes status change on commit
313 # Title of email for general comment which includes status change on commit
314 EMAIL_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
314 EMAIL_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
315 # Title of email for inline comment on a file in commit
315 # Title of email for inline comment on a file in commit
316 EMAIL_COMMENT_FILE_SUBJECT_TEMPLATE = ''
316 EMAIL_COMMENT_FILE_SUBJECT_TEMPLATE = ''
317
317
318
318
319 class EmailNotificationModel(BaseModel):
319 class EmailNotificationModel(BaseModel):
320 TYPE_COMMIT_COMMENT = Notification.TYPE_CHANGESET_COMMENT
320 TYPE_COMMIT_COMMENT = Notification.TYPE_CHANGESET_COMMENT
321 TYPE_REGISTRATION = Notification.TYPE_REGISTRATION
321 TYPE_REGISTRATION = Notification.TYPE_REGISTRATION
322 TYPE_PULL_REQUEST = Notification.TYPE_PULL_REQUEST
322 TYPE_PULL_REQUEST = Notification.TYPE_PULL_REQUEST
323 TYPE_PULL_REQUEST_COMMENT = Notification.TYPE_PULL_REQUEST_COMMENT
323 TYPE_PULL_REQUEST_COMMENT = Notification.TYPE_PULL_REQUEST_COMMENT
324 TYPE_PULL_REQUEST_UPDATE = Notification.TYPE_PULL_REQUEST_UPDATE
324 TYPE_PULL_REQUEST_UPDATE = Notification.TYPE_PULL_REQUEST_UPDATE
325 TYPE_MAIN = Notification.TYPE_MESSAGE
325 TYPE_MAIN = Notification.TYPE_MESSAGE
326
326
327 TYPE_PASSWORD_RESET = 'password_reset'
327 TYPE_PASSWORD_RESET = 'password_reset'
328 TYPE_PASSWORD_RESET_CONFIRMATION = 'password_reset_confirmation'
328 TYPE_PASSWORD_RESET_CONFIRMATION = 'password_reset_confirmation'
329 TYPE_EMAIL_TEST = 'email_test'
329 TYPE_EMAIL_TEST = 'email_test'
330 TYPE_EMAIL_EXCEPTION = 'exception'
330 TYPE_EMAIL_EXCEPTION = 'exception'
331 TYPE_TEST = 'test'
331 TYPE_TEST = 'test'
332
332
333 email_types = {
333 email_types = {
334 TYPE_MAIN:
334 TYPE_MAIN:
335 'rhodecode:templates/email_templates/main.mako',
335 'rhodecode:templates/email_templates/main.mako',
336 TYPE_TEST:
336 TYPE_TEST:
337 'rhodecode:templates/email_templates/test.mako',
337 'rhodecode:templates/email_templates/test.mako',
338 TYPE_EMAIL_EXCEPTION:
338 TYPE_EMAIL_EXCEPTION:
339 'rhodecode:templates/email_templates/exception_tracker.mako',
339 'rhodecode:templates/email_templates/exception_tracker.mako',
340 TYPE_EMAIL_TEST:
340 TYPE_EMAIL_TEST:
341 'rhodecode:templates/email_templates/email_test.mako',
341 'rhodecode:templates/email_templates/email_test.mako',
342 TYPE_REGISTRATION:
342 TYPE_REGISTRATION:
343 'rhodecode:templates/email_templates/user_registration.mako',
343 'rhodecode:templates/email_templates/user_registration.mako',
344 TYPE_PASSWORD_RESET:
344 TYPE_PASSWORD_RESET:
345 'rhodecode:templates/email_templates/password_reset.mako',
345 'rhodecode:templates/email_templates/password_reset.mako',
346 TYPE_PASSWORD_RESET_CONFIRMATION:
346 TYPE_PASSWORD_RESET_CONFIRMATION:
347 'rhodecode:templates/email_templates/password_reset_confirmation.mako',
347 'rhodecode:templates/email_templates/password_reset_confirmation.mako',
348 TYPE_COMMIT_COMMENT:
348 TYPE_COMMIT_COMMENT:
349 'rhodecode:templates/email_templates/commit_comment.mako',
349 'rhodecode:templates/email_templates/commit_comment.mako',
350 TYPE_PULL_REQUEST:
350 TYPE_PULL_REQUEST:
351 'rhodecode:templates/email_templates/pull_request_review.mako',
351 'rhodecode:templates/email_templates/pull_request_review.mako',
352 TYPE_PULL_REQUEST_COMMENT:
352 TYPE_PULL_REQUEST_COMMENT:
353 'rhodecode:templates/email_templates/pull_request_comment.mako',
353 'rhodecode:templates/email_templates/pull_request_comment.mako',
354 TYPE_PULL_REQUEST_UPDATE:
354 TYPE_PULL_REQUEST_UPDATE:
355 'rhodecode:templates/email_templates/pull_request_update.mako',
355 'rhodecode:templates/email_templates/pull_request_update.mako',
356 }
356 }
357
357
358 premailer_instance = premailer.Premailer(
358 premailer_instance = premailer.Premailer(
359 cssutils_logging_level=logging.ERROR,
359 cssutils_logging_level=logging.ERROR,
360 cssutils_logging_handler=logging.getLogger().handlers[0]
360 cssutils_logging_handler=logging.getLogger().handlers[0]
361 if logging.getLogger().handlers else None,
361 if logging.getLogger().handlers else None,
362 )
362 )
363
363
364 def __init__(self):
364 def __init__(self):
365 """
365 """
366 Example usage::
366 Example usage::
367
367
368 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
368 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
369 EmailNotificationModel.TYPE_TEST, **email_kwargs)
369 EmailNotificationModel.TYPE_TEST, **email_kwargs)
370
370
371 """
371 """
372 super(EmailNotificationModel, self).__init__()
372 super(EmailNotificationModel, self).__init__()
373 self.rhodecode_instance_name = rhodecode.CONFIG.get('rhodecode_title')
373 self.rhodecode_instance_name = rhodecode.CONFIG.get('rhodecode_title')
374
374
375 def _update_kwargs_for_render(self, kwargs):
375 def _update_kwargs_for_render(self, kwargs):
376 """
376 """
377 Inject params required for Mako rendering
377 Inject params required for Mako rendering
378
378
379 :param kwargs:
379 :param kwargs:
380 """
380 """
381
381
382 kwargs['rhodecode_instance_name'] = self.rhodecode_instance_name
382 kwargs['rhodecode_instance_name'] = self.rhodecode_instance_name
383 kwargs['rhodecode_version'] = rhodecode.__version__
383 kwargs['rhodecode_version'] = rhodecode.__version__
384 instance_url = h.route_url('home')
384 instance_url = h.route_url('home')
385 _kwargs = {
385 _kwargs = {
386 'instance_url': instance_url,
386 'instance_url': instance_url,
387 'whitespace_filter': self.whitespace_filter
387 'whitespace_filter': self.whitespace_filter,
388 'email_pr_update_subject_template': EMAIL_PR_UPDATE_SUBJECT_TEMPLATE,
389 'email_pr_review_subject_template': EMAIL_PR_REVIEW_SUBJECT_TEMPLATE,
390 'email_pr_comment_subject_template': EMAIL_PR_COMMENT_SUBJECT_TEMPLATE,
391 'email_pr_comment_status_change_subject_template': EMAIL_PR_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE,
392 'email_pr_comment_file_subject_template': EMAIL_PR_COMMENT_FILE_SUBJECT_TEMPLATE,
393 'email_comment_subject_template': EMAIL_COMMENT_SUBJECT_TEMPLATE,
394 'email_comment_status_change_subject_template': EMAIL_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE,
395 'email_comment_file_subject_template': EMAIL_COMMENT_FILE_SUBJECT_TEMPLATE,
388 }
396 }
389 _kwargs.update(kwargs)
397 _kwargs.update(kwargs)
390 return _kwargs
398 return _kwargs
391
399
392 def whitespace_filter(self, text):
400 def whitespace_filter(self, text):
393 return text.replace('\n', '').replace('\t', '')
401 return text.replace('\n', '').replace('\t', '')
394
402
395 def get_renderer(self, type_, request):
403 def get_renderer(self, type_, request):
396 template_name = self.email_types[type_]
404 template_name = self.email_types[type_]
397 return request.get_partial_renderer(template_name)
405 return request.get_partial_renderer(template_name)
398
406
399 def render_email(self, type_, **kwargs):
407 def render_email(self, type_, **kwargs):
400 """
408 """
401 renders template for email, and returns a tuple of
409 renders template for email, and returns a tuple of
402 (subject, email_headers, email_html_body, email_plaintext_body)
410 (subject, email_headers, email_html_body, email_plaintext_body)
403 """
411 """
404 # translator and helpers inject
412 # translator and helpers inject
405 _kwargs = self._update_kwargs_for_render(kwargs)
413 _kwargs = self._update_kwargs_for_render(kwargs)
406 request = get_current_request()
414 request = get_current_request()
407 email_template = self.get_renderer(type_, request=request)
415 email_template = self.get_renderer(type_, request=request)
408
416
409 subject = email_template.render('subject', **_kwargs)
417 subject = email_template.render('subject', **_kwargs)
410
418
411 try:
419 try:
412 body_plaintext = email_template.render('body_plaintext', **_kwargs)
420 body_plaintext = email_template.render('body_plaintext', **_kwargs)
413 except AttributeError:
421 except AttributeError:
414 # it's not defined in template, ok we can skip it
422 # it's not defined in template, ok we can skip it
415 body_plaintext = ''
423 body_plaintext = ''
416
424
417 # render WHOLE template
425 # render WHOLE template
418 body = email_template.render(None, **_kwargs)
426 body = email_template.render(None, **_kwargs)
419
427
420 try:
428 try:
421 # Inline CSS styles and conversion
429 # Inline CSS styles and conversion
422 body = self.premailer_instance.transform(body)
430 body = self.premailer_instance.transform(body)
423 except Exception:
431 except Exception:
424 log.exception('Failed to parse body with premailer')
432 log.exception('Failed to parse body with premailer')
425 pass
433 pass
426
434
427 return subject, body, body_plaintext
435 return subject, body, body_plaintext
@@ -1,598 +1,598 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2020 RhodeCode GmbH
3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 permissions model for RhodeCode
22 permissions model for RhodeCode
23 """
23 """
24 import collections
24 import collections
25 import logging
25 import logging
26 import traceback
26 import traceback
27
27
28 from sqlalchemy.exc import DatabaseError
28 from sqlalchemy.exc import DatabaseError
29
29
30 from rhodecode import events
30 from rhodecode import events
31 from rhodecode.model import BaseModel
31 from rhodecode.model import BaseModel
32 from rhodecode.model.db import (
32 from rhodecode.model.db import (
33 User, Permission, UserToPerm, UserRepoToPerm, UserRepoGroupToPerm,
33 User, Permission, UserToPerm, UserRepoToPerm, UserRepoGroupToPerm,
34 UserUserGroupToPerm, UserGroup, UserGroupToPerm, UserToRepoBranchPermission)
34 UserUserGroupToPerm, UserGroup, UserGroupToPerm, UserToRepoBranchPermission)
35 from rhodecode.lib.utils2 import str2bool, safe_int
35 from rhodecode.lib.utils2 import str2bool, safe_int
36
36
37 log = logging.getLogger(__name__)
37 log = logging.getLogger(__name__)
38
38
39
39
40 class PermissionModel(BaseModel):
40 class PermissionModel(BaseModel):
41 """
41 """
42 Permissions model for RhodeCode
42 Permissions model for RhodeCode
43 """
43 """
44
44
45 cls = Permission
45 cls = Permission
46 global_perms = {
46 global_perms = {
47 'default_repo_create': None,
47 'default_repo_create': None,
48 # special case for create repos on write access to group
48 # special case for create repos on write access to group
49 'default_repo_create_on_write': None,
49 'default_repo_create_on_write': None,
50 'default_repo_group_create': None,
50 'default_repo_group_create': None,
51 'default_user_group_create': None,
51 'default_user_group_create': None,
52 'default_fork_create': None,
52 'default_fork_create': None,
53 'default_inherit_default_permissions': None,
53 'default_inherit_default_permissions': None,
54 'default_register': None,
54 'default_register': None,
55 'default_password_reset': None,
55 'default_password_reset': None,
56 'default_extern_activate': None,
56 'default_extern_activate': None,
57
57
58 # object permissions below
58 # object permissions below
59 'default_repo_perm': None,
59 'default_repo_perm': None,
60 'default_group_perm': None,
60 'default_group_perm': None,
61 'default_user_group_perm': None,
61 'default_user_group_perm': None,
62
62
63 # branch
63 # branch
64 'default_branch_perm': None,
64 'default_branch_perm': None,
65 }
65 }
66
66
67 def set_global_permission_choices(self, c_obj, gettext_translator):
67 def set_global_permission_choices(self, c_obj, gettext_translator):
68 _ = gettext_translator
68 _ = gettext_translator
69
69
70 c_obj.repo_perms_choices = [
70 c_obj.repo_perms_choices = [
71 ('repository.none', _('None'),),
71 ('repository.none', _('None'),),
72 ('repository.read', _('Read'),),
72 ('repository.read', _('Read'),),
73 ('repository.write', _('Write'),),
73 ('repository.write', _('Write'),),
74 ('repository.admin', _('Admin'),)]
74 ('repository.admin', _('Admin'),)]
75
75
76 c_obj.group_perms_choices = [
76 c_obj.group_perms_choices = [
77 ('group.none', _('None'),),
77 ('group.none', _('None'),),
78 ('group.read', _('Read'),),
78 ('group.read', _('Read'),),
79 ('group.write', _('Write'),),
79 ('group.write', _('Write'),),
80 ('group.admin', _('Admin'),)]
80 ('group.admin', _('Admin'),)]
81
81
82 c_obj.user_group_perms_choices = [
82 c_obj.user_group_perms_choices = [
83 ('usergroup.none', _('None'),),
83 ('usergroup.none', _('None'),),
84 ('usergroup.read', _('Read'),),
84 ('usergroup.read', _('Read'),),
85 ('usergroup.write', _('Write'),),
85 ('usergroup.write', _('Write'),),
86 ('usergroup.admin', _('Admin'),)]
86 ('usergroup.admin', _('Admin'),)]
87
87
88 c_obj.branch_perms_choices = [
88 c_obj.branch_perms_choices = [
89 ('branch.none', _('Protected/No Access'),),
89 ('branch.none', _('Protected/No Access'),),
90 ('branch.merge', _('Web merge'),),
90 ('branch.merge', _('Web merge'),),
91 ('branch.push', _('Push'),),
91 ('branch.push', _('Push'),),
92 ('branch.push_force', _('Force Push'),)]
92 ('branch.push_force', _('Force Push'),)]
93
93
94 c_obj.register_choices = [
94 c_obj.register_choices = [
95 ('hg.register.none', _('Disabled')),
95 ('hg.register.none', _('Disabled')),
96 ('hg.register.manual_activate', _('Allowed with manual account activation')),
96 ('hg.register.manual_activate', _('Allowed with manual account activation')),
97 ('hg.register.auto_activate', _('Allowed with automatic account activation')),]
97 ('hg.register.auto_activate', _('Allowed with automatic account activation')),]
98
98
99 c_obj.password_reset_choices = [
99 c_obj.password_reset_choices = [
100 ('hg.password_reset.enabled', _('Allow password recovery')),
100 ('hg.password_reset.enabled', _('Allow password recovery')),
101 ('hg.password_reset.hidden', _('Hide password recovery link')),
101 ('hg.password_reset.hidden', _('Hide password recovery link')),
102 ('hg.password_reset.disabled', _('Disable password recovery')),]
102 ('hg.password_reset.disabled', _('Disable password recovery')),]
103
103
104 c_obj.extern_activate_choices = [
104 c_obj.extern_activate_choices = [
105 ('hg.extern_activate.manual', _('Manual activation of external account')),
105 ('hg.extern_activate.manual', _('Manual activation of external account')),
106 ('hg.extern_activate.auto', _('Automatic activation of external account')),]
106 ('hg.extern_activate.auto', _('Automatic activation of external account')),]
107
107
108 c_obj.repo_create_choices = [
108 c_obj.repo_create_choices = [
109 ('hg.create.none', _('Disabled')),
109 ('hg.create.none', _('Disabled')),
110 ('hg.create.repository', _('Enabled'))]
110 ('hg.create.repository', _('Enabled'))]
111
111
112 c_obj.repo_create_on_write_choices = [
112 c_obj.repo_create_on_write_choices = [
113 ('hg.create.write_on_repogroup.false', _('Disabled')),
113 ('hg.create.write_on_repogroup.false', _('Disabled')),
114 ('hg.create.write_on_repogroup.true', _('Enabled'))]
114 ('hg.create.write_on_repogroup.true', _('Enabled'))]
115
115
116 c_obj.user_group_create_choices = [
116 c_obj.user_group_create_choices = [
117 ('hg.usergroup.create.false', _('Disabled')),
117 ('hg.usergroup.create.false', _('Disabled')),
118 ('hg.usergroup.create.true', _('Enabled'))]
118 ('hg.usergroup.create.true', _('Enabled'))]
119
119
120 c_obj.repo_group_create_choices = [
120 c_obj.repo_group_create_choices = [
121 ('hg.repogroup.create.false', _('Disabled')),
121 ('hg.repogroup.create.false', _('Disabled')),
122 ('hg.repogroup.create.true', _('Enabled'))]
122 ('hg.repogroup.create.true', _('Enabled'))]
123
123
124 c_obj.fork_choices = [
124 c_obj.fork_choices = [
125 ('hg.fork.none', _('Disabled')),
125 ('hg.fork.none', _('Disabled')),
126 ('hg.fork.repository', _('Enabled'))]
126 ('hg.fork.repository', _('Enabled'))]
127
127
128 c_obj.inherit_default_permission_choices = [
128 c_obj.inherit_default_permission_choices = [
129 ('hg.inherit_default_perms.false', _('Disabled')),
129 ('hg.inherit_default_perms.false', _('Disabled')),
130 ('hg.inherit_default_perms.true', _('Enabled'))]
130 ('hg.inherit_default_perms.true', _('Enabled'))]
131
131
132 def get_default_perms(self, object_perms, suffix):
132 def get_default_perms(self, object_perms, suffix):
133 defaults = {}
133 defaults = {}
134 for perm in object_perms:
134 for perm in object_perms:
135 # perms
135 # perms
136 if perm.permission.permission_name.startswith('repository.'):
136 if perm.permission.permission_name.startswith('repository.'):
137 defaults['default_repo_perm' + suffix] = perm.permission.permission_name
137 defaults['default_repo_perm' + suffix] = perm.permission.permission_name
138
138
139 if perm.permission.permission_name.startswith('group.'):
139 if perm.permission.permission_name.startswith('group.'):
140 defaults['default_group_perm' + suffix] = perm.permission.permission_name
140 defaults['default_group_perm' + suffix] = perm.permission.permission_name
141
141
142 if perm.permission.permission_name.startswith('usergroup.'):
142 if perm.permission.permission_name.startswith('usergroup.'):
143 defaults['default_user_group_perm' + suffix] = perm.permission.permission_name
143 defaults['default_user_group_perm' + suffix] = perm.permission.permission_name
144
144
145 # branch
145 # branch
146 if perm.permission.permission_name.startswith('branch.'):
146 if perm.permission.permission_name.startswith('branch.'):
147 defaults['default_branch_perm' + suffix] = perm.permission.permission_name
147 defaults['default_branch_perm' + suffix] = perm.permission.permission_name
148
148
149 # creation of objects
149 # creation of objects
150 if perm.permission.permission_name.startswith('hg.create.write_on_repogroup'):
150 if perm.permission.permission_name.startswith('hg.create.write_on_repogroup'):
151 defaults['default_repo_create_on_write' + suffix] = perm.permission.permission_name
151 defaults['default_repo_create_on_write' + suffix] = perm.permission.permission_name
152
152
153 elif perm.permission.permission_name.startswith('hg.create.'):
153 elif perm.permission.permission_name.startswith('hg.create.'):
154 defaults['default_repo_create' + suffix] = perm.permission.permission_name
154 defaults['default_repo_create' + suffix] = perm.permission.permission_name
155
155
156 if perm.permission.permission_name.startswith('hg.fork.'):
156 if perm.permission.permission_name.startswith('hg.fork.'):
157 defaults['default_fork_create' + suffix] = perm.permission.permission_name
157 defaults['default_fork_create' + suffix] = perm.permission.permission_name
158
158
159 if perm.permission.permission_name.startswith('hg.inherit_default_perms.'):
159 if perm.permission.permission_name.startswith('hg.inherit_default_perms.'):
160 defaults['default_inherit_default_permissions' + suffix] = perm.permission.permission_name
160 defaults['default_inherit_default_permissions' + suffix] = perm.permission.permission_name
161
161
162 if perm.permission.permission_name.startswith('hg.repogroup.'):
162 if perm.permission.permission_name.startswith('hg.repogroup.'):
163 defaults['default_repo_group_create' + suffix] = perm.permission.permission_name
163 defaults['default_repo_group_create' + suffix] = perm.permission.permission_name
164
164
165 if perm.permission.permission_name.startswith('hg.usergroup.'):
165 if perm.permission.permission_name.startswith('hg.usergroup.'):
166 defaults['default_user_group_create' + suffix] = perm.permission.permission_name
166 defaults['default_user_group_create' + suffix] = perm.permission.permission_name
167
167
168 # registration and external account activation
168 # registration and external account activation
169 if perm.permission.permission_name.startswith('hg.register.'):
169 if perm.permission.permission_name.startswith('hg.register.'):
170 defaults['default_register' + suffix] = perm.permission.permission_name
170 defaults['default_register' + suffix] = perm.permission.permission_name
171
171
172 if perm.permission.permission_name.startswith('hg.password_reset.'):
172 if perm.permission.permission_name.startswith('hg.password_reset.'):
173 defaults['default_password_reset' + suffix] = perm.permission.permission_name
173 defaults['default_password_reset' + suffix] = perm.permission.permission_name
174
174
175 if perm.permission.permission_name.startswith('hg.extern_activate.'):
175 if perm.permission.permission_name.startswith('hg.extern_activate.'):
176 defaults['default_extern_activate' + suffix] = perm.permission.permission_name
176 defaults['default_extern_activate' + suffix] = perm.permission.permission_name
177
177
178 return defaults
178 return defaults
179
179
180 def _make_new_user_perm(self, user, perm_name):
180 def _make_new_user_perm(self, user, perm_name):
181 log.debug('Creating new user permission:%s', perm_name)
181 log.debug('Creating new user permission:%s', perm_name)
182 new = UserToPerm()
182 new = UserToPerm()
183 new.user = user
183 new.user = user
184 new.permission = Permission.get_by_key(perm_name)
184 new.permission = Permission.get_by_key(perm_name)
185 return new
185 return new
186
186
187 def _make_new_user_group_perm(self, user_group, perm_name):
187 def _make_new_user_group_perm(self, user_group, perm_name):
188 log.debug('Creating new user group permission:%s', perm_name)
188 log.debug('Creating new user group permission:%s', perm_name)
189 new = UserGroupToPerm()
189 new = UserGroupToPerm()
190 new.users_group = user_group
190 new.users_group = user_group
191 new.permission = Permission.get_by_key(perm_name)
191 new.permission = Permission.get_by_key(perm_name)
192 return new
192 return new
193
193
194 def _keep_perm(self, perm_name, keep_fields):
194 def _keep_perm(self, perm_name, keep_fields):
195 def get_pat(field_name):
195 def get_pat(field_name):
196 return {
196 return {
197 # global perms
197 # global perms
198 'default_repo_create': 'hg.create.',
198 'default_repo_create': 'hg.create.',
199 # special case for create repos on write access to group
199 # special case for create repos on write access to group
200 'default_repo_create_on_write': 'hg.create.write_on_repogroup.',
200 'default_repo_create_on_write': 'hg.create.write_on_repogroup.',
201 'default_repo_group_create': 'hg.repogroup.create.',
201 'default_repo_group_create': 'hg.repogroup.create.',
202 'default_user_group_create': 'hg.usergroup.create.',
202 'default_user_group_create': 'hg.usergroup.create.',
203 'default_fork_create': 'hg.fork.',
203 'default_fork_create': 'hg.fork.',
204 'default_inherit_default_permissions': 'hg.inherit_default_perms.',
204 'default_inherit_default_permissions': 'hg.inherit_default_perms.',
205
205
206 # application perms
206 # application perms
207 'default_register': 'hg.register.',
207 'default_register': 'hg.register.',
208 'default_password_reset': 'hg.password_reset.',
208 'default_password_reset': 'hg.password_reset.',
209 'default_extern_activate': 'hg.extern_activate.',
209 'default_extern_activate': 'hg.extern_activate.',
210
210
211 # object permissions below
211 # object permissions below
212 'default_repo_perm': 'repository.',
212 'default_repo_perm': 'repository.',
213 'default_group_perm': 'group.',
213 'default_group_perm': 'group.',
214 'default_user_group_perm': 'usergroup.',
214 'default_user_group_perm': 'usergroup.',
215 # branch
215 # branch
216 'default_branch_perm': 'branch.',
216 'default_branch_perm': 'branch.',
217
217
218 }[field_name]
218 }[field_name]
219 for field in keep_fields:
219 for field in keep_fields:
220 pat = get_pat(field)
220 pat = get_pat(field)
221 if perm_name.startswith(pat):
221 if perm_name.startswith(pat):
222 return True
222 return True
223 return False
223 return False
224
224
225 def _clear_object_perm(self, object_perms, preserve=None):
225 def _clear_object_perm(self, object_perms, preserve=None):
226 preserve = preserve or []
226 preserve = preserve or []
227 _deleted = []
227 _deleted = []
228 for perm in object_perms:
228 for perm in object_perms:
229 perm_name = perm.permission.permission_name
229 perm_name = perm.permission.permission_name
230 if not self._keep_perm(perm_name, keep_fields=preserve):
230 if not self._keep_perm(perm_name, keep_fields=preserve):
231 _deleted.append(perm_name)
231 _deleted.append(perm_name)
232 self.sa.delete(perm)
232 self.sa.delete(perm)
233 return _deleted
233 return _deleted
234
234
235 def _clear_user_perms(self, user_id, preserve=None):
235 def _clear_user_perms(self, user_id, preserve=None):
236 perms = self.sa.query(UserToPerm)\
236 perms = self.sa.query(UserToPerm)\
237 .filter(UserToPerm.user_id == user_id)\
237 .filter(UserToPerm.user_id == user_id)\
238 .all()
238 .all()
239 return self._clear_object_perm(perms, preserve=preserve)
239 return self._clear_object_perm(perms, preserve=preserve)
240
240
241 def _clear_user_group_perms(self, user_group_id, preserve=None):
241 def _clear_user_group_perms(self, user_group_id, preserve=None):
242 perms = self.sa.query(UserGroupToPerm)\
242 perms = self.sa.query(UserGroupToPerm)\
243 .filter(UserGroupToPerm.users_group_id == user_group_id)\
243 .filter(UserGroupToPerm.users_group_id == user_group_id)\
244 .all()
244 .all()
245 return self._clear_object_perm(perms, preserve=preserve)
245 return self._clear_object_perm(perms, preserve=preserve)
246
246
247 def _set_new_object_perms(self, obj_type, object, form_result, preserve=None):
247 def _set_new_object_perms(self, obj_type, object, form_result, preserve=None):
248 # clear current entries, to make this function idempotent
248 # clear current entries, to make this function idempotent
249 # it will fix even if we define more permissions or permissions
249 # it will fix even if we define more permissions or permissions
250 # are somehow missing
250 # are somehow missing
251 preserve = preserve or []
251 preserve = preserve or []
252 _global_perms = self.global_perms.copy()
252 _global_perms = self.global_perms.copy()
253 if obj_type not in ['user', 'user_group']:
253 if obj_type not in ['user', 'user_group']:
254 raise ValueError("obj_type must be on of 'user' or 'user_group'")
254 raise ValueError("obj_type must be on of 'user' or 'user_group'")
255 global_perms = len(_global_perms)
255 global_perms = len(_global_perms)
256 default_user_perms = len(Permission.DEFAULT_USER_PERMISSIONS)
256 default_user_perms = len(Permission.DEFAULT_USER_PERMISSIONS)
257 if global_perms != default_user_perms:
257 if global_perms != default_user_perms:
258 raise Exception(
258 raise Exception(
259 'Inconsistent permissions definition. Got {} vs {}'.format(
259 'Inconsistent permissions definition. Got {} vs {}'.format(
260 global_perms, default_user_perms))
260 global_perms, default_user_perms))
261
261
262 if obj_type == 'user':
262 if obj_type == 'user':
263 self._clear_user_perms(object.user_id, preserve)
263 self._clear_user_perms(object.user_id, preserve)
264 if obj_type == 'user_group':
264 if obj_type == 'user_group':
265 self._clear_user_group_perms(object.users_group_id, preserve)
265 self._clear_user_group_perms(object.users_group_id, preserve)
266
266
267 # now kill the keys that we want to preserve from the form.
267 # now kill the keys that we want to preserve from the form.
268 for key in preserve:
268 for key in preserve:
269 del _global_perms[key]
269 del _global_perms[key]
270
270
271 for k in _global_perms.copy():
271 for k in _global_perms.copy():
272 _global_perms[k] = form_result[k]
272 _global_perms[k] = form_result[k]
273
273
274 # at that stage we validate all are passed inside form_result
274 # at that stage we validate all are passed inside form_result
275 for _perm_key, perm_value in _global_perms.items():
275 for _perm_key, perm_value in _global_perms.items():
276 if perm_value is None:
276 if perm_value is None:
277 raise ValueError('Missing permission for %s' % (_perm_key,))
277 raise ValueError('Missing permission for %s' % (_perm_key,))
278
278
279 if obj_type == 'user':
279 if obj_type == 'user':
280 p = self._make_new_user_perm(object, perm_value)
280 p = self._make_new_user_perm(object, perm_value)
281 self.sa.add(p)
281 self.sa.add(p)
282 if obj_type == 'user_group':
282 if obj_type == 'user_group':
283 p = self._make_new_user_group_perm(object, perm_value)
283 p = self._make_new_user_group_perm(object, perm_value)
284 self.sa.add(p)
284 self.sa.add(p)
285
285
286 def _set_new_user_perms(self, user, form_result, preserve=None):
286 def _set_new_user_perms(self, user, form_result, preserve=None):
287 return self._set_new_object_perms(
287 return self._set_new_object_perms(
288 'user', user, form_result, preserve)
288 'user', user, form_result, preserve)
289
289
290 def _set_new_user_group_perms(self, user_group, form_result, preserve=None):
290 def _set_new_user_group_perms(self, user_group, form_result, preserve=None):
291 return self._set_new_object_perms(
291 return self._set_new_object_perms(
292 'user_group', user_group, form_result, preserve)
292 'user_group', user_group, form_result, preserve)
293
293
294 def set_new_user_perms(self, user, form_result):
294 def set_new_user_perms(self, user, form_result):
295 # calculate what to preserve from what is given in form_result
295 # calculate what to preserve from what is given in form_result
296 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
296 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
297 return self._set_new_user_perms(user, form_result, preserve)
297 return self._set_new_user_perms(user, form_result, preserve)
298
298
299 def set_new_user_group_perms(self, user_group, form_result):
299 def set_new_user_group_perms(self, user_group, form_result):
300 # calculate what to preserve from what is given in form_result
300 # calculate what to preserve from what is given in form_result
301 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
301 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
302 return self._set_new_user_group_perms(user_group, form_result, preserve)
302 return self._set_new_user_group_perms(user_group, form_result, preserve)
303
303
304 def create_permissions(self):
304 def create_permissions(self):
305 """
305 """
306 Create permissions for whole system
306 Create permissions for whole system
307 """
307 """
308 for p in Permission.PERMS:
308 for p in Permission.PERMS:
309 if not Permission.get_by_key(p[0]):
309 if not Permission.get_by_key(p[0]):
310 new_perm = Permission()
310 new_perm = Permission()
311 new_perm.permission_name = p[0]
311 new_perm.permission_name = p[0]
312 new_perm.permission_longname = p[0] # translation err with p[1]
312 new_perm.permission_longname = p[0] # translation err with p[1]
313 self.sa.add(new_perm)
313 self.sa.add(new_perm)
314
314
315 def _create_default_object_permission(self, obj_type, obj, obj_perms,
315 def _create_default_object_permission(self, obj_type, obj, obj_perms,
316 force=False):
316 force=False):
317 if obj_type not in ['user', 'user_group']:
317 if obj_type not in ['user', 'user_group']:
318 raise ValueError("obj_type must be on of 'user' or 'user_group'")
318 raise ValueError("obj_type must be on of 'user' or 'user_group'")
319
319
320 def _get_group(perm_name):
320 def _get_group(perm_name):
321 return '.'.join(perm_name.split('.')[:1])
321 return '.'.join(perm_name.split('.')[:1])
322
322
323 defined_perms_groups = map(
323 defined_perms_groups = map(
324 _get_group, (x.permission.permission_name for x in obj_perms))
324 _get_group, (x.permission.permission_name for x in obj_perms))
325 log.debug('GOT ALREADY DEFINED:%s', obj_perms)
325 log.debug('GOT ALREADY DEFINED:%s', obj_perms)
326
326
327 if force:
327 if force:
328 self._clear_object_perm(obj_perms)
328 self._clear_object_perm(obj_perms)
329 self.sa.commit()
329 self.sa.commit()
330 defined_perms_groups = []
330 defined_perms_groups = []
331 # for every default permission that needs to be created, we check if
331 # for every default permission that needs to be created, we check if
332 # it's group is already defined, if it's not we create default perm
332 # it's group is already defined, if it's not we create default perm
333 for perm_name in Permission.DEFAULT_USER_PERMISSIONS:
333 for perm_name in Permission.DEFAULT_USER_PERMISSIONS:
334 gr = _get_group(perm_name)
334 gr = _get_group(perm_name)
335 if gr not in defined_perms_groups:
335 if gr not in defined_perms_groups:
336 log.debug('GR:%s not found, creating permission %s',
336 log.debug('GR:%s not found, creating permission %s',
337 gr, perm_name)
337 gr, perm_name)
338 if obj_type == 'user':
338 if obj_type == 'user':
339 new_perm = self._make_new_user_perm(obj, perm_name)
339 new_perm = self._make_new_user_perm(obj, perm_name)
340 self.sa.add(new_perm)
340 self.sa.add(new_perm)
341 if obj_type == 'user_group':
341 if obj_type == 'user_group':
342 new_perm = self._make_new_user_group_perm(obj, perm_name)
342 new_perm = self._make_new_user_group_perm(obj, perm_name)
343 self.sa.add(new_perm)
343 self.sa.add(new_perm)
344
344
345 def create_default_user_permissions(self, user, force=False):
345 def create_default_user_permissions(self, user, force=False):
346 """
346 """
347 Creates only missing default permissions for user, if force is set it
347 Creates only missing default permissions for user, if force is set it
348 resets the default permissions for that user
348 resets the default permissions for that user
349
349
350 :param user:
350 :param user:
351 :param force:
351 :param force:
352 """
352 """
353 user = self._get_user(user)
353 user = self._get_user(user)
354 obj_perms = UserToPerm.query().filter(UserToPerm.user == user).all()
354 obj_perms = UserToPerm.query().filter(UserToPerm.user == user).all()
355 return self._create_default_object_permission(
355 return self._create_default_object_permission(
356 'user', user, obj_perms, force)
356 'user', user, obj_perms, force)
357
357
358 def create_default_user_group_permissions(self, user_group, force=False):
358 def create_default_user_group_permissions(self, user_group, force=False):
359 """
359 """
360 Creates only missing default permissions for user group, if force is
360 Creates only missing default permissions for user group, if force is
361 set it resets the default permissions for that user group
361 set it resets the default permissions for that user group
362
362
363 :param user_group:
363 :param user_group:
364 :param force:
364 :param force:
365 """
365 """
366 user_group = self._get_user_group(user_group)
366 user_group = self._get_user_group(user_group)
367 obj_perms = UserToPerm.query().filter(UserGroupToPerm.users_group == user_group).all()
367 obj_perms = UserToPerm.query().filter(UserGroupToPerm.users_group == user_group).all()
368 return self._create_default_object_permission(
368 return self._create_default_object_permission(
369 'user_group', user_group, obj_perms, force)
369 'user_group', user_group, obj_perms, force)
370
370
371 def update_application_permissions(self, form_result):
371 def update_application_permissions(self, form_result):
372 if 'perm_user_id' in form_result:
372 if 'perm_user_id' in form_result:
373 perm_user = User.get(safe_int(form_result['perm_user_id']))
373 perm_user = User.get(safe_int(form_result['perm_user_id']))
374 else:
374 else:
375 # used mostly to do lookup for default user
375 # used mostly to do lookup for default user
376 perm_user = User.get_by_username(form_result['perm_user_name'])
376 perm_user = User.get_by_username(form_result['perm_user_name'])
377
377
378 try:
378 try:
379 # stage 1 set anonymous access
379 # stage 1 set anonymous access
380 if perm_user.username == User.DEFAULT_USER:
380 if perm_user.username == User.DEFAULT_USER:
381 perm_user.active = str2bool(form_result['anonymous'])
381 perm_user.active = str2bool(form_result['anonymous'])
382 self.sa.add(perm_user)
382 self.sa.add(perm_user)
383
383
384 # stage 2 reset defaults and set them from form data
384 # stage 2 reset defaults and set them from form data
385 self._set_new_user_perms(perm_user, form_result, preserve=[
385 self._set_new_user_perms(perm_user, form_result, preserve=[
386 'default_repo_perm',
386 'default_repo_perm',
387 'default_group_perm',
387 'default_group_perm',
388 'default_user_group_perm',
388 'default_user_group_perm',
389 'default_branch_perm',
389 'default_branch_perm',
390
390
391 'default_repo_group_create',
391 'default_repo_group_create',
392 'default_user_group_create',
392 'default_user_group_create',
393 'default_repo_create_on_write',
393 'default_repo_create_on_write',
394 'default_repo_create',
394 'default_repo_create',
395 'default_fork_create',
395 'default_fork_create',
396 'default_inherit_default_permissions',])
396 'default_inherit_default_permissions',])
397
397
398 self.sa.commit()
398 self.sa.commit()
399 except (DatabaseError,):
399 except (DatabaseError,):
400 log.error(traceback.format_exc())
400 log.error(traceback.format_exc())
401 self.sa.rollback()
401 self.sa.rollback()
402 raise
402 raise
403
403
404 def update_user_permissions(self, form_result):
404 def update_user_permissions(self, form_result):
405 if 'perm_user_id' in form_result:
405 if 'perm_user_id' in form_result:
406 perm_user = User.get(safe_int(form_result['perm_user_id']))
406 perm_user = User.get(safe_int(form_result['perm_user_id']))
407 else:
407 else:
408 # used mostly to do lookup for default user
408 # used mostly to do lookup for default user
409 perm_user = User.get_by_username(form_result['perm_user_name'])
409 perm_user = User.get_by_username(form_result['perm_user_name'])
410 try:
410 try:
411 # stage 2 reset defaults and set them from form data
411 # stage 2 reset defaults and set them from form data
412 self._set_new_user_perms(perm_user, form_result, preserve=[
412 self._set_new_user_perms(perm_user, form_result, preserve=[
413 'default_repo_perm',
413 'default_repo_perm',
414 'default_group_perm',
414 'default_group_perm',
415 'default_user_group_perm',
415 'default_user_group_perm',
416 'default_branch_perm',
416 'default_branch_perm',
417
417
418 'default_register',
418 'default_register',
419 'default_password_reset',
419 'default_password_reset',
420 'default_extern_activate'])
420 'default_extern_activate'])
421 self.sa.commit()
421 self.sa.commit()
422 except (DatabaseError,):
422 except (DatabaseError,):
423 log.error(traceback.format_exc())
423 log.error(traceback.format_exc())
424 self.sa.rollback()
424 self.sa.rollback()
425 raise
425 raise
426
426
427 def update_user_group_permissions(self, form_result):
427 def update_user_group_permissions(self, form_result):
428 if 'perm_user_group_id' in form_result:
428 if 'perm_user_group_id' in form_result:
429 perm_user_group = UserGroup.get(safe_int(form_result['perm_user_group_id']))
429 perm_user_group = UserGroup.get(safe_int(form_result['perm_user_group_id']))
430 else:
430 else:
431 # used mostly to do lookup for default user
431 # used mostly to do lookup for default user
432 perm_user_group = UserGroup.get_by_group_name(form_result['perm_user_group_name'])
432 perm_user_group = UserGroup.get_by_group_name(form_result['perm_user_group_name'])
433 try:
433 try:
434 # stage 2 reset defaults and set them from form data
434 # stage 2 reset defaults and set them from form data
435 self._set_new_user_group_perms(perm_user_group, form_result, preserve=[
435 self._set_new_user_group_perms(perm_user_group, form_result, preserve=[
436 'default_repo_perm',
436 'default_repo_perm',
437 'default_group_perm',
437 'default_group_perm',
438 'default_user_group_perm',
438 'default_user_group_perm',
439 'default_branch_perm',
439 'default_branch_perm',
440
440
441 'default_register',
441 'default_register',
442 'default_password_reset',
442 'default_password_reset',
443 'default_extern_activate'])
443 'default_extern_activate'])
444 self.sa.commit()
444 self.sa.commit()
445 except (DatabaseError,):
445 except (DatabaseError,):
446 log.error(traceback.format_exc())
446 log.error(traceback.format_exc())
447 self.sa.rollback()
447 self.sa.rollback()
448 raise
448 raise
449
449
450 def update_object_permissions(self, form_result):
450 def update_object_permissions(self, form_result):
451 if 'perm_user_id' in form_result:
451 if 'perm_user_id' in form_result:
452 perm_user = User.get(safe_int(form_result['perm_user_id']))
452 perm_user = User.get(safe_int(form_result['perm_user_id']))
453 else:
453 else:
454 # used mostly to do lookup for default user
454 # used mostly to do lookup for default user
455 perm_user = User.get_by_username(form_result['perm_user_name'])
455 perm_user = User.get_by_username(form_result['perm_user_name'])
456 try:
456 try:
457
457
458 # stage 2 reset defaults and set them from form data
458 # stage 2 reset defaults and set them from form data
459 self._set_new_user_perms(perm_user, form_result, preserve=[
459 self._set_new_user_perms(perm_user, form_result, preserve=[
460 'default_repo_group_create',
460 'default_repo_group_create',
461 'default_user_group_create',
461 'default_user_group_create',
462 'default_repo_create_on_write',
462 'default_repo_create_on_write',
463 'default_repo_create',
463 'default_repo_create',
464 'default_fork_create',
464 'default_fork_create',
465 'default_inherit_default_permissions',
465 'default_inherit_default_permissions',
466 'default_branch_perm',
466 'default_branch_perm',
467
467
468 'default_register',
468 'default_register',
469 'default_password_reset',
469 'default_password_reset',
470 'default_extern_activate'])
470 'default_extern_activate'])
471
471
472 # overwrite default repo permissions
472 # overwrite default repo permissions
473 if form_result['overwrite_default_repo']:
473 if form_result['overwrite_default_repo']:
474 _def_name = form_result['default_repo_perm'].split('repository.')[-1]
474 _def_name = form_result['default_repo_perm'].split('repository.')[-1]
475 _def = Permission.get_by_key('repository.' + _def_name)
475 _def = Permission.get_by_key('repository.' + _def_name)
476 for r2p in self.sa.query(UserRepoToPerm)\
476 for r2p in self.sa.query(UserRepoToPerm)\
477 .filter(UserRepoToPerm.user == perm_user)\
477 .filter(UserRepoToPerm.user == perm_user)\
478 .all():
478 .all():
479 # don't reset PRIVATE repositories
479 # don't reset PRIVATE repositories
480 if not r2p.repository.private:
480 if not r2p.repository.private:
481 r2p.permission = _def
481 r2p.permission = _def
482 self.sa.add(r2p)
482 self.sa.add(r2p)
483
483
484 # overwrite default repo group permissions
484 # overwrite default repo group permissions
485 if form_result['overwrite_default_group']:
485 if form_result['overwrite_default_group']:
486 _def_name = form_result['default_group_perm'].split('group.')[-1]
486 _def_name = form_result['default_group_perm'].split('group.')[-1]
487 _def = Permission.get_by_key('group.' + _def_name)
487 _def = Permission.get_by_key('group.' + _def_name)
488 for g2p in self.sa.query(UserRepoGroupToPerm)\
488 for g2p in self.sa.query(UserRepoGroupToPerm)\
489 .filter(UserRepoGroupToPerm.user == perm_user)\
489 .filter(UserRepoGroupToPerm.user == perm_user)\
490 .all():
490 .all():
491 g2p.permission = _def
491 g2p.permission = _def
492 self.sa.add(g2p)
492 self.sa.add(g2p)
493
493
494 # overwrite default user group permissions
494 # overwrite default user group permissions
495 if form_result['overwrite_default_user_group']:
495 if form_result['overwrite_default_user_group']:
496 _def_name = form_result['default_user_group_perm'].split('usergroup.')[-1]
496 _def_name = form_result['default_user_group_perm'].split('usergroup.')[-1]
497 # user groups
497 # user groups
498 _def = Permission.get_by_key('usergroup.' + _def_name)
498 _def = Permission.get_by_key('usergroup.' + _def_name)
499 for g2p in self.sa.query(UserUserGroupToPerm)\
499 for g2p in self.sa.query(UserUserGroupToPerm)\
500 .filter(UserUserGroupToPerm.user == perm_user)\
500 .filter(UserUserGroupToPerm.user == perm_user)\
501 .all():
501 .all():
502 g2p.permission = _def
502 g2p.permission = _def
503 self.sa.add(g2p)
503 self.sa.add(g2p)
504
504
505 # COMMIT
505 # COMMIT
506 self.sa.commit()
506 self.sa.commit()
507 except (DatabaseError,):
507 except (DatabaseError,):
508 log.exception('Failed to set default object permissions')
508 log.exception('Failed to set default object permissions')
509 self.sa.rollback()
509 self.sa.rollback()
510 raise
510 raise
511
511
512 def update_branch_permissions(self, form_result):
512 def update_branch_permissions(self, form_result):
513 if 'perm_user_id' in form_result:
513 if 'perm_user_id' in form_result:
514 perm_user = User.get(safe_int(form_result['perm_user_id']))
514 perm_user = User.get(safe_int(form_result['perm_user_id']))
515 else:
515 else:
516 # used mostly to do lookup for default user
516 # used mostly to do lookup for default user
517 perm_user = User.get_by_username(form_result['perm_user_name'])
517 perm_user = User.get_by_username(form_result['perm_user_name'])
518 try:
518 try:
519
519
520 # stage 2 reset defaults and set them from form data
520 # stage 2 reset defaults and set them from form data
521 self._set_new_user_perms(perm_user, form_result, preserve=[
521 self._set_new_user_perms(perm_user, form_result, preserve=[
522 'default_repo_perm',
522 'default_repo_perm',
523 'default_group_perm',
523 'default_group_perm',
524 'default_user_group_perm',
524 'default_user_group_perm',
525
525
526 'default_repo_group_create',
526 'default_repo_group_create',
527 'default_user_group_create',
527 'default_user_group_create',
528 'default_repo_create_on_write',
528 'default_repo_create_on_write',
529 'default_repo_create',
529 'default_repo_create',
530 'default_fork_create',
530 'default_fork_create',
531 'default_inherit_default_permissions',
531 'default_inherit_default_permissions',
532
532
533 'default_register',
533 'default_register',
534 'default_password_reset',
534 'default_password_reset',
535 'default_extern_activate'])
535 'default_extern_activate'])
536
536
537 # overwrite default branch permissions
537 # overwrite default branch permissions
538 if form_result['overwrite_default_branch']:
538 if form_result['overwrite_default_branch']:
539 _def_name = \
539 _def_name = \
540 form_result['default_branch_perm'].split('branch.')[-1]
540 form_result['default_branch_perm'].split('branch.')[-1]
541
541
542 _def = Permission.get_by_key('branch.' + _def_name)
542 _def = Permission.get_by_key('branch.' + _def_name)
543
543
544 user_perms = UserToRepoBranchPermission.query()\
544 user_perms = UserToRepoBranchPermission.query()\
545 .join(UserToRepoBranchPermission.user_repo_to_perm)\
545 .join(UserToRepoBranchPermission.user_repo_to_perm)\
546 .filter(UserRepoToPerm.user == perm_user).all()
546 .filter(UserRepoToPerm.user == perm_user).all()
547
547
548 for g2p in user_perms:
548 for g2p in user_perms:
549 g2p.permission = _def
549 g2p.permission = _def
550 self.sa.add(g2p)
550 self.sa.add(g2p)
551
551
552 # COMMIT
552 # COMMIT
553 self.sa.commit()
553 self.sa.commit()
554 except (DatabaseError,):
554 except (DatabaseError,):
555 log.exception('Failed to set default branch permissions')
555 log.exception('Failed to set default branch permissions')
556 self.sa.rollback()
556 self.sa.rollback()
557 raise
557 raise
558
558
559 def get_users_with_repo_write(self, db_repo):
559 def get_users_with_repo_write(self, db_repo):
560 write_plus = ['repository.write', 'repository.admin']
560 write_plus = ['repository.write', 'repository.admin']
561 default_user_id = User.get_default_user_id()
561 default_user_id = User.get_default_user_id()
562 user_write_permissions = collections.OrderedDict()
562 user_write_permissions = collections.OrderedDict()
563
563
564 # write+ and DEFAULT user for inheritance
564 # write or higher and DEFAULT user for inheritance
565 for perm in db_repo.permissions():
565 for perm in db_repo.permissions():
566 if perm.permission in write_plus or perm.user_id == default_user_id:
566 if perm.permission in write_plus or perm.user_id == default_user_id:
567 user_write_permissions[perm.user_id] = perm
567 user_write_permissions[perm.user_id] = perm
568 return user_write_permissions
568 return user_write_permissions
569
569
570 def get_user_groups_with_repo_write(self, db_repo):
570 def get_user_groups_with_repo_write(self, db_repo):
571 write_plus = ['repository.write', 'repository.admin']
571 write_plus = ['repository.write', 'repository.admin']
572 user_group_write_permissions = collections.OrderedDict()
572 user_group_write_permissions = collections.OrderedDict()
573
573
574 # write+ and DEFAULT user for inheritance
574 # write or higher and DEFAULT user for inheritance
575 for p in db_repo.permission_user_groups():
575 for p in db_repo.permission_user_groups():
576 if p.permission in write_plus:
576 if p.permission in write_plus:
577 user_group_write_permissions[p.users_group_id] = p
577 user_group_write_permissions[p.users_group_id] = p
578 return user_group_write_permissions
578 return user_group_write_permissions
579
579
580 def trigger_permission_flush(self, affected_user_ids=None):
580 def trigger_permission_flush(self, affected_user_ids=None):
581 affected_user_ids or User.get_all_user_ids()
581 affected_user_ids or User.get_all_user_ids()
582 events.trigger(events.UserPermissionsChange(affected_user_ids))
582 events.trigger(events.UserPermissionsChange(affected_user_ids))
583
583
584 def flush_user_permission_caches(self, changes, affected_user_ids=None):
584 def flush_user_permission_caches(self, changes, affected_user_ids=None):
585 affected_user_ids = affected_user_ids or []
585 affected_user_ids = affected_user_ids or []
586
586
587 for change in changes['added'] + changes['updated'] + changes['deleted']:
587 for change in changes['added'] + changes['updated'] + changes['deleted']:
588 if change['type'] == 'user':
588 if change['type'] == 'user':
589 affected_user_ids.append(change['id'])
589 affected_user_ids.append(change['id'])
590 if change['type'] == 'user_group':
590 if change['type'] == 'user_group':
591 user_group = UserGroup.get(safe_int(change['id']))
591 user_group = UserGroup.get(safe_int(change['id']))
592 if user_group:
592 if user_group:
593 group_members_ids = [x.user_id for x in user_group.members]
593 group_members_ids = [x.user_id for x in user_group.members]
594 affected_user_ids.extend(group_members_ids)
594 affected_user_ids.extend(group_members_ids)
595
595
596 self.trigger_permission_flush(affected_user_ids)
596 self.trigger_permission_flush(affected_user_ids)
597
597
598 return affected_user_ids
598 return affected_user_ids
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Delete',
31 'Delete': 'Delete',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Lifetime',
49 'Lifetime': 'Lifetime',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Not Reviewed',
71 'Not Reviewed': 'Not Reviewed',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Open new pull request',
74 'Open new pull request': 'Open new pull request',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Selection link',
84 'Selection link': 'Selection link',
84 'Send': 'Send',
85 'Send': 'Send',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Start following this repository',
98 'Start following this repository': 'Start following this repository',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Stop following this repository',
101 'Stop following this repository': 'Stop following this repository',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Submitting...',
103 'Submitting...': 'Submitting...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabled',
127 'disabled': 'disabled',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'files',
130 'files': 'files',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'just now',
135 'just now': 'just now',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Löschen',
31 'Delete': 'Löschen',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Lebensdauer',
49 'Lifetime': 'Lebensdauer',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'Keine Treffer gefunden',
59 'No matches found': 'Keine Treffer gefunden',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Nicht Begutachtet',
71 'Not Reviewed': 'Nicht Begutachtet',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Open new pull request',
74 'Open new pull request': 'Open new pull request',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Bitte {0} Zeichen löschen',
76 'Please delete {0} character': 'Bitte {0} Zeichen löschen',
76 'Please delete {0} characters': 'Bitte {0} Zeichen löschen',
77 'Please delete {0} characters': 'Bitte {0} Zeichen löschen',
77 'Please enter {0} or more character': 'Bitte {0} oder mehr Zeichen eingeben',
78 'Please enter {0} or more character': 'Bitte {0} oder mehr Zeichen eingeben',
78 'Please enter {0} or more characters': 'Bitte {0} oder mehr Zeichen eingeben',
79 'Please enter {0} or more characters': 'Bitte {0} oder mehr Zeichen eingeben',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Selection link',
84 'Selection link': 'Selection link',
84 'Send': 'Senden',
85 'Send': 'Senden',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Start following this repository',
98 'Start following this repository': 'Start following this repository',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Stop following this repository',
101 'Stop following this repository': 'Stop following this repository',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Submitting...',
103 'Submitting...': 'Submitting...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabled',
127 'disabled': 'disabled',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'files',
130 'files': 'files',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'jetzt gerade',
135 'just now': 'jetzt gerade',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Delete',
31 'Delete': 'Delete',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Lifetime',
49 'Lifetime': 'Lifetime',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Not Reviewed',
71 'Not Reviewed': 'Not Reviewed',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Open new pull request',
74 'Open new pull request': 'Open new pull request',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Selection link',
84 'Selection link': 'Selection link',
84 'Send': 'Send',
85 'Send': 'Send',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Start following this repository',
98 'Start following this repository': 'Start following this repository',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Stop following this repository',
101 'Stop following this repository': 'Stop following this repository',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Submitting...',
103 'Submitting...': 'Submitting...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabled',
127 'disabled': 'disabled',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'files',
130 'files': 'files',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'just now',
135 'just now': 'just now',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Delete',
31 'Delete': 'Delete',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'De por vida',
49 'Lifetime': 'De por vida',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Not Reviewed',
71 'Not Reviewed': 'Not Reviewed',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Open new pull request',
74 'Open new pull request': 'Open new pull request',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Selection link',
84 'Selection link': 'Selection link',
84 'Send': 'Send',
85 'Send': 'Send',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Start following this repository',
98 'Start following this repository': 'Start following this repository',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Stop following this repository',
101 'Stop following this repository': 'Stop following this repository',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Submitting...',
103 'Submitting...': 'Submitting...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabled',
127 'disabled': 'disabled',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'files',
130 'files': 'files',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'just now',
135 'just now': 'just now',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Supprimer',
31 'Delete': 'Supprimer',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Durée de vie',
49 'Lifetime': 'Durée de vie',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Pas encore relue',
71 'Not Reviewed': 'Pas encore relue',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Nouvelle requête de pull',
74 'Open new pull request': 'Nouvelle requête de pull',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Lien vers la sélection',
84 'Selection link': 'Lien vers la sélection',
84 'Send': 'Envoyer',
85 'Send': 'Envoyer',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Suivre ce dépôt',
98 'Start following this repository': 'Suivre ce dépôt',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Arrêter de suivre ce dépôt',
101 'Stop following this repository': 'Arrêter de suivre ce dépôt',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Envoi…',
103 'Submitting...': 'Envoi…',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'Désactivé',
127 'disabled': 'Désactivé',
126 'enabled': 'Activé',
128 'enabled': 'Activé',
127 'file': 'file',
129 'file': 'file',
128 'files': 'Fichiers',
130 'files': 'Fichiers',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'à l’instant',
135 'just now': 'à l’instant',
134 'loading...': 'Chargement…',
136 'loading...': 'Chargement…',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'Spécifier un commit',
143 'specify commit': 'Spécifier un commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} jours',
153 '{0} days': '{0} jours',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} heures',
155 '{0} hours': '{0} heures',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} mois',
158 '{0} months': '{0} mois',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} années',
170 '{0} years': '{0} années',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Aggiungi un altro commento',
11 'Add another comment': 'Aggiungi un altro commento',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Elimina',
31 'Delete': 'Elimina',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Segui',
41 'Follow': 'Segui',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'a vita',
49 'Lifetime': 'a vita',
49 'Loading ...': 'Caricamento ...',
50 'Loading ...': 'Caricamento ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'Nessuna corrispondenza',
59 'No matches found': 'Nessuna corrispondenza',
59 'No matching files': 'Nessuna corrispondenza tra i file',
60 'No matching files': 'Nessuna corrispondenza tra i file',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'Nessun risultato',
66 'No results': 'Nessun risultato',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Non Revisionato',
71 'Not Reviewed': 'Non Revisionato',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Apri una richiesta PULL',
74 'Open new pull request': 'Apri una richiesta PULL',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Collegamento selezione',
84 'Selection link': 'Collegamento selezione',
84 'Send': 'Invia',
85 'Send': 'Invia',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Mostra ancora',
92 'Show more': 'Mostra ancora',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Inizia a seguire il repository',
98 'Start following this repository': 'Inizia a seguire il repository',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Smetti di seguire il repository',
101 'Stop following this repository': 'Smetti di seguire il repository',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Inoltro...',
103 'Submitting...': 'Inoltro...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'Al momento non ci sono richieste di PULL che richiedono il tuo intervento',
108 'There are currently no open pull requests requiring your participation.': 'Al momento non ci sono richieste di PULL che richiedono il tuo intervento',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Smetti di seguire',
114 'Unfollow': 'Smetti di seguire',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabilitato',
127 'disabled': 'disabilitato',
126 'enabled': 'abilitato',
128 'enabled': 'abilitato',
127 'file': 'file',
129 'file': 'file',
128 'files': 'i file',
130 'files': 'i file',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'proprio ora',
135 'just now': 'proprio ora',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': '別のコメントを追加',
11 'Add another comment': '別のコメントを追加',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': '選択したステータス ({0}) を元にコメントが自動的に設定されます...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': '選択したステータス ({0}) を元にコメントが自動的に設定されます...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': '削除',
31 'Delete': '削除',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'フォロー',
41 'Follow': 'フォロー',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': '有効期間',
49 'Lifetime': '有効期間',
49 'Loading ...': '読み込み中...',
50 'Loading ...': '読み込み中...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': '読み込み失敗',
52 'Loading failed': '読み込み失敗',
52 'Loading more results...': '結果を読み込み中...',
53 'Loading more results...': '結果を読み込み中...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'まだブックマークがありません。',
55 'No bookmarks available yet.': 'まだブックマークがありません。',
55 'No branches available yet.': 'まだブランチがありません。',
56 'No branches available yet.': 'まだブランチがありません。',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'まだ Gist がありません。',
58 'No gists available yet.': 'まだ Gist がありません。',
58 'No matches found': '一致するものが見つかりません',
59 'No matches found': '一致するものが見つかりません',
59 'No matching files': 'マッチするファイルはありません',
60 'No matching files': 'マッチするファイルはありません',
60 'No pull requests available yet.': 'まだプルリクエストがありません。',
61 'No pull requests available yet.': 'まだプルリクエストがありません。',
61 'No repositories available yet.': 'まだリポジトリがありません。',
62 'No repositories available yet.': 'まだリポジトリがありません。',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'まだリポジトリグループがありません。',
64 'No repository groups available yet.': 'まだリポジトリグループがありません。',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': '結果がありません',
66 'No results': '結果がありません',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'まだタグがありません。',
68 'No tags available yet.': 'まだタグがありません。',
68 'No user groups available yet.': 'まだユーザーグループがありません。',
69 'No user groups available yet.': 'まだユーザーグループがありません。',
69 'No users available yet.': 'まだユーザーがいません。',
70 'No users available yet.': 'まだユーザーがいません。',
70 'Not Reviewed': '未レビュー',
71 'Not Reviewed': '未レビュー',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': '1 件の結果があります。 Enter で選択できます。',
73 'One result is available, press enter to select it.': '1 件の結果があります。 Enter で選択できます。',
73 'Open new pull request': '新しいプルリクエストを作成',
74 'Open new pull request': '新しいプルリクエストを作成',
74 'Open new pull request for selected commit': '選択したコミットから新しいプルリクエストを作成',
75 'Open new pull request for selected commit': '選択したコミットから新しいプルリクエストを作成',
75 'Please delete {0} character': '{0} 文字削除してください',
76 'Please delete {0} character': '{0} 文字削除してください',
76 'Please delete {0} characters': '{0} 文字削除してください',
77 'Please delete {0} characters': '{0} 文字削除してください',
77 'Please enter {0} or more character': '{0} 文字以上入力してください',
78 'Please enter {0} or more character': '{0} 文字以上入力してください',
78 'Please enter {0} or more characters': '{0} 文字以上入力してください',
79 'Please enter {0} or more characters': '{0} 文字以上入力してください',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': '検索中...',
83 'Searching...': '検索中...',
83 'Selection link': 'セレクション・リンク',
84 'Selection link': 'セレクション・リンク',
84 'Send': '送信',
85 'Send': '送信',
85 'Set status to Approved': 'ステータスを承認にする',
86 'Set status to Approved': 'ステータスを承認にする',
86 'Set status to Rejected': 'ステータスを拒否にする',
87 'Set status to Rejected': 'ステータスを拒否にする',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'もっと表示',
92 'Show more': 'もっと表示',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'このリポジトリのフォローする',
98 'Start following this repository': 'このリポジトリのフォローする',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'ステータスレビュー',
100 'Status Review': 'ステータスレビュー',
100 'Stop following this repository': 'このリポジトリのフォローをやめる',
101 'Stop following this repository': 'このリポジトリのフォローをやめる',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': '送信中...',
103 'Submitting...': '送信中...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'アンフォロー',
114 'Unfollow': 'アンフォロー',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': '{0} 件のみ選択できます',
122 'You can only select {0} item': '{0} 件のみ選択できます',
121 'You can only select {0} items': '{0} 件のみ選択できます',
123 'You can only select {0} items': '{0} 件のみ選択できます',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': '無効',
127 'disabled': '無効',
126 'enabled': '有効',
128 'enabled': '有効',
127 'file': 'ファイル',
129 'file': 'ファイル',
128 'files': 'ファイル',
130 'files': 'ファイル',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'たったいま',
135 'just now': 'たったいま',
134 'loading...': '読み込み中...',
136 'loading...': '読み込み中...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': '省略された結果',
144 'truncated result': '省略された結果',
143 'truncated results': '省略された結果',
145 'truncated results': '省略された結果',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} 前',
149 '{0} ago': '{0} 前',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} 日',
152 '{0} day': '{0} 日',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} 時間',
154 '{0} hour': '{0} 時間',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} 分',
156 '{0} min': '{0} 分',
155 '{0} month': '{0} ヶ月',
157 '{0} month': '{0} ヶ月',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} 件の結果があります。矢印キーの上下で選択できます。',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} 件の結果があります。矢印キーの上下で選択できます。',
164 '{0} sec': '{0} 秒',
166 '{0} sec': '{0} 秒',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} 年',
169 '{0} year': '{0} 年',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,163 +1,165 b''
1 // AUTO GENERATED FILE FOR Babel JS-GETTEXT EXTRACTORS, DO NOT CHANGE
1 // AUTO GENERATED FILE FOR Babel JS-GETTEXT EXTRACTORS, DO NOT CHANGE
2 _gettext('(from usergroup {0})');
2 _gettext('(from usergroup {0})');
3 _gettext('<strong>{0} file</strong> changed, ');
3 _gettext('<strong>{0} file</strong> changed, ');
4 _gettext('<strong>{0} files</strong> changed, ');
4 _gettext('<strong>{0} files</strong> changed, ');
5 _gettext('Add another comment');
5 _gettext('Add another comment');
6 _gettext('Adding new reviewers is forbidden.');
6 _gettext('Adding new reviewers is forbidden.');
7 _gettext('Ajax Request Error');
7 _gettext('Ajax Request Error');
8 _gettext('All Authors');
8 _gettext('All Authors');
9 _gettext('All individual reviewers must vote.');
9 _gettext('All individual reviewers must vote.');
10 _gettext('All reviewers must vote.');
10 _gettext('All reviewers must vote.');
11 _gettext('Are you sure to close this pull request without merging?');
11 _gettext('Are you sure to close this pull request without merging?');
12 _gettext('At least {0} reviewer must vote.');
12 _gettext('At least {0} reviewer must vote.');
13 _gettext('At least {0} reviewers must vote.');
13 _gettext('At least {0} reviewers must vote.');
14 _gettext('Authentication Token');
14 _gettext('Authentication Token');
15 _gettext('Author is not allowed to be a reviewer.');
15 _gettext('Author is not allowed to be a reviewer.');
16 _gettext('Changed files');
16 _gettext('Changed files');
17 _gettext('Close');
17 _gettext('Close');
18 _gettext('Collapse all files');
18 _gettext('Collapse all files');
19 _gettext('Collapse {0} commit');
19 _gettext('Collapse {0} commit');
20 _gettext('Collapse {0} commits');
20 _gettext('Collapse {0} commits');
21 _gettext('Comment body was not changed.');
21 _gettext('Comment text will be set automatically based on currently selected status ({0}) ...');
22 _gettext('Comment text will be set automatically based on currently selected status ({0}) ...');
22 _gettext('Commit Authors are not allowed to be a reviewer.');
23 _gettext('Commit Authors are not allowed to be a reviewer.');
23 _gettext('Context file: ');
24 _gettext('Context file: ');
24 _gettext('Delete');
25 _gettext('Delete');
25 _gettext('Delete this comment?');
26 _gettext('Delete this comment?');
26 _gettext('Diff to Commit ');
27 _gettext('Diff to Commit ');
27 _gettext('Error during search operation');
28 _gettext('Error during search operation');
28 _gettext('Expand all files');
29 _gettext('Expand all files');
29 _gettext('Expand {0} commit');
30 _gettext('Expand {0} commit');
30 _gettext('Expand {0} commits');
31 _gettext('Expand {0} commits');
31 _gettext('Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.');
32 _gettext('Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.');
32 _gettext('Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.');
33 _gettext('Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.');
33 _gettext('File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.');
34 _gettext('File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.');
34 _gettext('Follow');
35 _gettext('Follow');
35 _gettext('Force updating...');
36 _gettext('Force updating...');
36 _gettext('Hide full context diff');
37 _gettext('Hide full context diff');
37 _gettext('Hide whitespace changes');
38 _gettext('Hide whitespace changes');
38 _gettext('Invite reviewers to this discussion');
39 _gettext('Invite reviewers to this discussion');
39 _gettext('Leave a comment on line {0}.');
40 _gettext('Leave a comment on line {0}.');
40 _gettext('Leave a comment, or click resolve button to resolve TODO comment #{0}');
41 _gettext('Leave a comment, or click resolve button to resolve TODO comment #{0}');
41 _gettext('Leave a resolution comment, or click resolve button to resolve TODO comment #{0}');
42 _gettext('Leave a resolution comment, or click resolve button to resolve TODO comment #{0}');
42 _gettext('Lifetime');
43 _gettext('Lifetime');
43 _gettext('Loading ...');
44 _gettext('Loading ...');
44 _gettext('Loading diff ...');
45 _gettext('Loading diff ...');
45 _gettext('Loading failed');
46 _gettext('Loading failed');
46 _gettext('Loading more results...');
47 _gettext('Loading more results...');
47 _gettext('Loading...');
48 _gettext('Loading...');
48 _gettext('No bookmarks available yet.');
49 _gettext('No bookmarks available yet.');
49 _gettext('No branches available yet.');
50 _gettext('No branches available yet.');
50 _gettext('No forks available yet.');
51 _gettext('No forks available yet.');
51 _gettext('No gists available yet.');
52 _gettext('No gists available yet.');
52 _gettext('No matches found');
53 _gettext('No matches found');
53 _gettext('No matching files');
54 _gettext('No matching files');
54 _gettext('No pull requests available yet.');
55 _gettext('No pull requests available yet.');
55 _gettext('No repositories available yet.');
56 _gettext('No repositories available yet.');
56 _gettext('No repositories present.');
57 _gettext('No repositories present.');
57 _gettext('No repository groups available yet.');
58 _gettext('No repository groups available yet.');
58 _gettext('No repository groups present.');
59 _gettext('No repository groups present.');
59 _gettext('No results');
60 _gettext('No results');
60 _gettext('No ssh keys available yet.');
61 _gettext('No ssh keys available yet.');
61 _gettext('No tags available yet.');
62 _gettext('No tags available yet.');
62 _gettext('No user groups available yet.');
63 _gettext('No user groups available yet.');
63 _gettext('No users available yet.');
64 _gettext('No users available yet.');
64 _gettext('Not Reviewed');
65 _gettext('Not Reviewed');
65 _gettext('Note Comment');
66 _gettext('Note Comment');
66 _gettext('One result is available, press enter to select it.');
67 _gettext('One result is available, press enter to select it.');
67 _gettext('Open new pull request');
68 _gettext('Open new pull request');
68 _gettext('Open new pull request for selected commit');
69 _gettext('Open new pull request for selected commit');
69 _gettext('Please delete {0} character');
70 _gettext('Please delete {0} character');
70 _gettext('Please delete {0} characters');
71 _gettext('Please delete {0} characters');
71 _gettext('Please enter {0} or more character');
72 _gettext('Please enter {0} or more character');
72 _gettext('Please enter {0} or more characters');
73 _gettext('Please enter {0} or more characters');
73 _gettext('Please wait creating pull request...');
74 _gettext('Please wait creating pull request...');
74 _gettext('Reviewers picked from source code changes.');
75 _gettext('Reviewers picked from source code changes.');
75 _gettext('Saving...');
76 _gettext('Saving...');
76 _gettext('Searching...');
77 _gettext('Searching...');
77 _gettext('Selection link');
78 _gettext('Selection link');
78 _gettext('Send');
79 _gettext('Send');
79 _gettext('Set status to Approved');
80 _gettext('Set status to Approved');
80 _gettext('Set status to Rejected');
81 _gettext('Set status to Rejected');
81 _gettext('Show');
82 _gettext('Show');
82 _gettext('Show at Commit ');
83 _gettext('Show at Commit ');
83 _gettext('Show commit range {0} ... {1}');
84 _gettext('Show commit range {0} ... {1}');
84 _gettext('Show full context diff');
85 _gettext('Show full context diff');
85 _gettext('Show more');
86 _gettext('Show more');
86 _gettext('Show selected commit __S');
87 _gettext('Show selected commit __S');
87 _gettext('Show selected commits __S ... __E');
88 _gettext('Show selected commits __S ... __E');
88 _gettext('Show this authentication token?');
89 _gettext('Show this authentication token?');
89 _gettext('Show whitespace changes');
90 _gettext('Show whitespace changes');
90 _gettext('Specified expiration date');
91 _gettext('Specified expiration date');
91 _gettext('Start following this repository');
92 _gettext('Start following this repository');
92 _gettext('Started watching this repository');
93 _gettext('Started watching this repository');
93 _gettext('Status Review');
94 _gettext('Status Review');
94 _gettext('Stop following this repository');
95 _gettext('Stop following this repository');
95 _gettext('Stopped watching this repository');
96 _gettext('Stopped watching this repository');
96 _gettext('Submitting...');
97 _gettext('Submitting...');
97 _gettext('Switch to chat');
98 _gettext('Switch to chat');
98 _gettext('Switch to comment');
99 _gettext('Switch to comment');
99 _gettext('TODO comment');
100 _gettext('TODO comment');
100 _gettext('TODO from comment {0} was fixed.');
101 _gettext('TODO from comment {0} was fixed.');
101 _gettext('There are currently no open pull requests requiring your participation.');
102 _gettext('There are currently no open pull requests requiring your participation.');
102 _gettext('There is a later version of file tree available. Click {0} to create a file at the latest tree.');
103 _gettext('There is a later version of file tree available. Click {0} to create a file at the latest tree.');
103 _gettext('There is an existing path `{0}` at this commit.');
104 _gettext('There is an existing path `{0}` at this commit.');
104 _gettext('This pull requests will consist of <strong>{0} commit</strong>.');
105 _gettext('This pull requests will consist of <strong>{0} commit</strong>.');
105 _gettext('This pull requests will consist of <strong>{0} commits</strong>.');
106 _gettext('This pull requests will consist of <strong>{0} commits</strong>.');
106 _gettext('Toggle Wide Mode diff');
107 _gettext('Toggle Wide Mode diff');
107 _gettext('Unfollow');
108 _gettext('Unfollow');
108 _gettext('Unwatch');
109 _gettext('Unwatch');
110 _gettext('Updated Comment');
109 _gettext('Updating...');
111 _gettext('Updating...');
110 _gettext('User `{0}` already in reviewers');
112 _gettext('User `{0}` already in reviewers');
111 _gettext('User `{0}` not allowed to be a reviewer');
113 _gettext('User `{0}` not allowed to be a reviewer');
112 _gettext('Watch');
114 _gettext('Watch');
113 _gettext('Yes, delete comment #{0}!');
115 _gettext('Yes, delete comment #{0}!');
114 _gettext('You can only select {0} item');
116 _gettext('You can only select {0} item');
115 _gettext('You can only select {0} items');
117 _gettext('You can only select {0} items');
116 _gettext('activated');
118 _gettext('activated');
117 _gettext('added manually by "{0}"');
119 _gettext('added manually by "{0}"');
118 _gettext('date not in future');
120 _gettext('date not in future');
119 _gettext('disabled');
121 _gettext('disabled');
120 _gettext('enabled');
122 _gettext('enabled');
121 _gettext('file');
123 _gettext('file');
122 _gettext('files');
124 _gettext('files');
123 _gettext('go to numeric commit');
125 _gettext('go to numeric commit');
124 _gettext('in {0}');
126 _gettext('in {0}');
125 _gettext('in {0} and {1}');
127 _gettext('in {0} and {1}');
126 _gettext('in {0}, {1}');
128 _gettext('in {0}, {1}');
127 _gettext('just now');
129 _gettext('just now');
128 _gettext('loading...');
130 _gettext('loading...');
129 _gettext('member of "{0}"');
131 _gettext('member of "{0}"');
130 _gettext('no commits');
132 _gettext('no commits');
131 _gettext('not active');
133 _gettext('not active');
132 _gettext('resolve comment');
134 _gettext('resolve comment');
133 _gettext('showing {0} out of {1} commit');
135 _gettext('showing {0} out of {1} commit');
134 _gettext('showing {0} out of {1} commits');
136 _gettext('showing {0} out of {1} commits');
135 _gettext('specify commit');
137 _gettext('specify commit');
136 _gettext('truncated result');
138 _gettext('truncated result');
137 _gettext('truncated results');
139 _gettext('truncated results');
138 _gettext('{0} ({1} inactive) of {2} user groups ({3} inactive)');
140 _gettext('{0} ({1} inactive) of {2} user groups ({3} inactive)');
139 _gettext('{0} ({1} inactive) of {2} users ({3} inactive)');
141 _gettext('{0} ({1} inactive) of {2} users ({3} inactive)');
140 _gettext('{0} active out of {1} users');
142 _gettext('{0} active out of {1} users');
141 _gettext('{0} ago');
143 _gettext('{0} ago');
142 _gettext('{0} and {1}');
144 _gettext('{0} and {1}');
143 _gettext('{0} and {1} ago');
145 _gettext('{0} and {1} ago');
144 _gettext('{0} day');
146 _gettext('{0} day');
145 _gettext('{0} days');
147 _gettext('{0} days');
146 _gettext('{0} hour');
148 _gettext('{0} hour');
147 _gettext('{0} hours');
149 _gettext('{0} hours');
148 _gettext('{0} min');
150 _gettext('{0} min');
149 _gettext('{0} month');
151 _gettext('{0} month');
150 _gettext('{0} months');
152 _gettext('{0} months');
151 _gettext('{0} of {1} repositories');
153 _gettext('{0} of {1} repositories');
152 _gettext('{0} of {1} repository groups');
154 _gettext('{0} of {1} repository groups');
153 _gettext('{0} out of {1} ssh keys');
155 _gettext('{0} out of {1} ssh keys');
154 _gettext('{0} out of {1} users');
156 _gettext('{0} out of {1} users');
155 _gettext('{0} repositories');
157 _gettext('{0} repositories');
156 _gettext('{0} repository groups');
158 _gettext('{0} repository groups');
157 _gettext('{0} results are available, use up and down arrow keys to navigate.');
159 _gettext('{0} results are available, use up and down arrow keys to navigate.');
158 _gettext('{0} sec');
160 _gettext('{0} sec');
159 _gettext('{0} user groups ({1} inactive)');
161 _gettext('{0} user groups ({1} inactive)');
160 _gettext('{0} users ({1} inactive)');
162 _gettext('{0} users ({1} inactive)');
161 _gettext('{0} year');
163 _gettext('{0} year');
162 _gettext('{0} years');
164 _gettext('{0} years');
163 _gettext('{0}, {1} ago');
165 _gettext('{0}, {1} ago');
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Dodaj kolejny komentarz',
11 'Add another comment': 'Dodaj kolejny komentarz',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Zamknij',
23 'Close': 'Zamknij',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Usuń',
31 'Delete': 'Usuń',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Obserwuj',
41 'Follow': 'Obserwuj',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Czas życia',
49 'Lifetime': 'Czas życia',
49 'Loading ...': 'Ładuję...',
50 'Loading ...': 'Ładuję...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'Nie ma plików pasujących',
60 'No matching files': 'Nie ma plików pasujących',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Brak Korekty',
71 'Not Reviewed': 'Brak Korekty',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Otwórz nową prośbę o połączenie gałęzi',
74 'Open new pull request': 'Otwórz nową prośbę o połączenie gałęzi',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Wybór linku',
84 'Selection link': 'Wybór linku',
84 'Send': 'Wyślij',
85 'Send': 'Wyślij',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Pokaż więcej',
92 'Show more': 'Pokaż więcej',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Zacznij obserwację tego repozytorium',
98 'Start following this repository': 'Zacznij obserwację tego repozytorium',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Zakończyć obserwację tego repozytorium',
101 'Stop following this repository': 'Zakończyć obserwację tego repozytorium',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Przesyłanie...',
103 'Submitting...': 'Przesyłanie...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Nie obserwuj',
114 'Unfollow': 'Nie obserwuj',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'disabled',
127 'disabled': 'disabled',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'pliki',
130 'files': 'pliki',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'przed chwilą',
135 'just now': 'przed chwilą',
134 'loading...': 'wczytywanie...',
136 'loading...': 'wczytywanie...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} aktywnych z {1} użytkowników',
148 '{0} active out of {1} users': '{0} aktywnych z {1} użytkowników',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Adicionar outro comentário',
11 'Add another comment': 'Adicionar outro comentário',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Excluir',
31 'Delete': 'Excluir',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Seguir',
41 'Follow': 'Seguir',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Tempo de Vida',
49 'Lifetime': 'Tempo de Vida',
49 'Loading ...': 'Carregando...',
50 'Loading ...': 'Carregando...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'Nenhum arquivo encontrado',
60 'No matching files': 'Nenhum arquivo encontrado',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Não Revisado',
71 'Not Reviewed': 'Não Revisado',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Crie novo pull request',
74 'Open new pull request': 'Crie novo pull request',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Link da seleção',
84 'Selection link': 'Link da seleção',
84 'Send': 'Enviar',
85 'Send': 'Enviar',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Mostrar mais',
92 'Show more': 'Mostrar mais',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Passar a seguir este repositório',
98 'Start following this repository': 'Passar a seguir este repositório',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Parar de seguir este repositório',
101 'Stop following this repository': 'Parar de seguir este repositório',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Enviando...',
103 'Submitting...': 'Enviando...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Parar de seguir',
114 'Unfollow': 'Parar de seguir',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'desabilitado',
127 'disabled': 'desabilitado',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'arquivos',
130 'files': 'arquivos',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'agora há pouco',
135 'just now': 'agora há pouco',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Добавить другой комментарий',
11 'Add another comment': 'Добавить другой комментарий',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': 'Удалить',
31 'Delete': 'Удалить',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Наблюдать',
41 'Follow': 'Наблюдать',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': 'Срок',
49 'Lifetime': 'Срок',
49 'Loading ...': 'Загрузка...',
50 'Loading ...': 'Загрузка...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'Нет совпадений',
60 'No matching files': 'Нет совпадений',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': 'Не просмотрено',
71 'Not Reviewed': 'Не просмотрено',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': 'Создать новый pull запрос',
74 'Open new pull request': 'Создать новый pull запрос',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': 'Ссылка выбора',
84 'Selection link': 'Ссылка выбора',
84 'Send': 'Отправить',
85 'Send': 'Отправить',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Показать еще',
92 'Show more': 'Показать еще',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': 'Наблюдать за репозиторием',
98 'Start following this repository': 'Наблюдать за репозиторием',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': 'Отменить наблюдение за репозиторием',
101 'Stop following this repository': 'Отменить наблюдение за репозиторием',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': 'Применение...',
103 'Submitting...': 'Применение...',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Не наблюдать',
114 'Unfollow': 'Не наблюдать',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': 'отключено',
127 'disabled': 'отключено',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': 'файлы',
130 'files': 'файлы',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': 'прямо сейчас',
135 'just now': 'прямо сейчас',
134 'loading...': 'загрузка...',
136 'loading...': 'загрузка...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,170 +1,172 b''
1 /* This file is automatically generated. DO NOT change it manually.
1 /* This file is automatically generated. DO NOT change it manually.
2 * If this file needs to be modified, edit
2 * If this file needs to be modified, edit
3 * rhodecode/utils/file_generation/js_i18n_data.py
3 * rhodecode/utils/file_generation/js_i18n_data.py
4 * and run the script invoke -r scripts/ generate.js-i18n .
4 * and run the script invoke -r scripts/ generate.js-i18n .
5 */
5 */
6 //JS translations map
6 //JS translations map
7 var _TM = {
7 var _TM = {
8 '(from usergroup {0})': '(from usergroup {0})',
8 '(from usergroup {0})': '(from usergroup {0})',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 'Add another comment': 'Add another comment',
11 'Add another comment': 'Add another comment',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 'Ajax Request Error': 'Ajax Request Error',
13 'Ajax Request Error': 'Ajax Request Error',
14 'All Authors': 'All Authors',
14 'All Authors': 'All Authors',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
16 'All reviewers must vote.': 'All reviewers must vote.',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 'Authentication Token': 'Authentication Token',
20 'Authentication Token': 'Authentication Token',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 'Changed files': 'Changed files',
22 'Changed files': 'Changed files',
23 'Close': 'Close',
23 'Close': 'Close',
24 'Collapse all files': 'Collapse all files',
24 'Collapse all files': 'Collapse all files',
25 'Collapse {0} commit': 'Collapse {0} commit',
25 'Collapse {0} commit': 'Collapse {0} commit',
26 'Collapse {0} commits': 'Collapse {0} commits',
26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 'Context file: ': 'Context file: ',
30 'Context file: ': 'Context file: ',
30 'Delete': '删除',
31 'Delete': '删除',
31 'Delete this comment?': 'Delete this comment?',
32 'Delete this comment?': 'Delete this comment?',
32 'Diff to Commit ': 'Diff to Commit ',
33 'Diff to Commit ': 'Diff to Commit ',
33 'Error during search operation': 'Error during search operation',
34 'Error during search operation': 'Error during search operation',
34 'Expand all files': 'Expand all files',
35 'Expand all files': 'Expand all files',
35 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commit': 'Expand {0} commit',
36 'Expand {0} commits': 'Expand {0} commits',
37 'Expand {0} commits': 'Expand {0} commits',
37 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 'Follow': 'Follow',
41 'Follow': 'Follow',
41 'Force updating...': 'Force updating...',
42 'Force updating...': 'Force updating...',
42 'Hide full context diff': 'Hide full context diff',
43 'Hide full context diff': 'Hide full context diff',
43 'Hide whitespace changes': 'Hide whitespace changes',
44 'Hide whitespace changes': 'Hide whitespace changes',
44 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 'Lifetime': '终身',
49 'Lifetime': '终身',
49 'Loading ...': 'Loading ...',
50 'Loading ...': 'Loading ...',
50 'Loading diff ...': 'Loading diff ...',
51 'Loading diff ...': 'Loading diff ...',
51 'Loading failed': 'Loading failed',
52 'Loading failed': 'Loading failed',
52 'Loading more results...': 'Loading more results...',
53 'Loading more results...': 'Loading more results...',
53 'Loading...': 'Loading...',
54 'Loading...': 'Loading...',
54 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 'No branches available yet.': 'No branches available yet.',
56 'No branches available yet.': 'No branches available yet.',
56 'No forks available yet.': 'No forks available yet.',
57 'No forks available yet.': 'No forks available yet.',
57 'No gists available yet.': 'No gists available yet.',
58 'No gists available yet.': 'No gists available yet.',
58 'No matches found': 'No matches found',
59 'No matches found': 'No matches found',
59 'No matching files': 'No matching files',
60 'No matching files': 'No matching files',
60 'No pull requests available yet.': 'No pull requests available yet.',
61 'No pull requests available yet.': 'No pull requests available yet.',
61 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories available yet.': 'No repositories available yet.',
62 'No repositories present.': 'No repositories present.',
63 'No repositories present.': 'No repositories present.',
63 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups available yet.': 'No repository groups available yet.',
64 'No repository groups present.': 'No repository groups present.',
65 'No repository groups present.': 'No repository groups present.',
65 'No results': 'No results',
66 'No results': 'No results',
66 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 'No tags available yet.': 'No tags available yet.',
68 'No tags available yet.': 'No tags available yet.',
68 'No user groups available yet.': 'No user groups available yet.',
69 'No user groups available yet.': 'No user groups available yet.',
69 'No users available yet.': 'No users available yet.',
70 'No users available yet.': 'No users available yet.',
70 'Not Reviewed': '未检视',
71 'Not Reviewed': '未检视',
71 'Note Comment': 'Note Comment',
72 'Note Comment': 'Note Comment',
72 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 'Open new pull request': '新建拉取请求',
74 'Open new pull request': '新建拉取请求',
74 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} character': 'Please delete {0} character',
76 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please delete {0} characters': 'Please delete {0} characters',
77 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 'Saving...': 'Saving...',
82 'Saving...': 'Saving...',
82 'Searching...': 'Searching...',
83 'Searching...': 'Searching...',
83 'Selection link': '选择链接',
84 'Selection link': '选择链接',
84 'Send': '发送',
85 'Send': '发送',
85 'Set status to Approved': 'Set status to Approved',
86 'Set status to Approved': 'Set status to Approved',
86 'Set status to Rejected': 'Set status to Rejected',
87 'Set status to Rejected': 'Set status to Rejected',
87 'Show': 'Show',
88 'Show': 'Show',
88 'Show at Commit ': 'Show at Commit ',
89 'Show at Commit ': 'Show at Commit ',
89 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 'Show full context diff': 'Show full context diff',
91 'Show full context diff': 'Show full context diff',
91 'Show more': 'Show more',
92 'Show more': 'Show more',
92 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commit __S': 'Show selected commit __S',
93 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 'Show this authentication token?': 'Show this authentication token?',
95 'Show this authentication token?': 'Show this authentication token?',
95 'Show whitespace changes': 'Show whitespace changes',
96 'Show whitespace changes': 'Show whitespace changes',
96 'Specified expiration date': 'Specified expiration date',
97 'Specified expiration date': 'Specified expiration date',
97 'Start following this repository': '开始关注该版本库',
98 'Start following this repository': '开始关注该版本库',
98 'Started watching this repository': 'Started watching this repository',
99 'Started watching this repository': 'Started watching this repository',
99 'Status Review': 'Status Review',
100 'Status Review': 'Status Review',
100 'Stop following this repository': '停止关注该版本库',
101 'Stop following this repository': '停止关注该版本库',
101 'Stopped watching this repository': 'Stopped watching this repository',
102 'Stopped watching this repository': 'Stopped watching this repository',
102 'Submitting...': '提交中……',
103 'Submitting...': '提交中……',
103 'Switch to chat': 'Switch to chat',
104 'Switch to chat': 'Switch to chat',
104 'Switch to comment': 'Switch to comment',
105 'Switch to comment': 'Switch to comment',
105 'TODO comment': 'TODO comment',
106 'TODO comment': 'TODO comment',
106 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 'Unfollow': 'Unfollow',
114 'Unfollow': 'Unfollow',
114 'Unwatch': 'Unwatch',
115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 'Updating...': 'Updating...',
117 'Updating...': 'Updating...',
116 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 'Watch': 'Watch',
120 'Watch': 'Watch',
119 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 'You can only select {0} item': 'You can only select {0} item',
122 'You can only select {0} item': 'You can only select {0} item',
121 'You can only select {0} items': 'You can only select {0} items',
123 'You can only select {0} items': 'You can only select {0} items',
122 'activated': 'activated',
124 'activated': 'activated',
123 'added manually by "{0}"': 'added manually by "{0}"',
125 'added manually by "{0}"': 'added manually by "{0}"',
124 'date not in future': 'date not in future',
126 'date not in future': 'date not in future',
125 'disabled': '禁用',
127 'disabled': '禁用',
126 'enabled': 'enabled',
128 'enabled': 'enabled',
127 'file': 'file',
129 'file': 'file',
128 'files': '文件',
130 'files': '文件',
129 'go to numeric commit': 'go to numeric commit',
131 'go to numeric commit': 'go to numeric commit',
130 'in {0}': 'in {0}',
132 'in {0}': 'in {0}',
131 'in {0} and {1}': 'in {0} and {1}',
133 'in {0} and {1}': 'in {0} and {1}',
132 'in {0}, {1}': 'in {0}, {1}',
134 'in {0}, {1}': 'in {0}, {1}',
133 'just now': '刚刚',
135 'just now': '刚刚',
134 'loading...': 'loading...',
136 'loading...': 'loading...',
135 'member of "{0}"': 'member of "{0}"',
137 'member of "{0}"': 'member of "{0}"',
136 'no commits': 'no commits',
138 'no commits': 'no commits',
137 'not active': 'not active',
139 'not active': 'not active',
138 'resolve comment': 'resolve comment',
140 'resolve comment': 'resolve comment',
139 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 'specify commit': 'specify commit',
143 'specify commit': 'specify commit',
142 'truncated result': 'truncated result',
144 'truncated result': 'truncated result',
143 'truncated results': 'truncated results',
145 'truncated results': 'truncated results',
144 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 '{0} active out of {1} users': '{0} active out of {1} users',
148 '{0} active out of {1} users': '{0} active out of {1} users',
147 '{0} ago': '{0} ago',
149 '{0} ago': '{0} ago',
148 '{0} and {1}': '{0} and {1}',
150 '{0} and {1}': '{0} and {1}',
149 '{0} and {1} ago': '{0} and {1} ago',
151 '{0} and {1} ago': '{0} and {1} ago',
150 '{0} day': '{0} day',
152 '{0} day': '{0} day',
151 '{0} days': '{0} days',
153 '{0} days': '{0} days',
152 '{0} hour': '{0} hour',
154 '{0} hour': '{0} hour',
153 '{0} hours': '{0} hours',
155 '{0} hours': '{0} hours',
154 '{0} min': '{0} min',
156 '{0} min': '{0} min',
155 '{0} month': '{0} month',
157 '{0} month': '{0} month',
156 '{0} months': '{0} months',
158 '{0} months': '{0} months',
157 '{0} of {1} repositories': '{0} of {1} repositories',
159 '{0} of {1} repositories': '{0} of {1} repositories',
158 '{0} of {1} repository groups': '{0} of {1} repository groups',
160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 '{0} out of {1} users': '{0} out of {1} users',
162 '{0} out of {1} users': '{0} out of {1} users',
161 '{0} repositories': '{0} repositories',
163 '{0} repositories': '{0} repositories',
162 '{0} repository groups': '{0} repository groups',
164 '{0} repository groups': '{0} repository groups',
163 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 '{0} sec': '{0} sec',
166 '{0} sec': '{0} sec',
165 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 '{0} year': '{0} year',
169 '{0} year': '{0} year',
168 '{0} years': '{0} years',
170 '{0} years': '{0} years',
169 '{0}, {1} ago': '{0}, {1} ago'
171 '{0}, {1} ago': '{0}, {1} ago'
170 }; No newline at end of file
172 };
@@ -1,245 +1,245 b''
1 <%namespace name="base" file="/base/base.mako"/>
1 <%namespace name="base" file="/base/base.mako"/>
2
2
3 <div class="panel panel-default">
3 <div class="panel panel-default">
4 <div class="panel-heading">
4 <div class="panel-heading">
5 <h3 class="panel-title">${_('Repository Access Permissions')}</h3>
5 <h3 class="panel-title">${_('Repository Access Permissions')}</h3>
6 </div>
6 </div>
7 <div class="panel-body">
7 <div class="panel-body">
8 ${h.secure_form(h.route_path('edit_repo_perms', repo_name=c.repo_name), request=request)}
8 ${h.secure_form(h.route_path('edit_repo_perms', repo_name=c.repo_name), request=request)}
9 <table id="permissions_manage" class="rctable permissions">
9 <table id="permissions_manage" class="rctable permissions">
10 <tr>
10 <tr>
11 <th class="td-radio">${_('None')}</th>
11 <th class="td-radio">${_('None')}</th>
12 <th class="td-radio">${_('Read')}</th>
12 <th class="td-radio">${_('Read')}</th>
13 <th class="td-radio">${_('Write')}</th>
13 <th class="td-radio">${_('Write')}</th>
14 <th class="td-radio">${_('Admin')}</th>
14 <th class="td-radio">${_('Admin')}</th>
15 <th class="td-owner">${_('User/User Group')}</th>
15 <th class="td-owner">${_('User/User Group')}</th>
16 <th class="td-action"></th>
16 <th class="td-action"></th>
17 <th class="td-action"></th>
17 <th class="td-action"></th>
18 </tr>
18 </tr>
19 ## USERS
19 ## USERS
20 %for _user in c.rhodecode_db_repo.permissions():
20 %for _user in c.rhodecode_db_repo.permissions():
21 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
21 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
22 <tr class="perm_admin_row">
22 <tr class="perm_admin_row">
23 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
23 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
24 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
24 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
25 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
25 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
26 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
26 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
27 <td class="td-user">
27 <td class="td-user">
28 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
28 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
29 ${h.link_to_user(_user.username)}
29 ${h.link_to_user(_user.username)}
30 %if getattr(_user, 'admin_row', None):
30 %if getattr(_user, 'admin_row', None):
31 (${_('super-admin')})
31 (${_('super-admin')})
32 %endif
32 %endif
33 %if getattr(_user, 'owner_row', None):
33 %if getattr(_user, 'owner_row', None):
34 (${_('owner')})
34 (${_('owner')})
35 %endif
35 %endif
36 </td>
36 </td>
37 <td></td>
37 <td></td>
38 <td class="quick_repo_menu">
38 <td class="quick_repo_menu">
39 % if c.rhodecode_user.is_admin:
39 % if c.rhodecode_user.is_admin:
40 <i class="icon-more"></i>
40 <i class="icon-more"></i>
41 <div class="menu_items_container" style="display: none;">
41 <div class="menu_items_container" style="display: none;">
42 <ul class="menu_items">
42 <ul class="menu_items">
43 <li>
43 <li>
44 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
44 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
45 </li>
45 </li>
46 </ul>
46 </ul>
47 </div>
47 </div>
48 % endif
48 % endif
49 </td>
49 </td>
50 </tr>
50 </tr>
51 %elif _user.username == h.DEFAULT_USER and c.rhodecode_db_repo.private:
51 %elif _user.username == h.DEFAULT_USER and c.rhodecode_db_repo.private:
52 <tr>
52 <tr>
53 <td colspan="4">
53 <td colspan="4">
54 <span class="private_repo_msg">
54 <span class="private_repo_msg">
55 <strong title="${h.tooltip(_user.permission)}">${_('private repository')}</strong>
55 <strong title="${h.tooltip(_user.permission)}">${_('private repository')}</strong>
56 </span>
56 </span>
57 </td>
57 </td>
58 <td class="private_repo_msg">
58 <td class="private_repo_msg">
59 ${base.gravatar(h.DEFAULT_USER_EMAIL, 16)}
59 ${base.gravatar(h.DEFAULT_USER_EMAIL, 16)}
60 ${h.DEFAULT_USER} - ${_('only users/user groups explicitly added here will have access')}</td>
60 ${h.DEFAULT_USER} - ${_('only users/user groups explicitly added here will have access')}</td>
61 <td class="td-action">
61 <td class="td-action">
62 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, false); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
62 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, false); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
63 ${_('un-set private mode')}
63 ${_('un-set private mode')}
64 </span>
64 </span>
65 </td>
65 </td>
66 <td class="quick_repo_menu">
66 <td class="quick_repo_menu">
67 % if c.rhodecode_user.is_admin:
67 % if c.rhodecode_user.is_admin:
68 <i class="icon-more"></i>
68 <i class="icon-more"></i>
69 <div class="menu_items_container" style="display: none;">
69 <div class="menu_items_container" style="display: none;">
70 <ul class="menu_items">
70 <ul class="menu_items">
71 <li>
71 <li>
72 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
72 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
73 </li>
73 </li>
74 </ul>
74 </ul>
75 </div>
75 </div>
76 % endif
76 % endif
77 </td>
77 </td>
78 </tr>
78 </tr>
79 %else:
79 %else:
80 <% used_by_n_rules = len(getattr(_user, 'branch_rules', None) or []) %>
80 <% used_by_n_rules = len(getattr(_user, 'branch_rules', None) or []) %>
81 <tr>
81 <tr>
82 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.none', checked=_user.permission=='repository.none', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
82 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.none', checked=_user.permission=='repository.none', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
83 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.read', checked=_user.permission=='repository.read', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
83 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.read', checked=_user.permission=='repository.read', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
84 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.write', checked=_user.permission=='repository.write')}</td>
84 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.write', checked=_user.permission=='repository.write')}</td>
85 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.admin', checked=_user.permission=='repository.admin')}</td>
85 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.admin', checked=_user.permission=='repository.admin')}</td>
86 <td class="td-user">
86 <td class="td-user">
87 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
87 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
88 <span class="user">
88 <span class="user">
89 % if _user.username == h.DEFAULT_USER:
89 % if _user.username == h.DEFAULT_USER:
90 ${h.DEFAULT_USER}
90 ${h.DEFAULT_USER}
91 % if _user.active:
91 % if _user.active:
92 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
92 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
93 % else:
93 % else:
94 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
94 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
95 % endif
95 % endif
96 % else:
96 % else:
97 % if getattr(_user, 'duplicate_perm', None):
97 % if getattr(_user, 'duplicate_perm', None):
98 <span class="user-perm-duplicate">
98 <span class="user-perm-duplicate">
99 ${h.link_to_user(_user.username)}
99 ${h.link_to_user(_user.username)}
100 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
100 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
101 </span>
101 </span>
102 </span>
102 </span>
103 % else:
103 % else:
104 ${h.link_to_user(_user.username)}
104 ${h.link_to_user(_user.username)}
105 % endif
105 % endif
106
106
107 %if getattr(_user, 'branch_rules', None):
107 %if getattr(_user, 'branch_rules', None):
108 % if used_by_n_rules == 1:
108 % if used_by_n_rules == 1:
109 (${_('used by {} branch rule, requires write+ permissions').format(used_by_n_rules)})
109 (${_('used by {} branch rule, requires write or higher permissions').format(used_by_n_rules)})
110 % else:
110 % else:
111 (${_('used by {} branch rules, requires write+ permissions').format(used_by_n_rules)})
111 (${_('used by {} branch rules, requires write or higher permissions').format(used_by_n_rules)})
112 % endif
112 % endif
113 %endif
113 %endif
114 % endif
114 % endif
115 </span>
115 </span>
116 </td>
116 </td>
117 <td class="td-action">
117 <td class="td-action">
118 %if _user.username != h.DEFAULT_USER and getattr(_user, 'branch_rules', None) is None:
118 %if _user.username != h.DEFAULT_USER and getattr(_user, 'branch_rules', None) is None:
119 <span class="btn btn-link btn-danger revoke_perm"
119 <span class="btn btn-link btn-danger revoke_perm"
120 member="${_user.user_id}" member_type="user">
120 member="${_user.user_id}" member_type="user">
121 ${_('Remove')}
121 ${_('Remove')}
122 </span>
122 </span>
123 %elif _user.username == h.DEFAULT_USER:
123 %elif _user.username == h.DEFAULT_USER:
124 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, true); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
124 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, true); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
125 ${_('set private mode')}
125 ${_('set private mode')}
126 </span>
126 </span>
127 %endif
127 %endif
128 </td>
128 </td>
129 <td class="quick_repo_menu">
129 <td class="quick_repo_menu">
130 % if c.rhodecode_user.is_admin:
130 % if c.rhodecode_user.is_admin:
131 <i class="icon-more"></i>
131 <i class="icon-more"></i>
132 <div class="menu_items_container" style="display: none;">
132 <div class="menu_items_container" style="display: none;">
133 <ul class="menu_items">
133 <ul class="menu_items">
134 <li>
134 <li>
135 % if _user.username == h.DEFAULT_USER:
135 % if _user.username == h.DEFAULT_USER:
136 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
136 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
137 % else:
137 % else:
138 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
138 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
139 % endif
139 % endif
140 </li>
140 </li>
141 </ul>
141 </ul>
142 </div>
142 </div>
143 % endif
143 % endif
144 </td>
144 </td>
145 </tr>
145 </tr>
146 %endif
146 %endif
147 %endfor
147 %endfor
148
148
149 ## USER GROUPS
149 ## USER GROUPS
150 %for _user_group in c.rhodecode_db_repo.permission_user_groups(with_members=True):
150 %for _user_group in c.rhodecode_db_repo.permission_user_groups(with_members=True):
151 <tr>
151 <tr>
152 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.none', checked=_user_group.permission=='repository.none')}</td>
152 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.none', checked=_user_group.permission=='repository.none')}</td>
153 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.read', checked=_user_group.permission=='repository.read')}</td>
153 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.read', checked=_user_group.permission=='repository.read')}</td>
154 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.write', checked=_user_group.permission=='repository.write')}</td>
154 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.write', checked=_user_group.permission=='repository.write')}</td>
155 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.admin', checked=_user_group.permission=='repository.admin')}</td>
155 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.admin', checked=_user_group.permission=='repository.admin')}</td>
156 <td class="td-componentname">
156 <td class="td-componentname">
157 ${base.user_group_icon(_user_group, tooltip=True)}
157 ${base.user_group_icon(_user_group, tooltip=True)}
158 %if c.is_super_admin:
158 %if c.is_super_admin:
159 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
159 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
160 ${_user_group.users_group_name}
160 ${_user_group.users_group_name}
161 </a>
161 </a>
162 %else:
162 %else:
163 ${h.link_to_group(_user_group.users_group_name)}
163 ${h.link_to_group(_user_group.users_group_name)}
164 %endif
164 %endif
165 (${_('members')}: ${len(_user_group.members)})
165 (${_('members')}: ${len(_user_group.members)})
166 </td>
166 </td>
167 <td class="td-action">
167 <td class="td-action">
168 <span class="btn btn-link btn-danger revoke_perm"
168 <span class="btn btn-link btn-danger revoke_perm"
169 member="${_user_group.users_group_id}" member_type="user_group">
169 member="${_user_group.users_group_id}" member_type="user_group">
170 ${_('Remove')}
170 ${_('Remove')}
171 </span>
171 </span>
172 </td>
172 </td>
173 <td class="quick_repo_menu">
173 <td class="quick_repo_menu">
174 % if c.rhodecode_user.is_admin:
174 % if c.rhodecode_user.is_admin:
175 <i class="icon-more"></i>
175 <i class="icon-more"></i>
176 <div class="menu_items_container" style="display: none;">
176 <div class="menu_items_container" style="display: none;">
177 <ul class="menu_items">
177 <ul class="menu_items">
178 <li>
178 <li>
179 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='repositories-permissions'))}
179 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='repositories-permissions'))}
180 </li>
180 </li>
181 </ul>
181 </ul>
182 </div>
182 </div>
183 % endif
183 % endif
184 </td>
184 </td>
185 </tr>
185 </tr>
186 %endfor
186 %endfor
187 <tr class="new_members" id="add_perm_input"></tr>
187 <tr class="new_members" id="add_perm_input"></tr>
188
188
189 <tr>
189 <tr>
190 <td></td>
190 <td></td>
191 <td></td>
191 <td></td>
192 <td></td>
192 <td></td>
193 <td></td>
193 <td></td>
194 <td></td>
194 <td></td>
195 <td>
195 <td>
196 <span id="add_perm" class="link">
196 <span id="add_perm" class="link">
197 ${_('Add user/user group')}
197 ${_('Add user/user group')}
198 </span>
198 </span>
199 </td>
199 </td>
200 <td></td>
200 <td></td>
201 </tr>
201 </tr>
202
202
203 </table>
203 </table>
204
204
205 <div class="buttons">
205 <div class="buttons">
206 ${h.submit('save',_('Save'),class_="btn btn-primary")}
206 ${h.submit('save',_('Save'),class_="btn btn-primary")}
207 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
207 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
208 </div>
208 </div>
209 ${h.end_form()}
209 ${h.end_form()}
210 </div>
210 </div>
211 </div>
211 </div>
212
212
213 <script type="text/javascript">
213 <script type="text/javascript">
214 $('#add_perm').on('click', function(e){
214 $('#add_perm').on('click', function(e){
215 addNewPermInput($(this), 'repository');
215 addNewPermInput($(this), 'repository');
216 });
216 });
217 $('.revoke_perm').on('click', function(e){
217 $('.revoke_perm').on('click', function(e){
218 markRevokePermInput($(this), 'repository');
218 markRevokePermInput($(this), 'repository');
219 });
219 });
220 quick_repo_menu();
220 quick_repo_menu();
221
221
222 var setPrivateRepo = function (elem, private) {
222 var setPrivateRepo = function (elem, private) {
223 var $elem = $(elem)
223 var $elem = $(elem)
224 if ($elem.hasClass('disabled')) {
224 if ($elem.hasClass('disabled')) {
225 return
225 return
226 }
226 }
227 $elem.addClass('disabled');
227 $elem.addClass('disabled');
228 $elem.css({"opacity": 0.3})
228 $elem.css({"opacity": 0.3})
229
229
230 var postData = {
230 var postData = {
231 'csrf_token': CSRF_TOKEN,
231 'csrf_token': CSRF_TOKEN,
232 'private': private
232 'private': private
233 };
233 };
234
234
235 var success = function(o) {
235 var success = function(o) {
236 var defaultUrl = pyroutes.url('edit_repo_perms', {"repo_name": templateContext.repo_name});
236 var defaultUrl = pyroutes.url('edit_repo_perms', {"repo_name": templateContext.repo_name});
237 window.location = o.redirect_url || defaultUrl;
237 window.location = o.redirect_url || defaultUrl;
238 };
238 };
239
239
240 ajaxPOST(
240 ajaxPOST(
241 pyroutes.url('edit_repo_perms_set_private', {"repo_name": templateContext.repo_name}),
241 pyroutes.url('edit_repo_perms_set_private', {"repo_name": templateContext.repo_name}),
242 postData,
242 postData,
243 success);
243 success);
244 }
244 }
245 </script>
245 </script>
@@ -1,921 +1,921 b''
1 <%inherit file="/base/base.mako"/>
1 <%inherit file="/base/base.mako"/>
2 <%namespace name="base" file="/base/base.mako"/>
2 <%namespace name="base" file="/base/base.mako"/>
3 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
3 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${_('{} Pull Request !{}').format(c.repo_name, c.pull_request.pull_request_id)}
6 ${_('{} Pull Request !{}').format(c.repo_name, c.pull_request.pull_request_id)}
7 %if c.rhodecode_name:
7 %if c.rhodecode_name:
8 &middot; ${h.branding(c.rhodecode_name)}
8 &middot; ${h.branding(c.rhodecode_name)}
9 %endif
9 %endif
10 </%def>
10 </%def>
11
11
12 <%def name="breadcrumbs_links()">
12 <%def name="breadcrumbs_links()">
13
13
14 </%def>
14 </%def>
15
15
16 <%def name="menu_bar_nav()">
16 <%def name="menu_bar_nav()">
17 ${self.menu_items(active='repositories')}
17 ${self.menu_items(active='repositories')}
18 </%def>
18 </%def>
19
19
20 <%def name="menu_bar_subnav()">
20 <%def name="menu_bar_subnav()">
21 ${self.repo_menu(active='showpullrequest')}
21 ${self.repo_menu(active='showpullrequest')}
22 </%def>
22 </%def>
23
23
24 <%def name="main()">
24 <%def name="main()">
25
25
26 <script type="text/javascript">
26 <script type="text/javascript">
27 // TODO: marcink switch this to pyroutes
27 // TODO: marcink switch this to pyroutes
28 AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}";
28 AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}";
29 templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id};
29 templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id};
30 </script>
30 </script>
31
31
32 <div class="box">
32 <div class="box">
33
33
34 <div class="box pr-summary">
34 <div class="box pr-summary">
35
35
36 <div class="summary-details block-left">
36 <div class="summary-details block-left">
37 <div id="pr-title">
37 <div id="pr-title">
38 % if c.pull_request.is_closed():
38 % if c.pull_request.is_closed():
39 <span class="pr-title-closed-tag tag">${_('Closed')}</span>
39 <span class="pr-title-closed-tag tag">${_('Closed')}</span>
40 % endif
40 % endif
41 <input class="pr-title-input large disabled" disabled="disabled" name="pullrequest_title" type="text" value="${c.pull_request.title}">
41 <input class="pr-title-input large disabled" disabled="disabled" name="pullrequest_title" type="text" value="${c.pull_request.title}">
42 </div>
42 </div>
43 <div id="pr-title-edit" class="input" style="display: none;">
43 <div id="pr-title-edit" class="input" style="display: none;">
44 <input class="pr-title-input large" id="pr-title-input" name="pullrequest_title" type="text" value="${c.pull_request.title}">
44 <input class="pr-title-input large" id="pr-title-input" name="pullrequest_title" type="text" value="${c.pull_request.title}">
45 </div>
45 </div>
46
46
47 <% summary = lambda n:{False:'summary-short'}.get(n) %>
47 <% summary = lambda n:{False:'summary-short'}.get(n) %>
48 <div class="pr-details-title">
48 <div class="pr-details-title">
49 <div class="pull-left">
49 <div class="pull-left">
50 <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request !{}').format(c.pull_request.pull_request_id)}</a>
50 <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request !{}').format(c.pull_request.pull_request_id)}</a>
51 ${_('Created on')}
51 ${_('Created on')}
52 <span class="tooltip" title="${_('Last updated on')} ${h.format_date(c.pull_request.updated_on)}">${h.format_date(c.pull_request.created_on)},</span>
52 <span class="tooltip" title="${_('Last updated on')} ${h.format_date(c.pull_request.updated_on)}">${h.format_date(c.pull_request.created_on)},</span>
53 <span class="pr-details-title-author-pref">${_('by')}</span>
53 <span class="pr-details-title-author-pref">${_('by')}</span>
54 </div>
54 </div>
55
55
56 <div class="pull-left">
56 <div class="pull-left">
57 ${self.gravatar_with_user(c.pull_request.author.email, 16, tooltip=True)}
57 ${self.gravatar_with_user(c.pull_request.author.email, 16, tooltip=True)}
58 </div>
58 </div>
59
59
60 %if c.allowed_to_update:
60 %if c.allowed_to_update:
61 <div class="pull-right">
61 <div class="pull-right">
62 <div id="edit_pull_request" class="action_button pr-save" style="display: none;">${_('Update title & description')}</div>
62 <div id="edit_pull_request" class="action_button pr-save" style="display: none;">${_('Update title & description')}</div>
63 <div id="delete_pullrequest" class="action_button pr-save ${('' if c.allowed_to_delete else 'disabled' )}" style="display: none;">
63 <div id="delete_pullrequest" class="action_button pr-save ${('' if c.allowed_to_delete else 'disabled' )}" style="display: none;">
64 % if c.allowed_to_delete:
64 % if c.allowed_to_delete:
65 ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)}
65 ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)}
66 <input class="btn btn-link btn-danger no-margin" id="remove_${c.pull_request.pull_request_id}" name="remove_${c.pull_request.pull_request_id}"
66 <input class="btn btn-link btn-danger no-margin" id="remove_${c.pull_request.pull_request_id}" name="remove_${c.pull_request.pull_request_id}"
67 onclick="submitConfirm(event, this, _gettext('Confirm to delete this pull request'), _gettext('Delete'), '${'!{}'.format(c.pull_request.pull_request_id)}')"
67 onclick="submitConfirm(event, this, _gettext('Confirm to delete this pull request'), _gettext('Delete'), '${'!{}'.format(c.pull_request.pull_request_id)}')"
68 type="submit" value="${_('Delete pull request')}">
68 type="submit" value="${_('Delete pull request')}">
69 ${h.end_form()}
69 ${h.end_form()}
70 % else:
70 % else:
71 <span class="tooltip" title="${_('Not allowed to delete this pull request')}">${_('Delete pull request')}</span>
71 <span class="tooltip" title="${_('Not allowed to delete this pull request')}">${_('Delete pull request')}</span>
72 % endif
72 % endif
73 </div>
73 </div>
74 <div id="open_edit_pullrequest" class="action_button">${_('Edit')}</div>
74 <div id="open_edit_pullrequest" class="action_button">${_('Edit')}</div>
75 <div id="close_edit_pullrequest" class="action_button" style="display: none;">${_('Cancel')}</div>
75 <div id="close_edit_pullrequest" class="action_button" style="display: none;">${_('Cancel')}</div>
76 </div>
76 </div>
77
77
78 %endif
78 %endif
79 </div>
79 </div>
80
80
81 <div id="pr-desc" class="input" title="${_('Rendered using {} renderer').format(c.renderer)}">
81 <div id="pr-desc" class="input" title="${_('Rendered using {} renderer').format(c.renderer)}">
82 ${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name)}
82 ${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name)}
83 </div>
83 </div>
84
84
85 <div id="pr-desc-edit" class="input textarea" style="display: none;">
85 <div id="pr-desc-edit" class="input textarea" style="display: none;">
86 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
86 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
87 ${dt.markup_form('pr-description-input', form_text=c.pull_request.description)}
87 ${dt.markup_form('pr-description-input', form_text=c.pull_request.description)}
88 </div>
88 </div>
89
89
90 <div id="summary" class="fields pr-details-content">
90 <div id="summary" class="fields pr-details-content">
91
91
92 ## review
92 ## review
93 <div class="field">
93 <div class="field">
94 <div class="label-pr-detail">
94 <div class="label-pr-detail">
95 <label>${_('Review status')}:</label>
95 <label>${_('Review status')}:</label>
96 </div>
96 </div>
97 <div class="input">
97 <div class="input">
98 %if c.pull_request_review_status:
98 %if c.pull_request_review_status:
99 <div class="tag status-tag-${c.pull_request_review_status}">
99 <div class="tag status-tag-${c.pull_request_review_status}">
100 <i class="icon-circle review-status-${c.pull_request_review_status}"></i>
100 <i class="icon-circle review-status-${c.pull_request_review_status}"></i>
101 <span class="changeset-status-lbl">
101 <span class="changeset-status-lbl">
102 %if c.pull_request.is_closed():
102 %if c.pull_request.is_closed():
103 ${_('Closed')},
103 ${_('Closed')},
104 %endif
104 %endif
105
105
106 ${h.commit_status_lbl(c.pull_request_review_status)}
106 ${h.commit_status_lbl(c.pull_request_review_status)}
107
107
108 </span>
108 </span>
109 </div>
109 </div>
110 - ${_ungettext('calculated based on {} reviewer vote', 'calculated based on {} reviewers votes', len(c.pull_request_reviewers)).format(len(c.pull_request_reviewers))}
110 - ${_ungettext('calculated based on {} reviewer vote', 'calculated based on {} reviewers votes', len(c.pull_request_reviewers)).format(len(c.pull_request_reviewers))}
111 %endif
111 %endif
112 </div>
112 </div>
113 </div>
113 </div>
114
114
115 ## source
115 ## source
116 <div class="field">
116 <div class="field">
117 <div class="label-pr-detail">
117 <div class="label-pr-detail">
118 <label>${_('Commit flow')}:</label>
118 <label>${_('Commit flow')}:</label>
119 </div>
119 </div>
120 <div class="input">
120 <div class="input">
121 <div class="pr-commit-flow">
121 <div class="pr-commit-flow">
122 ## Source
122 ## Source
123 %if c.pull_request.source_ref_parts.type == 'branch':
123 %if c.pull_request.source_ref_parts.type == 'branch':
124 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}"><code class="pr-source-info">${c.pull_request.source_ref_parts.type}:${c.pull_request.source_ref_parts.name}</code></a>
124 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}"><code class="pr-source-info">${c.pull_request.source_ref_parts.type}:${c.pull_request.source_ref_parts.name}</code></a>
125 %else:
125 %else:
126 <code class="pr-source-info">${'{}:{}'.format(c.pull_request.source_ref_parts.type, c.pull_request.source_ref_parts.name)}</code>
126 <code class="pr-source-info">${'{}:{}'.format(c.pull_request.source_ref_parts.type, c.pull_request.source_ref_parts.name)}</code>
127 %endif
127 %endif
128 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.repo_name}</a>
128 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.repo_name}</a>
129 &rarr;
129 &rarr;
130 ## Target
130 ## Target
131 %if c.pull_request.target_ref_parts.type == 'branch':
131 %if c.pull_request.target_ref_parts.type == 'branch':
132 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}"><code class="pr-target-info">${c.pull_request.target_ref_parts.type}:${c.pull_request.target_ref_parts.name}</code></a>
132 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}"><code class="pr-target-info">${c.pull_request.target_ref_parts.type}:${c.pull_request.target_ref_parts.name}</code></a>
133 %else:
133 %else:
134 <code class="pr-target-info">${'{}:{}'.format(c.pull_request.target_ref_parts.type, c.pull_request.target_ref_parts.name)}</code>
134 <code class="pr-target-info">${'{}:{}'.format(c.pull_request.target_ref_parts.type, c.pull_request.target_ref_parts.name)}</code>
135 %endif
135 %endif
136
136
137 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.repo_name}</a>
137 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.repo_name}</a>
138
138
139 <a class="source-details-action" href="#expand-source-details" onclick="return versionController.toggleElement(this, '.source-details')" data-toggle-on='<i class="icon-angle-down">more details</i>' data-toggle-off='<i class="icon-angle-up">less details</i>'>
139 <a class="source-details-action" href="#expand-source-details" onclick="return versionController.toggleElement(this, '.source-details')" data-toggle-on='<i class="icon-angle-down">more details</i>' data-toggle-off='<i class="icon-angle-up">less details</i>'>
140 <i class="icon-angle-down">more details</i>
140 <i class="icon-angle-down">more details</i>
141 </a>
141 </a>
142
142
143 </div>
143 </div>
144
144
145 <div class="source-details" style="display: none">
145 <div class="source-details" style="display: none">
146
146
147 <ul>
147 <ul>
148
148
149 ## common ancestor
149 ## common ancestor
150 <li>
150 <li>
151 ${_('Common ancestor')}:
151 ${_('Common ancestor')}:
152 % if c.ancestor_commit:
152 % if c.ancestor_commit:
153 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a>
153 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a>
154 % else:
154 % else:
155 ${_('not available')}
155 ${_('not available')}
156 % endif
156 % endif
157 </li>
157 </li>
158
158
159 ## pull url
159 ## pull url
160 <li>
160 <li>
161 %if h.is_hg(c.pull_request.source_repo):
161 %if h.is_hg(c.pull_request.source_repo):
162 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
162 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
163 %elif h.is_git(c.pull_request.source_repo):
163 %elif h.is_git(c.pull_request.source_repo):
164 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
164 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
165 %endif
165 %endif
166
166
167 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
167 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
168 <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i>
168 <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i>
169 </li>
169 </li>
170
170
171 ## Shadow repo
171 ## Shadow repo
172 <li>
172 <li>
173 % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref:
173 % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref:
174 %if h.is_hg(c.pull_request.target_repo):
174 %if h.is_hg(c.pull_request.target_repo):
175 <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
175 <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
176 %elif h.is_git(c.pull_request.target_repo):
176 %elif h.is_git(c.pull_request.target_repo):
177 <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
177 <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
178 %endif
178 %endif
179
179
180 <span class="tooltip" title="${_('Clone repository in its merged state using shadow repository')}">${_('Clone from shadow repository')}</span>: <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly">
180 <span class="tooltip" title="${_('Clone repository in its merged state using shadow repository')}">${_('Clone from shadow repository')}</span>: <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly">
181 <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i>
181 <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i>
182
182
183 % else:
183 % else:
184 <div class="">
184 <div class="">
185 ${_('Shadow repository data not available')}.
185 ${_('Shadow repository data not available')}.
186 </div>
186 </div>
187 % endif
187 % endif
188 </li>
188 </li>
189
189
190 </ul>
190 </ul>
191
191
192 </div>
192 </div>
193
193
194 </div>
194 </div>
195
195
196 </div>
196 </div>
197
197
198 ## versions
198 ## versions
199 <div class="field">
199 <div class="field">
200 <div class="label-pr-detail">
200 <div class="label-pr-detail">
201 <label>${_('Versions')}:</label>
201 <label>${_('Versions')}:</label>
202 </div>
202 </div>
203
203
204 <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %>
204 <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %>
205 <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %>
205 <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %>
206
206
207 <div class="pr-versions">
207 <div class="pr-versions">
208 % if c.show_version_changes:
208 % if c.show_version_changes:
209 <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %>
209 <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %>
210 <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %>
210 <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %>
211 ${_ungettext('{} version available for this pull request, ', '{} versions available for this pull request, ', len(c.versions)).format(len(c.versions))}
211 ${_ungettext('{} version available for this pull request, ', '{} versions available for this pull request, ', len(c.versions)).format(len(c.versions))}
212 <a id="show-pr-versions" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions"
212 <a id="show-pr-versions" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions"
213 data-toggle-on="${_('show versions')}."
213 data-toggle-on="${_('show versions')}."
214 data-toggle-off="${_('hide versions')}.">
214 data-toggle-off="${_('hide versions')}.">
215 ${_('show versions')}.
215 ${_('show versions')}.
216 </a>
216 </a>
217 <table>
217 <table>
218 ## SHOW ALL VERSIONS OF PR
218 ## SHOW ALL VERSIONS OF PR
219 <% ver_pr = None %>
219 <% ver_pr = None %>
220
220
221 % for data in reversed(list(enumerate(c.versions, 1))):
221 % for data in reversed(list(enumerate(c.versions, 1))):
222 <% ver_pos = data[0] %>
222 <% ver_pos = data[0] %>
223 <% ver = data[1] %>
223 <% ver = data[1] %>
224 <% ver_pr = ver.pull_request_version_id %>
224 <% ver_pr = ver.pull_request_version_id %>
225 <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %>
225 <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %>
226
226
227 <tr class="version-pr" style="display: ${display_row}">
227 <tr class="version-pr" style="display: ${display_row}">
228 <td>
228 <td>
229 <code>
229 <code>
230 <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a>
230 <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a>
231 </code>
231 </code>
232 </td>
232 </td>
233 <td>
233 <td>
234 <input ${('checked="checked"' if c.from_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
234 <input ${('checked="checked"' if c.from_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
235 <input ${('checked="checked"' if c.at_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
235 <input ${('checked="checked"' if c.at_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
236 </td>
236 </td>
237 <td>
237 <td>
238 <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %>
238 <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %>
239 <i class="tooltip icon-circle review-status-${review_status}" title="${_('Your review status at this version')}"></i>
239 <i class="tooltip icon-circle review-status-${review_status}" title="${_('Your review status at this version')}"></i>
240
240
241 </td>
241 </td>
242 <td>
242 <td>
243 % if c.at_version_num != ver_pr:
243 % if c.at_version_num != ver_pr:
244 <i class="tooltip icon-comment" title="${_('Comments from pull request version v{0}').format(ver_pos)}"></i>
244 <i class="tooltip icon-comment" title="${_('Comments from pull request version v{0}').format(ver_pos)}"></i>
245 <code>
245 <code>
246 General:${len(c.comment_versions[ver_pr]['at'])} / Inline:${len(c.inline_versions[ver_pr]['at'])}
246 General:${len(c.comment_versions[ver_pr]['at'])} / Inline:${len(c.inline_versions[ver_pr]['at'])}
247 </code>
247 </code>
248 % endif
248 % endif
249 </td>
249 </td>
250 <td>
250 <td>
251 ##<code>${ver.source_ref_parts.commit_id[:6]}</code>
251 ##<code>${ver.source_ref_parts.commit_id[:6]}</code>
252 </td>
252 </td>
253 <td>
253 <td>
254 <code>${h.age_component(ver.updated_on, time_is_local=True, tooltip=False)}</code>
254 <code>${h.age_component(ver.updated_on, time_is_local=True, tooltip=False)}</code>
255 </td>
255 </td>
256 </tr>
256 </tr>
257 % endfor
257 % endfor
258
258
259 <tr>
259 <tr>
260 <td colspan="6">
260 <td colspan="6">
261 <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none"
261 <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none"
262 data-label-text-locked="${_('select versions to show changes')}"
262 data-label-text-locked="${_('select versions to show changes')}"
263 data-label-text-diff="${_('show changes between versions')}"
263 data-label-text-diff="${_('show changes between versions')}"
264 data-label-text-show="${_('show pull request for this version')}"
264 data-label-text-show="${_('show pull request for this version')}"
265 >
265 >
266 ${_('select versions to show changes')}
266 ${_('select versions to show changes')}
267 </button>
267 </button>
268 </td>
268 </td>
269 </tr>
269 </tr>
270 </table>
270 </table>
271 % else:
271 % else:
272 <div>
272 <div>
273 ${_('Pull request versions not available')}.
273 ${_('Pull request versions not available')}.
274 </div>
274 </div>
275 % endif
275 % endif
276 </div>
276 </div>
277 </div>
277 </div>
278
278
279 </div>
279 </div>
280
280
281 </div>
281 </div>
282
282
283 ## REVIEW RULES
283 ## REVIEW RULES
284 <div id="review_rules" style="display: none" class="reviewers-title block-right">
284 <div id="review_rules" style="display: none" class="reviewers-title block-right">
285 <div class="pr-details-title">
285 <div class="pr-details-title">
286 ${_('Reviewer rules')}
286 ${_('Reviewer rules')}
287 %if c.allowed_to_update:
287 %if c.allowed_to_update:
288 <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span>
288 <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span>
289 %endif
289 %endif
290 </div>
290 </div>
291 <div class="pr-reviewer-rules">
291 <div class="pr-reviewer-rules">
292 ## review rules will be appended here, by default reviewers logic
292 ## review rules will be appended here, by default reviewers logic
293 </div>
293 </div>
294 <input id="review_data" type="hidden" name="review_data" value="">
294 <input id="review_data" type="hidden" name="review_data" value="">
295 </div>
295 </div>
296
296
297 ## REVIEWERS
297 ## REVIEWERS
298 <div class="reviewers-title first-panel block-right">
298 <div class="reviewers-title first-panel block-right">
299 <div class="pr-details-title">
299 <div class="pr-details-title">
300 ${_('Pull request reviewers')}
300 ${_('Pull request reviewers')}
301 %if c.allowed_to_update:
301 %if c.allowed_to_update:
302 <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
302 <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
303 %endif
303 %endif
304 </div>
304 </div>
305 </div>
305 </div>
306 <div id="reviewers" class="block-right pr-details-content reviewers">
306 <div id="reviewers" class="block-right pr-details-content reviewers">
307
307
308 ## members redering block
308 ## members redering block
309 <input type="hidden" name="__start__" value="review_members:sequence">
309 <input type="hidden" name="__start__" value="review_members:sequence">
310 <ul id="review_members" class="group_members">
310 <ul id="review_members" class="group_members">
311
311
312 % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers:
312 % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers:
313 <script>
313 <script>
314 var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n};
314 var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n};
315 var status = "${(status[0][1].status if status else 'not_reviewed')}";
315 var status = "${(status[0][1].status if status else 'not_reviewed')}";
316 var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}";
316 var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}";
317 var allowed_to_update = ${h.json.dumps(c.allowed_to_update)};
317 var allowed_to_update = ${h.json.dumps(c.allowed_to_update)};
318
318
319 var entry = renderTemplate('reviewMemberEntry', {
319 var entry = renderTemplate('reviewMemberEntry', {
320 'member': member,
320 'member': member,
321 'mandatory': member.mandatory,
321 'mandatory': member.mandatory,
322 'reasons': member.reasons,
322 'reasons': member.reasons,
323 'allowed_to_update': allowed_to_update,
323 'allowed_to_update': allowed_to_update,
324 'review_status': status,
324 'review_status': status,
325 'review_status_label': status_lbl,
325 'review_status_label': status_lbl,
326 'user_group': member.user_group,
326 'user_group': member.user_group,
327 'create': false
327 'create': false
328 });
328 });
329 $('#review_members').append(entry)
329 $('#review_members').append(entry)
330 </script>
330 </script>
331
331
332 % endfor
332 % endfor
333
333
334 </ul>
334 </ul>
335
335
336 <input type="hidden" name="__end__" value="review_members:sequence">
336 <input type="hidden" name="__end__" value="review_members:sequence">
337 ## end members redering block
337 ## end members redering block
338
338
339 %if not c.pull_request.is_closed():
339 %if not c.pull_request.is_closed():
340 <div id="add_reviewer" class="ac" style="display: none;">
340 <div id="add_reviewer" class="ac" style="display: none;">
341 %if c.allowed_to_update:
341 %if c.allowed_to_update:
342 % if not c.forbid_adding_reviewers:
342 % if not c.forbid_adding_reviewers:
343 <div id="add_reviewer_input" class="reviewer_ac">
343 <div id="add_reviewer_input" class="reviewer_ac">
344 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
344 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
345 <div id="reviewers_container"></div>
345 <div id="reviewers_container"></div>
346 </div>
346 </div>
347 % endif
347 % endif
348 <div class="pull-right">
348 <div class="pull-right">
349 <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button>
349 <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button>
350 </div>
350 </div>
351 %endif
351 %endif
352 </div>
352 </div>
353 %endif
353 %endif
354 </div>
354 </div>
355
355
356 ## TODOs will be listed here
356 ## TODOs will be listed here
357 <div class="reviewers-title block-right">
357 <div class="reviewers-title block-right">
358 <div class="pr-details-title">
358 <div class="pr-details-title">
359 ## Only show unresolved, that is only what matters
359 ## Only show unresolved, that is only what matters
360 TODO Comments - ${len(c.unresolved_comments)} / ${(len(c.unresolved_comments) + len(c.resolved_comments))}
360 TODO Comments - ${len(c.unresolved_comments)} / ${(len(c.unresolved_comments) + len(c.resolved_comments))}
361
361
362 % if not c.at_version:
362 % if not c.at_version:
363 % if c.resolved_comments:
363 % if c.resolved_comments:
364 <span class="block-right action_button last-item noselect" onclick="$('.unresolved-todo-text').toggle(); return versionController.toggleElement(this, '.unresolved-todo');" data-toggle-on="Show resolved" data-toggle-off="Hide resolved">Show resolved</span>
364 <span class="block-right action_button last-item noselect" onclick="$('.unresolved-todo-text').toggle(); return versionController.toggleElement(this, '.unresolved-todo');" data-toggle-on="Show resolved" data-toggle-off="Hide resolved">Show resolved</span>
365 % else:
365 % else:
366 <span class="block-right last-item noselect">Show resolved</span>
366 <span class="block-right last-item noselect">Show resolved</span>
367 % endif
367 % endif
368 % endif
368 % endif
369 </div>
369 </div>
370 </div>
370 </div>
371 <div class="block-right pr-details-content reviewers">
371 <div class="block-right pr-details-content reviewers">
372
372
373 <table class="todo-table">
373 <table class="todo-table">
374 <%
374 <%
375 def sorter(entry):
375 def sorter(entry):
376 user_id = entry.author.user_id
376 user_id = entry.author.user_id
377 resolved = '1' if entry.resolved else '0'
377 resolved = '1' if entry.resolved else '0'
378 if user_id == c.rhodecode_user.user_id:
378 if user_id == c.rhodecode_user.user_id:
379 # own comments first
379 # own comments first
380 user_id = 0
380 user_id = 0
381 return '{}_{}_{}'.format(resolved, user_id, str(entry.comment_id).zfill(100))
381 return '{}_{}_{}'.format(resolved, user_id, str(entry.comment_id).zfill(100))
382 %>
382 %>
383
383
384 % if c.at_version:
384 % if c.at_version:
385 <tr>
385 <tr>
386 <td class="unresolved-todo-text">${_('unresolved TODOs unavailable in this view')}.</td>
386 <td class="unresolved-todo-text">${_('unresolved TODOs unavailable in this view')}.</td>
387 </tr>
387 </tr>
388 % else:
388 % else:
389 % for todo_comment in sorted(c.unresolved_comments + c.resolved_comments, key=sorter):
389 % for todo_comment in sorted(c.unresolved_comments + c.resolved_comments, key=sorter):
390 <% resolved = todo_comment.resolved %>
390 <% resolved = todo_comment.resolved %>
391 % if inline:
391 % if inline:
392 <% outdated_at_ver = todo_comment.outdated_at_version(getattr(c, 'at_version_num', None)) %>
392 <% outdated_at_ver = todo_comment.outdated_at_version(getattr(c, 'at_version_num', None)) %>
393 % else:
393 % else:
394 <% outdated_at_ver = todo_comment.older_than_version(getattr(c, 'at_version_num', None)) %>
394 <% outdated_at_ver = todo_comment.older_than_version(getattr(c, 'at_version_num', None)) %>
395 % endif
395 % endif
396
396
397 <tr ${('class="unresolved-todo" style="display: none"' if resolved else '') |n}>
397 <tr ${('class="unresolved-todo" style="display: none"' if resolved else '') |n}>
398
398
399 <td class="td-todo-number">
399 <td class="td-todo-number">
400 % if resolved:
400 % if resolved:
401 <a class="permalink todo-resolved tooltip" title="${_('Resolved by comment #{}').format(todo_comment.resolved.comment_id)}" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
401 <a class="permalink todo-resolved tooltip" title="${_('Resolved by comment #{}').format(todo_comment.resolved.comment_id)}" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
402 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
402 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
403 % else:
403 % else:
404 <a class="permalink" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
404 <a class="permalink" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
405 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
405 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
406 % endif
406 % endif
407 </td>
407 </td>
408 <td class="td-todo-gravatar">
408 <td class="td-todo-gravatar">
409 ${base.gravatar(todo_comment.author.email, 16, user=todo_comment.author, tooltip=True, extra_class=['no-margin'])}
409 ${base.gravatar(todo_comment.author.email, 16, user=todo_comment.author, tooltip=True, extra_class=['no-margin'])}
410 </td>
410 </td>
411 <td class="todo-comment-text-wrapper">
411 <td class="todo-comment-text-wrapper">
412 <div class="todo-comment-text">
412 <div class="todo-comment-text">
413 <code>${h.chop_at_smart(todo_comment.text, '\n', suffix_if_chopped='...')}</code>
413 <code>${h.chop_at_smart(todo_comment.text, '\n', suffix_if_chopped='...')}</code>
414 </div>
414 </div>
415 </td>
415 </td>
416
416
417 </tr>
417 </tr>
418 % endfor
418 % endfor
419
419
420 % if len(c.unresolved_comments) == 0:
420 % if len(c.unresolved_comments) == 0:
421 <tr>
421 <tr>
422 <td class="unresolved-todo-text">${_('No unresolved TODOs')}.</td>
422 <td class="unresolved-todo-text">${_('No unresolved TODOs')}.</td>
423 </tr>
423 </tr>
424 % endif
424 % endif
425
425
426 % endif
426 % endif
427
427
428 </table>
428 </table>
429
429
430 </div>
430 </div>
431 </div>
431 </div>
432
432
433 </div>
433 </div>
434
434
435 <div class="box">
435 <div class="box">
436
436
437 % if c.state_progressing:
437 % if c.state_progressing:
438
438
439 <h2 style="text-align: center">
439 <h2 style="text-align: center">
440 ${_('Cannot show diff when pull request state is changing. Current progress state')}: <span class="tag tag-merge-state-${c.pull_request.state}">${c.pull_request.state}</span>
440 ${_('Cannot show diff when pull request state is changing. Current progress state')}: <span class="tag tag-merge-state-${c.pull_request.state}">${c.pull_request.state}</span>
441
441
442 % if c.is_super_admin:
442 % if c.is_super_admin:
443 <br/>
443 <br/>
444 If you think this is an error try <a href="${h.current_route_path(request, force_state='created')}">forced state reset</a> to <span class="tag tag-merge-state-created">created</span> state.
444 If you think this is an error try <a href="${h.current_route_path(request, force_state='created')}">forced state reset</a> to <span class="tag tag-merge-state-created">created</span> state.
445 % endif
445 % endif
446 </h2>
446 </h2>
447
447
448 % else:
448 % else:
449
449
450 ## Diffs rendered here
450 ## Diffs rendered here
451 <div class="table" >
451 <div class="table" >
452 <div id="changeset_compare_view_content">
452 <div id="changeset_compare_view_content">
453 ##CS
453 ##CS
454 % if c.missing_requirements:
454 % if c.missing_requirements:
455 <div class="box">
455 <div class="box">
456 <div class="alert alert-warning">
456 <div class="alert alert-warning">
457 <div>
457 <div>
458 <strong>${_('Missing requirements:')}</strong>
458 <strong>${_('Missing requirements:')}</strong>
459 ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')}
459 ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')}
460 </div>
460 </div>
461 </div>
461 </div>
462 </div>
462 </div>
463 % elif c.missing_commits:
463 % elif c.missing_commits:
464 <div class="box">
464 <div class="box">
465 <div class="alert alert-warning">
465 <div class="alert alert-warning">
466 <div>
466 <div>
467 <strong>${_('Missing commits')}:</strong>
467 <strong>${_('Missing commits')}:</strong>
468 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}
468 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}<br/>
469 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}
469 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}<br/>
470 ${_('Consider doing a {force_refresh_url} in case you think this is an error.').format(force_refresh_url=h.link_to('force refresh', h.current_route_path(request, force_refresh='1')))|n}
470 ${_('Consider doing a `force update commits` in case you think this is an error.')}
471 </div>
471 </div>
472 </div>
472 </div>
473 </div>
473 </div>
474 % elif c.pr_merge_source_commit.changed and not c.pull_request.is_closed():
474 % elif c.pr_merge_source_commit.changed and not c.pull_request.is_closed():
475 <div class="box">
475 <div class="box">
476 <div class="alert alert-info">
476 <div class="alert alert-info">
477 <div>
477 <div>
478 <strong>${_('There are new changes for `{}:{}` in source repository, please consider updating this pull request.').format(c.pr_merge_source_commit.ref_spec.type, c.pr_merge_source_commit.ref_spec.name)}</strong>
478 <strong>${_('There are new changes for `{}:{}` in source repository, please consider updating this pull request.').format(c.pr_merge_source_commit.ref_spec.type, c.pr_merge_source_commit.ref_spec.name)}</strong>
479 </div>
479 </div>
480 </div>
480 </div>
481 </div>
481 </div>
482 % endif
482 % endif
483
483
484 <div class="compare_view_commits_title">
484 <div class="compare_view_commits_title">
485 % if not c.compare_mode:
485 % if not c.compare_mode:
486
486
487 % if c.at_version_pos:
487 % if c.at_version_pos:
488 <h4>
488 <h4>
489 ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos}
489 ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos}
490 </h4>
490 </h4>
491 % endif
491 % endif
492
492
493 <div class="pull-left">
493 <div class="pull-left">
494 <div class="btn-group">
494 <div class="btn-group">
495 <a class="${('collapsed' if c.collapse_all_commits else '')}" href="#expand-commits" onclick="toggleCommitExpand(this); return false" data-toggle-commits-cnt=${len(c.commit_ranges)} >
495 <a class="${('collapsed' if c.collapse_all_commits else '')}" href="#expand-commits" onclick="toggleCommitExpand(this); return false" data-toggle-commits-cnt=${len(c.commit_ranges)} >
496 % if c.collapse_all_commits:
496 % if c.collapse_all_commits:
497 <i class="icon-plus-squared-alt icon-no-margin"></i>
497 <i class="icon-plus-squared-alt icon-no-margin"></i>
498 ${_ungettext('Expand {} commit', 'Expand {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
498 ${_ungettext('Expand {} commit', 'Expand {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
499 % else:
499 % else:
500 <i class="icon-minus-squared-alt icon-no-margin"></i>
500 <i class="icon-minus-squared-alt icon-no-margin"></i>
501 ${_ungettext('Collapse {} commit', 'Collapse {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
501 ${_ungettext('Collapse {} commit', 'Collapse {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
502 % endif
502 % endif
503 </a>
503 </a>
504 </div>
504 </div>
505 </div>
505 </div>
506
506
507 <div class="pull-right">
507 <div class="pull-right">
508 % if c.allowed_to_update and not c.pull_request.is_closed():
508 % if c.allowed_to_update and not c.pull_request.is_closed():
509
509
510 <div class="btn-group btn-group-actions">
510 <div class="btn-group btn-group-actions">
511 <a id="update_commits" class="btn btn-primary no-margin" onclick="updateController.updateCommits(this); return false">
511 <a id="update_commits" class="btn btn-primary no-margin" onclick="updateController.updateCommits(this); return false">
512 ${_('Update commits')}
512 ${_('Update commits')}
513 </a>
513 </a>
514
514
515 <a id="update_commits_switcher" class="tooltip btn btn-primary btn-more-option" data-toggle="dropdown" aria-pressed="false" role="button" title="${_('more update options')}">
515 <a id="update_commits_switcher" class="tooltip btn btn-primary btn-more-option" data-toggle="dropdown" aria-pressed="false" role="button" title="${_('more update options')}">
516 <i class="icon-down"></i>
516 <i class="icon-down"></i>
517 </a>
517 </a>
518
518
519 <div class="btn-action-switcher-container right-align" id="update-commits-switcher">
519 <div class="btn-action-switcher-container right-align" id="update-commits-switcher">
520 <ul class="btn-action-switcher" role="menu" style="min-width: 300px;">
520 <ul class="btn-action-switcher" role="menu" style="min-width: 300px;">
521 <li>
521 <li>
522 <a href="#forceUpdate" onclick="updateController.forceUpdateCommits(this); return false">
522 <a href="#forceUpdate" onclick="updateController.forceUpdateCommits(this); return false">
523 ${_('Force update commits')}
523 ${_('Force update commits')}
524 </a>
524 </a>
525 <div class="action-help-block">
525 <div class="action-help-block">
526 ${_('Update commits and force refresh this pull request.')}
526 ${_('Update commits and force refresh this pull request.')}
527 </div>
527 </div>
528 </li>
528 </li>
529 </ul>
529 </ul>
530 </div>
530 </div>
531 </div>
531 </div>
532
532
533 % else:
533 % else:
534 <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a>
534 <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a>
535 % endif
535 % endif
536
536
537 </div>
537 </div>
538 % endif
538 % endif
539 </div>
539 </div>
540
540
541 % if not c.missing_commits:
541 % if not c.missing_commits:
542 % if c.compare_mode:
542 % if c.compare_mode:
543 % if c.at_version:
543 % if c.at_version:
544 <h4>
544 <h4>
545 ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}:
545 ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}:
546 </h4>
546 </h4>
547
547
548 <div class="subtitle-compare">
548 <div class="subtitle-compare">
549 ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))}
549 ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))}
550 </div>
550 </div>
551
551
552 <div class="container">
552 <div class="container">
553 <table class="rctable compare_view_commits">
553 <table class="rctable compare_view_commits">
554 <tr>
554 <tr>
555 <th></th>
555 <th></th>
556 <th>${_('Time')}</th>
556 <th>${_('Time')}</th>
557 <th>${_('Author')}</th>
557 <th>${_('Author')}</th>
558 <th>${_('Commit')}</th>
558 <th>${_('Commit')}</th>
559 <th></th>
559 <th></th>
560 <th>${_('Description')}</th>
560 <th>${_('Description')}</th>
561 </tr>
561 </tr>
562
562
563 % for c_type, commit in c.commit_changes:
563 % for c_type, commit in c.commit_changes:
564 % if c_type in ['a', 'r']:
564 % if c_type in ['a', 'r']:
565 <%
565 <%
566 if c_type == 'a':
566 if c_type == 'a':
567 cc_title = _('Commit added in displayed changes')
567 cc_title = _('Commit added in displayed changes')
568 elif c_type == 'r':
568 elif c_type == 'r':
569 cc_title = _('Commit removed in displayed changes')
569 cc_title = _('Commit removed in displayed changes')
570 else:
570 else:
571 cc_title = ''
571 cc_title = ''
572 %>
572 %>
573 <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select">
573 <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select">
574 <td>
574 <td>
575 <div class="commit-change-indicator color-${c_type}-border">
575 <div class="commit-change-indicator color-${c_type}-border">
576 <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}">
576 <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}">
577 ${c_type.upper()}
577 ${c_type.upper()}
578 </div>
578 </div>
579 </div>
579 </div>
580 </td>
580 </td>
581 <td class="td-time">
581 <td class="td-time">
582 ${h.age_component(commit.date)}
582 ${h.age_component(commit.date)}
583 </td>
583 </td>
584 <td class="td-user">
584 <td class="td-user">
585 ${base.gravatar_with_user(commit.author, 16, tooltip=True)}
585 ${base.gravatar_with_user(commit.author, 16, tooltip=True)}
586 </td>
586 </td>
587 <td class="td-hash">
587 <td class="td-hash">
588 <code>
588 <code>
589 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
589 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
590 r${commit.idx}:${h.short_id(commit.raw_id)}
590 r${commit.idx}:${h.short_id(commit.raw_id)}
591 </a>
591 </a>
592 ${h.hidden('revisions', commit.raw_id)}
592 ${h.hidden('revisions', commit.raw_id)}
593 </code>
593 </code>
594 </td>
594 </td>
595 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
595 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
596 <i class="icon-expand-linked"></i>
596 <i class="icon-expand-linked"></i>
597 </td>
597 </td>
598 <td class="mid td-description">
598 <td class="mid td-description">
599 <div class="log-container truncate-wrap">
599 <div class="log-container truncate-wrap">
600 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
600 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
601 </div>
601 </div>
602 </td>
602 </td>
603 </tr>
603 </tr>
604 % endif
604 % endif
605 % endfor
605 % endfor
606 </table>
606 </table>
607 </div>
607 </div>
608
608
609 % endif
609 % endif
610
610
611 % else:
611 % else:
612 <%include file="/compare/compare_commits.mako" />
612 <%include file="/compare/compare_commits.mako" />
613 % endif
613 % endif
614
614
615 <div class="cs_files">
615 <div class="cs_files">
616 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
616 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
617 % if c.at_version:
617 % if c.at_version:
618 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['display']) %>
618 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['display']) %>
619 <% c.comments = c.comment_versions[c.at_version_num]['display'] %>
619 <% c.comments = c.comment_versions[c.at_version_num]['display'] %>
620 % else:
620 % else:
621 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['until']) %>
621 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['until']) %>
622 <% c.comments = c.comment_versions[c.at_version_num]['until'] %>
622 <% c.comments = c.comment_versions[c.at_version_num]['until'] %>
623 % endif
623 % endif
624
624
625 <%
625 <%
626 pr_menu_data = {
626 pr_menu_data = {
627 'outdated_comm_count_ver': outdated_comm_count_ver,
627 'outdated_comm_count_ver': outdated_comm_count_ver,
628 'pull_request': c.pull_request
628 'pull_request': c.pull_request
629 }
629 }
630 %>
630 %>
631
631
632 ${cbdiffs.render_diffset_menu(c.diffset, range_diff_on=c.range_diff_on, pull_request_menu=pr_menu_data)}
632 ${cbdiffs.render_diffset_menu(c.diffset, range_diff_on=c.range_diff_on, pull_request_menu=pr_menu_data)}
633
633
634 % if c.range_diff_on:
634 % if c.range_diff_on:
635 % for commit in c.commit_ranges:
635 % for commit in c.commit_ranges:
636 ${cbdiffs.render_diffset(
636 ${cbdiffs.render_diffset(
637 c.changes[commit.raw_id],
637 c.changes[commit.raw_id],
638 commit=commit, use_comments=True,
638 commit=commit, use_comments=True,
639 collapse_when_files_over=5,
639 collapse_when_files_over=5,
640 disable_new_comments=True,
640 disable_new_comments=True,
641 deleted_files_comments=c.deleted_files_comments,
641 deleted_files_comments=c.deleted_files_comments,
642 inline_comments=c.inline_comments,
642 inline_comments=c.inline_comments,
643 pull_request_menu=pr_menu_data, show_todos=False)}
643 pull_request_menu=pr_menu_data, show_todos=False)}
644 % endfor
644 % endfor
645 % else:
645 % else:
646 ${cbdiffs.render_diffset(
646 ${cbdiffs.render_diffset(
647 c.diffset, use_comments=True,
647 c.diffset, use_comments=True,
648 collapse_when_files_over=30,
648 collapse_when_files_over=30,
649 disable_new_comments=not c.allowed_to_comment,
649 disable_new_comments=not c.allowed_to_comment,
650 deleted_files_comments=c.deleted_files_comments,
650 deleted_files_comments=c.deleted_files_comments,
651 inline_comments=c.inline_comments,
651 inline_comments=c.inline_comments,
652 pull_request_menu=pr_menu_data, show_todos=False)}
652 pull_request_menu=pr_menu_data, show_todos=False)}
653 % endif
653 % endif
654
654
655 </div>
655 </div>
656 % else:
656 % else:
657 ## skipping commits we need to clear the view for missing commits
657 ## skipping commits we need to clear the view for missing commits
658 <div style="clear:both;"></div>
658 <div style="clear:both;"></div>
659 % endif
659 % endif
660
660
661 </div>
661 </div>
662 </div>
662 </div>
663
663
664 ## template for inline comment form
664 ## template for inline comment form
665 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
665 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
666
666
667 ## comments heading with count
667 ## comments heading with count
668 <div class="comments-heading">
668 <div class="comments-heading">
669 <i class="icon-comment"></i>
669 <i class="icon-comment"></i>
670 ${_('Comments')} ${len(c.comments)}
670 ${_('Comments')} ${len(c.comments)}
671 </div>
671 </div>
672
672
673 ## render general comments
673 ## render general comments
674 <div id="comment-tr-show">
674 <div id="comment-tr-show">
675 % if general_outdated_comm_count_ver:
675 % if general_outdated_comm_count_ver:
676 <div class="info-box">
676 <div class="info-box">
677 % if general_outdated_comm_count_ver == 1:
677 % if general_outdated_comm_count_ver == 1:
678 ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)},
678 ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)},
679 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a>
679 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a>
680 % else:
680 % else:
681 ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)},
681 ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)},
682 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a>
682 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a>
683 % endif
683 % endif
684 </div>
684 </div>
685 % endif
685 % endif
686 </div>
686 </div>
687
687
688 ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)}
688 ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)}
689
689
690 % if not c.pull_request.is_closed():
690 % if not c.pull_request.is_closed():
691 ## main comment form and it status
691 ## main comment form and it status
692 ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name,
692 ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name,
693 pull_request_id=c.pull_request.pull_request_id),
693 pull_request_id=c.pull_request.pull_request_id),
694 c.pull_request_review_status,
694 c.pull_request_review_status,
695 is_pull_request=True, change_status=c.allowed_to_change_status)}
695 is_pull_request=True, change_status=c.allowed_to_change_status)}
696
696
697 ## merge status, and merge action
697 ## merge status, and merge action
698 <div class="pull-request-merge">
698 <div class="pull-request-merge">
699 <%include file="/pullrequests/pullrequest_merge_checks.mako"/>
699 <%include file="/pullrequests/pullrequest_merge_checks.mako"/>
700 </div>
700 </div>
701
701
702 %endif
702 %endif
703
703
704 % endif
704 % endif
705 </div>
705 </div>
706
706
707 <script type="text/javascript">
707 <script type="text/javascript">
708
708
709 versionController = new VersionController();
709 versionController = new VersionController();
710 versionController.init();
710 versionController.init();
711
711
712 reviewersController = new ReviewersController();
712 reviewersController = new ReviewersController();
713 commitsController = new CommitsController();
713 commitsController = new CommitsController();
714
714
715 updateController = new UpdatePrController();
715 updateController = new UpdatePrController();
716
716
717 $(function () {
717 $(function () {
718
718
719 // custom code mirror
719 // custom code mirror
720 var codeMirrorInstance = $('#pr-description-input').get(0).MarkupForm.cm;
720 var codeMirrorInstance = $('#pr-description-input').get(0).MarkupForm.cm;
721
721
722 var PRDetails = {
722 var PRDetails = {
723 editButton: $('#open_edit_pullrequest'),
723 editButton: $('#open_edit_pullrequest'),
724 closeButton: $('#close_edit_pullrequest'),
724 closeButton: $('#close_edit_pullrequest'),
725 deleteButton: $('#delete_pullrequest'),
725 deleteButton: $('#delete_pullrequest'),
726 viewFields: $('#pr-desc, #pr-title'),
726 viewFields: $('#pr-desc, #pr-title'),
727 editFields: $('#pr-desc-edit, #pr-title-edit, .pr-save'),
727 editFields: $('#pr-desc-edit, #pr-title-edit, .pr-save'),
728
728
729 init: function () {
729 init: function () {
730 var that = this;
730 var that = this;
731 this.editButton.on('click', function (e) {
731 this.editButton.on('click', function (e) {
732 that.edit();
732 that.edit();
733 });
733 });
734 this.closeButton.on('click', function (e) {
734 this.closeButton.on('click', function (e) {
735 that.view();
735 that.view();
736 });
736 });
737 },
737 },
738
738
739 edit: function (event) {
739 edit: function (event) {
740 this.viewFields.hide();
740 this.viewFields.hide();
741 this.editButton.hide();
741 this.editButton.hide();
742 this.deleteButton.hide();
742 this.deleteButton.hide();
743 this.closeButton.show();
743 this.closeButton.show();
744 this.editFields.show();
744 this.editFields.show();
745 codeMirrorInstance.refresh();
745 codeMirrorInstance.refresh();
746 },
746 },
747
747
748 view: function (event) {
748 view: function (event) {
749 this.editButton.show();
749 this.editButton.show();
750 this.deleteButton.show();
750 this.deleteButton.show();
751 this.editFields.hide();
751 this.editFields.hide();
752 this.closeButton.hide();
752 this.closeButton.hide();
753 this.viewFields.show();
753 this.viewFields.show();
754 }
754 }
755 };
755 };
756
756
757 var ReviewersPanel = {
757 var ReviewersPanel = {
758 editButton: $('#open_edit_reviewers'),
758 editButton: $('#open_edit_reviewers'),
759 closeButton: $('#close_edit_reviewers'),
759 closeButton: $('#close_edit_reviewers'),
760 addButton: $('#add_reviewer'),
760 addButton: $('#add_reviewer'),
761 removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'),
761 removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'),
762
762
763 init: function () {
763 init: function () {
764 var self = this;
764 var self = this;
765 this.editButton.on('click', function (e) {
765 this.editButton.on('click', function (e) {
766 self.edit();
766 self.edit();
767 });
767 });
768 this.closeButton.on('click', function (e) {
768 this.closeButton.on('click', function (e) {
769 self.close();
769 self.close();
770 });
770 });
771 },
771 },
772
772
773 edit: function (event) {
773 edit: function (event) {
774 this.editButton.hide();
774 this.editButton.hide();
775 this.closeButton.show();
775 this.closeButton.show();
776 this.addButton.show();
776 this.addButton.show();
777 this.removeButtons.css('visibility', 'visible');
777 this.removeButtons.css('visibility', 'visible');
778 // review rules
778 // review rules
779 reviewersController.loadReviewRules(
779 reviewersController.loadReviewRules(
780 ${c.pull_request.reviewer_data_json | n});
780 ${c.pull_request.reviewer_data_json | n});
781 },
781 },
782
782
783 close: function (event) {
783 close: function (event) {
784 this.editButton.show();
784 this.editButton.show();
785 this.closeButton.hide();
785 this.closeButton.hide();
786 this.addButton.hide();
786 this.addButton.hide();
787 this.removeButtons.css('visibility', 'hidden');
787 this.removeButtons.css('visibility', 'hidden');
788 // hide review rules
788 // hide review rules
789 reviewersController.hideReviewRules()
789 reviewersController.hideReviewRules()
790 }
790 }
791 };
791 };
792
792
793 PRDetails.init();
793 PRDetails.init();
794 ReviewersPanel.init();
794 ReviewersPanel.init();
795
795
796 showOutdated = function (self) {
796 showOutdated = function (self) {
797 $('.comment-inline.comment-outdated').show();
797 $('.comment-inline.comment-outdated').show();
798 $('.filediff-outdated').show();
798 $('.filediff-outdated').show();
799 $('.showOutdatedComments').hide();
799 $('.showOutdatedComments').hide();
800 $('.hideOutdatedComments').show();
800 $('.hideOutdatedComments').show();
801 };
801 };
802
802
803 hideOutdated = function (self) {
803 hideOutdated = function (self) {
804 $('.comment-inline.comment-outdated').hide();
804 $('.comment-inline.comment-outdated').hide();
805 $('.filediff-outdated').hide();
805 $('.filediff-outdated').hide();
806 $('.hideOutdatedComments').hide();
806 $('.hideOutdatedComments').hide();
807 $('.showOutdatedComments').show();
807 $('.showOutdatedComments').show();
808 };
808 };
809
809
810 refreshMergeChecks = function () {
810 refreshMergeChecks = function () {
811 var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}";
811 var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}";
812 $('.pull-request-merge').css('opacity', 0.3);
812 $('.pull-request-merge').css('opacity', 0.3);
813 $('.action-buttons-extra').css('opacity', 0.3);
813 $('.action-buttons-extra').css('opacity', 0.3);
814
814
815 $('.pull-request-merge').load(
815 $('.pull-request-merge').load(
816 loadUrl, function () {
816 loadUrl, function () {
817 $('.pull-request-merge').css('opacity', 1);
817 $('.pull-request-merge').css('opacity', 1);
818
818
819 $('.action-buttons-extra').css('opacity', 1);
819 $('.action-buttons-extra').css('opacity', 1);
820 }
820 }
821 );
821 );
822 };
822 };
823
823
824 closePullRequest = function (status) {
824 closePullRequest = function (status) {
825 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
825 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
826 return false;
826 return false;
827 }
827 }
828 // inject closing flag
828 // inject closing flag
829 $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">');
829 $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">');
830 $(generalCommentForm.statusChange).select2("val", status).trigger('change');
830 $(generalCommentForm.statusChange).select2("val", status).trigger('change');
831 $(generalCommentForm.submitForm).submit();
831 $(generalCommentForm.submitForm).submit();
832 };
832 };
833
833
834 $('#show-outdated-comments').on('click', function (e) {
834 $('#show-outdated-comments').on('click', function (e) {
835 var button = $(this);
835 var button = $(this);
836 var outdated = $('.comment-outdated');
836 var outdated = $('.comment-outdated');
837
837
838 if (button.html() === "(Show)") {
838 if (button.html() === "(Show)") {
839 button.html("(Hide)");
839 button.html("(Hide)");
840 outdated.show();
840 outdated.show();
841 } else {
841 } else {
842 button.html("(Show)");
842 button.html("(Show)");
843 outdated.hide();
843 outdated.hide();
844 }
844 }
845 });
845 });
846
846
847 $('.show-inline-comments').on('change', function (e) {
847 $('.show-inline-comments').on('change', function (e) {
848 var show = 'none';
848 var show = 'none';
849 var target = e.currentTarget;
849 var target = e.currentTarget;
850 if (target.checked) {
850 if (target.checked) {
851 show = ''
851 show = ''
852 }
852 }
853 var boxid = $(target).attr('id_for');
853 var boxid = $(target).attr('id_for');
854 var comments = $('#{0} .inline-comments'.format(boxid));
854 var comments = $('#{0} .inline-comments'.format(boxid));
855 var fn_display = function (idx) {
855 var fn_display = function (idx) {
856 $(this).css('display', show);
856 $(this).css('display', show);
857 };
857 };
858 $(comments).each(fn_display);
858 $(comments).each(fn_display);
859 var btns = $('#{0} .inline-comments-button'.format(boxid));
859 var btns = $('#{0} .inline-comments-button'.format(boxid));
860 $(btns).each(fn_display);
860 $(btns).each(fn_display);
861 });
861 });
862
862
863 $('#merge_pull_request_form').submit(function () {
863 $('#merge_pull_request_form').submit(function () {
864 if (!$('#merge_pull_request').attr('disabled')) {
864 if (!$('#merge_pull_request').attr('disabled')) {
865 $('#merge_pull_request').attr('disabled', 'disabled');
865 $('#merge_pull_request').attr('disabled', 'disabled');
866 }
866 }
867 return true;
867 return true;
868 });
868 });
869
869
870 $('#edit_pull_request').on('click', function (e) {
870 $('#edit_pull_request').on('click', function (e) {
871 var title = $('#pr-title-input').val();
871 var title = $('#pr-title-input').val();
872 var description = codeMirrorInstance.getValue();
872 var description = codeMirrorInstance.getValue();
873 var renderer = $('#pr-renderer-input').val();
873 var renderer = $('#pr-renderer-input').val();
874 editPullRequest(
874 editPullRequest(
875 "${c.repo_name}", "${c.pull_request.pull_request_id}",
875 "${c.repo_name}", "${c.pull_request.pull_request_id}",
876 title, description, renderer);
876 title, description, renderer);
877 });
877 });
878
878
879 $('#update_pull_request').on('click', function (e) {
879 $('#update_pull_request').on('click', function (e) {
880 $(this).attr('disabled', 'disabled');
880 $(this).attr('disabled', 'disabled');
881 $(this).addClass('disabled');
881 $(this).addClass('disabled');
882 $(this).html(_gettext('Saving...'));
882 $(this).html(_gettext('Saving...'));
883 reviewersController.updateReviewers(
883 reviewersController.updateReviewers(
884 "${c.repo_name}", "${c.pull_request.pull_request_id}");
884 "${c.repo_name}", "${c.pull_request.pull_request_id}");
885 });
885 });
886
886
887
887
888 // fixing issue with caches on firefox
888 // fixing issue with caches on firefox
889 $('#update_commits').removeAttr("disabled");
889 $('#update_commits').removeAttr("disabled");
890
890
891 $('.show-inline-comments').on('click', function (e) {
891 $('.show-inline-comments').on('click', function (e) {
892 var boxid = $(this).attr('data-comment-id');
892 var boxid = $(this).attr('data-comment-id');
893 var button = $(this);
893 var button = $(this);
894
894
895 if (button.hasClass("comments-visible")) {
895 if (button.hasClass("comments-visible")) {
896 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
896 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
897 $(this).hide();
897 $(this).hide();
898 });
898 });
899 button.removeClass("comments-visible");
899 button.removeClass("comments-visible");
900 } else {
900 } else {
901 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
901 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
902 $(this).show();
902 $(this).show();
903 });
903 });
904 button.addClass("comments-visible");
904 button.addClass("comments-visible");
905 }
905 }
906 });
906 });
907
907
908 // register submit callback on commentForm form to track TODOs
908 // register submit callback on commentForm form to track TODOs
909 window.commentFormGlobalSubmitSuccessCallback = function () {
909 window.commentFormGlobalSubmitSuccessCallback = function () {
910 refreshMergeChecks();
910 refreshMergeChecks();
911 };
911 };
912
912
913 ReviewerAutoComplete('#user');
913 ReviewerAutoComplete('#user');
914
914
915 })
915 })
916
916
917 </script>
917 </script>
918
918
919 </div>
919 </div>
920
920
921 </%def>
921 </%def>
@@ -1,746 +1,739 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2020 RhodeCode GmbH
3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 """
22 """
23 Package for testing various lib/helper functions in rhodecode
23 Package for testing various lib/helper functions in rhodecode
24 """
24 """
25
25
26 import datetime
26 import datetime
27 import string
27 import string
28 import mock
28 import mock
29 import pytest
29 import pytest
30
30
31 from rhodecode.tests import no_newline_id_generator
31 from rhodecode.tests import no_newline_id_generator
32 from rhodecode.tests.utils import run_test_concurrently
32 from rhodecode.tests.utils import run_test_concurrently
33
33
34 from rhodecode.lib import rc_cache
34 from rhodecode.lib import rc_cache
35 from rhodecode.lib.helpers import InitialsGravatar
35 from rhodecode.lib.helpers import InitialsGravatar
36 from rhodecode.lib.utils2 import AttributeDict
36 from rhodecode.lib.utils2 import AttributeDict
37
37
38 from rhodecode.model.db import Repository, CacheKey
38 from rhodecode.model.db import Repository, CacheKey
39
39
40
40
41 def _urls_for_proto(proto):
41 TEST_URLS = [
42 return [
42 ('127.0.0.1', '127.0.0.1'),
43 ('%s://127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
43 ('marcink@127.0.0.1', '127.0.0.1'),
44 '%s://127.0.0.1' % proto),
44 ('marcink:pass@127.0.0.1', '127.0.0.1'),
45 ('%s://marcink@127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
45 ('marcink@domain.name:pass@127.0.0.1', '127.0.0.1'),
46 '%s://127.0.0.1' % proto),
46
47 ('%s://marcink:pass@127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
47 ('127.0.0.1:8080', '127.0.0.1:8080'),
48 '%s://127.0.0.1' % proto),
48 ('marcink@127.0.0.1:8080', '127.0.0.1:8080'),
49 ('%s://127.0.0.1:8080' % proto, ['%s://' % proto, '127.0.0.1', '8080'],
49 ('marcink:pass@127.0.0.1:8080', '127.0.0.1:8080'),
50 '%s://127.0.0.1:8080' % proto),
50 ('marcink@domain.name:pass@127.0.0.1:8080', '127.0.0.1:8080'),
51 ('%s://domain.org' % proto, ['%s://' % proto, 'domain.org'],
51
52 '%s://domain.org' % proto),
52 ('domain.org', 'domain.org'),
53 ('%s://user:pass@domain.org:8080' % proto,
53 ('user:pass@domain.org:8080', 'domain.org:8080'),
54 ['%s://' % proto, 'domain.org', '8080'],
54 ('user@domain.org:pass@domain.org:8080', 'domain.org:8080'),
55 '%s://domain.org:8080' % proto),
56 ]
55 ]
57
56
58 TEST_URLS = _urls_for_proto('http') + _urls_for_proto('https')
59
57
60
58 @pytest.mark.parametrize("protocol", ['http://', 'https://'])
61 @pytest.mark.parametrize("test_url, expected, expected_creds", TEST_URLS)
59 @pytest.mark.parametrize("test_url, expected", TEST_URLS)
62 def test_uri_filter(test_url, expected, expected_creds):
60 def test_credentials_filter(protocol, test_url, expected):
63 from rhodecode.lib.utils2 import uri_filter
64 assert uri_filter(test_url) == expected
65
66
67 @pytest.mark.parametrize("test_url, expected, expected_creds", TEST_URLS)
68 def test_credentials_filter(test_url, expected, expected_creds):
69 from rhodecode.lib.utils2 import credentials_filter
61 from rhodecode.lib.utils2 import credentials_filter
70 assert credentials_filter(test_url) == expected_creds
62 test_url = protocol + test_url
63 assert credentials_filter(test_url) == protocol + expected
71
64
72
65
73 @pytest.mark.parametrize("str_bool, expected", [
66 @pytest.mark.parametrize("str_bool, expected", [
74 ('t', True),
67 ('t', True),
75 ('true', True),
68 ('true', True),
76 ('y', True),
69 ('y', True),
77 ('yes', True),
70 ('yes', True),
78 ('on', True),
71 ('on', True),
79 ('1', True),
72 ('1', True),
80 ('Y', True),
73 ('Y', True),
81 ('yeS', True),
74 ('yeS', True),
82 ('Y', True),
75 ('Y', True),
83 ('TRUE', True),
76 ('TRUE', True),
84 ('T', True),
77 ('T', True),
85 ('False', False),
78 ('False', False),
86 ('F', False),
79 ('F', False),
87 ('FALSE', False),
80 ('FALSE', False),
88 ('0', False),
81 ('0', False),
89 ('-1', False),
82 ('-1', False),
90 ('', False)
83 ('', False)
91 ])
84 ])
92 def test_str2bool(str_bool, expected):
85 def test_str2bool(str_bool, expected):
93 from rhodecode.lib.utils2 import str2bool
86 from rhodecode.lib.utils2 import str2bool
94 assert str2bool(str_bool) == expected
87 assert str2bool(str_bool) == expected
95
88
96
89
97 @pytest.mark.parametrize("text, expected", reduce(lambda a1,a2:a1+a2, [
90 @pytest.mark.parametrize("text, expected", reduce(lambda a1,a2:a1+a2, [
98 [
91 [
99 (pref+"", []),
92 (pref+"", []),
100 (pref+"Hi there @marcink", ['marcink']),
93 (pref+"Hi there @marcink", ['marcink']),
101 (pref+"Hi there @marcink and @bob", ['bob', 'marcink']),
94 (pref+"Hi there @marcink and @bob", ['bob', 'marcink']),
102 (pref+"Hi there @marcink\n", ['marcink']),
95 (pref+"Hi there @marcink\n", ['marcink']),
103 (pref+"Hi there @marcink and @bob\n", ['bob', 'marcink']),
96 (pref+"Hi there @marcink and @bob\n", ['bob', 'marcink']),
104 (pref+"Hi there marcin@rhodecode.com", []),
97 (pref+"Hi there marcin@rhodecode.com", []),
105 (pref+"Hi there @john.malcovic and @bob\n", ['bob', 'john.malcovic']),
98 (pref+"Hi there @john.malcovic and @bob\n", ['bob', 'john.malcovic']),
106 (pref+"This needs to be reviewed: (@marcink,@john)", ["john", "marcink"]),
99 (pref+"This needs to be reviewed: (@marcink,@john)", ["john", "marcink"]),
107 (pref+"This needs to be reviewed: (@marcink, @john)", ["john", "marcink"]),
100 (pref+"This needs to be reviewed: (@marcink, @john)", ["john", "marcink"]),
108 (pref+"This needs to be reviewed: [@marcink,@john]", ["john", "marcink"]),
101 (pref+"This needs to be reviewed: [@marcink,@john]", ["john", "marcink"]),
109 (pref+"This needs to be reviewed: (@marcink @john)", ["john", "marcink"]),
102 (pref+"This needs to be reviewed: (@marcink @john)", ["john", "marcink"]),
110 (pref+"@john @mary, please review", ["john", "mary"]),
103 (pref+"@john @mary, please review", ["john", "mary"]),
111 (pref+"@john,@mary, please review", ["john", "mary"]),
104 (pref+"@john,@mary, please review", ["john", "mary"]),
112 (pref+"Hej @123, @22john,@mary, please review", ['123', '22john', 'mary']),
105 (pref+"Hej @123, @22john,@mary, please review", ['123', '22john', 'mary']),
113 (pref+"@first hi there @marcink here's my email marcin@email.com "
106 (pref+"@first hi there @marcink here's my email marcin@email.com "
114 "@lukaszb check @one_more22 it pls @ ttwelve @D[] @one@two@three ", ['first', 'lukaszb', 'marcink', 'one', 'one_more22']),
107 "@lukaszb check @one_more22 it pls @ ttwelve @D[] @one@two@three ", ['first', 'lukaszb', 'marcink', 'one', 'one_more22']),
115 (pref+"@MARCIN @maRCiN @2one_more22 @john please see this http://org.pl", ['2one_more22', 'john', 'MARCIN', 'maRCiN']),
108 (pref+"@MARCIN @maRCiN @2one_more22 @john please see this http://org.pl", ['2one_more22', 'john', 'MARCIN', 'maRCiN']),
116 (pref+"@marian.user just do it @marco-polo and next extract @marco_polo", ['marco-polo', 'marco_polo', 'marian.user']),
109 (pref+"@marian.user just do it @marco-polo and next extract @marco_polo", ['marco-polo', 'marco_polo', 'marian.user']),
117 (pref+"user.dot hej ! not-needed maril@domain.org", []),
110 (pref+"user.dot hej ! not-needed maril@domain.org", []),
118 (pref+"\n@marcin", ['marcin']),
111 (pref+"\n@marcin", ['marcin']),
119 ]
112 ]
120 for pref in ['', '\n', 'hi !', '\t', '\n\n']]), ids=no_newline_id_generator)
113 for pref in ['', '\n', 'hi !', '\t', '\n\n']]), ids=no_newline_id_generator)
121 def test_mention_extractor(text, expected):
114 def test_mention_extractor(text, expected):
122 from rhodecode.lib.utils2 import extract_mentioned_users
115 from rhodecode.lib.utils2 import extract_mentioned_users
123 got = extract_mentioned_users(text)
116 got = extract_mentioned_users(text)
124 assert sorted(got, key=lambda x: x.lower()) == got
117 assert sorted(got, key=lambda x: x.lower()) == got
125 assert set(expected) == set(got)
118 assert set(expected) == set(got)
126
119
127 @pytest.mark.parametrize("age_args, expected, kw", [
120 @pytest.mark.parametrize("age_args, expected, kw", [
128 ({}, u'just now', {}),
121 ({}, u'just now', {}),
129 ({'seconds': -1}, u'1 second ago', {}),
122 ({'seconds': -1}, u'1 second ago', {}),
130 ({'seconds': -60 * 2}, u'2 minutes ago', {}),
123 ({'seconds': -60 * 2}, u'2 minutes ago', {}),
131 ({'hours': -1}, u'1 hour ago', {}),
124 ({'hours': -1}, u'1 hour ago', {}),
132 ({'hours': -24}, u'1 day ago', {}),
125 ({'hours': -24}, u'1 day ago', {}),
133 ({'hours': -24 * 5}, u'5 days ago', {}),
126 ({'hours': -24 * 5}, u'5 days ago', {}),
134 ({'months': -1}, u'1 month ago', {}),
127 ({'months': -1}, u'1 month ago', {}),
135 ({'months': -1, 'days': -2}, u'1 month and 2 days ago', {}),
128 ({'months': -1, 'days': -2}, u'1 month and 2 days ago', {}),
136 ({'years': -1, 'months': -1}, u'1 year and 1 month ago', {}),
129 ({'years': -1, 'months': -1}, u'1 year and 1 month ago', {}),
137 ({}, u'just now', {'short_format': True}),
130 ({}, u'just now', {'short_format': True}),
138 ({'seconds': -1}, u'1sec ago', {'short_format': True}),
131 ({'seconds': -1}, u'1sec ago', {'short_format': True}),
139 ({'seconds': -60 * 2}, u'2min ago', {'short_format': True}),
132 ({'seconds': -60 * 2}, u'2min ago', {'short_format': True}),
140 ({'hours': -1}, u'1h ago', {'short_format': True}),
133 ({'hours': -1}, u'1h ago', {'short_format': True}),
141 ({'hours': -24}, u'1d ago', {'short_format': True}),
134 ({'hours': -24}, u'1d ago', {'short_format': True}),
142 ({'hours': -24 * 5}, u'5d ago', {'short_format': True}),
135 ({'hours': -24 * 5}, u'5d ago', {'short_format': True}),
143 ({'months': -1}, u'1m ago', {'short_format': True}),
136 ({'months': -1}, u'1m ago', {'short_format': True}),
144 ({'months': -1, 'days': -2}, u'1m, 2d ago', {'short_format': True}),
137 ({'months': -1, 'days': -2}, u'1m, 2d ago', {'short_format': True}),
145 ({'years': -1, 'months': -1}, u'1y, 1m ago', {'short_format': True}),
138 ({'years': -1, 'months': -1}, u'1y, 1m ago', {'short_format': True}),
146 ])
139 ])
147 def test_age(age_args, expected, kw, baseapp):
140 def test_age(age_args, expected, kw, baseapp):
148 from rhodecode.lib.utils2 import age
141 from rhodecode.lib.utils2 import age
149 from dateutil import relativedelta
142 from dateutil import relativedelta
150 n = datetime.datetime(year=2012, month=5, day=17)
143 n = datetime.datetime(year=2012, month=5, day=17)
151 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
144 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
152
145
153 def translate(elem):
146 def translate(elem):
154 return elem.interpolate()
147 return elem.interpolate()
155
148
156 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
149 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
157
150
158
151
159 @pytest.mark.parametrize("age_args, expected, kw", [
152 @pytest.mark.parametrize("age_args, expected, kw", [
160 ({}, u'just now', {}),
153 ({}, u'just now', {}),
161 ({'seconds': 1}, u'in 1 second', {}),
154 ({'seconds': 1}, u'in 1 second', {}),
162 ({'seconds': 60 * 2}, u'in 2 minutes', {}),
155 ({'seconds': 60 * 2}, u'in 2 minutes', {}),
163 ({'hours': 1}, u'in 1 hour', {}),
156 ({'hours': 1}, u'in 1 hour', {}),
164 ({'hours': 24}, u'in 1 day', {}),
157 ({'hours': 24}, u'in 1 day', {}),
165 ({'hours': 24 * 5}, u'in 5 days', {}),
158 ({'hours': 24 * 5}, u'in 5 days', {}),
166 ({'months': 1}, u'in 1 month', {}),
159 ({'months': 1}, u'in 1 month', {}),
167 ({'months': 1, 'days': 1}, u'in 1 month and 1 day', {}),
160 ({'months': 1, 'days': 1}, u'in 1 month and 1 day', {}),
168 ({'years': 1, 'months': 1}, u'in 1 year and 1 month', {}),
161 ({'years': 1, 'months': 1}, u'in 1 year and 1 month', {}),
169 ({}, u'just now', {'short_format': True}),
162 ({}, u'just now', {'short_format': True}),
170 ({'seconds': 1}, u'in 1sec', {'short_format': True}),
163 ({'seconds': 1}, u'in 1sec', {'short_format': True}),
171 ({'seconds': 60 * 2}, u'in 2min', {'short_format': True}),
164 ({'seconds': 60 * 2}, u'in 2min', {'short_format': True}),
172 ({'hours': 1}, u'in 1h', {'short_format': True}),
165 ({'hours': 1}, u'in 1h', {'short_format': True}),
173 ({'hours': 24}, u'in 1d', {'short_format': True}),
166 ({'hours': 24}, u'in 1d', {'short_format': True}),
174 ({'hours': 24 * 5}, u'in 5d', {'short_format': True}),
167 ({'hours': 24 * 5}, u'in 5d', {'short_format': True}),
175 ({'months': 1}, u'in 1m', {'short_format': True}),
168 ({'months': 1}, u'in 1m', {'short_format': True}),
176 ({'months': 1, 'days': 1}, u'in 1m, 1d', {'short_format': True}),
169 ({'months': 1, 'days': 1}, u'in 1m, 1d', {'short_format': True}),
177 ({'years': 1, 'months': 1}, u'in 1y, 1m', {'short_format': True}),
170 ({'years': 1, 'months': 1}, u'in 1y, 1m', {'short_format': True}),
178 ])
171 ])
179 def test_age_in_future(age_args, expected, kw, baseapp):
172 def test_age_in_future(age_args, expected, kw, baseapp):
180 from rhodecode.lib.utils2 import age
173 from rhodecode.lib.utils2 import age
181 from dateutil import relativedelta
174 from dateutil import relativedelta
182 n = datetime.datetime(year=2012, month=5, day=17)
175 n = datetime.datetime(year=2012, month=5, day=17)
183 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
176 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
184
177
185 def translate(elem):
178 def translate(elem):
186 return elem.interpolate()
179 return elem.interpolate()
187
180
188 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
181 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
189
182
190
183
191 @pytest.mark.parametrize("sample, expected_tags", [
184 @pytest.mark.parametrize("sample, expected_tags", [
192 # entry
185 # entry
193 ((
186 ((
194 ""
187 ""
195 ),
188 ),
196 [
189 [
197
190
198 ]),
191 ]),
199 # entry
192 # entry
200 ((
193 ((
201 "hello world [stale]"
194 "hello world [stale]"
202 ),
195 ),
203 [
196 [
204 ('state', '[stale]'),
197 ('state', '[stale]'),
205 ]),
198 ]),
206 # entry
199 # entry
207 ((
200 ((
208 "hello world [v2.0.0] [v1.0.0]"
201 "hello world [v2.0.0] [v1.0.0]"
209 ),
202 ),
210 [
203 [
211 ('generic', '[v2.0.0]'),
204 ('generic', '[v2.0.0]'),
212 ('generic', '[v1.0.0]'),
205 ('generic', '[v1.0.0]'),
213 ]),
206 ]),
214 # entry
207 # entry
215 ((
208 ((
216 "he[ll]o wo[rl]d"
209 "he[ll]o wo[rl]d"
217 ),
210 ),
218 [
211 [
219 ('label', '[ll]'),
212 ('label', '[ll]'),
220 ('label', '[rl]'),
213 ('label', '[rl]'),
221 ]),
214 ]),
222 # entry
215 # entry
223 ((
216 ((
224 "hello world [stale]\n[featured]\n[stale] [dead] [dev]"
217 "hello world [stale]\n[featured]\n[stale] [dead] [dev]"
225 ),
218 ),
226 [
219 [
227 ('state', '[stale]'),
220 ('state', '[stale]'),
228 ('state', '[featured]'),
221 ('state', '[featured]'),
229 ('state', '[stale]'),
222 ('state', '[stale]'),
230 ('state', '[dead]'),
223 ('state', '[dead]'),
231 ('state', '[dev]'),
224 ('state', '[dev]'),
232 ]),
225 ]),
233 # entry
226 # entry
234 ((
227 ((
235 "hello world \n\n [stale] \n [url =&gt; [name](http://rc.com)]"
228 "hello world \n\n [stale] \n [url =&gt; [name](http://rc.com)]"
236 ),
229 ),
237 [
230 [
238 ('state', '[stale]'),
231 ('state', '[stale]'),
239 ('url', '[url =&gt; [name](http://rc.com)]'),
232 ('url', '[url =&gt; [name](http://rc.com)]'),
240 ]),
233 ]),
241 # entry
234 # entry
242 ((
235 ((
243 "[url =&gt; [linkNameJS](javascript:alert(document.domain))]\n"
236 "[url =&gt; [linkNameJS](javascript:alert(document.domain))]\n"
244 "[url =&gt; [linkNameHTTP](http://rhodecode.com)]\n"
237 "[url =&gt; [linkNameHTTP](http://rhodecode.com)]\n"
245 "[url =&gt; [linkNameHTTPS](https://rhodecode.com)]\n"
238 "[url =&gt; [linkNameHTTPS](https://rhodecode.com)]\n"
246 "[url =&gt; [linkNamePath](/repo_group)]\n"
239 "[url =&gt; [linkNamePath](/repo_group)]\n"
247 ),
240 ),
248 [
241 [
249 ('generic', '[linkNameJS]'),
242 ('generic', '[linkNameJS]'),
250 ('url', '[url =&gt; [linkNameHTTP](http://rhodecode.com)]'),
243 ('url', '[url =&gt; [linkNameHTTP](http://rhodecode.com)]'),
251 ('url', '[url =&gt; [linkNameHTTPS](https://rhodecode.com)]'),
244 ('url', '[url =&gt; [linkNameHTTPS](https://rhodecode.com)]'),
252 ('url', '[url =&gt; [linkNamePath](/repo_group)]'),
245 ('url', '[url =&gt; [linkNamePath](/repo_group)]'),
253 ]),
246 ]),
254 # entry
247 # entry
255 ((
248 ((
256 "hello pta[tag] gog [[]] [[] sda ero[or]d [me =&gt;>< sa]"
249 "hello pta[tag] gog [[]] [[] sda ero[or]d [me =&gt;>< sa]"
257 "[requires] [stale] [see<>=&gt;] [see =&gt; http://url.com]"
250 "[requires] [stale] [see<>=&gt;] [see =&gt; http://url.com]"
258 "[requires =&gt; url] [lang =&gt; python] [just a tag] "
251 "[requires =&gt; url] [lang =&gt; python] [just a tag] "
259 "<html_tag first='abc' attr=\"my.url?attr=&another=\"></html_tag>"
252 "<html_tag first='abc' attr=\"my.url?attr=&another=\"></html_tag>"
260 "[,d] [ =&gt; ULR ] [obsolete] [desc]]"
253 "[,d] [ =&gt; ULR ] [obsolete] [desc]]"
261 ),
254 ),
262 [
255 [
263 ('label', '[desc]'),
256 ('label', '[desc]'),
264 ('label', '[obsolete]'),
257 ('label', '[obsolete]'),
265 ('label', '[or]'),
258 ('label', '[or]'),
266 ('label', '[requires]'),
259 ('label', '[requires]'),
267 ('label', '[tag]'),
260 ('label', '[tag]'),
268 ('state', '[stale]'),
261 ('state', '[stale]'),
269 ('lang', '[lang =&gt; python]'),
262 ('lang', '[lang =&gt; python]'),
270 ('ref', '[requires =&gt; url]'),
263 ('ref', '[requires =&gt; url]'),
271 ('see', '[see =&gt; http://url.com]'),
264 ('see', '[see =&gt; http://url.com]'),
272
265
273 ]),
266 ]),
274
267
275 ], ids=no_newline_id_generator)
268 ], ids=no_newline_id_generator)
276 def test_metatag_extraction(sample, expected_tags):
269 def test_metatag_extraction(sample, expected_tags):
277 from rhodecode.lib.helpers import extract_metatags
270 from rhodecode.lib.helpers import extract_metatags
278 tags, value = extract_metatags(sample)
271 tags, value = extract_metatags(sample)
279 assert sorted(tags) == sorted(expected_tags)
272 assert sorted(tags) == sorted(expected_tags)
280
273
281
274
282 @pytest.mark.parametrize("tag_data, expected_html", [
275 @pytest.mark.parametrize("tag_data, expected_html", [
283
276
284 (('state', '[stable]'), '<div class="metatag" tag="state stable">stable</div>'),
277 (('state', '[stable]'), '<div class="metatag" tag="state stable">stable</div>'),
285 (('state', '[stale]'), '<div class="metatag" tag="state stale">stale</div>'),
278 (('state', '[stale]'), '<div class="metatag" tag="state stale">stale</div>'),
286 (('state', '[featured]'), '<div class="metatag" tag="state featured">featured</div>'),
279 (('state', '[featured]'), '<div class="metatag" tag="state featured">featured</div>'),
287 (('state', '[dev]'), '<div class="metatag" tag="state dev">dev</div>'),
280 (('state', '[dev]'), '<div class="metatag" tag="state dev">dev</div>'),
288 (('state', '[dead]'), '<div class="metatag" tag="state dead">dead</div>'),
281 (('state', '[dead]'), '<div class="metatag" tag="state dead">dead</div>'),
289
282
290 (('label', '[personal]'), '<div class="metatag" tag="label">personal</div>'),
283 (('label', '[personal]'), '<div class="metatag" tag="label">personal</div>'),
291 (('generic', '[v2.0.0]'), '<div class="metatag" tag="generic">v2.0.0</div>'),
284 (('generic', '[v2.0.0]'), '<div class="metatag" tag="generic">v2.0.0</div>'),
292
285
293 (('lang', '[lang =&gt; JavaScript]'), '<div class="metatag" tag="lang">JavaScript</div>'),
286 (('lang', '[lang =&gt; JavaScript]'), '<div class="metatag" tag="lang">JavaScript</div>'),
294 (('lang', '[lang =&gt; C++]'), '<div class="metatag" tag="lang">C++</div>'),
287 (('lang', '[lang =&gt; C++]'), '<div class="metatag" tag="lang">C++</div>'),
295 (('lang', '[lang =&gt; C#]'), '<div class="metatag" tag="lang">C#</div>'),
288 (('lang', '[lang =&gt; C#]'), '<div class="metatag" tag="lang">C#</div>'),
296 (('lang', '[lang =&gt; Delphi/Object]'), '<div class="metatag" tag="lang">Delphi/Object</div>'),
289 (('lang', '[lang =&gt; Delphi/Object]'), '<div class="metatag" tag="lang">Delphi/Object</div>'),
297 (('lang', '[lang =&gt; Objective-C]'), '<div class="metatag" tag="lang">Objective-C</div>'),
290 (('lang', '[lang =&gt; Objective-C]'), '<div class="metatag" tag="lang">Objective-C</div>'),
298 (('lang', '[lang =&gt; .NET]'), '<div class="metatag" tag="lang">.NET</div>'),
291 (('lang', '[lang =&gt; .NET]'), '<div class="metatag" tag="lang">.NET</div>'),
299
292
300 (('license', '[license =&gt; BSD 3-clause]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/BSD 3-clause">BSD 3-clause</a></div>'),
293 (('license', '[license =&gt; BSD 3-clause]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/BSD 3-clause">BSD 3-clause</a></div>'),
301 (('license', '[license =&gt; GPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/GPLv3">GPLv3</a></div>'),
294 (('license', '[license =&gt; GPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/GPLv3">GPLv3</a></div>'),
302 (('license', '[license =&gt; MIT]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/MIT">MIT</a></div>'),
295 (('license', '[license =&gt; MIT]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/MIT">MIT</a></div>'),
303 (('license', '[license =&gt; AGPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/AGPLv3">AGPLv3</a></div>'),
296 (('license', '[license =&gt; AGPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/AGPLv3">AGPLv3</a></div>'),
304
297
305 (('ref', '[requires =&gt; RepoName]'), '<div class="metatag" tag="ref requires">requires: <a href="/RepoName">RepoName</a></div>'),
298 (('ref', '[requires =&gt; RepoName]'), '<div class="metatag" tag="ref requires">requires: <a href="/RepoName">RepoName</a></div>'),
306 (('ref', '[recommends =&gt; GroupName]'), '<div class="metatag" tag="ref recommends">recommends: <a href="/GroupName">GroupName</a></div>'),
299 (('ref', '[recommends =&gt; GroupName]'), '<div class="metatag" tag="ref recommends">recommends: <a href="/GroupName">GroupName</a></div>'),
307 (('ref', '[conflicts =&gt; SomeName]'), '<div class="metatag" tag="ref conflicts">conflicts: <a href="/SomeName">SomeName</a></div>'),
300 (('ref', '[conflicts =&gt; SomeName]'), '<div class="metatag" tag="ref conflicts">conflicts: <a href="/SomeName">SomeName</a></div>'),
308 (('ref', '[base =&gt; SomeName]'), '<div class="metatag" tag="ref base">base: <a href="/SomeName">SomeName</a></div>'),
301 (('ref', '[base =&gt; SomeName]'), '<div class="metatag" tag="ref base">base: <a href="/SomeName">SomeName</a></div>'),
309
302
310 (('see', '[see =&gt; http://rhodecode.com]'), '<div class="metatag" tag="see">see: http://rhodecode.com </div>'),
303 (('see', '[see =&gt; http://rhodecode.com]'), '<div class="metatag" tag="see">see: http://rhodecode.com </div>'),
311
304
312 (('url', '[url =&gt; [linkName](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">linkName</a> </div>'),
305 (('url', '[url =&gt; [linkName](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">linkName</a> </div>'),
313 (('url', '[url =&gt; [example link](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">example link</a> </div>'),
306 (('url', '[url =&gt; [example link](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">example link</a> </div>'),
314 (('url', '[url =&gt; [v1.0.0](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">v1.0.0</a> </div>'),
307 (('url', '[url =&gt; [v1.0.0](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">v1.0.0</a> </div>'),
315
308
316 ])
309 ])
317 def test_metatags_stylize(tag_data, expected_html):
310 def test_metatags_stylize(tag_data, expected_html):
318 from rhodecode.lib.helpers import style_metatag
311 from rhodecode.lib.helpers import style_metatag
319 tag_type,value = tag_data
312 tag_type,value = tag_data
320 assert style_metatag(tag_type, value) == expected_html
313 assert style_metatag(tag_type, value) == expected_html
321
314
322
315
323 @pytest.mark.parametrize("tmpl_url, email, expected", [
316 @pytest.mark.parametrize("tmpl_url, email, expected", [
324 ('http://test.com/{email}', 'test@foo.com', 'http://test.com/test@foo.com'),
317 ('http://test.com/{email}', 'test@foo.com', 'http://test.com/test@foo.com'),
325
318
326 ('http://test.com/{md5email}', 'test@foo.com', 'http://test.com/3cb7232fcc48743000cb86d0d5022bd9'),
319 ('http://test.com/{md5email}', 'test@foo.com', 'http://test.com/3cb7232fcc48743000cb86d0d5022bd9'),
327 ('http://test.com/{md5email}', 'testąć@foo.com', 'http://test.com/978debb907a3c55cd741872ab293ef30'),
320 ('http://test.com/{md5email}', 'testąć@foo.com', 'http://test.com/978debb907a3c55cd741872ab293ef30'),
328
321
329 ('http://testX.com/{md5email}?s={size}', 'test@foo.com', 'http://testX.com/3cb7232fcc48743000cb86d0d5022bd9?s=24'),
322 ('http://testX.com/{md5email}?s={size}', 'test@foo.com', 'http://testX.com/3cb7232fcc48743000cb86d0d5022bd9?s=24'),
330 ('http://testX.com/{md5email}?s={size}', 'testąć@foo.com', 'http://testX.com/978debb907a3c55cd741872ab293ef30?s=24'),
323 ('http://testX.com/{md5email}?s={size}', 'testąć@foo.com', 'http://testX.com/978debb907a3c55cd741872ab293ef30?s=24'),
331
324
332 ('{scheme}://{netloc}/{md5email}/{size}', 'test@foo.com', 'https://server.com/3cb7232fcc48743000cb86d0d5022bd9/24'),
325 ('{scheme}://{netloc}/{md5email}/{size}', 'test@foo.com', 'https://server.com/3cb7232fcc48743000cb86d0d5022bd9/24'),
333 ('{scheme}://{netloc}/{md5email}/{size}', 'testąć@foo.com', 'https://server.com/978debb907a3c55cd741872ab293ef30/24'),
326 ('{scheme}://{netloc}/{md5email}/{size}', 'testąć@foo.com', 'https://server.com/978debb907a3c55cd741872ab293ef30/24'),
334
327
335 ('http://test.com/{email}', 'testąć@foo.com', 'http://test.com/testąć@foo.com'),
328 ('http://test.com/{email}', 'testąć@foo.com', 'http://test.com/testąć@foo.com'),
336 ('http://test.com/{email}?size={size}', 'test@foo.com', 'http://test.com/test@foo.com?size=24'),
329 ('http://test.com/{email}?size={size}', 'test@foo.com', 'http://test.com/test@foo.com?size=24'),
337 ('http://test.com/{email}?size={size}', 'testąć@foo.com', 'http://test.com/testąć@foo.com?size=24'),
330 ('http://test.com/{email}?size={size}', 'testąć@foo.com', 'http://test.com/testąć@foo.com?size=24'),
338 ])
331 ])
339 def test_gravatar_url_builder(tmpl_url, email, expected, request_stub):
332 def test_gravatar_url_builder(tmpl_url, email, expected, request_stub):
340 from rhodecode.lib.helpers import gravatar_url
333 from rhodecode.lib.helpers import gravatar_url
341
334
342 def fake_tmpl_context(_url):
335 def fake_tmpl_context(_url):
343 _c = AttributeDict()
336 _c = AttributeDict()
344 _c.visual = AttributeDict()
337 _c.visual = AttributeDict()
345 _c.visual.use_gravatar = True
338 _c.visual.use_gravatar = True
346 _c.visual.gravatar_url = _url
339 _c.visual.gravatar_url = _url
347 return _c
340 return _c
348
341
349 # mock pyramid.threadlocals
342 # mock pyramid.threadlocals
350 def fake_get_current_request():
343 def fake_get_current_request():
351 request_stub.scheme = 'https'
344 request_stub.scheme = 'https'
352 request_stub.host = 'server.com'
345 request_stub.host = 'server.com'
353
346
354 request_stub._call_context = fake_tmpl_context(tmpl_url)
347 request_stub._call_context = fake_tmpl_context(tmpl_url)
355 return request_stub
348 return request_stub
356
349
357 with mock.patch('rhodecode.lib.helpers.get_current_request',
350 with mock.patch('rhodecode.lib.helpers.get_current_request',
358 fake_get_current_request):
351 fake_get_current_request):
359
352
360 grav = gravatar_url(email_address=email, size=24)
353 grav = gravatar_url(email_address=email, size=24)
361 assert grav == expected
354 assert grav == expected
362
355
363
356
364 @pytest.mark.parametrize(
357 @pytest.mark.parametrize(
365 "email, first_name, last_name, expected_initials, expected_color", [
358 "email, first_name, last_name, expected_initials, expected_color", [
366
359
367 ('test@rhodecode.com', '', '', 'TR', '#8a994d'),
360 ('test@rhodecode.com', '', '', 'TR', '#8a994d'),
368 ('marcin.kuzminski@rhodecode.com', '', '', 'MK', '#6559b3'),
361 ('marcin.kuzminski@rhodecode.com', '', '', 'MK', '#6559b3'),
369 # special cases of email
362 # special cases of email
370 ('john.van.dam@rhodecode.com', '', '', 'JD', '#526600'),
363 ('john.van.dam@rhodecode.com', '', '', 'JD', '#526600'),
371 ('Guido.van.Rossum@rhodecode.com', '', '', 'GR', '#990052'),
364 ('Guido.van.Rossum@rhodecode.com', '', '', 'GR', '#990052'),
372 ('Guido.van.Rossum@rhodecode.com', 'Guido', 'Van Rossum', 'GR', '#990052'),
365 ('Guido.van.Rossum@rhodecode.com', 'Guido', 'Van Rossum', 'GR', '#990052'),
373
366
374 ('rhodecode+Guido.van.Rossum@rhodecode.com', '', '', 'RR', '#46598c'),
367 ('rhodecode+Guido.van.Rossum@rhodecode.com', '', '', 'RR', '#46598c'),
375 ('pclouds@rhodecode.com', 'Nguyễn Thái', 'Tgọc Duy', 'ND', '#665200'),
368 ('pclouds@rhodecode.com', 'Nguyễn Thái', 'Tgọc Duy', 'ND', '#665200'),
376
369
377 ('john-brown@foo.com', '', '', 'JF', '#73006b'),
370 ('john-brown@foo.com', '', '', 'JF', '#73006b'),
378 ('admin@rhodecode.com', 'Marcin', 'Kuzminski', 'MK', '#104036'),
371 ('admin@rhodecode.com', 'Marcin', 'Kuzminski', 'MK', '#104036'),
379 # partials
372 # partials
380 ('admin@rhodecode.com', 'Marcin', '', 'MR', '#104036'), # fn+email
373 ('admin@rhodecode.com', 'Marcin', '', 'MR', '#104036'), # fn+email
381 ('admin@rhodecode.com', '', 'Kuzminski', 'AK', '#104036'), # em+ln
374 ('admin@rhodecode.com', '', 'Kuzminski', 'AK', '#104036'), # em+ln
382 # non-ascii
375 # non-ascii
383 ('admin@rhodecode.com', 'Marcin', 'Śuzminski', 'MS', '#104036'),
376 ('admin@rhodecode.com', 'Marcin', 'Śuzminski', 'MS', '#104036'),
384 ('marcin.śuzminski@rhodecode.com', '', '', 'MS', '#73000f'),
377 ('marcin.śuzminski@rhodecode.com', '', '', 'MS', '#73000f'),
385
378
386 # special cases, LDAP can provide those...
379 # special cases, LDAP can provide those...
387 ('admin@', 'Marcin', 'Śuzminski', 'MS', '#aa00ff'),
380 ('admin@', 'Marcin', 'Śuzminski', 'MS', '#aa00ff'),
388 ('marcin.śuzminski', '', '', 'MS', '#402020'),
381 ('marcin.śuzminski', '', '', 'MS', '#402020'),
389 ('null', '', '', 'NL', '#8c4646'),
382 ('null', '', '', 'NL', '#8c4646'),
390 ('some.@abc.com', 'some', '', 'SA', '#664e33')
383 ('some.@abc.com', 'some', '', 'SA', '#664e33')
391 ])
384 ])
392 def test_initials_gravatar_pick_of_initials_and_color_algo(
385 def test_initials_gravatar_pick_of_initials_and_color_algo(
393 email, first_name, last_name, expected_initials, expected_color):
386 email, first_name, last_name, expected_initials, expected_color):
394 instance = InitialsGravatar(email, first_name, last_name)
387 instance = InitialsGravatar(email, first_name, last_name)
395 assert instance.get_initials() == expected_initials
388 assert instance.get_initials() == expected_initials
396 assert instance.str2color(email) == expected_color
389 assert instance.str2color(email) == expected_color
397
390
398
391
399 def test_initials_gravatar_mapping_algo():
392 def test_initials_gravatar_mapping_algo():
400 pos = set()
393 pos = set()
401 instance = InitialsGravatar('', '', '')
394 instance = InitialsGravatar('', '', '')
402 iterations = 0
395 iterations = 0
403
396
404 variations = []
397 variations = []
405 for letter1 in string.ascii_letters:
398 for letter1 in string.ascii_letters:
406 for letter2 in string.ascii_letters[::-1][:10]:
399 for letter2 in string.ascii_letters[::-1][:10]:
407 for letter3 in string.ascii_letters[:10]:
400 for letter3 in string.ascii_letters[:10]:
408 variations.append(
401 variations.append(
409 '%s@rhodecode.com' % (letter1+letter2+letter3))
402 '%s@rhodecode.com' % (letter1+letter2+letter3))
410
403
411 max_variations = 4096
404 max_variations = 4096
412 for email in variations[:max_variations]:
405 for email in variations[:max_variations]:
413 iterations += 1
406 iterations += 1
414 pos.add(
407 pos.add(
415 instance.pick_color_bank_index(email,
408 instance.pick_color_bank_index(email,
416 instance.get_color_bank()))
409 instance.get_color_bank()))
417
410
418 # we assume that we have match all 256 possible positions,
411 # we assume that we have match all 256 possible positions,
419 # in reasonable amount of different email addresses
412 # in reasonable amount of different email addresses
420 assert len(pos) == 256
413 assert len(pos) == 256
421 assert iterations == max_variations
414 assert iterations == max_variations
422
415
423
416
424 @pytest.mark.parametrize("tmpl, repo_name, overrides, prefix, expected", [
417 @pytest.mark.parametrize("tmpl, repo_name, overrides, prefix, expected", [
425 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '', 'http://vps1:8000/group/repo1'),
418 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '', 'http://vps1:8000/group/repo1'),
426 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/group/repo1'),
419 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/group/repo1'),
427 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '/rc', 'http://vps1:8000/rc/group/repo1'),
420 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '/rc', 'http://vps1:8000/rc/group/repo1'),
428 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc', 'http://user@vps1:8000/rc/group/repo1'),
421 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc', 'http://user@vps1:8000/rc/group/repo1'),
429 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc', 'http://marcink@vps1:8000/rc/group/repo1'),
422 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc', 'http://marcink@vps1:8000/rc/group/repo1'),
430 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc/', 'http://user@vps1:8000/rc/group/repo1'),
423 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc/', 'http://user@vps1:8000/rc/group/repo1'),
431 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc/', 'http://marcink@vps1:8000/rc/group/repo1'),
424 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc/', 'http://marcink@vps1:8000/rc/group/repo1'),
432 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {}, '', 'http://vps1:8000/_23'),
425 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {}, '', 'http://vps1:8000/_23'),
433 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
426 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
434 ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
427 ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
435 ('http://{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://vps1:8000/_23'),
428 ('http://{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://vps1:8000/_23'),
436 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://marcink@proxy1.server.com/group/repo1'),
429 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://marcink@proxy1.server.com/group/repo1'),
437 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.server.com/group/repo1'),
430 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.server.com/group/repo1'),
438 ('https://proxy1.server.com/{user}/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://proxy1.server.com/marcink/group/repo1'),
431 ('https://proxy1.server.com/{user}/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://proxy1.server.com/marcink/group/repo1'),
439 ])
432 ])
440 def test_clone_url_generator(tmpl, repo_name, overrides, prefix, expected):
433 def test_clone_url_generator(tmpl, repo_name, overrides, prefix, expected):
441 from rhodecode.lib.utils2 import get_clone_url
434 from rhodecode.lib.utils2 import get_clone_url
442
435
443 class RequestStub(object):
436 class RequestStub(object):
444 def request_url(self, name):
437 def request_url(self, name):
445 return 'http://vps1:8000' + prefix
438 return 'http://vps1:8000' + prefix
446
439
447 def route_url(self, name):
440 def route_url(self, name):
448 return self.request_url(name)
441 return self.request_url(name)
449
442
450 clone_url = get_clone_url(
443 clone_url = get_clone_url(
451 request=RequestStub(),
444 request=RequestStub(),
452 uri_tmpl=tmpl,
445 uri_tmpl=tmpl,
453 repo_name=repo_name, repo_id=23, repo_type='hg', **overrides)
446 repo_name=repo_name, repo_id=23, repo_type='hg', **overrides)
454 assert clone_url == expected
447 assert clone_url == expected
455
448
456
449
457 def test_clone_url_svn_ssh_generator():
450 def test_clone_url_svn_ssh_generator():
458 from rhodecode.lib.utils2 import get_clone_url
451 from rhodecode.lib.utils2 import get_clone_url
459
452
460 class RequestStub(object):
453 class RequestStub(object):
461 def request_url(self, name):
454 def request_url(self, name):
462 return 'http://vps1:8000'
455 return 'http://vps1:8000'
463
456
464 def route_url(self, name):
457 def route_url(self, name):
465 return self.request_url(name)
458 return self.request_url(name)
466
459
467 clone_url = get_clone_url(
460 clone_url = get_clone_url(
468 request=RequestStub(),
461 request=RequestStub(),
469 uri_tmpl=Repository.DEFAULT_CLONE_URI_SSH,
462 uri_tmpl=Repository.DEFAULT_CLONE_URI_SSH,
470 repo_name='svn-test', repo_id=23, repo_type='svn', **{'sys_user': 'rcdev'})
463 repo_name='svn-test', repo_id=23, repo_type='svn', **{'sys_user': 'rcdev'})
471 assert clone_url == 'svn+ssh://rcdev@vps1/svn-test'
464 assert clone_url == 'svn+ssh://rcdev@vps1/svn-test'
472
465
473
466
474 idx = 0
467 idx = 0
475
468
476
469
477 def _quick_url(text, tmpl="""<a class="tooltip-hovercard revision-link" href="%s" data-hovercard-alt="Commit: %s" data-hovercard-url="/some-url">%s</a>""", url_=None, commits=''):
470 def _quick_url(text, tmpl="""<a class="tooltip-hovercard revision-link" href="%s" data-hovercard-alt="Commit: %s" data-hovercard-url="/some-url">%s</a>""", url_=None, commits=''):
478 """
471 """
479 Changes `some text url[foo]` => `some text <a href="/">foo</a>
472 Changes `some text url[foo]` => `some text <a href="/">foo</a>
480
473
481 :param text:
474 :param text:
482 """
475 """
483 import re
476 import re
484 # quickly change expected url[] into a link
477 # quickly change expected url[] into a link
485 url_pat = re.compile(r'(?:url\[)(.+?)(?:\])')
478 url_pat = re.compile(r'(?:url\[)(.+?)(?:\])')
486 commits = commits or []
479 commits = commits or []
487
480
488 global idx
481 global idx
489 idx = 0
482 idx = 0
490
483
491 def url_func(match_obj):
484 def url_func(match_obj):
492 global idx
485 global idx
493 _url = match_obj.groups()[0]
486 _url = match_obj.groups()[0]
494 if commits:
487 if commits:
495 commit = commits[idx]
488 commit = commits[idx]
496 idx += 1
489 idx += 1
497 return tmpl % (url_ or '/some-url', _url, commit)
490 return tmpl % (url_ or '/some-url', _url, commit)
498 else:
491 else:
499 return tmpl % (url_ or '/some-url', _url)
492 return tmpl % (url_ or '/some-url', _url)
500
493
501 return url_pat.sub(url_func, text)
494 return url_pat.sub(url_func, text)
502
495
503
496
504 @pytest.mark.parametrize("sample, expected, commits", [
497 @pytest.mark.parametrize("sample, expected, commits", [
505 (
498 (
506 "",
499 "",
507 "",
500 "",
508 [""]
501 [""]
509 ),
502 ),
510 (
503 (
511 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
504 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
512 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
505 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
513 [""]
506 [""]
514 ),
507 ),
515 (
508 (
516 "from rev 000000000000",
509 "from rev 000000000000",
517 "from rev url[000000000000]",
510 "from rev url[000000000000]",
518 ["000000000000"]
511 ["000000000000"]
519 ),
512 ),
520
513
521 (
514 (
522 "from rev 000000000000123123 also rev 000000000000",
515 "from rev 000000000000123123 also rev 000000000000",
523 "from rev url[000000000000123123] also rev url[000000000000]",
516 "from rev url[000000000000123123] also rev url[000000000000]",
524 ["000000000000123123", "000000000000"]
517 ["000000000000123123", "000000000000"]
525 ),
518 ),
526 (
519 (
527 "this should-000 00",
520 "this should-000 00",
528 "this should-000 00",
521 "this should-000 00",
529 [""]
522 [""]
530 ),
523 ),
531 (
524 (
532 "longtextffffffffff rev 123123123123",
525 "longtextffffffffff rev 123123123123",
533 "longtextffffffffff rev url[123123123123]",
526 "longtextffffffffff rev url[123123123123]",
534 ["123123123123"]
527 ["123123123123"]
535 ),
528 ),
536 (
529 (
537 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
530 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
538 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
531 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
539 ["ffffffffffffffffffffffffffffffffffffffffffffffffff"]
532 ["ffffffffffffffffffffffffffffffffffffffffffffffffff"]
540 ),
533 ),
541 (
534 (
542 "ffffffffffff some text traalaa",
535 "ffffffffffff some text traalaa",
543 "url[ffffffffffff] some text traalaa",
536 "url[ffffffffffff] some text traalaa",
544 ["ffffffffffff"]
537 ["ffffffffffff"]
545 ),
538 ),
546 (
539 (
547 """Multi line
540 """Multi line
548 123123123123
541 123123123123
549 some text 000000000000
542 some text 000000000000
550 sometimes !
543 sometimes !
551 """,
544 """,
552 """Multi line
545 """Multi line
553 url[123123123123]
546 url[123123123123]
554 some text url[000000000000]
547 some text url[000000000000]
555 sometimes !
548 sometimes !
556 """,
549 """,
557 ["123123123123", "000000000000"]
550 ["123123123123", "000000000000"]
558 )
551 )
559 ], ids=no_newline_id_generator)
552 ], ids=no_newline_id_generator)
560 def test_urlify_commits(sample, expected, commits):
553 def test_urlify_commits(sample, expected, commits):
561 def fake_url(self, *args, **kwargs):
554 def fake_url(self, *args, **kwargs):
562 return '/some-url'
555 return '/some-url'
563
556
564 expected = _quick_url(expected, commits=commits)
557 expected = _quick_url(expected, commits=commits)
565
558
566 with mock.patch('rhodecode.lib.helpers.route_url', fake_url):
559 with mock.patch('rhodecode.lib.helpers.route_url', fake_url):
567 from rhodecode.lib.helpers import urlify_commits
560 from rhodecode.lib.helpers import urlify_commits
568 assert urlify_commits(sample, 'repo_name') == expected
561 assert urlify_commits(sample, 'repo_name') == expected
569
562
570
563
571 @pytest.mark.parametrize("sample, expected, url_", [
564 @pytest.mark.parametrize("sample, expected, url_", [
572 ("",
565 ("",
573 "",
566 "",
574 ""),
567 ""),
575 ("https://svn.apache.org/repos",
568 ("https://svn.apache.org/repos",
576 "url[https://svn.apache.org/repos]",
569 "url[https://svn.apache.org/repos]",
577 "https://svn.apache.org/repos"),
570 "https://svn.apache.org/repos"),
578 ("http://svn.apache.org/repos",
571 ("http://svn.apache.org/repos",
579 "url[http://svn.apache.org/repos]",
572 "url[http://svn.apache.org/repos]",
580 "http://svn.apache.org/repos"),
573 "http://svn.apache.org/repos"),
581 ("from rev a also rev http://google.com",
574 ("from rev a also rev http://google.com",
582 "from rev a also rev url[http://google.com]",
575 "from rev a also rev url[http://google.com]",
583 "http://google.com"),
576 "http://google.com"),
584 ("""Multi line
577 ("""Multi line
585 https://foo.bar.com
578 https://foo.bar.com
586 some text lalala""",
579 some text lalala""",
587 """Multi line
580 """Multi line
588 url[https://foo.bar.com]
581 url[https://foo.bar.com]
589 some text lalala""",
582 some text lalala""",
590 "https://foo.bar.com")
583 "https://foo.bar.com")
591 ], ids=no_newline_id_generator)
584 ], ids=no_newline_id_generator)
592 def test_urlify_test(sample, expected, url_):
585 def test_urlify_test(sample, expected, url_):
593 from rhodecode.lib.helpers import urlify_text
586 from rhodecode.lib.helpers import urlify_text
594 expected = _quick_url(expected, tmpl="""<a href="%s">%s</a>""", url_=url_)
587 expected = _quick_url(expected, tmpl="""<a href="%s">%s</a>""", url_=url_)
595 assert urlify_text(sample) == expected
588 assert urlify_text(sample) == expected
596
589
597
590
598 @pytest.mark.parametrize("test, expected", [
591 @pytest.mark.parametrize("test, expected", [
599 ("", None),
592 ("", None),
600 ("/_2", '2'),
593 ("/_2", '2'),
601 ("_2", '2'),
594 ("_2", '2'),
602 ("/_2/", '2'),
595 ("/_2/", '2'),
603 ("_2/", '2'),
596 ("_2/", '2'),
604
597
605 ("/_21", '21'),
598 ("/_21", '21'),
606 ("_21", '21'),
599 ("_21", '21'),
607 ("/_21/", '21'),
600 ("/_21/", '21'),
608 ("_21/", '21'),
601 ("_21/", '21'),
609
602
610 ("/_21/foobar", '21'),
603 ("/_21/foobar", '21'),
611 ("_21/121", '21'),
604 ("_21/121", '21'),
612 ("/_21/_12", '21'),
605 ("/_21/_12", '21'),
613 ("_21/rc/foo", '21'),
606 ("_21/rc/foo", '21'),
614
607
615 ])
608 ])
616 def test_get_repo_by_id(test, expected):
609 def test_get_repo_by_id(test, expected):
617 from rhodecode.model.repo import RepoModel
610 from rhodecode.model.repo import RepoModel
618 _test = RepoModel()._extract_id_from_repo_name(test)
611 _test = RepoModel()._extract_id_from_repo_name(test)
619 assert _test == expected
612 assert _test == expected
620
613
621
614
622 def test_invalidation_context(baseapp):
615 def test_invalidation_context(baseapp):
623 repo_id = 9999
616 repo_id = 9999
624
617
625 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
618 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
626 repo_id, CacheKey.CACHE_TYPE_FEED)
619 repo_id, CacheKey.CACHE_TYPE_FEED)
627 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
620 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
628 repo_id=repo_id)
621 repo_id=repo_id)
629 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
622 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
630
623
631 calls = [1, 2]
624 calls = [1, 2]
632
625
633 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
626 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
634 def _dummy_func(cache_key):
627 def _dummy_func(cache_key):
635 val = calls.pop(0)
628 val = calls.pop(0)
636 return 'result:{}'.format(val)
629 return 'result:{}'.format(val)
637
630
638 inv_context_manager = rc_cache.InvalidationContext(
631 inv_context_manager = rc_cache.InvalidationContext(
639 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
632 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
640
633
641 # 1st call, fresh caches
634 # 1st call, fresh caches
642 with inv_context_manager as invalidation_context:
635 with inv_context_manager as invalidation_context:
643 should_invalidate = invalidation_context.should_invalidate()
636 should_invalidate = invalidation_context.should_invalidate()
644 if should_invalidate:
637 if should_invalidate:
645 result = _dummy_func.refresh('some-key')
638 result = _dummy_func.refresh('some-key')
646 else:
639 else:
647 result = _dummy_func('some-key')
640 result = _dummy_func('some-key')
648
641
649 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
642 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
650 assert should_invalidate is True
643 assert should_invalidate is True
651
644
652 assert 'result:1' == result
645 assert 'result:1' == result
653 # should be cached so calling it twice will give the same result !
646 # should be cached so calling it twice will give the same result !
654 result = _dummy_func('some-key')
647 result = _dummy_func('some-key')
655 assert 'result:1' == result
648 assert 'result:1' == result
656
649
657 # 2nd call, we create a new context manager, this should be now key aware, and
650 # 2nd call, we create a new context manager, this should be now key aware, and
658 # return an active cache region
651 # return an active cache region
659 with inv_context_manager as invalidation_context:
652 with inv_context_manager as invalidation_context:
660 should_invalidate = invalidation_context.should_invalidate()
653 should_invalidate = invalidation_context.should_invalidate()
661 assert isinstance(invalidation_context, rc_cache.ActiveRegionCache)
654 assert isinstance(invalidation_context, rc_cache.ActiveRegionCache)
662 assert should_invalidate is False
655 assert should_invalidate is False
663
656
664 # Mark invalidation
657 # Mark invalidation
665 CacheKey.set_invalidate(invalidation_namespace)
658 CacheKey.set_invalidate(invalidation_namespace)
666
659
667 # 3nd call, fresh caches
660 # 3nd call, fresh caches
668 with inv_context_manager as invalidation_context:
661 with inv_context_manager as invalidation_context:
669 should_invalidate = invalidation_context.should_invalidate()
662 should_invalidate = invalidation_context.should_invalidate()
670 if should_invalidate:
663 if should_invalidate:
671 result = _dummy_func.refresh('some-key')
664 result = _dummy_func.refresh('some-key')
672 else:
665 else:
673 result = _dummy_func('some-key')
666 result = _dummy_func('some-key')
674
667
675 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
668 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
676 assert should_invalidate is True
669 assert should_invalidate is True
677
670
678 assert 'result:2' == result
671 assert 'result:2' == result
679
672
680 # cached again, same result
673 # cached again, same result
681 result = _dummy_func('some-key')
674 result = _dummy_func('some-key')
682 assert 'result:2' == result
675 assert 'result:2' == result
683
676
684
677
685 def test_invalidation_context_exception_in_compute(baseapp):
678 def test_invalidation_context_exception_in_compute(baseapp):
686 repo_id = 888
679 repo_id = 888
687
680
688 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
681 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
689 repo_id, CacheKey.CACHE_TYPE_FEED)
682 repo_id, CacheKey.CACHE_TYPE_FEED)
690 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
683 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
691 repo_id=repo_id)
684 repo_id=repo_id)
692 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
685 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
693
686
694 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
687 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
695 def _dummy_func(cache_key):
688 def _dummy_func(cache_key):
696 raise Exception('Error in cache func')
689 raise Exception('Error in cache func')
697
690
698 with pytest.raises(Exception):
691 with pytest.raises(Exception):
699 inv_context_manager = rc_cache.InvalidationContext(
692 inv_context_manager = rc_cache.InvalidationContext(
700 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
693 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
701
694
702 # 1st call, fresh caches
695 # 1st call, fresh caches
703 with inv_context_manager as invalidation_context:
696 with inv_context_manager as invalidation_context:
704 should_invalidate = invalidation_context.should_invalidate()
697 should_invalidate = invalidation_context.should_invalidate()
705 if should_invalidate:
698 if should_invalidate:
706 _dummy_func.refresh('some-key-2')
699 _dummy_func.refresh('some-key-2')
707 else:
700 else:
708 _dummy_func('some-key-2')
701 _dummy_func('some-key-2')
709
702
710
703
711 @pytest.mark.parametrize('execution_number', range(5))
704 @pytest.mark.parametrize('execution_number', range(5))
712 def test_cache_invalidation_race_condition(execution_number, baseapp):
705 def test_cache_invalidation_race_condition(execution_number, baseapp):
713 import time
706 import time
714
707
715 repo_id = 777
708 repo_id = 777
716
709
717 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
710 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
718 repo_id, CacheKey.CACHE_TYPE_FEED)
711 repo_id, CacheKey.CACHE_TYPE_FEED)
719 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
712 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
720 repo_id=repo_id)
713 repo_id=repo_id)
721 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
714 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
722
715
723 @run_test_concurrently(25)
716 @run_test_concurrently(25)
724 def test_create_and_delete_cache_keys():
717 def test_create_and_delete_cache_keys():
725 time.sleep(0.2)
718 time.sleep(0.2)
726
719
727 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
720 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
728 def _dummy_func(cache_key):
721 def _dummy_func(cache_key):
729 val = 'async'
722 val = 'async'
730 return 'result:{}'.format(val)
723 return 'result:{}'.format(val)
731
724
732 inv_context_manager = rc_cache.InvalidationContext(
725 inv_context_manager = rc_cache.InvalidationContext(
733 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
726 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
734
727
735 # 1st call, fresh caches
728 # 1st call, fresh caches
736 with inv_context_manager as invalidation_context:
729 with inv_context_manager as invalidation_context:
737 should_invalidate = invalidation_context.should_invalidate()
730 should_invalidate = invalidation_context.should_invalidate()
738 if should_invalidate:
731 if should_invalidate:
739 _dummy_func.refresh('some-key-3')
732 _dummy_func.refresh('some-key-3')
740 else:
733 else:
741 _dummy_func('some-key-3')
734 _dummy_func('some-key-3')
742
735
743 # Mark invalidation
736 # Mark invalidation
744 CacheKey.set_invalidate(invalidation_namespace)
737 CacheKey.set_invalidate(invalidation_namespace)
745
738
746 test_create_and_delete_cache_keys()
739 test_create_and_delete_cache_keys()
General Comments 0
You need to be logged in to leave comments. Login now