Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7896df41cd | ||
|
|
718a127ef3 | ||
|
|
1ff8e36234 | ||
|
|
18c602245e | ||
|
|
37a61266f7 | ||
|
|
55a16089c2 | ||
|
|
80ac5292b4 | ||
|
|
5fb3a107ae | ||
|
|
a715e33068 | ||
|
|
dbd03d410d | ||
|
|
e6ac9ec513 | ||
|
|
c58ed4a0d4 | ||
|
|
751c0b0ea8 | ||
|
|
526ae7065a | ||
|
|
860903cce8 | ||
|
|
1e1a7c84b5 | ||
|
|
c7d97b23aa | ||
|
|
bf4cb999d7 | ||
|
|
c6a4eb0494 | ||
|
|
f94e7ce981 | ||
|
|
dd415d07af | ||
|
|
06b67b0adc | ||
|
|
bd9a2e8227 | ||
|
|
ccd8299240 | ||
|
|
a288e5a3c6 | ||
|
|
48f7dfde82 | ||
|
|
0ee5fcfb6f | ||
|
|
9345ea05ea | ||
|
|
c15e8932c6 | ||
|
|
10167d2d19 | ||
|
|
c260a63148 | ||
|
|
ea78a367ef | ||
|
|
74c644c933 | ||
|
|
255a9bc2a9 | ||
|
|
968d9fcd5c | ||
|
|
d76ea6668f | ||
|
|
b789f817f9 | ||
|
|
7ca8fe22d7 | ||
|
|
4ea4e1f569 | ||
|
|
e94bf825d3 | ||
|
|
bdc9779df2 | ||
|
|
2291b09b58 | ||
|
|
32df0b7f34 | ||
|
|
5e56af0b5a | ||
|
|
6ec457de3d | ||
|
|
b4c58b1704 | ||
|
|
c3ea3488d2 | ||
|
|
eb6f8a6cac | ||
|
|
e2d0456626 | ||
|
|
c183aa8b12 | ||
|
|
9c5abff8cd | ||
|
|
b794a7702d | ||
|
|
310a77e3a7 | ||
|
|
b37c92d9f9 | ||
|
|
665569ba82 | ||
|
|
4bade27e12 | ||
|
|
b010ab9525 | ||
|
|
199a1864aa | ||
|
|
0272164072 | ||
|
|
e24de27fd3 | ||
|
|
e712897fea | ||
|
|
660aaeb344 | ||
|
|
679a878b49 | ||
|
|
fa57ae5c3b | ||
|
|
a613793d45 | ||
|
|
eaef3dde49 | ||
|
|
545a39c522 | ||
|
|
a1042458b6 | ||
|
|
1415744f9b | ||
|
|
80c2e440db | ||
|
|
2809227838 | ||
|
|
5233f2924d | ||
|
|
a7e5589733 | ||
|
|
3c7fff901a | ||
|
|
821307f699 | ||
|
|
3cf634cb75 | ||
|
|
f7efb5af75 | ||
|
|
aa11d3bd49 | ||
|
|
16a61dc512 | ||
|
|
4090a79450 | ||
|
|
a619671277 | ||
|
|
b92c1a1652 | ||
|
|
e97c74154b | ||
|
|
138191cc22 | ||
|
|
58b214b16c | ||
|
|
911acd7e4d | ||
|
|
b745b575bc | ||
|
|
7a02188ac6 | ||
|
|
f41b340e79 | ||
|
|
901b6e86c7 | ||
|
|
583d43c054 | ||
|
|
1fd2a061b0 | ||
|
|
7c7ee58cd3 | ||
|
|
cfa95fd3f5 | ||
|
|
89c9e78878 | ||
|
|
bc074e446a | ||
|
|
baee06dcdd | ||
|
|
a6a6c8409a | ||
|
|
11baf2bb9d | ||
|
|
071d59c72a | ||
|
|
65ee72bda3 | ||
|
|
7800b65d1a | ||
|
|
56d260a65d | ||
|
|
6d0397a1d7 | ||
|
|
fdebb06059 | ||
|
|
c6ef7bba81 | ||
|
|
86509495f3 | ||
|
|
086e6b7d21 | ||
|
|
f47afbddc8 | ||
|
|
14f545ff45 | ||
|
|
bf09a3d9c6 | ||
|
|
93cadb5a6b | ||
|
|
0dd68201f6 | ||
|
|
ba646c4ac0 | ||
|
|
46c50d2aa7 | ||
|
|
122dbd953c | ||
|
|
a0c7666e4e | ||
|
|
4185b0b19a | ||
|
|
a9478b95cc | ||
|
|
c68933f445 | ||
|
|
e7dd60c036 | ||
|
|
17ca161e55 | ||
|
|
e66f627407 | ||
|
|
c39312356e | ||
|
|
ac8afdd98f | ||
|
|
21e067937a | ||
|
|
12e54ccda9 | ||
|
|
e658a7b293 | ||
|
|
49478e873d | ||
|
|
30efcb2a68 | ||
|
|
7866fde20d | ||
|
|
30e903eec0 | ||
|
|
d9dedd37ee | ||
|
|
61d4ea742f | ||
|
|
02594f4dea | ||
|
|
a61e33cad9 | ||
|
|
347edc4b62 | ||
|
|
728f29152f | ||
|
|
fdde4da323 | ||
|
|
31bcd3609b | ||
|
|
ef4b8cd27b | ||
|
|
dcfc524ad7 | ||
|
|
5c161325bb | ||
|
|
cd02e61710 | ||
|
|
1ee2e7cd9d | ||
|
|
a92edc9fa7 | ||
|
|
3eb03362a4 | ||
|
|
aaf9794491 | ||
|
|
ffe519248f | ||
|
|
ecdc0164ee | ||
|
|
2dd7dccaca | ||
|
|
d5780a018a | ||
|
|
7a8b4413fc | ||
|
|
b598062db6 | ||
|
|
78187f9d6d | ||
|
|
e6c070d469 | ||
|
|
750fd9d500 | ||
|
|
9f5e755037 | ||
|
|
f43e7e3665 | ||
|
|
fc35ae44dd | ||
|
|
805842ae96 | ||
|
|
fc925444d8 | ||
|
|
6163b7f7e3 | ||
|
|
2dcbc0f5e9 | ||
|
|
3c05095538 | ||
|
|
27c2bddc5c | ||
|
|
2303d8a547 | ||
|
|
03a125e02d | ||
|
|
04f4fb4281 | ||
|
|
fd66b3561c | ||
|
|
cb4514e72c | ||
|
|
27a4ec14c7 | ||
|
|
aa3ebd1f7f | ||
|
|
f459a4aacb | ||
|
|
418b47ba3c | ||
|
|
393d09df0d | ||
|
|
115d4b582a | ||
|
|
1c5663dd83 | ||
|
|
8050e638a9 | ||
|
|
eb58b93173 | ||
|
|
99486802ef | ||
|
|
6c52d4df9b | ||
|
|
269e47a249 | ||
|
|
5753989b79 | ||
|
|
466be55df4 | ||
|
|
74f30b87ad | ||
|
|
63d70483aa | ||
|
|
6b0eaecdf1 | ||
|
|
9049457543 | ||
|
|
f6ac157993 | ||
|
|
e7cd0b65d6 | ||
|
|
8b8b0a1b8c | ||
|
|
8dae0b7973 | ||
|
|
d1d54c50d7 | ||
|
|
4f82013a55 | ||
|
|
3a5159b060 | ||
|
|
617f2d5669 | ||
|
|
3d02aa687e | ||
|
|
3bcd0a8509 | ||
|
|
c240ab4e8e | ||
|
|
8e2d47f793 | ||
|
|
3c993deedf | ||
|
|
82d7116664 | ||
|
|
015cea9c07 | ||
|
|
359c5b3c81 | ||
|
|
5c3312179c | ||
|
|
70d5c19a43 | ||
|
|
9f62c44460 | ||
|
|
542fd12343 | ||
|
|
0763be425c | ||
|
|
6b3c983e67 | ||
|
|
638c7b2fbe | ||
|
|
a55b7c8069 | ||
|
|
318fc6d676 | ||
|
|
705a55e49f | ||
|
|
39aba89186 | ||
|
|
f7bbbee464 | ||
|
|
48dbd9f7d9 | ||
|
|
1b8ed947f3 | ||
|
|
cb3ff65d05 | ||
|
|
d32581084d | ||
|
|
950b25236c | ||
|
|
fecdbc8658 | ||
|
|
1e8932b390 | ||
|
|
28ae1d81a8 | ||
|
|
d7ad941d1e | ||
|
|
0ebbf9ab33 | ||
|
|
7c4282688a | ||
|
|
e892601440 | ||
|
|
dbda800374 | ||
|
|
ba0f5edfea | ||
|
|
5953c9cccb | ||
|
|
ba95dddf12 | ||
|
|
10371accfb | ||
|
|
815d6c1286 | ||
|
|
c00c0cb387 | ||
|
|
c8433a884b | ||
|
|
7f2aad3593 | ||
|
|
cfedd020b9 | ||
|
|
116f5b5c54 | ||
|
|
5b3b3fdf84 | ||
|
|
84bc19f71f | ||
|
|
a8ddba48b7 | ||
|
|
fac8d9dcab | ||
|
|
f561dc7191 | ||
|
|
116014918b | ||
|
|
0d9543a0d8 | ||
|
|
f75f210675 | ||
|
|
cbc3c93fae | ||
|
|
f2f91d23a9 | ||
|
|
a976a59ce2 | ||
|
|
87f07c6509 | ||
|
|
04c369cdf8 | ||
|
|
9c1d4ac2fc | ||
|
|
391b45fba1 | ||
|
|
7184e02207 | ||
|
|
96693edb8b | ||
|
|
6eb2f24bb1 | ||
|
|
1dc8f1b30a | ||
|
|
8d20980aa9 | ||
|
|
a01868c49c | ||
|
|
0764d25df4 | ||
|
|
44906870e4 | ||
|
|
6ec34a9936 | ||
|
|
2b72077225 | ||
|
|
0d1627d243 | ||
|
|
63d288d85f | ||
|
|
fb4aaa54ad | ||
|
|
7419c4060e | ||
|
|
be89b5c12a | ||
|
|
e34f24e183 | ||
|
|
0a98ba0487 | ||
|
|
5a70800a31 | ||
|
|
bbc0eb8d6f | ||
|
|
8a1cca4198 | ||
|
|
3f2ef3b8b5 | ||
|
|
2e31e70881 | ||
|
|
8e8d655e66 | ||
|
|
d138308fce | ||
|
|
7ed61ccbb6 | ||
|
|
29a91f4730 | ||
|
|
8f00817927 | ||
|
|
0696b8d073 | ||
|
|
de247b3b5b | ||
|
|
0dfe32f594 | ||
|
|
5d3f2cd6fa | ||
|
|
8c48d6a90f | ||
|
|
a58c15aee3 | ||
|
|
f27efd7af0 | ||
|
|
6882dff4fc | ||
|
|
230eb927a0 | ||
|
|
365a067755 | ||
|
|
b2751af4e3 | ||
|
|
f83772efb9 | ||
|
|
23b23e0e86 | ||
|
|
98d6871300 | ||
|
|
21978735a1 | ||
|
|
d3a3d8b6ef | ||
|
|
97af0e28fc | ||
|
|
7c68547dfa | ||
|
|
7d30c12fb7 | ||
|
|
0f551b6d25 | ||
|
|
198803dee0 | ||
|
|
1d9d6941ec | ||
|
|
3deba89063 | ||
|
|
4d93a94ef6 | ||
|
|
8b34c228e7 | ||
|
|
7d2bfd702c | ||
|
|
09d42500e6 | ||
|
|
51f0f94a37 | ||
|
|
293564be75 | ||
|
|
4917f8df79 | ||
|
|
0def5df6c8 | ||
|
|
83696b3a99 | ||
|
|
7a2c7f83aa | ||
|
|
2547311ef4 | ||
|
|
5eea6e491a | ||
|
|
57984545ab | ||
|
|
d19c51c517 | ||
|
|
94860b6995 | ||
|
|
43c1cea1d2 | ||
|
|
3b188a9970 | ||
|
|
e1066e203f | ||
|
|
e74d67db3a | ||
|
|
e759173e46 | ||
|
|
f1875f09aa | ||
|
|
fbf2506f86 | ||
|
|
315db7e8fa | ||
|
|
75a89b8859 | ||
|
|
6d151f33ad | ||
|
|
bd801281db | ||
|
|
eba49439ac | ||
|
|
bc64d09a8f | ||
|
|
68bfc679df | ||
|
|
82f090f517 | ||
|
|
d58043149b | ||
|
|
690586b655 | ||
|
|
f6d37904d5 | ||
|
|
b50677ac11 | ||
|
|
509062e478 | ||
|
|
fa930c94ed | ||
|
|
545331f8e6 | ||
|
|
15c5868274 | ||
|
|
eca6cc16cc | ||
|
|
2340149f25 | ||
|
|
d9abb535fa | ||
|
|
6682ddce52 | ||
|
|
49207c04ff | ||
|
|
735ca6e1d5 | ||
|
|
071bec0924 | ||
|
|
1ae1466cad | ||
|
|
270d8f7035 | ||
|
|
b162d24b86 | ||
|
|
650277f8f6 | ||
|
|
a1d230ba9c | ||
|
|
8d8169d5b6 | ||
|
|
696aa2d67f | ||
|
|
12c94c9908 | ||
|
|
25c1fdc365 | ||
|
|
cb48b0bfa6 | ||
|
|
27f825527e | ||
|
|
1cec948022 | ||
|
|
7a0fd3f165 | ||
|
|
4071a83ab9 | ||
|
|
8078ccc8db | ||
|
|
47bb0619b6 | ||
|
|
8e06a1e78d | ||
|
|
b296874fc4 | ||
|
|
c7ef849905 | ||
|
|
ec917a651b | ||
|
|
a403b33eae | ||
|
|
359cb93566 | ||
|
|
367cc8dd08 | ||
|
|
6d647c9985 | ||
|
|
15e95777f2 | ||
|
|
5dd5019f57 | ||
|
|
f56ff4f5f2 | ||
|
|
b13951e2a3 | ||
|
|
eb1e895c0c | ||
|
|
9caacc088b | ||
|
|
7543f5ea09 | ||
|
|
2e371d2d12 | ||
|
|
290b73d981 | ||
|
|
92ac5d97e5 | ||
|
|
ac84129ef8 | ||
|
|
3e50a6500c | ||
|
|
c90f3250bf | ||
|
|
e29c577104 | ||
|
|
d08643b0c0 | ||
|
|
94535d7e38 | ||
|
|
3ed6f17f28 | ||
|
|
e593403f2e | ||
|
|
bf94b75960 | ||
|
|
b263bd476a | ||
|
|
1fbbde21be | ||
|
|
e4ed721fd0 | ||
|
|
62d7bda1e2 | ||
|
|
dcd1d96b28 | ||
|
|
229cdc8c4e | ||
|
|
79cbc8784d | ||
|
|
36295161f5 | ||
|
|
1e2987500d | ||
|
|
8bc0b134d2 | ||
|
|
1c64d27da9 | ||
|
|
ceb7e2fbe6 | ||
|
|
657e1bfd54 | ||
|
|
b3c07a05a3 | ||
|
|
44574cd14f | ||
|
|
b48dc0b907 | ||
|
|
8a15ca9a66 | ||
|
|
95d1b3f49a | ||
|
|
67cd8a2a33 | ||
|
|
3d2f8b8fd1 | ||
|
|
2fc8a2a921 | ||
|
|
e77b16d0fe | ||
|
|
c83bd6e1dd | ||
|
|
3c93f1fcaa | ||
|
|
4f425b9604 | ||
|
|
e2bc0ad7b3 | ||
|
|
d399bcc6cd | ||
|
|
5167c65ae3 | ||
|
|
e13d41cabe | ||
|
|
da526f9d8e | ||
|
|
facaec61d9 | ||
|
|
993e6898f3 | ||
|
|
f48cffdb2c | ||
|
|
74ce2ea6f8 | ||
|
|
2d358bfb9e | ||
|
|
a826e5ad2f | ||
|
|
1a75ff2746 | ||
|
|
5b3b3fca48 | ||
|
|
4011f621eb | ||
|
|
35d7cd00cf | ||
|
|
9074e23b18 | ||
|
|
03fbda9043 | ||
|
|
eee5edf45d | ||
|
|
1e7df0abca | ||
|
|
e690a54b06 | ||
|
|
bcf510df3d | ||
|
|
a85a1feba0 | ||
|
|
b8a4da7efc | ||
|
|
02c156e41e | ||
|
|
ea77f76415 | ||
|
|
c93c6b0276 | ||
|
|
36dbc07baf | ||
|
|
ff5d70590b | ||
|
|
388075378f | ||
|
|
82612e5cd4 | ||
|
|
b03527a7ad | ||
|
|
01633ee08e | ||
|
|
b9b454be9c | ||
|
|
2d021c80d3 | ||
|
|
0a1819eec2 | ||
|
|
90f6794e7d | ||
|
|
92d2e9e031 | ||
|
|
c5d88c244d | ||
|
|
0fcc30e22b | ||
|
|
e31414b610 | ||
|
|
744d693d90 | ||
|
|
d62d1f46e4 | ||
|
|
615c370e51 | ||
|
|
bc8bb0b03a | ||
|
|
700967baca | ||
|
|
70ad4a7035 | ||
|
|
4f29fd3790 | ||
|
|
5785ee2bc2 | ||
|
|
0584da0611 | ||
|
|
164fdeeb92 | ||
|
|
5d97f9db15 | ||
|
|
968a4fe04b | ||
|
|
e2c5b44408 | ||
|
|
5bcb75019a | ||
|
|
1733a525e0 | ||
|
|
fba5585f77 | ||
|
|
e1227bf0f8 | ||
|
|
5349d34513 | ||
|
|
465599701c | ||
|
|
e91c13cbf8 | ||
|
|
604d89c2c6 | ||
|
|
19f42ecfd1 | ||
|
|
0d55c20c26 | ||
|
|
26d4b91251 | ||
|
|
6836254234 | ||
|
|
5162291f9d | ||
|
|
44e3e0f3d6 | ||
|
|
5ae9f76629 | ||
|
|
a9ec2c1b6d | ||
|
|
4ccbbced54 | ||
|
|
da62ca474b | ||
|
|
e02696d47d | ||
|
|
6dc29b910c | ||
|
|
7e76d29ddf | ||
|
|
0bad62dfd4 | ||
|
|
98807b0487 | ||
|
|
78deee7ca2 | ||
|
|
a5ccfebff5 | ||
|
|
b39b945a6e | ||
|
|
18951047eb | ||
|
|
1124ec22c6 | ||
|
|
ab367fc890 | ||
|
|
22c632794f | ||
|
|
0fefd6d443 | ||
|
|
89f24ea07c | ||
|
|
d2a11bc0f2 | ||
|
|
575455b10e | ||
|
|
e858c68fa6 | ||
|
|
2df26740c6 | ||
|
|
39209ee2b8 | ||
|
|
3e9cd11aa3 | ||
|
|
f91b2c4a2f | ||
|
|
a2b1a07a4f | ||
|
|
82b5f434f9 | ||
|
|
a55b7398da | ||
|
|
d9b37b2094 | ||
|
|
230c5f37bc | ||
|
|
561bdbf2b4 | ||
|
|
0bafec7ce5 | ||
|
|
34dca72a09 | ||
|
|
428b576acf | ||
|
|
f26a08d9bc | ||
|
|
92ae9affd6 | ||
|
|
d52cd2e0c0 | ||
|
|
e11cbd1a26 | ||
|
|
4e58a6a6b4 | ||
|
|
e01de676fa | ||
|
|
9e43802e2a | ||
|
|
f02f4f6116 | ||
|
|
306689f30d | ||
|
|
43bf28968b | ||
|
|
df6e9a57d8 | ||
|
|
cbcafd28c9 | ||
|
|
4f181ec460 | ||
|
|
a72583df76 | ||
|
|
8f508e5e0f | ||
|
|
536f75fdb4 | ||
|
|
f37a070eda | ||
|
|
51c1267bf4 | ||
|
|
6a0b972aac | ||
|
|
94168f02ca | ||
|
|
88c8dfa26e | ||
|
|
c8050f0edd | ||
|
|
e3d90e63e8 | ||
|
|
ec20a3e4c9 | ||
|
|
83bac6b8aa | ||
|
|
34025743a1 | ||
|
|
ff02a303c7 | ||
|
|
4552576fa3 | ||
|
|
cc2c834359 | ||
|
|
b746aeb729 | ||
|
|
686fc08cef | ||
|
|
9d74aae3f5 | ||
|
|
b3fd99eb1b | ||
|
|
bf111c97f1 | ||
|
|
ac8d4cf899 | ||
|
|
04bd7fbffa | ||
|
|
8167e8d944 | ||
|
|
6c3174599a | ||
|
|
76aca637e8 | ||
|
|
832d843ea1 | ||
|
|
9aa702efcd | ||
|
|
cde6d9eaae | ||
|
|
91db033e3a | ||
|
|
7d6c0af7e7 | ||
|
|
d0c2345044 | ||
|
|
51c4b93bc7 | ||
|
|
242acbcd9d | ||
|
|
3079801e0f | ||
|
|
fdc02400b9 | ||
|
|
499b0da006 | ||
|
|
a7caf02ec6 | ||
|
|
70b819700d | ||
|
|
b1aca90888 | ||
|
|
73ccc5d3ad | ||
|
|
47d3fd7db9 | ||
|
|
56d2d7cb12 | ||
|
|
ac3c078141 | ||
|
|
0110a0df8d | ||
|
|
c1d6b51075 | ||
|
|
bc6c6a36da | ||
|
|
806d76d9a2 | ||
|
|
a0a476b57d | ||
|
|
d5dd24fa51 | ||
|
|
42561be37e | ||
|
|
c2fdee9cf8 | ||
|
|
9972ee4113 | ||
|
|
846b0ce9fd | ||
|
|
fe78fe4416 | ||
|
|
54d03ae788 | ||
|
|
55f895a7f5 | ||
|
|
22b557605b | ||
|
|
16ed6e844a | ||
|
|
d96b3de97a | ||
|
|
bd0436ffa0 |
@@ -96,3 +96,5 @@ Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
.vscode/settings.json
|
||||
.vs/
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
os:
|
||||
- linux
|
||||
# - osx
|
||||
# - windows
|
||||
|
||||
dist: xenial
|
||||
sudo: require
|
||||
language: cpp
|
||||
|
||||
script:
|
||||
- bash bin/clean
|
||||
- bash bin/configure
|
||||
# - bash bin/build
|
||||
# - bash bin/run-unit-tests
|
||||
|
||||
# end of file
|
||||
@@ -1,65 +1,218 @@
|
||||
|
||||
Latest Version:
|
||||
Download latest version:
|
||||
https://robomongo.org/download
|
||||
|
||||
Robo 3T 1.4.4 (Aug/2021)
|
||||
New Features:
|
||||
- Support for Standard Connection String Format (Mongo URI)
|
||||
Fixes:
|
||||
- Fix Welcome Tab not loading the new content issue by disable/bypass HTTP cache
|
||||
|
||||
Robo 3T 1.4.3 (Jan/2021)
|
||||
New Features:
|
||||
- macOS Big Sur support
|
||||
- New Welcome Tab - embeds Chromium using QtWebEngine (Windows, macOS only)
|
||||
- Database explorer section has smaller default width (#1556)
|
||||
- Remember size of database explorer section
|
||||
- Import keys from old version: autoExpand, lineNumbers, debugMode and shellTimeoutSec
|
||||
|
||||
Fixes:
|
||||
- Disable unsupported SSH tab for replica set connections (#1285 #1340)
|
||||
- Fix crash when new shell tab executed in server unreachable case
|
||||
- Fix crash when paging used in tabbed result window (#1661)
|
||||
- Fix broken F2, F3, F4 shortcuts for tabbed result view
|
||||
- One time re-order limit per new connections window to prevent data loss (macOS, #1790)
|
||||
- Fix previously broken IPv6 support from command line: robo3t --ipv6
|
||||
|
||||
Robo 3T 1.4.2 (Oct/2020)
|
||||
Fixes:
|
||||
- Fix broken paging in DocumentDB (#1694)
|
||||
|
||||
Robo 3T 1.4.1 (Sep/2020)
|
||||
Fixes:
|
||||
- Force light mode on macOS (#1761, #1768, #1771)
|
||||
- Fix broken macOS native theme/look (#1766)
|
||||
- Fix broken Windows native theme/look
|
||||
|
||||
Robo 3T 1.4.0 (Aug/2020)
|
||||
blog.robomongo.org/robo-3t-1-4/
|
||||
|
||||
New Features:
|
||||
- Mongo shell 4.2 upgrade
|
||||
- Support for Ubuntu 20.04 and macOS 10.15 (Catalina)
|
||||
- SSH: ECDSA and Ed25519 keys support on Windows & macOS (#1719, #1530, #1590)
|
||||
- Manually specify visible databases (#1696, #1368, #389)
|
||||
|
||||
Improvements:
|
||||
- Qt Upgrade (v5.12.8 - Apr/2020, Windows & macOS only)
|
||||
- OpenSSL upgrade (v1.1.1f - Mar/2020, Windows & macOS only)
|
||||
- libssh2 upgrade (v1.9.0 - Jun/2019, Windows & macOS only)
|
||||
|
||||
Fixes:
|
||||
- Authentication database option isn't used properly (#1696)
|
||||
- Add/Edit index ops fixed (re-written) (#1692)
|
||||
- Crash when expanding admin users (#1728)
|
||||
- Unable to run query after shell timeout reached (#1529)
|
||||
|
||||
Robo 3T 1.3.1 (Apr, 2019)
|
||||
http://blog.robomongo.org/robo-3t-1-3
|
||||
|
||||
New Features:
|
||||
- Biggest change in this version is Mongo Shell version upgrade from 3.4 to 4.0.5.
|
||||
- Support for importing from DNS SRV based MongoDB connection strings
|
||||
- Query results windows now supports tabbed output #1591 #1403
|
||||
- Adding support for SCRAM-SHA-256 auth mechanism #1569
|
||||
- Support for Ubuntu 18.04 and Mac 10.14.
|
||||
- Support for creating version 4 UUID #1554
|
||||
|
||||
Improvements:
|
||||
- Encrypted passwords are used in config. file instead of clear text passwords
|
||||
- Showing much better error reason string from Mongo drivers for connection failures
|
||||
|
||||
Fixes:
|
||||
- Broken create/edit/view user features fixed and updated #638 #1041
|
||||
- Attempt to fix #1547: Crash when right click on existing results plus a new long running query
|
||||
- Fix for application crash when adding index with invalid JSON
|
||||
- 'Repair Database' in Robo3T needs a confirm dialog box #1568
|
||||
- Robo 3T the input space causes connection failure #1551
|
||||
- Crash when loading results + right click #1547
|
||||
- Attempt to fix major connection problems seen with the second edit/add/remove document operation after MongoDB 4.0 upgrade #1603
|
||||
- Attempt to fix #1581: For CRUD ops showing progress bar and disabling context menu while waiting for edit op to finish
|
||||
- Fixing UI issue where Functions folder freezing with "Functions..." when fails to refresh
|
||||
- Fix for #1529: Pagination does not work when the aggregation queries have dotted fields
|
||||
|
||||
Robo 3T 1.3.0 Beta (16 Feb, 2019)
|
||||
Details: https://github.com/Studio3T/robomongo/releases/tag/v1.3.0-beta
|
||||
|
||||
Robo 3T 1.2.1 (19 Feb, 2018)
|
||||
http://blog.robomongo.org/robo-3t-1-2
|
||||
|
||||
Fixes:
|
||||
- Aggregate query results are not pagaeble
|
||||
- Big double numbers are showing incorrectly #1447
|
||||
- Editing a document from a projection causes data loss (override) (#881)
|
||||
- Error: Resources temporarily unavailable. Error when starting up SSH session: -8 #1426
|
||||
- robo3t 1.1 failed to start on Ubuntu 17.04 #1385
|
||||
- Robo 3T is not opening on MacOS High Sierra (#1412)
|
||||
- Cannot load list of indexes #1454
|
||||
- Robo 3T is not buildable on latest MacOS High Sierra
|
||||
|
||||
Improvements
|
||||
- Qt version upgraded from Qt 5.7.0 to Qt 5.9.3
|
||||
- Auto switch to HTTP from HTTPS if the program crashes due to HTTPS related operations
|
||||
- Improvements for Robo 3T is crashing constantly on High Sierra #1412
|
||||
- PR: Improved query time formatting (#1358) #1455
|
||||
|
||||
Robo 3T 1.2.0 Beta (18 Dec, 2017)
|
||||
https://github.com/Studio3T/robomongo/releases/tag/v1.2.0-beta
|
||||
|
||||
Improvements & Fixes:
|
||||
- Qt version upgraded from Qt 5.7.0 to Qt 5.9.3
|
||||
- Fix for "Cannot load list of indexes #1454"
|
||||
- Improvements for Robo 3T is crashing constantly on High Sierra #1412
|
||||
- PR: Improved query time formatting (#1358) #1455
|
||||
- Fix for "Robo 3T is not buildable on latest MacOS vesion High Sierra"
|
||||
- Fix attempt for "Error: Resources temporarily unavailable. Error when starting up SSH session: -8 #1426"
|
||||
- Fix for "robo3t 1.1 failed to start on Ubuntu 17.04 #1385"
|
||||
|
||||
Robo 3T 1.1 (13 June, 2017)
|
||||
http://blog.robomongo.org/robomongo-1-1/
|
||||
|
||||
New Features:
|
||||
- MongoDB 3.4 support
|
||||
- New NumberDecimal (Decimal128) data type support
|
||||
- ECMAScript 2015 aka ES6 Support (Modernized JavaScript Implementation)
|
||||
- Re-naming from Robomongo to Robo 3T
|
||||
|
||||
Improvements & Fixes:
|
||||
- Stability Improvements: Fix included to prevent a crash on MACOS Sierra
|
||||
- Shell timeout is configurable on UI now 'Options->Change Shell Timeout'
|
||||
- Fix for Robomongo Shell Timeout Issue (silently, prematurely finishing long lasting scripts)
|
||||
- Security Improvements: OpenSSL version upgrade to openssl-1.0.1u (22-Sep-2016)
|
||||
- Tool chain upgrades: Modern C++14 features are enabled and usable for developers
|
||||
|
||||
Robomongo 1.1 Beta (12 May, 2017)
|
||||
https://github.com/Studio3T/robomongo/releases/tag/v1.1.0-beta
|
||||
|
||||
New Features:
|
||||
- MongoDB 3.4 Support
|
||||
- New NumberDecimal (Decimal128) data type support
|
||||
- ECMAScript 2015 (Modernized JavaScript Implementation aka ES6) Support
|
||||
|
||||
Improvements:
|
||||
- Security Improvements: OpenSSL version upgrade to openssl-1.0.1u (22-Sep-2016)
|
||||
- Tool Chain Improvements: Modern C++14 features are enabled
|
||||
|
||||
Robomongo 1.0 (21 Apr, 2017)
|
||||
http://blog.robomongo.org/robomongo-1-0
|
||||
|
||||
New Features:
|
||||
- Update Notifications Bar
|
||||
- Welcome Tab
|
||||
- Welcome Wizard
|
||||
|
||||
Improvements:
|
||||
- Replica set name configurable on UI
|
||||
- Configuration file system location change
|
||||
- "About Robomongo" dialog changes
|
||||
|
||||
Fixes:
|
||||
- Fix to avoid the same set name problem (https://github.com/Studio3T/robomongo/issues/1302)
|
||||
- Timestamp value is represented incorrectly (https://github.com/Studio3T/robomongo/issues/1159)
|
||||
- Local Timezone shows wrong date (https://github.com/Studio3T/robomongo/issues/501)
|
||||
- Time zone shown as "000:00" when UTC +00:00 is used as local timezone(https://github.com/Studio3T/robomongo/issues/1309)
|
||||
|
||||
Robomongo 1.0-RC1 (1 Feb, 2017)
|
||||
http://blog.robomongo.org/robomongo-1-rc1
|
||||
|
||||
Robomongo 1.x:
|
||||
Major Features:
|
||||
http://blog.robomongo.org/robomongo-1-rc1/
|
||||
|
||||
New Features:
|
||||
- Replica set support.
|
||||
- New 'Attributes' column in connections list window showing connection properties such as 'Replica Set', 'SSL' and 'SSH'.
|
||||
- New operation logging for almost all operations.
|
||||
|
||||
Major Improvements:
|
||||
- Improved error handling (no double error windows) for almost all operations.
|
||||
|
||||
* What's new in 1.0-RC1 (1 Feb, 2017)
|
||||
New Features:
|
||||
- Replica set support.
|
||||
- New 'Attributes' column in connections list window showing connection properties such as 'Replica Set', 'SSL' and 'SSH'.
|
||||
- New operation logging for almost all operations.
|
||||
|
||||
Improvements:
|
||||
- Improved error handling (no double error windows) for all fail and success conditions for the following operations:
|
||||
. Create, Drop Database
|
||||
. Create, Edit User
|
||||
. Create, Drop, Duplicate, Rename Collection
|
||||
. Insert Document
|
||||
. Remove document, Delete document, Remove all documents (triggered both from explorer and from result widget)
|
||||
. Refresh Users
|
||||
. Refresh Functions
|
||||
. Refresh Collections
|
||||
. Connection establish & refresh server fail and success cases.
|
||||
- Windows size is saved and restored for Edit, View and Insert Document dialogs.
|
||||
- Connections are automatically imported from the latest Robomongo version.
|
||||
- Better error reporting/handling and logging have been added for the operations below:
|
||||
. Create, Drop Function
|
||||
. Drop User
|
||||
- More informative and adjusted log level prefix strings haven added for log window. (Error, Warn, Info etc..).
|
||||
- After a new connection is created, now the focus goes to the newly created connection (end of list) instead of the
|
||||
beginning of connections list. And when Robomongo is opened, the focus goes to the end of the connection list instead
|
||||
of beginning.
|
||||
- Error messages added and error handling for 'remove document', 'remove all documents' operations triggered explorer
|
||||
and single or multi 'delete document' from results window have been re-implemented and improved.
|
||||
- Relevant errors are shown for the following cases now:
|
||||
. Drop attempt of non-existing collection.
|
||||
. Duplicating a collection with a collection name which already exists finishes silently.
|
||||
|
||||
Fixes:
|
||||
- Fix for the problem where the connections list comes empty if the Robomongo config file or it's directory do not exist.
|
||||
- Fix for the problem where 'in-progress bar' widget was not centered on main window for "Update Documents/Remove Documents"
|
||||
operations. https://github.com/paralect/robomongo/issues/1256
|
||||
- Fix for two problems where the operations 'insert or update documents' in one tab was causing auto reloading of other
|
||||
unrelated tabs and also multiple error windows to popup. https://github.com/paralect/robomongo/issues/1236
|
||||
- Fix for the problem where the operations 'remove document', 'remove all documents' triggered explorer and single or
|
||||
multi 'delete document' from results window were causing auto reloading of other unrelated tabs.
|
||||
Improvements:
|
||||
- Improved error handling (no double error windows) for all fail and success conditions for the following operations:
|
||||
. Create, Drop Database
|
||||
. Create, Edit User
|
||||
. Create, Drop, Duplicate, Rename Collection
|
||||
. Insert Document
|
||||
. Remove document, Delete document, Remove all documents (triggered both from explorer and from result widget)
|
||||
. Refresh Users
|
||||
. Refresh Functions
|
||||
. Refresh Collections
|
||||
. Connection establish & refresh server fail and success cases.
|
||||
- Windows size is saved and restored for Edit, View and Insert Document dialogs.
|
||||
- Connections are automatically imported from the latest Robomongo version.
|
||||
- Better error reporting/handling and logging have been added for the operations below:
|
||||
. Create, Drop Function
|
||||
. Drop User
|
||||
- More informative and adjusted log level prefix strings haven added for log window. (Error, Warn, Info etc..).
|
||||
- After a new connection is created, now the focus goes to the newly created connection (end of list) instead of the
|
||||
beginning of connections list. And when Robomongo is opened, the focus goes to the end of the connection list instead
|
||||
of beginning.
|
||||
- Error messages added and error handling for 'remove document', 'remove all documents' operations triggered explorer
|
||||
and single or multi 'delete document' from results window have been re-implemented and improved.
|
||||
- Relevant errors are shown for the following cases now:
|
||||
. Drop attempt of non-existing collection.
|
||||
. Duplicating a collection with a collection name which already exists finishes silently.
|
||||
|
||||
Fixes:
|
||||
- Fix for the problem where the connections list comes empty if the Robomongo config file or it's directory do not exist.
|
||||
- Fix for the problem where 'in-progress bar' widget was not centered on main window for "Update Documents/Remove Documents"
|
||||
operations. https://github.com/paralect/robomongo/issues/1256
|
||||
- Fix for two problems where the operations 'insert or update documents' in one tab was causing auto reloading of other
|
||||
unrelated tabs and also multiple error windows to popup. https://github.com/paralect/robomongo/issues/1236
|
||||
- Fix for the problem where the operations 'remove document', 'remove all documents' triggered explorer and single or
|
||||
multi 'delete document' from results window were causing auto reloading of other unrelated tabs.
|
||||
|
||||
|
||||
Robomongo 0.9:
|
||||
Major Features:
|
||||
- Support for MongoDB 3.x and WiredTiger engine. Robomongo now embeds MongoDB 3.2 shell.
|
||||
(Ability to use the latest shell functionality)
|
||||
- SSH tunnel support for connections added.
|
||||
- SSL tunnel support added.
|
||||
- MongoDB Atlas (Cloud MongoDB) support added.
|
||||
- SSH tunnel support for connections
|
||||
- SSL support
|
||||
- MongoDB Atlas (Cloud MongoDB) support
|
||||
- Both MONGODB-CR and SCRAM-SHA-1 authentication mechanisms are supported.
|
||||
- Allow direct connections to Replica Set members and support IPv6 protocol.
|
||||
- Loading of huge list of collections is now faster.
|
||||
@@ -74,9 +227,7 @@ Robomongo 0.9:
|
||||
#910, #748, #697, #699, #760, #815, #870, #892,
|
||||
#894, #905, #945, #974, #978, #990, #831, #842
|
||||
- SSH connection failure to servers on Ubuntu and OS X with the following error:
|
||||
"Resource temporarily unavailable. Error when starting up SSH session: -8" (#1090)
|
||||
|
||||
|
||||
"Resource temporarily unavailable. Error when starting up SSH session: -8" (#1090)
|
||||
|
||||
What's new in 0.9.0 Final (30 Sep, 2016)
|
||||
http://blog.robomongo.org/robomongo-0-9-0-final/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.8.0)
|
||||
project(Robomongo)
|
||||
|
||||
# Where to look first for CMake modules, before "${CMAKE_ROOT}/Modules" is checked
|
||||
@@ -6,11 +6,15 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
|
||||
# Project version
|
||||
set(PROJECT_VERSION_MAJOR "1")
|
||||
set(PROJECT_VERSION_MINOR "0")
|
||||
set(PROJECT_VERSION_PATCH "0")
|
||||
set(PROJECT_VERSION_BUILD "-RC1")
|
||||
set(PROJECT_VERSION_MINOR "4")
|
||||
set(PROJECT_VERSION_PATCH "4")
|
||||
set(PROJECT_VERSION_BUILD "")
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${PROJECT_VERSION_BUILD}")
|
||||
|
||||
# Enable C++17 features
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Modules
|
||||
include(RobomongoPrintUtils)
|
||||
include(RobomongoCMakeDefaults)
|
||||
@@ -27,20 +31,41 @@ find_package(Qt5Core REQUIRED)
|
||||
find_package(Qt5Gui REQUIRED)
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Qt5PrintSupport REQUIRED)
|
||||
find_package(Qt5Network REQUIRED)
|
||||
find_package(Qt5Xml REQUIRED)
|
||||
if(NOT SYSTEM_LINUX)
|
||||
find_package(Qt5WebEngineWidgets REQUIRED)
|
||||
endif()
|
||||
find_package(MongoDB REQUIRED)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
||||
if (SYSTEM_MACOSX)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14)
|
||||
find_package(Qt5MacExtras REQUIRED)
|
||||
endif()
|
||||
|
||||
# Projects
|
||||
add_subdirectory(src/third-party/libssh2)
|
||||
set(LIBSSH2_VERSION 1.9.0)
|
||||
if(SYSTEM_LINUX)
|
||||
set(LIBSSH2_VERSION 1.7.0)
|
||||
endif()
|
||||
set(LIBSSH2_DIR src/third-party/libssh2-${LIBSSH2_VERSION})
|
||||
set(QJSON_VERSION 0.8.1)
|
||||
set(QJSON_DIR src/third-party/qjson-${QJSON_VERSION})
|
||||
set(QSCINTILLA_VERSION 2.8.4)
|
||||
set(QSCINTILLA_DIR src/third-party/qscintilla-${QSCINTILLA_VERSION})
|
||||
set(ESPRIMA_VERSION 2.7.3)
|
||||
set(ESPRIMA_DIR src/third-party/esprima-${ESPRIMA_VERSION})
|
||||
# todo: Use equivalent vars from googletest cmake files. Currently they are somehow not working.
|
||||
set(GOOGLE_TEST_VERSION 1.8.1)
|
||||
set(GOOGLE_TEST_DIR src/third-party/googletest-${GOOGLE_TEST_VERSION})
|
||||
add_subdirectory(${LIBSSH2_DIR})
|
||||
add_subdirectory(src/robomongo/ssh)
|
||||
add_subdirectory(src/third-party/qjson)
|
||||
add_subdirectory(src/third-party/qscintilla)
|
||||
add_subdirectory(${QJSON_DIR})
|
||||
add_subdirectory(${QSCINTILLA_DIR})
|
||||
add_subdirectory(${GOOGLE_TEST_DIR})
|
||||
add_subdirectory(src/robomongo)
|
||||
add_subdirectory(src/robomongo-unit-tests)
|
||||
|
||||
# Show configuration summary
|
||||
include(RobomongoConfigurationSummary)
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Robomongo, shell-centric cross-platform MongoDB management tool.
|
||||
Robo 3T, shell-centric cross-platform MongoDB management tool.
|
||||
|
||||
Copyright 2013, Paralect.
|
||||
Copyright 2014-2017 3T Software Labs Ltd.
|
||||
|
||||
The Robomongo is released under the terms of the GNU General Public
|
||||
The Robo 3T is released under the terms of the GNU General Public
|
||||
License, version 3.
|
||||
|
||||
The Robomongo Project includes files written by third parties
|
||||
The Robo 3T Project includes files written by third parties
|
||||
and used with permission or subject to their respective license
|
||||
agreements.
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
Robomongo is a shell-centric cross-platform open source MongoDB management
|
||||
Robo 3T is a shell-centric cross-platform open source MongoDB management
|
||||
tool (i.e. Admin GUI). Robomongo embeds the same JavaScript engine that
|
||||
powers MongoDB's mongo shell.
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
FROM debian
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends --fix-missing\
|
||||
libgl-dev \
|
||||
qt5dxcb-plugin \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/
|
||||
|
||||
ADD https://download-test.robomongo.org/linux/robo3t-1.3.1-linux-x86_64-7419c406.tar.gz /opt/robo3t.tar.gz
|
||||
RUN cd /opt/ \
|
||||
&& mkdir robo3t \
|
||||
&& tar -C /opt/robo3t --strip-components 1 -xzf robo3t.tar.gz && rm robo3t.tar.gz \
|
||||
&& ls /opt/robo3t
|
||||
|
||||
VOLUME /root/.3T
|
||||
VOLUME /root/.config/3T
|
||||
|
||||
RUN apt update && apt upgrade -y && apt autoremove -y
|
||||
RUN apt install openssh-client -y
|
||||
|
||||
CMD /opt/robo3t/bin/robo3t
|
||||
@@ -1,119 +1,96 @@
|
||||
About Robomongo [](https://gitter.im/paralect/robomongo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
About Robo 3T
|
||||
===============
|
||||
|
||||
[Robomongo](http://www.robomongo.org) is a shell-centric cross-platform MongoDB management tool. Unlike most other MongoDB admin UI tools, Robomongo embeds the actual `mongo` shell in a tabbed interface with access to a shell command line as well as GUI interaction.
|
||||
[Robo 3T](http://www.robomongo.org) (formerly Robomongo *) is a shell-centric cross-platform MongoDB management tool. Unlike most other MongoDB admin UI tools, Robo 3T embeds the actual `mongo` shell in a tabbed interface with access to a shell command line as well as GUI interaction.
|
||||
|
||||
Starting from version 0.9, Robomongo is compatibile with MongoDB 3.x (including SCRAM-SHA-1 auth and support for WiredTiger storage engine). Robomongo 0.9 embeds the **MongoDB 3.2** shell.
|
||||
The latest stable release **Robo 3T 1.4** embeds **MongoDB 4.2** shell.
|
||||
|
||||
Robomongo 0.8.x embeds the **MongoDB 2.4.0** shell.
|
||||
|
||||
What's new in latest Robomongo 1.0-RC1?
|
||||
====================================
|
||||
Latest release of Robomongo 1.0-RC1 includes:
|
||||
- Replica Set Support
|
||||
- Improved error handling (no double error windows) and new operation logging for almost all operations.
|
||||
- New 'Attributes' column in connections list window showing connection properties such as 'Replica Set', 'SSL' and 'SSH'.
|
||||
- Windows size is saved/restored for Edit, View and Insert Document dialogs.
|
||||
|
||||
Central feature of this release is Replica Set feature. With this new feature, Robomongo can be used to work with replica set clusters with SSL, hosted on localhost, LAN or in the cloud. Even when primary is unreachable, it is possible to work on a secondary with a couple of clicks.
|
||||
|
||||
Blog: http://blog.robomongo.org/robomongo-1-rc1/
|
||||
Blog: http://blog.robomongo.org/robo-3t-1-4/
|
||||
Download: https://robomongo.org/download
|
||||
Watch: [Robomongo youtube channel](https://www.youtube.com/channel/UCM_7WAseRWeeiBikExppstA)
|
||||
All Releases: https://github.com/Studio3T/robomongo/releases
|
||||
Watch: [Robo 3T Youtube channel](https://www.youtube.com/channel/UCM_7WAseRWeeiBikExppstA)
|
||||
Follow: https://twitter.com/Robomongo
|
||||
|
||||
What's Planned for the Next Releases?
|
||||
**Embedded MongoDB shell history:**
|
||||
Robo 3T 1.4 -> MongoDB 4.2
|
||||
Robo 3T 1.3 -> MongoDB 4.0
|
||||
Robo 3T 1.1 -> MongoDB 3.4
|
||||
Robo 3T 0.9 -> MongoDB 3.2
|
||||
Robo 3T 0.8.x -> MongoDB 2.4.0
|
||||
|
||||
\* [Robomongo has been acquired by 3T](https://studio3t.com/press/3t-software-labs-acquires-robomongo-the-most-widely-used-mongodb-tool/)
|
||||
|
||||
What's new in latest Robo 3T 1.4?
|
||||
====================================
|
||||
|
||||
We are currently working towards [Robomongo 1.0 milestone](https://github.com/paralect/robomongo/milestone/20).
|
||||
|
||||
Currently in progress:
|
||||
- Robomongo 1.0 Planning (ETA: 22 Feb 2017)
|
||||
New Features:
|
||||
- Mongo shell 4.2 upgrade
|
||||
- Support for Ubuntu 20.04, macOS Big Sur and macOS 10.15 (Catalina)
|
||||
- SSH: ECDSA and Ed25519 keys support on Windows & macOS (issues #1719, #1530, #1590)
|
||||
- Manually specify visible databases (issues #1696, #1368, #389)
|
||||
- New Welcome Tab - embeds Chromium using QtWebEngine (Windows, macOS only)
|
||||
- Import keys from old version: autoExpand, lineNumbers, debugMode and shellTimeoutSec
|
||||
|
||||
Improvements:
|
||||
- Qt Upgrade (v5.12.8 - Apr/2020, Windows & macOS only)
|
||||
- OpenSSL upgrade (v1.1.1f - Mar/2020, Windows & macOS only)
|
||||
- libssh2 upgrade (v1.9.0 - Jun/2019, Windows & macOS only)
|
||||
- Database explorer section has smaller default width (#1556)
|
||||
- Remember database explorer section size
|
||||
|
||||
Planned for Next Release:
|
||||
- Robomongo 1.0 Planning
|
||||
|
||||
Plans for Future:
|
||||
- User Roles
|
||||
- Support execution of multiple simultaneous queries [#1161](https://github.com/paralect/robomongo/issues/1161)
|
||||
- Selectable mongodb engines [#1249](https://github.com/paralect/robomongo/issues/1249)
|
||||
- Enhancements for stability, running without crashes ([Stability Milestone](https://github.com/paralect/robomongo/milestone/15))
|
||||
- More Documentation
|
||||
- Unit Tests
|
||||
- Refactoring Debug Log module
|
||||
Fixes:
|
||||
- Fix previously broken IPv6 support from command line: robo3t --ipv6
|
||||
- Fix crash when paging used in tabbed result window (#1661)
|
||||
- Fix broken paging in DocumentDB (#1694)
|
||||
- Authentication database option isn't used properly (#1696)
|
||||
- Add/Edit index ops fixed (re-written) (#1692)
|
||||
- Crash when expanding admin users (#1728)
|
||||
- Unable to run query after shell timeout reached (#1529)
|
||||
- Fix broken F2, F3, F4 shortcuts for tabbed result view
|
||||
- One time re-order limit per new connections window to prevent data loss (macOS, #1790)
|
||||
- Fix crash when new shell tab executed in server unreachable case
|
||||
|
||||
Supported Platforms
|
||||
===============
|
||||
|
||||
| MongoDB Versions |
|
||||
| :-------------------- |
|
||||
| 3.2 |
|
||||
| 3.0 |
|
||||
| 2.6 |
|
||||
Note: This sections is for Robo 3T and it directly depends on what MongoDB suppports
|
||||
(See: https://docs.mongodb.com/manual/administration/production-notes/#prod-notes-supported-platforms)
|
||||
|
||||
| MongoDB Cloud Platforms|
|
||||
| :------------ |
|
||||
| MongoDB Atlas |
|
||||
| Compose |
|
||||
| mLab |
|
||||
| ObjectRocket |
|
||||
| Amazon EC2 |
|
||||
| MongoDB Versions | MongoDB Cloud Platforms |
|
||||
| :-------------------- | :-------------------- |
|
||||
| 4.2 | Mongo Atlas |
|
||||
| 4.0 |
|
||||
| 3.6 |
|
||||
|
||||
| Windows | Mac | Linux |
|
||||
|:---------------------- | :---------------| :---------------------------|
|
||||
| Windows 64-bit 10 | Mac OS X 10.11 | Linux Ubuntu 16.04 64-bit* |
|
||||
Windows 64-bit 8.1 | Mac OS X 10.10 | Linux Ubuntu 14.04 64-bit* |
|
||||
| Windows 64-bit 7 | | Linux CentOS 7 64-bit* |
|
||||
| | | Linux CentOS 6 64-bit* |
|
||||
| Windows | Mac | Linux |
|
||||
|:---------------------- | :--------------------------------| :---------------------------|
|
||||
| Windows 64-bit 10 | Mac OS X 11 (Big Sur) | Linux Ubuntu 20.04 64-bit |
|
||||
Windows 64-bit 8.1 | Mac OS X 10.15 (Catalina) | Linux Ubuntu 18.04 64-bit |
|
||||
| Windows 64-bit 7 | Mac OS X 10.14 (Mojave) | |
|
||||
|
||||
\* latest stable build
|
||||
|
||||
|
||||
Download
|
||||
========
|
||||
|
||||
You can download tested install packages for OS X, Windows, and Linux from our site: [www.robomongo.org](http://www.robomongo.org).
|
||||
|
||||
The latest stable release is currently [**Robomongo 0.9.0**](http://blog.robomongo.org/robomongo-0-9-0-final/).
|
||||
|
||||
Support
|
||||
=======
|
||||
|
||||
Robomongo is an open source project driven by volunteers. We'll try to get to your questions as soon as we can, but please be patient :).
|
||||
|
||||
You can:
|
||||
|
||||
- [Create a new issue in the Github issue queue](https://github.com/paralect/robomongo/issues)
|
||||
|
||||
- [Join developer discussion on Gitter](https://gitter.im/paralect/robomongo)
|
||||
|
||||
Build
|
||||
=====
|
||||
|
||||
The wiki contains prerequisites and instructions to [Build Robomongo](https://github.com/paralect/robomongo/wiki).
|
||||
|
||||
If you want to compile from source yourself, you should be able to do so cleanly from a [release branch](https://github.com/paralect/robomongo/releases).
|
||||
|
||||
Contribute!
|
||||
===========
|
||||
|
||||
### Suggest Features
|
||||
|
||||
New feature suggestions or UI improvements are always welcome.
|
||||
[Create a new feature request on github](https://github.com/paralect/robomongo/issues/new)
|
||||
|
||||
This project is powered by open source volunteers, so we have a limited amount of development resource to address all requests. We will certainly make best efforts to progress (particularly for those with strong community upvotes).
|
||||
|
||||
### Code Contributions
|
||||
|
||||
See all docs here: https://github.com/Studio3T/robomongo/wiki
|
||||
|
||||
**Some important docs:**
|
||||
- [Build Diagram](https://github.com/Studio3T/robomongo/wiki/Robo-3T-Schematics:-Build,-Class-and-UI-Diagrams#1-build-diagram)
|
||||
- [Static Code Analysis](https://github.com/Studio3T/robomongo/wiki/Static-Code-Analysis)
|
||||
- [Robo 3T Feature Specisification](https://github.com/Studio3T/robomongo/wiki/Feature-Spec)
|
||||
- [Debugging](https://github.com/Studio3T/robomongo/blob/master/docs/Debug.md)
|
||||
- [Schematics](https://github.com/Studio3T/robomongo/tree/master/schematics)
|
||||
|
||||
Code contributions are always welcome! Just try to follow our pre-commit checks and coding style:
|
||||
- [Robomongo Code Quality](https://github.com/paralect/robomongo/wiki/Robomongo-Code-Quality)
|
||||
- [Robomongo Coding Style](https://github.com/paralect/robomongo/wiki/Robomongo-Coding-Style)
|
||||
- [Robo 3T Code Quality](https://github.com/paralect/robomongo/wiki/Robomongo-Code-Quality)
|
||||
- [Robo 3T C++11/14 Transition Guide](https://github.com/Studio3T/robomongo/wiki/Robomongo-Cplusplus-11,-14-Transition-Guide)
|
||||
- [Robo 3T Coding Style](https://github.com/paralect/robomongo/wiki/Robomongo-Coding-Style)
|
||||
|
||||
If you plan to contribute, please create a Github issue (or comment on the relevant existing issue) so we can help coordinate with upcoming release plans.
|
||||
|
||||
For a general workflow, see Github's guide to [Fork a Repo](https://help.github.com/articles/fork-a-repo/).
|
||||
|
||||
Pull requests (PRs) should generally be for discrete issues (i.e. one issue per PR please) and be clean to merge against the current master branch. It would also be helpful if you can confirm what testing has been done (specific O/S targets and MongoDB versions if applicable).
|
||||
|
||||
A usual naming approach for feature branches is `issue-###`. Include the issue number in your commit message / pull request description to link the PR to the original issue.
|
||||
@@ -121,19 +98,41 @@ A usual naming approach for feature branches is `issue-###`. Include the issue n
|
||||
For example:
|
||||
```#248: updated QScintilla to 2.4.8 for retina display support".```
|
||||
|
||||
### Design
|
||||
|
||||
There are some cosmetic issues we could use help with (designing images or UI). They are marked in the issue queue with a [`Cosmetic`](https://github.com/paralect/robomongo/labels/cosmetic) label. If you see an open issue that you'd like to contribute to, please feel free to volunteer by commenting on it.
|
||||
|
||||
### Testing
|
||||
|
||||
There are a number of issues we could use help with reproducing. They are marked in the issue queue with a [`Needs Repro`](https://github.com/paralect/robomongo/labels/needs%20repro) label. If you see an open issue that doesn't appear to be reproducible yet, please feel free to test and comment with your findings.
|
||||
- [Unit-Tests](https://github.com/Studio3T/robomongo/wiki/Unit-Tests)
|
||||
- [Manual Tests](wiki/Tests)
|
||||
- See all docs here: https://github.com/Studio3T/robomongo/wiki
|
||||
|
||||
### Suggest Features
|
||||
|
||||
New feature suggestions or UI improvements are always welcome.
|
||||
[Create a new feature request on github](https://github.com/paralect/robomongo/issues/new)
|
||||
|
||||
This project is powered by open source volunteers, so we have a limited amount of development resource to address all requests. We will certainly make best efforts to progress (particularly for those with strong community upvotes).
|
||||
|
||||
|
||||
Download
|
||||
========
|
||||
|
||||
You can download tested installer packages for macOS, Windows, and Linux from our site: [www.robomongo.org](http://www.robomongo.org).
|
||||
|
||||
Support
|
||||
=======
|
||||
|
||||
Robo 3T is an open source project driven by volunteers. We'll try to get to your questions as soon as we can, but please be patient :).
|
||||
|
||||
You can:
|
||||
|
||||
- [Create a new issue in the Github issue queue](https://github.com/paralect/robomongo/issues)
|
||||
|
||||
- [Join developer discussion on Gitter](https://gitter.im/paralect/robomongo)
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
Copyright (C) 2013-2017 [Paralect, Inc](http://www.paralect.com)
|
||||
Copyright 2014-2021 [3T Software Labs Ltd](https://studio3t.com/). All rights reserved.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 3 as
|
||||
|
||||
@@ -3,6 +3,8 @@ Bash fronted for CMake
|
||||
|
||||
If you want to use this scripts, you need to set single environment variable:
|
||||
|
||||
E.g.:
|
||||
|
||||
export ROBOMONGO_CMAKE_PREFIX_PATH="/path/to/qt-5/5.5/gcc_64;/path/to/robomongo-shell"
|
||||
|
||||
Build Robomongo:
|
||||
@@ -14,7 +16,16 @@ Install Robomongo:
|
||||
|
||||
$ bin/install
|
||||
|
||||
Run Robomongo:
|
||||
|
||||
$ bin/run
|
||||
|
||||
Pack Robomongo:
|
||||
|
||||
$ bin/pack
|
||||
|
||||
More:
|
||||
- [Build Robo 3T - Mac OS X and Linux](https://github.com/paralect/robomongo/blob/master/docs/BuildRobo3TOnMacAndLinux.md)
|
||||
- [Build Robo 3T - Windows](https://github.com/paralect/robomongo/blob/master/docs/BuildRobo3TOnWindows.md)
|
||||
- [Unit Tests](wiki/Unit-Tests)
|
||||
- [Static Code Analysis](wiki/Static-Code-Analysis)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1
|
||||
source $BIN_DIR/common/setup $1 # $1: release or debug
|
||||
|
||||
cd $BUILD_DIR
|
||||
cmake --build . "${@:2}" -- -j8
|
||||
cmake --build . "${@:2}" -- -j8
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
|
||||
source $BIN_DIR/build || exit $?
|
||||
source $BIN_DIR/run-tests $1
|
||||
@@ -0,0 +1,15 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
rem Path to bin and project folder
|
||||
set BIN_DIR_WITH_BACKSLASH=%~dp0%
|
||||
set BIN_DIR=%BIN_DIR_WITH_BACKSLASH:~0,-1%
|
||||
set PROJECT_DIR=%BIN_DIR%\..
|
||||
|
||||
rem Run build
|
||||
call "%BIN_DIR%\build.bat" %*
|
||||
if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
|
||||
rem Run tests
|
||||
call "%BIN_DIR%\run-tests.bat" %*
|
||||
if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
@@ -13,3 +13,8 @@ if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
rem Run build
|
||||
cd "%BUILD_DIR%"
|
||||
cmake --build . --config %BUILD_TYPE%
|
||||
|
||||
rem Install debug *.dll files
|
||||
if "%BUILD_TYPE%" == "Debug" (
|
||||
call "%BIN_DIR%\install-debug-dlls.bat" %*
|
||||
)
|
||||
@@ -0,0 +1,10 @@
|
||||
bugprone-*
|
||||
cert-*
|
||||
clang-analyzer-*
|
||||
cppcoreguidelines-*
|
||||
concurrency-*
|
||||
hicpp-*
|
||||
llvm-*
|
||||
misc-*
|
||||
performance-*
|
||||
readability-*
|
||||
@@ -0,0 +1,4 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<EnableClangTidyCodeAnalysis>true</EnableClangTidyCodeAnalysis>
|
||||
<ClangTidyChecks></ClangTidyChecks>
|
||||
</PropertyGroup>
|
||||
@@ -27,23 +27,4 @@ PACK_PREFIX=$BUILD_DIR/package
|
||||
|
||||
PREFIX_PATH=$ROBOMONGO_CMAKE_PREFIX_PATH
|
||||
|
||||
mkdir -p $BUILD_DIR
|
||||
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
# On Mac OS we specify minimal OS version that we support.
|
||||
#
|
||||
# The following environment variable will set "-mmacosx-version-min=10.6" option
|
||||
# for compiler. From documentation to GCC or Clang:
|
||||
#
|
||||
# -mmacosx-version-min=version
|
||||
#
|
||||
# The earliest version of MacOS X that this executable will run on is
|
||||
# version. Typical values of version include 10.1, 10.2, and 10.3.9.
|
||||
#
|
||||
# This value can also be set with the MACOSX_DEPLOYMENT_TARGET environment
|
||||
# variable. If both the command-line option is specified and the
|
||||
# environment variable is set, the command-line option will take precedence.
|
||||
#
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.9
|
||||
fi
|
||||
|
||||
mkdir -p $BUILD_DIR
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1
|
||||
source $BIN_DIR/common/setup $1 # $1: release or debug
|
||||
|
||||
cd $BUILD_DIR
|
||||
cmake -D "CMAKE_PREFIX_PATH=$PREFIX_PATH" -D "CMAKE_BUILD_TYPE=$BUILD_TYPE" -D "CMAKE_INSTALL_PREFIX=$INSTALL_PREFIX" "${@:2}" $PROJECT_DIR
|
||||
# $BUILD_TYPE: Release or Debug
|
||||
cmake -D "CMAKE_PREFIX_PATH=$PREFIX_PATH" -D "CMAKE_BUILD_TYPE=$BUILD_TYPE" -D "CMAKE_INSTALL_PREFIX=$INSTALL_PREFIX" "${@:2}" $PROJECT_DIR
|
||||
@@ -11,5 +11,11 @@ call "%BIN_DIR%\common\setup.bat" %*
|
||||
if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
|
||||
rem Run CMake configuration step
|
||||
rem BUILD_TYPE: Release or Debug
|
||||
cd "%BUILD_DIR%"
|
||||
cmake -G "Visual Studio 12 2013 Win64" -D "CMAKE_PREFIX_PATH=%PREFIX_PATH%" -D "CMAKE_BUILD_TYPE=%BUILD_TYPE%" -D "CMAKE_INSTALL_PREFIX=%INSTALL_PREFIX%" %PROJECT_DIR%
|
||||
cmake -G "Visual Studio 15 2017 Win64" -D "CMAKE_PREFIX_PATH=%PREFIX_PATH%" -D "CMAKE_BUILD_TYPE=%BUILD_TYPE%" -D "CMAKE_INSTALL_PREFIX=%INSTALL_PREFIX%" %PROJECT_DIR%
|
||||
|
||||
@REM echo ___________________________________________________________________
|
||||
@REM rem Enable Clang Tidy for Visual Studio 2019 IDE ...
|
||||
@REM set ROBO_PROJ_FILE=%BUILD_DIR%/src/robomongo/robomongo.vcxproj
|
||||
@REM python %BIN_DIR%\enable-visual-studio-clang-tidy.py %ROBO_PROJ_FILE% %BIN_DIR%
|
||||
@@ -0,0 +1,44 @@
|
||||
import sys
|
||||
from lxml import etree
|
||||
|
||||
print('\nEnabling Clang Tidy for Visual Studio 2019')
|
||||
|
||||
robo_proj_xml = sys.argv[1]
|
||||
clang_tidy_xml = sys.argv[2] + '/clang-tidy.xml'
|
||||
clang_checks_txt = sys.argv[2] + '/clang-checks.txt'
|
||||
print(sys.argv[0] + ":\nProcessing: " + sys.argv[1])
|
||||
|
||||
## Read clang checks
|
||||
clang_checks = None
|
||||
with open(clang_checks_txt, "r") as file:
|
||||
clang_checks = file.read().replace('\n', ',')
|
||||
|
||||
##
|
||||
tree = etree.parse(robo_proj_xml)
|
||||
ns = {'ns':'http://schemas.microsoft.com/developer/msbuild/2003'}
|
||||
if(tree.find('//ns:EnableClangTidyCodeAnalysis', namespaces=ns) is not None):
|
||||
tree.find('//ns:ClangTidyChecks', namespaces=ns).text = clang_checks
|
||||
tree.write(robo_proj_xml)
|
||||
print('Finished')
|
||||
sys.exit()
|
||||
|
||||
## Append clang_tidy_xml - Todo: refactor using etree
|
||||
with open(robo_proj_xml, "r") as in_file:
|
||||
buf = in_file.readlines()
|
||||
|
||||
with open(clang_tidy_xml, "r") as in_file:
|
||||
clang_tidy_xml_buf = in_file.read()
|
||||
|
||||
appended = False
|
||||
with open(robo_proj_xml, "w") as out_file:
|
||||
for line in buf:
|
||||
if "</ItemGroup>" in line and appended == False:
|
||||
line = line + clang_tidy_xml_buf
|
||||
appended = True
|
||||
out_file.write(line)
|
||||
|
||||
## Add clang checks
|
||||
tree = etree.parse(robo_proj_xml)
|
||||
tree.find('//ns:ClangTidyChecks', namespaces=ns).text = clang_checks
|
||||
tree.write(robo_proj_xml)
|
||||
print('Finished')
|
||||
@@ -0,0 +1,54 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
rem // This script installs debug *.dll files
|
||||
rem -------------------------------------------
|
||||
|
||||
set INSTALL_DIR=%BUILD_DIR%\src\robomongo\Debug\
|
||||
if not exist %INSTALL_DIR%*.dll (
|
||||
echo ----------------------------------------
|
||||
echo Installing debug *.dll files ...
|
||||
echo INSTALL_DIR: %INSTALL_DIR%
|
||||
echo ----------------------------------------
|
||||
)
|
||||
|
||||
rem // Find OpenSSL and Qt paths
|
||||
for %%i in (%ROBOMONGO_CMAKE_PREFIX_PATH%) do (
|
||||
set xx=%%i
|
||||
if not "!xx!"=="!xx:ssl=!" ( set OPENSSL_DIR=!xx! )
|
||||
if not "!xx!"=="!xx:qt=!" ( set Qt_DIR=!xx! )
|
||||
)
|
||||
set OPENSSL_DIR=%OPENSSL_DIR: =%
|
||||
set Qt_DIR=%Qt_DIR: =%
|
||||
|
||||
rem // Copy dll files
|
||||
for /d %%a in (
|
||||
"%VS140COMNTOOLS%\..\..\VC\redist\debug_nonredist\x64\Microsoft.VC140.DebugCRT\msvcp140d.dll"
|
||||
"%VS140COMNTOOLS%\..\..\VC\redist\debug_nonredist\x64\Microsoft.VC140.DebugCRT\vcruntime140d.dll"
|
||||
"%OPENSSL_DIR%\libssl-1_1-x64.dll"
|
||||
"%OPENSSL_DIR%\libcrypto-1_1-x64.dll"
|
||||
"%Qt_DIR%\bin\Qt5Cored.dll"
|
||||
"%Qt_DIR%\bin\Qt5Guid.dll"
|
||||
"%Qt_DIR%\bin\Qt5Networkd.dll"
|
||||
"%Qt_DIR%\bin\Qt5Widgetsd.dll"
|
||||
"%Qt_DIR%\bin\Qt5Positioningd.dll"
|
||||
"%Qt_DIR%\bin\Qt5Qmld.dll"
|
||||
"%Qt_DIR%\bin\Qt5Quickd.dll"
|
||||
"%Qt_DIR%\bin\Qt5QuickWidgetsd.dll"
|
||||
"%Qt_DIR%\bin\Qt5WebChanneld.dll"
|
||||
"%Qt_DIR%\bin\Qt5WebEngineCored.dll"
|
||||
"%Qt_DIR%\bin\Qt5WebEngineWidgetsd.dll"
|
||||
"%Qt_DIR%\bin\Qt5PrintSupportd.dll"
|
||||
) do (
|
||||
if not exist !INSTALL_DIR!%%~NXa (
|
||||
xcopy %%a !INSTALL_DIR! /d /y
|
||||
)
|
||||
)
|
||||
|
||||
if not exist %INSTALL_DIR%\imageformats\qgifd.dll (
|
||||
xcopy /s "%Qt_DIR%\plugins\imageformats" %INSTALL_DIR%\imageformats\ /d /y
|
||||
)
|
||||
|
||||
if not exist %INSTALL_DIR%\platforms\qminimald.dll (
|
||||
xcopy /s "%Qt_DIR%\plugins\platforms" %INSTALL_DIR%\platforms\ /d /y
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
call "clean.bat" %*
|
||||
call "configure.bat" %*
|
||||
call "build.bat" %*
|
||||
@@ -4,9 +4,11 @@ BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get director
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1
|
||||
|
||||
echo "Note: ./install must be executed before this script."
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
# On Mac OS we should run executable from bundle
|
||||
"$BUILD_DIR/src/robomongo/Robomongo.app/Contents/MacOS/Robomongo"
|
||||
echo "Starting $BUILD_DIR/install/Robo 3T.app/Contents/MacOS/Robo 3T"
|
||||
"$BUILD_DIR/install/Robo 3T.app/Contents/MacOS/Robo 3T"
|
||||
else
|
||||
"$BUILD_DIR/src/robomongo/robomongo"
|
||||
fi
|
||||
echo "Starting $BUILD_DIR/install/bin/robo3t"
|
||||
"$BUILD_DIR/install/bin/robo3t"
|
||||
fi
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
### Common Setup
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1 # $1: release or debug
|
||||
|
||||
### Setup
|
||||
CLANG_TIDY_BUILD_DIR=$PROJECT_DIR/build/clang-tidy-$BUILD_TYPE
|
||||
rm -rf $CLANG_TIDY_BUILD_DIR
|
||||
mkdir -p $CLANG_TIDY_BUILD_DIR && cd $CLANG_TIDY_BUILD_DIR
|
||||
|
||||
### Configure cmake
|
||||
# Info: $BUILD_TYPE == Release or Debug
|
||||
cmake -D "CMAKE_EXPORT_COMPILE_COMMANDS=ON" -D "CMAKE_PREFIX_PATH=$PREFIX_PATH" -D "CMAKE_BUILD_TYPE=$BUILD_TYPE" -D "CMAKE_INSTALL_PREFIX=$INSTALL_PREFIX" "${@:2}" $PROJECT_DIR
|
||||
echo -e "\n------------------------------------------------"
|
||||
echo "clang-tidy configured. Mode: $BUILD_TYPE"
|
||||
echo -e "------------------------------------------------\n"
|
||||
|
||||
### Run clang-tidy
|
||||
FILE_OR_PATH=/opt/robo/src/robomongo/ # or MainWindow.cpp
|
||||
CHECKS=clang-analyzer-*,readability-implicit-bool-conversion
|
||||
# All Checks: https://clang.llvm.org/extra/clang-tidy/checks/list.html
|
||||
|
||||
# e.g. $BIN_DIR/run-clang-tidy.py -checks=clang-analyzer-*,readability-implicit-bool-conversion /opt/robo/src/robomongo/
|
||||
$BIN_DIR/run-clang-tidy.py -checks=$CHECKS $FILE_OR_PATH
|
||||
|
||||
echo -e "\n------------------------------------------------"
|
||||
echo "clang-tidy finished"
|
||||
echo "Mode : $BUILD_TYPE"
|
||||
echo "CLANG_TIDY_BUILD_DIR: $CLANG_TIDY_BUILD_DIR"
|
||||
echo "Command executed : $BIN_DIR/run-clang-tidy.py -checks=$CHECKS $FILE_OR_PATH"
|
||||
echo -e "------------------------------------------------\n"
|
||||
@@ -0,0 +1,326 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
#===- run-clang-tidy.py - Parallel clang-tidy runner ---------*- python -*--===#
|
||||
#
|
||||
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
# See https://llvm.org/LICENSE.txt for license information.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
#===------------------------------------------------------------------------===#
|
||||
# FIXME: Integrate with clang-tidy-diff.py
|
||||
|
||||
"""
|
||||
Parallel clang-tidy runner
|
||||
==========================
|
||||
|
||||
Runs clang-tidy over all files in a compilation database. Requires clang-tidy
|
||||
and clang-apply-replacements in $PATH.
|
||||
|
||||
Example invocations.
|
||||
- Run clang-tidy on all files in the current working directory with a default
|
||||
set of checks and show warnings in the cpp files and all project headers.
|
||||
run-clang-tidy.py $PWD
|
||||
|
||||
- Fix all header guards.
|
||||
run-clang-tidy.py -fix -checks=-*,llvm-header-guard
|
||||
|
||||
- Fix all header guards included from clang-tidy and header guards
|
||||
for clang-tidy headers.
|
||||
run-clang-tidy.py -fix -checks=-*,llvm-header-guard extra/clang-tidy \
|
||||
-header-filter=extra/clang-tidy
|
||||
|
||||
Compilation database setup:
|
||||
http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import glob
|
||||
import json
|
||||
import multiprocessing
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import threading
|
||||
import traceback
|
||||
|
||||
try:
|
||||
import yaml
|
||||
except ImportError:
|
||||
yaml = None
|
||||
|
||||
is_py2 = sys.version[0] == '2'
|
||||
|
||||
if is_py2:
|
||||
import Queue as queue
|
||||
else:
|
||||
import queue as queue
|
||||
|
||||
def find_compilation_database(path):
|
||||
"""Adjusts the directory until a compilation database is found."""
|
||||
result = './'
|
||||
while not os.path.isfile(os.path.join(result, path)):
|
||||
if os.path.realpath(result) == '/':
|
||||
print('Error: could not find compilation database.')
|
||||
sys.exit(1)
|
||||
result += '../'
|
||||
return os.path.realpath(result)
|
||||
|
||||
|
||||
def make_absolute(f, directory):
|
||||
if os.path.isabs(f):
|
||||
return f
|
||||
return os.path.normpath(os.path.join(directory, f))
|
||||
|
||||
|
||||
def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path,
|
||||
header_filter, extra_arg, extra_arg_before, quiet,
|
||||
config):
|
||||
"""Gets a command line for clang-tidy."""
|
||||
start = [clang_tidy_binary]
|
||||
if header_filter is not None:
|
||||
start.append('-header-filter=' + header_filter)
|
||||
if checks:
|
||||
start.append('-checks=' + checks)
|
||||
if tmpdir is not None:
|
||||
start.append('-export-fixes')
|
||||
# Get a temporary file. We immediately close the handle so clang-tidy can
|
||||
# overwrite it.
|
||||
(handle, name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir)
|
||||
os.close(handle)
|
||||
start.append(name)
|
||||
for arg in extra_arg:
|
||||
start.append('-extra-arg=%s' % arg)
|
||||
for arg in extra_arg_before:
|
||||
start.append('-extra-arg-before=%s' % arg)
|
||||
start.append('-p=' + build_path)
|
||||
if quiet:
|
||||
start.append('-quiet')
|
||||
if config:
|
||||
start.append('-config=' + config)
|
||||
start.append(f)
|
||||
return start
|
||||
|
||||
|
||||
def merge_replacement_files(tmpdir, mergefile):
|
||||
"""Merge all replacement files in a directory into a single file"""
|
||||
# The fixes suggested by clang-tidy >= 4.0.0 are given under
|
||||
# the top level key 'Diagnostics' in the output yaml files
|
||||
mergekey="Diagnostics"
|
||||
merged=[]
|
||||
for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')):
|
||||
content = yaml.safe_load(open(replacefile, 'r'))
|
||||
if not content:
|
||||
continue # Skip empty files.
|
||||
merged.extend(content.get(mergekey, []))
|
||||
|
||||
if merged:
|
||||
# MainSourceFile: The key is required by the definition inside
|
||||
# include/clang/Tooling/ReplacementsYaml.h, but the value
|
||||
# is actually never used inside clang-apply-replacements,
|
||||
# so we set it to '' here.
|
||||
output = { 'MainSourceFile': '', mergekey: merged }
|
||||
with open(mergefile, 'w') as out:
|
||||
yaml.safe_dump(output, out)
|
||||
else:
|
||||
# Empty the file:
|
||||
open(mergefile, 'w').close()
|
||||
|
||||
|
||||
def check_clang_apply_replacements_binary(args):
|
||||
"""Checks if invoking supplied clang-apply-replacements binary works."""
|
||||
try:
|
||||
subprocess.check_call([args.clang_apply_replacements_binary, '--version'])
|
||||
except:
|
||||
print('Unable to run clang-apply-replacements. Is clang-apply-replacements '
|
||||
'binary correctly specified?', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def apply_fixes(args, tmpdir):
|
||||
"""Calls clang-apply-fixes on a given directory."""
|
||||
invocation = [args.clang_apply_replacements_binary]
|
||||
if args.format:
|
||||
invocation.append('-format')
|
||||
if args.style:
|
||||
invocation.append('-style=' + args.style)
|
||||
invocation.append(tmpdir)
|
||||
subprocess.call(invocation)
|
||||
|
||||
|
||||
def run_tidy(args, tmpdir, build_path, queue, lock, failed_files):
|
||||
"""Takes filenames out of queue and runs clang-tidy on them."""
|
||||
while True:
|
||||
name = queue.get()
|
||||
invocation = get_tidy_invocation(name, args.clang_tidy_binary, args.checks,
|
||||
tmpdir, build_path, args.header_filter,
|
||||
args.extra_arg, args.extra_arg_before,
|
||||
args.quiet, args.config)
|
||||
|
||||
proc = subprocess.Popen(invocation, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
output, err = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
failed_files.append(name)
|
||||
with lock:
|
||||
sys.stdout.write(' '.join(invocation) + '\n' + output.decode('utf-8'))
|
||||
if len(err) > 0:
|
||||
sys.stdout.flush()
|
||||
sys.stderr.write(err.decode('utf-8'))
|
||||
queue.task_done()
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Runs clang-tidy over all files '
|
||||
'in a compilation database. Requires '
|
||||
'clang-tidy and clang-apply-replacements in '
|
||||
'$PATH.')
|
||||
parser.add_argument('-clang-tidy-binary', metavar='PATH',
|
||||
default='clang-tidy',
|
||||
help='path to clang-tidy binary')
|
||||
parser.add_argument('-clang-apply-replacements-binary', metavar='PATH',
|
||||
default='clang-apply-replacements',
|
||||
help='path to clang-apply-replacements binary')
|
||||
parser.add_argument('-checks', default=None,
|
||||
help='checks filter, when not specified, use clang-tidy '
|
||||
'default')
|
||||
parser.add_argument('-config', default=None,
|
||||
help='Specifies a configuration in YAML/JSON format: '
|
||||
' -config="{Checks: \'*\', '
|
||||
' CheckOptions: [{key: x, '
|
||||
' value: y}]}" '
|
||||
'When the value is empty, clang-tidy will '
|
||||
'attempt to find a file named .clang-tidy for '
|
||||
'each source file in its parent directories.')
|
||||
parser.add_argument('-header-filter', default=None,
|
||||
help='regular expression matching the names of the '
|
||||
'headers to output diagnostics from. Diagnostics from '
|
||||
'the main file of each translation unit are always '
|
||||
'displayed.')
|
||||
if yaml:
|
||||
parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes',
|
||||
help='Create a yaml file to store suggested fixes in, '
|
||||
'which can be applied with clang-apply-replacements.')
|
||||
parser.add_argument('-j', type=int, default=0,
|
||||
help='number of tidy instances to be run in parallel.')
|
||||
parser.add_argument('files', nargs='*', default=['.*'],
|
||||
help='files to be processed (regex on path)')
|
||||
parser.add_argument('-fix', action='store_true', help='apply fix-its')
|
||||
parser.add_argument('-format', action='store_true', help='Reformat code '
|
||||
'after applying fixes')
|
||||
parser.add_argument('-style', default='file', help='The style of reformat '
|
||||
'code after applying fixes')
|
||||
parser.add_argument('-p', dest='build_path',
|
||||
help='Path used to read a compile command database.')
|
||||
parser.add_argument('-extra-arg', dest='extra_arg',
|
||||
action='append', default=[],
|
||||
help='Additional argument to append to the compiler '
|
||||
'command line.')
|
||||
parser.add_argument('-extra-arg-before', dest='extra_arg_before',
|
||||
action='append', default=[],
|
||||
help='Additional argument to prepend to the compiler '
|
||||
'command line.')
|
||||
parser.add_argument('-quiet', action='store_true',
|
||||
help='Run clang-tidy in quiet mode')
|
||||
args = parser.parse_args()
|
||||
|
||||
db_path = 'compile_commands.json'
|
||||
|
||||
if args.build_path is not None:
|
||||
build_path = args.build_path
|
||||
else:
|
||||
# Find our database
|
||||
build_path = find_compilation_database(db_path)
|
||||
|
||||
try:
|
||||
invocation = [args.clang_tidy_binary, '-list-checks']
|
||||
invocation.append('-p=' + build_path)
|
||||
if args.checks:
|
||||
invocation.append('-checks=' + args.checks)
|
||||
invocation.append('-')
|
||||
if args.quiet:
|
||||
# Even with -quiet we still want to check if we can call clang-tidy.
|
||||
with open(os.devnull, 'w') as dev_null:
|
||||
subprocess.check_call(invocation, stdout=dev_null)
|
||||
else:
|
||||
subprocess.check_call(invocation)
|
||||
except:
|
||||
print("Unable to run clang-tidy.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Load the database and extract all files.
|
||||
database = json.load(open(os.path.join(build_path, db_path)))
|
||||
files = [make_absolute(entry['file'], entry['directory'])
|
||||
for entry in database]
|
||||
|
||||
max_task = args.j
|
||||
if max_task == 0:
|
||||
max_task = multiprocessing.cpu_count()
|
||||
|
||||
tmpdir = None
|
||||
if args.fix or (yaml and args.export_fixes):
|
||||
check_clang_apply_replacements_binary(args)
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
|
||||
# Build up a big regexy filter from all command line arguments.
|
||||
file_name_re = re.compile('|'.join(args.files))
|
||||
|
||||
return_code = 0
|
||||
try:
|
||||
# Spin up a bunch of tidy-launching threads.
|
||||
task_queue = queue.Queue(max_task)
|
||||
# List of files with a non-zero return code.
|
||||
failed_files = []
|
||||
lock = threading.Lock()
|
||||
for _ in range(max_task):
|
||||
t = threading.Thread(target=run_tidy,
|
||||
args=(args, tmpdir, build_path, task_queue, lock, failed_files))
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
# Fill the queue with files.
|
||||
for name in files:
|
||||
if file_name_re.search(name):
|
||||
task_queue.put(name)
|
||||
|
||||
# Wait for all threads to be done.
|
||||
task_queue.join()
|
||||
if len(failed_files):
|
||||
return_code = 1
|
||||
|
||||
except KeyboardInterrupt:
|
||||
# This is a sad hack. Unfortunately subprocess goes
|
||||
# bonkers with ctrl-c and we start forking merrily.
|
||||
print('\nCtrl-C detected, goodbye.')
|
||||
if tmpdir:
|
||||
shutil.rmtree(tmpdir)
|
||||
os.kill(0, 9)
|
||||
|
||||
if yaml and args.export_fixes:
|
||||
print('Writing fixes to ' + args.export_fixes + ' ...')
|
||||
try:
|
||||
merge_replacement_files(tmpdir, args.export_fixes)
|
||||
except:
|
||||
print('Error exporting fixes.\n', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
return_code=1
|
||||
|
||||
if args.fix:
|
||||
print('Applying fixes ...')
|
||||
try:
|
||||
apply_fixes(args, tmpdir)
|
||||
except:
|
||||
print('Error applying fixes.\n', file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
return_code=1
|
||||
|
||||
if tmpdir:
|
||||
shutil.rmtree(tmpdir)
|
||||
sys.exit(return_code)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
set CPP_VER=c++17
|
||||
|
||||
set FILE_OR_DIR=..\src\robomongo\
|
||||
set PARAM_1=%1
|
||||
if not "%PARAM_1%" == "" (
|
||||
set FILE_OR_DIR=%PARAM_1%
|
||||
)
|
||||
|
||||
rem Run analysis
|
||||
echo.
|
||||
echo ---------------------- Running cppcheck ----------------------
|
||||
echo.
|
||||
call cppcheck %FILE_OR_DIR% --enable=all --std=%CPP_VER%
|
||||
echo.
|
||||
echo ---------------------- End of cppcheck ----------------------
|
||||
echo.
|
||||
echo ---------------------- Info ----------------------
|
||||
call cppcheck --version
|
||||
echo Command called: cppcheck %FILE_OR_DIR% --enable=all --std=%CPP_VER%
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1 # $1: release or debug
|
||||
|
||||
mkdir -p ../scan-build && cd ../scan-build
|
||||
# $BUILD_TYPE: Release or Debug
|
||||
# Hint: Use "--use-analyzer /usr/local/opt/llvm/bin/clang++" after "-v"
|
||||
scan-build -v cmake -D "CMAKE_PREFIX_PATH=$PREFIX_PATH" -D "CMAKE_BUILD_TYPE=$BUILD_TYPE" -D "CMAKE_INSTALL_PREFIX=$INSTALL_PREFIX" "${@:2}" $PROJECT_DIR
|
||||
echo -e "\n------------------------------------------------"
|
||||
echo "Configured with scan-build in $BUILD_TYPE mode"
|
||||
echo -e "------------------------------------------------\n"
|
||||
scan-build cmake --build . "${@:2}" -- -j8
|
||||
echo -e "\n------------------------------------------------"
|
||||
echo "Built with scan-build in $BUILD_TYPE mode"
|
||||
echo -e "------------------------------------------------\n"
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Get directory of this file
|
||||
PROJECT_DIR=$(dirname $BIN_DIR) # Get root directory of project
|
||||
source $BIN_DIR/common/setup $1
|
||||
|
||||
echo
|
||||
echo "******************* Running unit tests in $BUILD_TYPE mode *******************"
|
||||
echo
|
||||
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
EXE="$BUILD_DIR/src/robomongo-unit-tests/robo_unit_tests"
|
||||
echo "Running file: $EXE"
|
||||
"$EXE"
|
||||
else # Linux
|
||||
echo "Error: Currently unit testing is disabled for Linux due to MongoDB linking problem"
|
||||
exit 0
|
||||
EXE="$BUILD_DIR/src/robomongo-unit-tests/robo_unit_tests"
|
||||
echo "Running file: $EXE"
|
||||
"$EXE"
|
||||
fi
|
||||
@@ -0,0 +1,20 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
rem Path to bin and project folder
|
||||
set BIN_DIR_WITH_BACKSLASH=%~dp0%
|
||||
set BIN_DIR=%BIN_DIR_WITH_BACKSLASH:~0,-1%
|
||||
set PROJECT_DIR=%BIN_DIR%\..
|
||||
|
||||
rem Run common setup code
|
||||
call "%BIN_DIR%\common\setup.bat" %*
|
||||
if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
|
||||
rem Run tests
|
||||
echo.
|
||||
echo ******************* Running unit tests *******************
|
||||
echo Mode: %BUILD_TYPE%
|
||||
set TEST_EXE_DIR=%PROJECT_DIR%\\build\%BUILD_TYPE%\src\robomongo-unit-tests\%BUILD_TYPE%
|
||||
echo Run : %TEST_EXE_DIR%\robo_unit_tests.exe
|
||||
echo.
|
||||
call "%TEST_EXE_DIR%\robo_unit_tests.exe" %*
|
||||
@@ -0,0 +1,29 @@
|
||||
@echo off
|
||||
setlocal enableextensions enabledelayedexpansion
|
||||
|
||||
rem Path to bin and project folder
|
||||
set BIN_DIR_WITH_BACKSLASH=%~dp0%
|
||||
set BIN_DIR=%BIN_DIR_WITH_BACKSLASH:~0,-1%
|
||||
set PROJECT_DIR=%BIN_DIR%\..
|
||||
|
||||
rem Run common setup code
|
||||
call "%BIN_DIR%\common\setup.bat" %*
|
||||
if %ERRORLEVEL% neq 0 (exit /b 1)
|
||||
|
||||
rem Run Visual Studio with RunCodeAnalysis
|
||||
cd "%BUILD_DIR%"
|
||||
set RULE_SET="/p:CodeAnalysisRuleSet=NativeRecommendedRules.ruleset"
|
||||
set OUT_FILE=vs-code-analysis-%BUILD_TYPE%.txt
|
||||
|
||||
echo ------------- Running Visual Studio with RunCodeAnalysis -------------
|
||||
echo Result will be written into file "%OUT_FILE%" in the end.
|
||||
echo ...
|
||||
cmake --build . --config %BUILD_TYPE% -- "/p:RunCodeAnalysis=true" %RULE_SET% > %BIN_DIR%\%OUT_FILE%
|
||||
rem Rules: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets
|
||||
rem https://docs.microsoft.com/en-us/visualstudio/code-quality/rule-set-reference?view=vs-2019
|
||||
|
||||
echo ------------- End of RunCodeAnalysis -------------
|
||||
echo.
|
||||
echo ------------- Info -------------
|
||||
echo Mode : %BUILD_TYPE%
|
||||
echo RULE_SET: %RULE_SET% (see the script comments for more info)
|
||||
@@ -0,0 +1,42 @@
|
||||
import os
|
||||
from os.path import join
|
||||
|
||||
###
|
||||
def force_warning_level_3(file):
|
||||
with open(file, "r") as in_file:
|
||||
buf = in_file.readlines()
|
||||
|
||||
push = '#pragma warning(push, 3)\n'
|
||||
pop = '#pragma warning(pop)\n'
|
||||
|
||||
last_line_has_mongo = False
|
||||
with open(file, "w") as out_file:
|
||||
for line in buf:
|
||||
if line.startswith(('#include <mongo', '#include "mongo')):
|
||||
if last_line_has_mongo:
|
||||
pass # line = line + pop
|
||||
else:
|
||||
line = push + line
|
||||
|
||||
last_line_has_mongo = True
|
||||
else:
|
||||
if last_line_has_mongo:
|
||||
line = pop + line
|
||||
|
||||
last_line_has_mongo = False
|
||||
|
||||
out_file.write(line)
|
||||
|
||||
|
||||
### main
|
||||
root_dir = 'E:\\robo\\src\\robomongo\\'
|
||||
# root_dir = 'E:\\robo\\src\\robomongo\\shell\\bson\\' # for testing
|
||||
print('Processing all source files in root & sub directories...')
|
||||
print('Root Dir:', root_dir)
|
||||
print('---------------------------------------------------------')
|
||||
for path, subdirs, files in os.walk(root_dir):
|
||||
for name in files:
|
||||
if name.endswith(('.h', '.cpp')):
|
||||
file = os.path.join(path, name)
|
||||
print(file)
|
||||
force_warning_level_3(file)
|
||||
@@ -41,38 +41,46 @@ set(MongoDB_DEFINITIONS
|
||||
BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
|
||||
BOOST_THREAD_HAS_BUG
|
||||
MONGO_CONFIG_HAVE_HEADER_UNISTD_H
|
||||
# Suppress "warning C4996: std::allocator..." from third_party\abseil-cpp-master
|
||||
_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING
|
||||
# Suppress "warning C4996: std::iterator..." from third_party\mozjs-60
|
||||
_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING
|
||||
)
|
||||
|
||||
# Set common compiler include directories
|
||||
set(MOZJS_VER mozjs-60)
|
||||
set(MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src
|
||||
${MongoDB_DIR}/src/third_party/boost-1.56.0
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/include
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/mongo_sources
|
||||
${MongoDB_DIR}/src/third_party/pcre-8.37
|
||||
${MongoDB_DIR}/src
|
||||
${MongoDB_DIR}/src/third_party/abseil-cpp-master/abseil-cpp
|
||||
${MongoDB_DIR}/src/third_party/boost-1.70.0
|
||||
${MongoDB_DIR}/src/third_party/fmt/dist/include
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/include
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/mongo_sources
|
||||
${MongoDB_DIR}/src/third_party/pcre-8.42
|
||||
${MongoDB_DIR}/src/third_party/SafeInt
|
||||
${MongoDB_BUILD_DIR}
|
||||
)
|
||||
|
||||
if(SYSTEM_LINUX)
|
||||
set(MongoDB_OBJECT_LIST_PLATFORM_PART linux)
|
||||
list(APPEND MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/platform/x86_64/linux/include)
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/platform/x86_64/linux/include)
|
||||
elseif(SYSTEM_WINDOWS)
|
||||
set(MongoDB_OBJECT_LIST_PLATFORM_PART windows)
|
||||
list(APPEND MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/platform/x86_64/windows/include)
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/platform/x86_64/windows/include)
|
||||
elseif(SYSTEM_MACOSX)
|
||||
set(MongoDB_OBJECT_LIST_PLATFORM_PART macosx)
|
||||
list(APPEND MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/platform/x86_64/osx/include)
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/platform/x86_64/macOS/include)
|
||||
elseif(SYSTEM_FREEBSD)
|
||||
set(MongoDB_OBJECT_LIST_PLATFORM_PART freebsd)
|
||||
list(APPEND MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/platform/x86_64/freebsd/include)
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/platform/x86_64/freebsd/include)
|
||||
elseif(SYSTEM_OPENBSD)
|
||||
set(MongoDB_OBJECT_LIST_PLATFORM_PART openbsd)
|
||||
list(APPEND MongoDB_INCLUDE_DIRS
|
||||
${MongoDB_DIR}/src/third_party/mozjs-38/platform/x86_64/openbsd/include)
|
||||
${MongoDB_DIR}/src/third_party/${MOZJS_VER}/platform/x86_64/openbsd/include)
|
||||
endif()
|
||||
|
||||
# Read list of object files
|
||||
@@ -86,11 +94,30 @@ string(STRIP "${MongoDB_RELATIVE_LIBS}" MongoDB_RELATIVE_LIBS)
|
||||
# Convert string to list
|
||||
string(REPLACE " " ";" MongoDB_RELATIVE_LIBS ${MongoDB_RELATIVE_LIBS})
|
||||
|
||||
# todo: Find a better solution
|
||||
# Robo 1.4: Added as workaround fix for build error:
|
||||
# fatal error LNK1170: line in command file contains 131071 or more characters
|
||||
# Happens when the path of robo-shell is a long string (e.g. "E:/user/code/robomongo-shell")
|
||||
set(MongoDB_OBJECTS_DIR_ENV $ENV{MongoDB_OBJECTS})
|
||||
if(MongoDB_OBJECTS_DIR_ENV)
|
||||
set(MongoDB_OBJECTS_DIR ${MongoDB_OBJECTS_DIR_ENV})
|
||||
else()
|
||||
set(MongoDB_OBJECTS_DIR ${MongoDB_DIR})
|
||||
endif()
|
||||
|
||||
# Convert to absolute path
|
||||
foreach(lib ${MongoDB_RELATIVE_LIBS})
|
||||
list(APPEND MongoDB_LIBS ${MongoDB_DIR}/${lib})
|
||||
list(APPEND MongoDB_LIBS ${MongoDB_OBJECTS_DIR}/${lib})
|
||||
endforeach()
|
||||
|
||||
if(SYSTEM_WINDOWS)
|
||||
list(APPEND MongoDB_LIBS Crypt32.lib Secur32.lib Dnsapi.lib winhttp.lib)
|
||||
elseif(SYSTEM_MACOSX)
|
||||
list(APPEND MongoDB_LIBS -lcurl)
|
||||
elseif(SYSTEM_LINUX)
|
||||
list(APPEND MongoDB_LIBS -lresolv -lcurl)
|
||||
endif()
|
||||
|
||||
# Get MongoDB repository recent tag
|
||||
execute_process(
|
||||
COMMAND git describe --abbrev=0 --tags
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
# Try to find OpenSSL directory (uses CMAKE_PREFIX_PATH locations)
|
||||
#-------------------------------------------
|
||||
|
||||
find_path(
|
||||
OpenSSL_DIR include/openssl/ssl.h
|
||||
DOC "Path to OpenSSL (github.com/openssl/openssl) root directory"
|
||||
@@ -22,12 +21,7 @@ find_path(
|
||||
|
||||
# Find OpenSSL version
|
||||
#-------------------------------------------
|
||||
|
||||
if(SYSTEM_WINDOWS)
|
||||
set (OPENSSL_INCLUDE_DIR "${OpenSSL_DIR}/inc32")
|
||||
else()
|
||||
set (OPENSSL_INCLUDE_DIR "${OpenSSL_DIR}/include")
|
||||
endif()
|
||||
set (OPENSSL_INCLUDE_DIR "${OpenSSL_DIR}/include")
|
||||
|
||||
function(from_hex HEX DEC)
|
||||
string(TOUPPER "${HEX}" HEX)
|
||||
@@ -106,33 +100,30 @@ add_library(ssl SHARED IMPORTED)
|
||||
# Add imported target for crypto (libeay32)
|
||||
add_library(crypto SHARED IMPORTED)
|
||||
|
||||
# todo: refactor
|
||||
if(SYSTEM_WINDOWS)
|
||||
set_target_properties(ssl PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/inc32"
|
||||
IMPORTED_IMPLIB "${OpenSSL_DIR}/out32dll/ssleay32.lib"
|
||||
)
|
||||
set_target_properties(crypto PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/inc32"
|
||||
IMPORTED_IMPLIB "${OpenSSL_DIR}/out32dll/libeay32.lib"
|
||||
)
|
||||
elseif(SYSTEM_MACOSX)
|
||||
set_target_properties(ssl PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libssl.dylib"
|
||||
IMPORTED_IMPLIB "${OpenSSL_DIR}/libssl.lib"
|
||||
)
|
||||
set_target_properties(crypto PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libcrypto.dylib"
|
||||
)
|
||||
elseif(SYSTEM_LINUX)
|
||||
set_target_properties(ssl PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libssl.so"
|
||||
)
|
||||
set_target_properties(crypto PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libcrypto.so"
|
||||
IMPORTED_IMPLIB "${OpenSSL_DIR}/libcrypto.lib"
|
||||
)
|
||||
else()
|
||||
if(SYSTEM_MACOSX)
|
||||
SET(EXT "dylib")
|
||||
elseif(SYSTEM_LINUX)
|
||||
SET(EXT "so")
|
||||
endif()
|
||||
set_target_properties(ssl PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libssl.${EXT}"
|
||||
)
|
||||
set_target_properties(crypto PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenSSL_DIR}/include"
|
||||
IMPORTED_LOCATION "${OpenSSL_DIR}/libcrypto.${EXT}"
|
||||
)
|
||||
endif()
|
||||
|
||||
# End of file
|
||||
@@ -1,3 +1,3 @@
|
||||
|
||||
set(ROBOMONGO_DISPLAY_NAME "Robomongo")
|
||||
set(ROBOMONGO_DISPLAY_FULL_NAME "Robomongo ${PROJECT_VERSION}")
|
||||
set(ROBOMONGO_DISPLAY_NAME "Robo 3T")
|
||||
set(ROBOMONGO_DISPLAY_FULL_NAME "Robo 3T ${PROJECT_VERSION}")
|
||||
|
||||
@@ -1,31 +1,63 @@
|
||||
# Set MONGO_BUILD_FOLDER
|
||||
set(MONGO_BUILD_FOLDER "build/opt") # Release
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(MONGO_BUILD_FOLDER "build/debug")
|
||||
endif()
|
||||
|
||||
# Show configuration summary and build tip
|
||||
message("")
|
||||
message(" _______________[ Robomongo configuration summary ]________________")
|
||||
message(" _______________[ Robo 3T configuration summary ]________________")
|
||||
message("| ")
|
||||
message("|-- Dependencies:")
|
||||
message("| ")
|
||||
message("| Qt5 Core: ${Qt5Core_VERSION} ${Qt5Core_DIR}")
|
||||
message("| Qt5 Gui: ${Qt5Gui_VERSION} ${Qt5Gui_DIR}")
|
||||
message("| Qt5 Widgets: ${Qt5Widgets_VERSION} ${Qt5Widgets_DIR}")
|
||||
message("| Qt5 PrintSupport: ${Qt5Widgets_VERSION} ${Qt5PrintSupport_DIR}")
|
||||
message("| MongoDB: ${MongoDB_VERSION} ${MongoDB_BUILD_DIR}")
|
||||
message("| Qt5 Core: ${Qt5Core_VERSION} ${Qt5Core_DIR}")
|
||||
message("| Qt5 Gui: ${Qt5Gui_VERSION} ${Qt5Gui_DIR}")
|
||||
message("| Qt5 Widgets: ${Qt5Widgets_VERSION} ${Qt5Widgets_DIR}")
|
||||
message("| Qt5 PrintSupport: ${Qt5Widgets_VERSION} ${Qt5PrintSupport_DIR}")
|
||||
message("| Qt5 Network: ${Qt5Network_VERSION} ${Qt5Network_DIR}")
|
||||
message("| Qt5 Xml: ${Qt5Xml_VERSION} ${Qt5Xml_DIR}")
|
||||
if(NOT SYSTEM_LINUX)
|
||||
message("| Qt5 WebEng*Widgets: ${Qt5WebEngineWidgets_VERSION} ${Qt5WebEngineWidgets_DIR}")
|
||||
endif()
|
||||
message("| MongoDB: ${MongoDB_VERSION} ${MongoDB_DIR}")
|
||||
message("| MongoDB Objects: ${MongoDB_VERSION} ${MongoDB_OBJECTS_DIR}/${MONGO_BUILD_FOLDER}")
|
||||
message("| OpenSSL: ${OPENSSL_VERSION} ${OpenSSL_DIR}")
|
||||
message("| libssh2: ${LIBSSH2_VERSION} ${LIBSSH2_DIR}")
|
||||
message("| QJson: ${QJSON_VERSION} ${QJSON_DIR}")
|
||||
message("| QScintilla: ${QSCINTILLA_VERSION} ${QSCINTILLA_DIR}")
|
||||
message("| Google Test: ${GOOGLE_TEST_VERSION} ${GOOGLE_TEST_DIR}")
|
||||
message("| ESPRIMA: ${ESPRIMA_VERSION} ${ESPRIMA_DIR}")
|
||||
message("|")
|
||||
message("|-- Summary:")
|
||||
message("|")
|
||||
message("| System: ${CMAKE_SYSTEM_NAME}")
|
||||
message("| Version: ${PROJECT_VERSION}")
|
||||
message("| System: ${CMAKE_SYSTEM_NAME}")
|
||||
if (SYSTEM_MACOSX)
|
||||
message("| Target SDK: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
message("| Target SDK: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
endif()
|
||||
message("| Build type: ${CMAKE_BUILD_TYPE}")
|
||||
message("| Install path: ${CMAKE_INSTALL_PREFIX}")
|
||||
message("| Build type: ${CMAKE_BUILD_TYPE}")
|
||||
message("| Commit: ${BUILD_NUMBER}")
|
||||
message("| Install path: ${CMAKE_INSTALL_PREFIX}")
|
||||
message("|")
|
||||
message("|-- Building and installing:")
|
||||
message("|-- Build, Run and Install:")
|
||||
message("| ")
|
||||
message("| Now you can build Robomongo with the following command:")
|
||||
message("| $ cmake --build .")
|
||||
message("| $ bin/build")
|
||||
message("| $ bin/run")
|
||||
message("| $ bin/install")
|
||||
message("|")
|
||||
message("| And install it to ${CMAKE_INSTALL_PREFIX}:")
|
||||
message("| $ cmake --build . --target install")
|
||||
message("|-- Run Unit Tests:")
|
||||
message("| ")
|
||||
message("| $ bin/build-and-run-tests")
|
||||
message("| $ bin/run-tests")
|
||||
message("|")
|
||||
message("|-- Run Static Code Analysis:")
|
||||
message("|")
|
||||
if (SYSTEM_WINDOWS)
|
||||
message("| $ bin/run-cppcheck <FILE_PATH OR DIR> (Default: /src/robomongo/)")
|
||||
message("| $ bin/run-vs-code-analysis")
|
||||
else()
|
||||
message("| $ bin/run-clang-tidy")
|
||||
message("| $ bin/run-scan-build")
|
||||
endif()
|
||||
message("|__________________________________________________________________")
|
||||
message("")
|
||||
message("")
|
||||
@@ -24,10 +24,11 @@ if(SYSTEM_LINUX)
|
||||
set(qt_conf_dir ${bin_dir})
|
||||
set(qt_conf_plugins "../lib")
|
||||
elseif(SYSTEM_MACOSX)
|
||||
set(bundle_name Robomongo.app)
|
||||
set(bundle_name "Robo 3T.app")
|
||||
set(contents_path ${bundle_name}/Contents)
|
||||
|
||||
set(bin_dir ${contents_path}/MacOS)
|
||||
set(styles_dir ${contents_path}/MacOS/styles)
|
||||
set(lib_dir ${contents_path}/Frameworks)
|
||||
set(resources_dir ${contents_path}/Resources)
|
||||
set(license_dir ${resources_dir})
|
||||
@@ -37,8 +38,9 @@ elseif(SYSTEM_MACOSX)
|
||||
set(qt_conf_plugins "PlugIns/Qt")
|
||||
elseif(SYSTEM_WINDOWS)
|
||||
set(bin_dir .)
|
||||
set(styles_dir ${bin_dir}/styles)
|
||||
set(lib_dir .)
|
||||
set(resources_dir .)
|
||||
set(resources_dir ./resources)
|
||||
set(license_dir .)
|
||||
|
||||
set(qt_plugins_dir ${lib_dir})
|
||||
@@ -60,19 +62,21 @@ install(
|
||||
if(SYSTEM_WINDOWS)
|
||||
install(
|
||||
FILES
|
||||
"${OpenSSL_DIR}/out32dll/ssleay32.dll"
|
||||
"${OpenSSL_DIR}/out32dll/libeay32.dll"
|
||||
"${OpenSSL_DIR}/libssl-1_1-x64.dll"
|
||||
"${OpenSSL_DIR}/libcrypto-1_1-x64.dll"
|
||||
DESTINATION ${bin_dir})
|
||||
elseif(SYSTEM_MACOSX)
|
||||
install(
|
||||
FILES
|
||||
"${OpenSSL_DIR}/libssl.1.0.0.dylib"
|
||||
"${OpenSSL_DIR}/libcrypto.1.0.0.dylib"
|
||||
"${OpenSSL_DIR}/libssl.1.1.dylib"
|
||||
"${OpenSSL_DIR}/libcrypto.1.1.dylib"
|
||||
DESTINATION ${lib_dir}/lib)
|
||||
elseif(SYSTEM_LINUX)
|
||||
install(
|
||||
FILES
|
||||
"${OpenSSL_DIR}/libssl.so.1.0.0"
|
||||
"${OpenSSL_DIR}/libssl.so"
|
||||
"${OpenSSL_DIR}/libssl.so.1.0.0"
|
||||
"${OpenSSL_DIR}/libcrypto.so"
|
||||
"${OpenSSL_DIR}/libcrypto.so.1.0.0"
|
||||
DESTINATION ${lib_dir})
|
||||
endif()
|
||||
@@ -93,15 +97,28 @@ install(
|
||||
DESTINATION ${license_dir})
|
||||
|
||||
# Install common dependencies
|
||||
install_qt_lib(Core Gui Widgets PrintSupport)
|
||||
SET(QT_LIBS Core Gui Widgets PrintSupport Network Xml)
|
||||
if(NOT SYSTEM_LINUX)
|
||||
SET(QT_LIBS ${QT_LIBS} WebEngineWidgets WebEngineCore Quick
|
||||
QuickWidgets WebChannel Qml Positioning)
|
||||
endif()
|
||||
install_qt_lib(${QT_LIBS})
|
||||
install_qt_plugins(QGifPlugin QICOPlugin)
|
||||
install_icu_libs()
|
||||
set(QT_STYLES_DIR ${Qt5Core_DIR}/../../../plugins/styles/)
|
||||
set(QT_BIN_DIR ${Qt5Core_DIR}/../../../bin/)
|
||||
set(QT_RESOURCES_DIR ${Qt5Core_DIR}/../../../resources/)
|
||||
|
||||
if(SYSTEM_LINUX)
|
||||
install_qt_lib(XcbQpa DBus)
|
||||
install_qt_plugins(
|
||||
QXcbIntegrationPlugin)
|
||||
|
||||
|
||||
install(
|
||||
FILES
|
||||
"/usr/lib/x86_64-linux-gnu/libstdc++.so.6"
|
||||
"/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28"
|
||||
DESTINATION ${lib_dir})
|
||||
elseif(SYSTEM_MACOSX)
|
||||
install_qt_lib(MacExtras DBus)
|
||||
install_qt_plugins(
|
||||
@@ -111,14 +128,29 @@ elseif(SYSTEM_MACOSX)
|
||||
|
||||
# Install icon
|
||||
install(
|
||||
FILES "${CMAKE_SOURCE_DIR}/install/macosx/Robomongo.icns"
|
||||
FILES "${CMAKE_SOURCE_DIR}/install/macosx/robomongo.icns"
|
||||
DESTINATION "${resources_dir}")
|
||||
|
||||
# Install styles
|
||||
install(FILES "${QT_STYLES_DIR}/libqmacstyle.dylib" DESTINATION ${styles_dir})
|
||||
elseif(SYSTEM_WINDOWS)
|
||||
install_qt_plugins(
|
||||
QWindowsIntegrationPlugin
|
||||
QMinimalIntegrationPlugin
|
||||
QOffscreenIntegrationPlugin)
|
||||
|
||||
# Qt WebEngine dependencies
|
||||
install(DIRECTORY ${QT_RESOURCES_DIR} DESTINATION ${resources_dir})
|
||||
install(FILES
|
||||
"${QT_BIN_DIR}/libEGL.dll"
|
||||
"${QT_BIN_DIR}/libGLESv2.dll"
|
||||
"${QT_BIN_DIR}/opengl32sw.dll"
|
||||
"${QT_BIN_DIR}/QtWebEngineProcess.exe"
|
||||
DESTINATION ${bin_dir})
|
||||
|
||||
# Install Styles
|
||||
install(FILES "${QT_STYLES_DIR}/qwindowsvistastyle.dll" DESTINATION ${styles_dir})
|
||||
|
||||
# Install runtime libraries:
|
||||
# msvcp120.dll
|
||||
# msvcr120.dll
|
||||
|
||||
@@ -28,6 +28,7 @@ function(install_qt_lib)
|
||||
install(
|
||||
DIRECTORY ${qt_lib_dir}/${module_name}.framework
|
||||
DESTINATION ${lib_dir}
|
||||
USE_SOURCE_PERMISSIONS
|
||||
PATTERN "*_debug" EXCLUDE # Exclude debug libraries
|
||||
PATTERN "Headers" EXCLUDE) # Exclude Headers folders
|
||||
endif()
|
||||
|
||||
@@ -15,7 +15,7 @@ execute_process(
|
||||
string(TIMESTAMP timestamp "%Y-%m-%d")
|
||||
|
||||
# Package name (as it should appear in UI)
|
||||
set(CPACK_PACKAGE_NAME Robomongo)
|
||||
set(CPACK_PACKAGE_NAME robo3t)
|
||||
|
||||
# Version of the package
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
@@ -34,10 +34,10 @@ set(CPACK_MONOLITHIC_INSTALL ON)
|
||||
set(CPACK_STRIP_FILES ON)
|
||||
|
||||
# Additional information
|
||||
set(CPACK_PACKAGE_VENDOR Paralect)
|
||||
set(CPACK_PACKAGE_CONTACT robomongo@paralect.com)
|
||||
set(CPACK_PACKAGE_VENDOR "3T Software Labs Ltd")
|
||||
set(CPACK_PACKAGE_CONTACT robo3t@3t.io)
|
||||
set(CPACK_PACKAGE_DESCRIPTION "Shell-centric cross-platform MongoDB management tool.")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Robomongo is a shell-centric cross-platform MongoDB management tool.")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Robo 3T is a shell-centric cross-platform MongoDB management tool.")
|
||||
|
||||
# Use lowercase for system name and package file name
|
||||
string(TOLOWER ${CMAKE_SYSTEM_NAME} system_name)
|
||||
@@ -62,7 +62,7 @@ elseif(SYSTEM_MACOSX)
|
||||
|
||||
elseif(SYSTEM_WINDOWS)
|
||||
set(files_dir "${CMAKE_SOURCE_DIR}/install/windows")
|
||||
set(exe_name "Robomongo.exe")
|
||||
set(exe_name "robo3t.exe")
|
||||
|
||||
set(CPACK_GENERATOR NSIS ZIP)
|
||||
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/DESCRIPTION")
|
||||
|
||||
@@ -15,13 +15,13 @@ elseif(SYSTEM_WINDOWS)
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} psapi.lib bcrypt.lib Iphlpapi.lib dbghelp.lib ws2_32.lib winmm.lib version.lib")
|
||||
endif()
|
||||
|
||||
set(PROJECT_NAME "Robomongo")
|
||||
set(PROJECT_NAME "Robo 3T")
|
||||
set(PROJECT_NAME_TITLE ${PROJECT_NAME})
|
||||
set(PROJECT_DOMAIN "www.robomongo.org")
|
||||
set(PROJECT_COMPANYNAME "Paralect")
|
||||
set(PROJECT_COPYRIGHT "Copyright (C) 2013-2015 ${PROJECT_COMPANYNAME} All Rights Reserved.")
|
||||
set(PROJECT_COMPANYNAME_DOMAIN "www.paralect.com")
|
||||
set(PROJECT_GITHUB_FORK "www.github.com/paralect/robomongo")
|
||||
set(PROJECT_GITHUB_ISSUES "www.github.com/paralect/robomongo/issues")
|
||||
set(PROJECT_COMPANYNAME "3T Software Labs Ltd")
|
||||
set(PROJECT_COPYRIGHT "Copyright (C) 2014-2017 ${PROJECT_COMPANYNAME} All Rights Reserved.")
|
||||
set(PROJECT_COMPANYNAME_DOMAIN "https://studio3t.com/")
|
||||
set(PROJECT_GITHUB_FORK "www.github.com/Studio3T/robomongo")
|
||||
set(PROJECT_GITHUB_ISSUES "www.github.com/Studio3T/robomongo/issues")
|
||||
|
||||
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWERCASE)
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
|
||||
See these docs for the latest info about this topic:
|
||||
-------------
|
||||
- [Build Robo 3T - Mac OS X and Linux](https://github.com/paralect/robomongo/blob/master/docs/BuildRobo3TOnMacAndLinux.md)
|
||||
- [Build Robo 3T - Windows](https://github.com/paralect/robomongo/blob/master/docs/BuildRobo3TOnWindows.md)
|
||||
|
||||
------------------------------------
|
||||
|
||||
What is this?
|
||||
-------------
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
robo3t:
|
||||
image: robo3t
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./Dockerfile
|
||||
network: host
|
||||
network_mode: host
|
||||
environment:
|
||||
- DISPLAY=${DISPLAY}
|
||||
volumes:
|
||||
- /tmp/.X11-unix:/tmp/.X11-unix
|
||||
- $HOME/.3T:/root/.3T
|
||||
- $HOME/.config/.3T:/root/.config/.3T
|
||||
- $HOME/.ssh/id_rsa:/root/.ssh/id_rsa
|
||||
- $HOME/.ssh/config:/root/.ssh/config
|
||||
- $HOME/.ssh/known_hosts:/root/.ssh/known_hosts
|
||||
@@ -0,0 +1,243 @@
|
||||
Building Robo 3T (macOS and Linux)
|
||||
==================
|
||||
|
||||
A. Prerequisites
|
||||
-------------
|
||||
|
||||
1. Modern Compiler
|
||||
A modern and complete C++17 compiler:
|
||||
```
|
||||
GCC 8.0 or newer
|
||||
Clang 7 (or Apple XCode 10 Clang) or newer
|
||||
On Linux and macOS, the libcurl library and header is required. macOS includes libcurl.
|
||||
Fedora/RHEL - dnf install libcurl-devel
|
||||
Ubuntu/Debian - apt-get install libcurl-dev
|
||||
Python 3.7
|
||||
```
|
||||
|
||||
For details see: https://github.com/mongodb/mongo/wiki/Build-Mongodb-From-Source
|
||||
|
||||
2. Install CMake (3.10.0 or later)
|
||||
|
||||
Example:
|
||||
```
|
||||
sudo apt-get install build-essential
|
||||
// or
|
||||
wget http://www.cmake.org/files/v3.10/cmake-3.10.0.tar.gz
|
||||
tar xf cmake-3.10.0.tar.gz
|
||||
cd cmake-3.10.0
|
||||
./configure // macos: env CC=gcc ./bootstrap
|
||||
make
|
||||
sudo make install
|
||||
(sudo make uninstall)
|
||||
```
|
||||
|
||||
3. Install [Scons](http://scons.org/tag/releases.html) (3.1.2 or later)
|
||||
|
||||
```
|
||||
cd scons-**
|
||||
python setup.py install
|
||||
```
|
||||
|
||||
4. Install Qt
|
||||
|
||||
macOS: Qt 5.12.8
|
||||
Linux: Qt 5.9.3
|
||||
|
||||
```sh
|
||||
Example installation for macOS and Ubuntu:
|
||||
Go to http://download.qt.io/archive/qt/5.x/5.x.y/
|
||||
Download, run and install
|
||||
qt-opensource-mac-x64-clang-5.x.y.dmg (for macOS)
|
||||
qt-opensource-linux-x64-5.x.y.run (for Linux)
|
||||
After successful installation you should have
|
||||
/path/to/qt-5.x.y/5.x/clang_64 (for macOS)
|
||||
/path/to/qt-5.x.y/5.x/gcc_64 (for Linux)
|
||||
|
||||
More information for installing on Ubuntu:
|
||||
https://wiki.qt.io/Install_Qt_5_on_Ubuntu
|
||||
```
|
||||
|
||||
5. Download and Build OpenSSL - (explained below in section B)
|
||||
|
||||
B. Building Robo 3T and Dependencies
|
||||
-------------
|
||||
Ref: https://wiki.openssl.org/index.php/Compilation_and_Installation#OS_X
|
||||
|
||||
#### 1. Build OpenSSL
|
||||
|
||||
(Todo: Can we find pre-built OpenSSL? To check => https://wiki.openssl.org/index.php/Binaries)
|
||||
|
||||
Version 1.1.1f (Mar/2020) on macOS
|
||||
Version 1.0.2o (Mar/2018) on Linux
|
||||
|
||||
**macOS:**
|
||||
```sh
|
||||
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz
|
||||
tar -xf openssl-1.1.1f.tar.gz
|
||||
cd /opt/openssl-1.1.1f
|
||||
|
||||
(make clean)
|
||||
./Configure darwin64-x86_64-cc shared no-ssl2 no-ssl3 no-comp -mmacosx-version-min=xy.zt
|
||||
// Notes:
|
||||
// 1. Change -mmacosx-version same as CMAKE_OSX_DEPLOYMENT_TARGET in
|
||||
// https://github.com/Studio3T/robomongo/blob/master/CMakeLists.txt
|
||||
// 2. With openssl version 1.1.1, configure command with rpath stopped working
|
||||
// Last working configure command with rpath was:
|
||||
// ./Configure darwin64-x86_64-cc shared --openssldir="@rpath"
|
||||
|
||||
make (or sudo make)
|
||||
|
||||
// Verify libssl.dylib and libcrypto.dylib files are created
|
||||
ll lib*.dylib
|
||||
|
||||
// Due to broken './Configure' command with rpath above, these extra steps are also required:
|
||||
install_name_tool -id "@rpath/lib/libssl.1.1.dylib" libssl.1.1.dylib
|
||||
install_name_tool -change /usr/local/lib/libcrypto.1.1.dylib @rpath/lib/libcrypto.1.1.dylib libssl.1.1.dylib
|
||||
install_name_tool -id "@rpath/lib/libcrypto.1.1.dylib" libcrypto.1.1.dylib
|
||||
// Finally, we should have this output using otool:
|
||||
otool -L libssl.1.1.dylib
|
||||
libssl.dylib:
|
||||
@rpath/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
@rpath/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
|
||||
|
||||
otool -L libcrypto.1.1.dylib
|
||||
libcrypto.dylib:
|
||||
@rpath/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
|
||||
|
||||
// For robo-unit-test dependency:
|
||||
mkdir lib/
|
||||
cp lib*.dylib/lib/
|
||||
```
|
||||
|
||||
|
||||
**Linux:**
|
||||
|
||||
```sh
|
||||
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2o.tar.gz
|
||||
tar -xf openssl-1.0.2o.tar.gz
|
||||
cd /opt/openssl-1.0.2o
|
||||
(make clean)
|
||||
./config shared
|
||||
make
|
||||
// Verify libssl.so and libcrypto.so are created
|
||||
```
|
||||
|
||||
#### 2. Build Robo 3T Shell (fork of MongoDB)
|
||||
|
||||
Clone Robo 3T Shell and make sure you are on latest branch:
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/paralect/robomongo-shell.git
|
||||
$ cd robomongo-shell
|
||||
$ git branch // "roboshell-v4.2"
|
||||
```
|
||||
|
||||
Set special environment variable `ROBOMONGO_CMAKE_PREFIX_PATH` to point to a set of
|
||||
directories:
|
||||
|
||||
1. Location of Qt 5 SDK
|
||||
2. Location of Robo 3T Shell
|
||||
3. Location of OpenSSL
|
||||
|
||||
Separate directories by semicolon `;` (not colon):
|
||||
|
||||
// macOS example:
|
||||
export ROBOMONGO_CMAKE_PREFIX_PATH="/path/to/qt-5.x.y/5.x/clang_64;/opt/robo-shell;/opt/openssl-x.y.z"
|
||||
|
||||
// Ubuntu example:
|
||||
export ROBOMONGO_CMAKE_PREFIX_PATH="/home/<user>/Qt5.x.y/5.x.y/gcc_64/;/opt/<user>/robo-shell;/opt/openssl-x.y.z"
|
||||
|
||||
Install pip requirements
|
||||
|
||||
```
|
||||
// macOS / Linux
|
||||
pip3 install --user -r etc/pip/compile-requirements.txt
|
||||
pip3 install --user -r etc/pip/dev-requirements.txt
|
||||
```
|
||||
|
||||
```
|
||||
// For ubuntu, the followings might be needed
|
||||
sudo aptitude install libcurl-dev
|
||||
|
||||
sudo pip3 install Typing
|
||||
sudo pip3 install Cheetah
|
||||
```
|
||||
|
||||
Build Robo 3T Shell (in release mode by default):
|
||||
|
||||
```sh
|
||||
$ bin/build
|
||||
```
|
||||
|
||||
Build Robo 3T Shell in debug mode:
|
||||
|
||||
```sh
|
||||
$ bin/build debug
|
||||
```
|
||||
|
||||
Clean build files for release mode:
|
||||
```sh
|
||||
$ bin/clean
|
||||
```
|
||||
|
||||
Clean build files for debug mode:
|
||||
```sh
|
||||
$ bin/clean debug
|
||||
```
|
||||
|
||||
For more information refer to [Building Robo 3T Shell](BuildRobo3TShell.md)
|
||||
|
||||
#### 3. Build Robo 3T
|
||||
|
||||
Download Robo 3T:
|
||||
|
||||
$ git clone https://github.com/Studio3T/robomongo
|
||||
$ cd robomongo
|
||||
|
||||
Run configuration step:
|
||||
|
||||
$ bin/configure
|
||||
|
||||
And finally, build Robo 3T:
|
||||
|
||||
$ bin/build
|
||||
|
||||
To run robomongo:
|
||||
|
||||
$ bin/run
|
||||
|
||||
|
||||
**Debug mode**
|
||||
|
||||
For debug mode append `debug` for each command
|
||||
e.g. `bin/configure debug` or `bin/build debug` etc..
|
||||
|
||||
**Helper commands**
|
||||
|
||||
Clean build files (in order to start build from scratch):
|
||||
|
||||
$ bin/clean
|
||||
|
||||
Install Robo 3T to `build/release/install` folder:
|
||||
|
||||
$ bin/install
|
||||
|
||||
Create package for your OS in `build/release/package` folder:
|
||||
|
||||
$ bin/pack
|
||||
|
||||
**Important Notes**
|
||||
- For macOS builds, it might be needed to patch QScintilla with `QScintilla-2.9.3-xcode8.patch` found at robomongo repository's root.
|
||||
|
||||
- For Ubuntu 16.04 builds, it has been reported that Robo 3T /bin/configure step might fail and installing `mesa-common-dev` package solves it. Details: https://github.com/paralect/robomongo/issues/1268
|
||||
|
||||
- For Centos builds, Robo 3T /bin/configure step might fail due to error: `failed to find gl/gl.h`. In this case, the following packages must be installed:
|
||||
|
||||
```sh
|
||||
$ sudo yum install mesa-libGL
|
||||
$ sudo yum install mesa-libGL-devel
|
||||
```
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
Building Robo 3T (Windows)
|
||||
==============================
|
||||
|
||||
A. Prerequisites
|
||||
-------------
|
||||
|
||||
#### 0. Git
|
||||
|
||||
Download Git installer from http://git-scm.com (we are using Git-2.7.0-64-bit).
|
||||
|
||||
When you'll see "Adjusting your PATH environment" wizard page, select
|
||||
"Use Git from the Windows Command Prompt" option. This will allow to
|
||||
execute Git from both Windows Command Prompt and Bash. This is required,
|
||||
because both MongoDB and Robo 3T uses `git` command during build process
|
||||
which must be perfomed from Windows Command Prompt (not Bash).
|
||||
|
||||
On "Configuring the line ending conversion" wizard page, select "Checkout
|
||||
Windows-style, commit Unix-style line ending" option. This is a common mode
|
||||
for cross-platform projects and required by both MongoDB and Robo 3T.
|
||||
|
||||
All other Git installer options are not important (use defaults).
|
||||
|
||||
If you are using SSH clone url, start SSH agent and add your private key
|
||||
with this commands in Git Bash:
|
||||
|
||||
$ eval `ssh-agent` # starts ssh agent
|
||||
$ ssh-add ~/.ssh/mykey # add your key (which can be in any folder)
|
||||
|
||||
#### 1. Visual Studio 2017 version 15.9 or newer (complete C++17 compiler)
|
||||
|
||||
We use Visual Studio 2017 version 15.9.22, and recommend to use this version to save
|
||||
time for Qt compilation. Currently prebuilt binaries for Qt are available
|
||||
from official Qt site. But you can use any newer version and compile Qt library
|
||||
yourself.
|
||||
|
||||
#### 2. ActivePython 3.7.4
|
||||
|
||||
Download ActivePython from http://www.activestate.com/activepython/downloads
|
||||
|
||||
Download MSI x64 version. Use default settings in installation wizard.
|
||||
This installer will add path to `python.exe` to your `PATH` variable.
|
||||
|
||||
#### 3. SCons 3.1.2 or newer
|
||||
|
||||
We use SCons 3.1.2
|
||||
|
||||
Download Scons from http://scons.org/tag/releases.html
|
||||
|
||||
Use ZIP archive, not MSI
|
||||
|
||||
Open Command Prompt, navigate to Scons directory and run:
|
||||
|
||||
$ setup.py install
|
||||
|
||||
This command will make `scons` command accessible from Command Prompt
|
||||
|
||||
#### 4. CMake
|
||||
We use CMake 3.10.0
|
||||
Download CMake from https://cmake.org/download
|
||||
|
||||
Use installer package, it will allow you to configure your PATH variable and `cmake`
|
||||
command will be available from Command Prompt. For this set "Add CMake to the system
|
||||
PATH for current user" in the installer wizard page.
|
||||
|
||||
#### 5. Qt 5.12.8
|
||||
|
||||
Download and install Qt from http://download.qt.io/archive/qt
|
||||
Run the installer and select only 'msvc2017 64-bit'
|
||||
|
||||
#### 6. OpenSSL (1.1.1f)
|
||||
Download openssl from https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz
|
||||
|
||||
B. Building Robo 3T and Dependencies
|
||||
-------------
|
||||
|
||||
#### 1. Build OpenSSL
|
||||
|
||||
(Todo: Can we find pre-built OpenSSL? To check => https://wiki.openssl.org/index.php/Binaries)
|
||||
|
||||
Steps to build OpenSSL on windows:
|
||||
- Ensure you have perl installed on your machine (e.g. ActiveState or Strawberry), and available on your %PATH%
|
||||
- Ensure you have NASM installed on your machine, and available on your %PATH%
|
||||
|
||||
```sh
|
||||
Open Visual Studio tool x64 Cross Tools Command prompt
|
||||
cd to the directory where you have openssl sources cd c:\myPath\openssl
|
||||
perl Configure VC-WIN64A
|
||||
(nmake clean)
|
||||
nmake
|
||||
// Verify these files are created:
|
||||
libcrypto-1_1x64.dll, libssl-1_1-x64.dll (with all the build additionals such as .pdb .lik or static .lib)
|
||||
```
|
||||
|
||||
Refer to OpenSSL documentation for more information:
|
||||
https://wiki.openssl.org/index.php/Compilation_and_Installation#OpenSSL_1.1.0
|
||||
|
||||
#### 2. Build Robo 3T Shell (fork of MongoDB)
|
||||
|
||||
Clone Robo 3T Shell and make sure to be at `roboshell-v4.2` branch:
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/paralect/robomongo-shell.git
|
||||
$ cd robomongo-shell
|
||||
$ git branch // roboshell-v4.2
|
||||
```
|
||||
|
||||
Set environment variable `ROBOMONGO_CMAKE_PREFIX_PATH`, required by Robo 3T-Shell and Robo 3T build scripts, needs to be set according to the following directories:
|
||||
|
||||
1. Location of Qt SDK
|
||||
2. Location of Robo 3T Shell
|
||||
3. Location of OpenSSL
|
||||
|
||||
**Important:**
|
||||
Make sure to move all your repos (robo, openssl, robo-shell etc..) into root directory of your drives (e.g. e:\robo-shell) and keep short repo names (e.g. robo-shell instead of robomongo-shell) otherwise you might end up with this error `If you see fatal error LNK1170: line in command file contains 131071 or more characters`
|
||||
|
||||
Separate directories by semicolon `;` (not colon). You can do this in Command Prompt:
|
||||
|
||||
> setx ROBOMONGO_CMAKE_PREFIX_PATH "e:\Qt\Qt5.9.3\5.9.3\msvc2015_64;e:\robo-shell;e:\openssl-x.y.z"
|
||||
|
||||
Open '**a new**' VS2017 x64 Native Tools Command Prompt and navigate to `robomongo-shell` folder.
|
||||
|
||||
|
||||
**Note:**
|
||||
|
||||
Run
|
||||
`pip3 install --user -r ../etc/pip/dev-requirements.txt`
|
||||
|
||||
If you have this type of errors:
|
||||
|
||||
```
|
||||
// 1st error
|
||||
ImportError: No module named typing
|
||||
// Solution:
|
||||
pip install Typing
|
||||
pip install Cheetah
|
||||
|
||||
// 2nd error: shell: cheetah module not found
|
||||
// Solution:
|
||||
copy C:\Users\<user>\AppData\Roaming\Python\Python27\site-packages
|
||||
to C:\Python27\Lib\site-packages
|
||||
|
||||
```
|
||||
|
||||
Build shell in release mode:
|
||||
|
||||
> bin\build
|
||||
|
||||
Build shell in debug mode:
|
||||
|
||||
> bin\build debug
|
||||
|
||||
Note that backslash is used (`\`), and not forward slash (`/`).
|
||||
|
||||
Clean build files for release mode:
|
||||
|
||||
> bin\clean
|
||||
|
||||
Clean build files for debug mode:
|
||||
|
||||
> bin\clean debug
|
||||
|
||||
Refer to MongoDB documentation for additional information:
|
||||
https://docs.mongodb.org/manual/contributors/tutorial/build-mongodb-from-source/#windows-specific-instructions
|
||||
|
||||
|
||||
#### 3. Build Robo 3T
|
||||
|
||||
Clone Robo 3T:
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/paralect/robomongo.git
|
||||
```
|
||||
|
||||
Open VS2017 x64 Native Tools Command Prompt and navigate to `robomongo` folder.
|
||||
|
||||
Run configuration step:
|
||||
|
||||
> bin\configure
|
||||
|
||||
And finally, build Robo 3T:
|
||||
|
||||
> bin\build
|
||||
|
||||
```
|
||||
// If you see fatal error LNK1170: line in command file contains 131071 or more characters
|
||||
Solution-1:
|
||||
1. Move all your repos (robo, openssl, robo-shell etc..) into root directory of your drives.
|
||||
2. Use short names e.g. robo-shell instead of robomongo-shell.
|
||||
3. Update ROBOMONGO_CMAKE_PREFIX_PATH env. variable and try a fresh (clean) build.
|
||||
|
||||
Solution-2:
|
||||
1. Create environment variable MongoDB_OBJECTS, set a short path e.g. "C:/"
|
||||
2. Open a new VS2017 x64 Native Tools Command Prompt and build Robo 3T Shell
|
||||
3. Robo 3T Shell build script will copy the object files into MongoDB_OBJECTS directory
|
||||
4. Build Robo 3T again (clean build might be needed)
|
||||
```
|
||||
|
||||
**Run Robo 3T**
|
||||
|
||||
Install Robo 3T to `build\Release\install` folder:
|
||||
|
||||
> bin\install
|
||||
|
||||
And run Robo 3T
|
||||
|
||||
> \robomongo\build\Release\install\robo3t.exe
|
||||
|
||||
**Package Robo 3T**
|
||||
|
||||
Install Robo 3T to `build\Release\install` folder:
|
||||
|
||||
> bin\pack
|
||||
|
||||
Note: nsis-2.46-setup.exe with Full setup must be present.
|
||||
|
||||
|
||||
**Debug mode**
|
||||
|
||||
For debug mode append `debug` for each command
|
||||
e.g. `bin\configure debug` or `bin\build debug` etc..
|
||||
|
||||
**Helper commands**
|
||||
|
||||
Clean build files (in order to start build from scratch):
|
||||
|
||||
> bin\clean
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
Building Robo 3T Shell
|
||||
========================
|
||||
|
||||
Robo 3T uses [modified version](https://github.com/paralect/robomongo-shell/tree/roboshell-v3.4) of MongoDB that we call Robo 3T Shell.
|
||||
Before you can build Robo 3T, you have to build Robo 3T Shell. The following instructions are applicable only for Mac OS X and Linux. For Windows instructions please check [Building Robo 3T on Windows](BuildRobo3TOnWindows.md).
|
||||
|
||||
Build for Mac OS X or Linux
|
||||
---------------------------
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
1. Install [Scons](http://scons.org/tag/releases.html) (2.3.5 or newer)
|
||||
|
||||
|
||||
2. Clone Robo 3T Shell and checkout to `roboshell-v3.4` branch:
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/paralect/robomongo-shell.git
|
||||
$ cd robomongo-shell
|
||||
$ git checkout roboshell-v3.4
|
||||
```
|
||||
|
||||
3. Build Robo 3T Shell:
|
||||
|
||||
```sh
|
||||
$ bin/build
|
||||
```
|
||||
|
||||
Done! Now you can continue with building Robo 3T
|
||||
with embedded MongoDB 3.4 shell (that you've just built).
|
||||
|
||||
|
||||
<br/>
|
||||
#### Advanced helper commands
|
||||
|
||||
The following commands are needed only if you are planning to develop or deeper understand
|
||||
Robo 3T or Robo 3T Shell build processes.
|
||||
|
||||
Clean build files for release mode (folder `build/opt` will be removed):
|
||||
|
||||
$ bin/clean
|
||||
|
||||
Here is a command that is executed by `bin/build` script:
|
||||
|
||||
$ scons mongo -j8 --release --osx-version-min=10.9
|
||||
|
||||
Argument `--osx-version-min` is required only for Mac OS.
|
||||
|
||||
Build MongoDB shell in debug mode:
|
||||
|
||||
$ scons mongo -j8 --dbg
|
||||
|
||||
Clear builds:
|
||||
|
||||
$ scons -c mongo # clears release build
|
||||
$ scons -c --dbg mongo # clears debug build
|
||||
@@ -1,6 +1,10 @@
|
||||
Building Robomongo Shell
|
||||
Building Robomongo Shell (Old Document)
|
||||
========================
|
||||
|
||||
**Important Note:**
|
||||
This document is for versions 1.0 and earlier and for MongoDB 3.2.
|
||||
See latest documents here: https://github.com/Studio3T/robomongo/wiki
|
||||
|
||||
Robomongo uses [modified version](https://github.com/paralect/robomongo-shell/tree/roboshell-v3.2) of MongoDB that we call Robomongo Shell. Before you can build Robomongo, you have to build Robomongo Shell. The following instructions are applicable only for Mac OS X and Linux. For Windows instructions please check [Building Robomongo on Windows](BuildingRobomongoOnWindows.md).
|
||||
|
||||
Build for Mac OS X or Linux
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
Building Robomongo (Mac OS X and Linux)
|
||||
==================
|
||||
|
||||
**Important Note:**
|
||||
This document is for versions 1.0 and earlier and for MongoDB 3.2.
|
||||
See latest documents here: https://github.com/Studio3T/robomongo/wiki
|
||||
|
||||
A. Prerequisites
|
||||
-------------
|
||||
|
||||
@@ -126,6 +130,14 @@ Create package for your OS in `build/release/package` folder:
|
||||
|
||||
$ bin/pack
|
||||
|
||||
**Notes**
|
||||
**Important Notes**
|
||||
- For Ubuntu 16.04 builds, it has been reported that Robomongo /bin/configure step might fail and installing mesa-common-dev package solves it. Details: https://github.com/paralect/robomongo/issues/1268
|
||||
|
||||
- For Centos builds, Robomongo /bin/configure step might fail due to error: `failed to find gl/gl.h`. In this case, the following packages must be installed:
|
||||
|
||||
```sh
|
||||
$ sudo yum install mesa-libGL
|
||||
$ sudo yum install mesa-libGL-devel
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
Building Robomongo (Windows)
|
||||
==============================
|
||||
|
||||
**Important Note:**
|
||||
This document is for versions 1.0 and earlier and for MongoDB 3.2.
|
||||
See latest documents here: https://github.com/Studio3T/robomongo/wiki
|
||||
|
||||
A. Prerequisites
|
||||
-------------
|
||||
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
Runtime Dependencies
|
||||
====================
|
||||
|
||||
This information is for maintainers. If you want to just use Robomongo - download
|
||||
prebuild packages for your platform.
|
||||
|
||||
Runtime dependencies that are not privided by platforms but required by Robomongo are:
|
||||
|
||||
1. Qt libraries
|
||||
2. Qt plugins
|
||||
|
||||
Diagnostic of dependencies
|
||||
--------------------------
|
||||
|
||||
### Windows
|
||||
|
||||
GUI: http://dependencywalker.com/
|
||||
|
||||
### Linux
|
||||
|
||||
#### a. View dependencies of executable or shared library:
|
||||
|
||||
$ ldd robomongo
|
||||
$ readelf -d robomongo
|
||||
|
||||
#### b. View dependency tree of executable or shared library:
|
||||
|
||||
$ lddtree robomongo
|
||||
$ ldd -v robomongo
|
||||
|
||||
#### c. View RPATH or RUNPATH records of executable or shared library:
|
||||
|
||||
$ objdump -x bin/robomongo | grep "RPATH\|RUNPATH"
|
||||
$ readelf -d bin/robomongo | grep RPATH
|
||||
|
||||
For Robomongo binary it should be `$ORIGIN/../lib`
|
||||
|
||||
#### d. Enable extensive logging for run-time shared library search
|
||||
|
||||
$ export LD_DEBUG=files
|
||||
$ bin/robomongo
|
||||
|
||||
Source:
|
||||
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
|
||||
|
||||
#### e. Modify RPATH using `chrpath` and the dynamic linker and RPATH using paths `patchelf`
|
||||
|
||||
$ patchelf --set-rpath '$ORIGIN/../lib' robo
|
||||
|
||||
More: https://nixos.org/patchelf.html
|
||||
|
||||
$ chrpath -r "/somepath/lib/" robomongo
|
||||
|
||||
More:
|
||||
https://linux.die.net/man/1/chrpath
|
||||
http://www.programering.com/a/MTOwcDNwATU.html // examples
|
||||
|
||||
#### f. Show symbols of shared lib file
|
||||
|
||||
Error:
|
||||
```
|
||||
/opt/robo-shell/src/mongo/util/net/ssl_manager_openssl.cpp:667:
|
||||
undefined reference to `SSL_library_init'
|
||||
```
|
||||
|
||||
How to debug:
|
||||
```
|
||||
openssl-1.1.1f: nm -gD libssl.so | grep SSL_library_init
|
||||
// not found, since SSL_library_init() is deprecated in 1.1.1
|
||||
|
||||
openssl-1.0.2o: nm -gD libssl.so | grep SSL_library_init
|
||||
0000000000055520 T SSL_library_init
|
||||
```
|
||||
|
||||
#### g. Update path of a dependency of an executable
|
||||
|
||||
```
|
||||
ldd exec_file | grep libcurlpp
|
||||
libcurlpp.so.1 => not found
|
||||
|
||||
patchelf --replace-needed libcurlpp.so.1 /foo/bar/libcurlpp.so.1 exec_file
|
||||
```
|
||||
|
||||
Another example (libcrypto.so.1.1 => not found):
|
||||
|
||||
```
|
||||
cd /opt/openssl-1.1.1f
|
||||
ldd libssl.so
|
||||
linux-vdso.so.1 => (0x00007ffcaf911000)
|
||||
libcrypto.so.1.1 => not found
|
||||
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd4087b4000)
|
||||
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd4083ea000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007fd408c65000)
|
||||
|
||||
sudo cp libcrypto.so.1.1 /lib/x86_64-linux-gnu/
|
||||
|
||||
ldd libssl.so
|
||||
linux-vdso.so.1 => (0x00007fff0f5d8000)
|
||||
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007fd3dcc1e000)
|
||||
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3dc854000)
|
||||
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd3dc650000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007fd3dd2d6000)
|
||||
|
||||
```
|
||||
|
||||
### Mac OS X
|
||||
|
||||
#### a. Show dependencies of executable or shared library:
|
||||
|
||||
Show dependencies of executable or shared library:
|
||||
|
||||
$ otool -L robomongo
|
||||
|
||||
View LC_RPATH records of executable or shared library:
|
||||
|
||||
$ otool -l robomongo | grep -C2 RPATH
|
||||
|
||||
(option `-C2` asks grep to output 2 context lines before and after the match)
|
||||
|
||||
For Robomongo binary it should be `$executable_path/../Frameworks`
|
||||
|
||||
More about `otool -l`
|
||||
|
||||
```
|
||||
$ otool -l /opt/robo/build/release/src/robomongo/Robo\ 3T.app/Contents/MacOS/Robo\ 3T
|
||||
....
|
||||
Load command 23
|
||||
cmd LC_LOAD_DYLIB
|
||||
cmdsize 56
|
||||
name @rpath/lib/libssl.1.1.dylib (offset 24)
|
||||
time stamp 2 Thu Jan 1 03:00:02 1970
|
||||
current version 1.1.0
|
||||
compatibility version 1.1.0
|
||||
Load command 24
|
||||
cmd LC_LOAD_DYLIB
|
||||
cmdsize 56
|
||||
name @rpath/lib/libcrypto.1.1.dylib (offset 24)
|
||||
time stamp 2 Thu Jan 1 03:00:02 1970
|
||||
current version 1.1.0
|
||||
compatibility version 1.1.0
|
||||
....
|
||||
Load command 27
|
||||
cmd LC_RPATH
|
||||
cmdsize 48
|
||||
path /opt/Qt5.9.3/5.9.3/clang_64/lib (offset 12)
|
||||
Load command 28
|
||||
cmd LC_RPATH
|
||||
cmdsize 32
|
||||
path /opt/openssl-1.1.1f (offset 12)
|
||||
```
|
||||
|
||||
#### b. Edit dependencies of executable or shared library:
|
||||
```
|
||||
// Before
|
||||
otool -L libssl.dylib
|
||||
libssl.dylib:
|
||||
/usr/local/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
/usr/local/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
|
||||
|
||||
// Edit
|
||||
install_name_tool -id "@rpath/lib/libssl.1.1.dylib" libssl.dylib
|
||||
install_name_tool -change /usr/local/lib/libcrypto.1.1.dylib @rpath/lib/libcrypto.1.1.dylib libssl.dylib
|
||||
|
||||
// After
|
||||
otool -L libssl.dylib
|
||||
libssl.dylib:
|
||||
@rpath/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
@rpath/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
|
||||
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
|
||||
```
|
||||
|
||||
|
||||
Diagnostic of Qt plugins
|
||||
------------------------
|
||||
|
||||
Run Robomongo in the following way to see how plugins are resolved:
|
||||
|
||||
$ QT_DEBUG_PLUGINS=1 ./robomongo
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
Runtime Dependencies
|
||||
====================
|
||||
|
||||
This information is for maintainers. If you want to just use Robomongo - download
|
||||
prebuild packages for your platform.
|
||||
|
||||
Runtime dependencies that are not privided by platforms but required by Robomongo are:
|
||||
|
||||
1. Qt libraries
|
||||
2. Qt plugins
|
||||
|
||||
Diagnostic of dependencies
|
||||
--------------------------
|
||||
|
||||
##### Linux
|
||||
|
||||
View dependencies of executable or shared library:
|
||||
|
||||
$ ldd robomongo
|
||||
|
||||
View RPATH or RUNPATH records of executable or shared library:
|
||||
|
||||
$ objdump -x bin/robomongo | grep "RPATH\|RUNPATH"
|
||||
|
||||
For Robomongo binary it should be `$ORIGIN/../lib`
|
||||
|
||||
##### Mac OS X
|
||||
|
||||
Show dependencies of executable or shared library:
|
||||
|
||||
$ otool -L robomongo
|
||||
|
||||
View LC_RPATH records of executable or shared library:
|
||||
|
||||
$ otool -l robomongo | grep -C2 RPATH
|
||||
|
||||
(option `-C2` asks grep to output 2 context lines before and after the match)
|
||||
|
||||
For Robomongo binary it should be `$executable_path/../Frameworks`
|
||||
|
||||
|
||||
Diagnostic of Qt plugins
|
||||
------------------------
|
||||
|
||||
Run Robomongo in the following way to see how plugins are resolved:
|
||||
|
||||
$ QT_DEBUG_PLUGINS=1 ./robomongo
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Robomongo</string>
|
||||
<string>Robo 3T</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>${MACOSX_BUNDLE_INFO_STRING}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
@@ -36,5 +36,7 @@
|
||||
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@@ -14,7 +14,7 @@ File `robomongo.ico` will be generated.
|
||||
Which icon sizes are used on Windows?
|
||||
=====================================
|
||||
|
||||
The most important sizes are the one that is small. Robomongo should include
|
||||
The most important sizes are the one that is small. Robo 3T should include
|
||||
16, 20, 24, 40, 48. The bigger sizes are usually scaled well, without notable
|
||||
degrading in quality.
|
||||
|
||||
|
||||
@@ -26,14 +26,14 @@ IDI_ICON1 ICON "@windows_icon@"
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Paralect, Inc\0"
|
||||
VALUE "FileDescription", "Robomongo, MongoDB management tool\0"
|
||||
VALUE "CompanyName", "3T Software Labs Ltd\0"
|
||||
VALUE "FileDescription", "Robo 3T, MongoDB management tool\0"
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "LegalCopyright", "Copyright Paralect, 2013 - 2016\0"
|
||||
VALUE "ProductName", "Robomongo\0"
|
||||
VALUE "LegalCopyright", "Copyright 3T Software Labs Ltd, 2014 - 2017\0"
|
||||
VALUE "ProductName", "Robo 3T\0"
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||
VALUE "OriginalFilename", "Robomongo.exe\0"
|
||||
VALUE "InternalName", "Robomongo\0"
|
||||
VALUE "OriginalFilename", "robo3t.exe\0"
|
||||
VALUE "InternalName", "Robo 3T\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
This is a logbook for notes about migration to MongoDB 3.2
|
||||
|
||||
DocumentTextEditor.cpp
|
||||
----------------------
|
||||
|
||||
Commented error reporting.
|
||||
|
||||
Logger.cpp
|
||||
----------
|
||||
|
||||
Commented Logger::print().
|
||||
|
After Width: | Height: | Size: 468 KiB |
|
After Width: | Height: | Size: 361 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 262 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 42 KiB |
@@ -1,6 +1,6 @@
|
||||
Robomongo shortcut key reference
|
||||
================================
|
||||
|
||||
"3T", "Robomongo"
|
||||
### Windows/Linux users
|
||||
|
||||
Ctrl+Enter or F5 or Ctrl+R
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
#########################################
|
||||
### Unit Testing with Google Test ###
|
||||
#########################################
|
||||
|
||||
### --- Important Note
|
||||
if (SYSTEM_LINUX)
|
||||
message("\n *Note: Currently unit testing is disabled for Linux "
|
||||
"due to MongoDB linking problems")
|
||||
return()
|
||||
endif()
|
||||
|
||||
### --- Enable and setup gtest
|
||||
enable_testing()
|
||||
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
|
||||
### --- Setup test source files
|
||||
# New test & source file pairs MUST have the following format:
|
||||
# Test file: /path/Foo_test.cpp
|
||||
# Source file: /path/Foo.cpp or /path/Foo.h
|
||||
set(ROBO_SRC_DIR ${CMAKE_HOME_DIRECTORY}/src/robomongo)
|
||||
set(SOURCES_TEST
|
||||
${ROBO_SRC_DIR}/utils/RoboCrypt_test.cpp
|
||||
${ROBO_SRC_DIR}/utils/StringOperations_test.cpp
|
||||
${ROBO_SRC_DIR}/core/HexUtils_test.cpp
|
||||
)
|
||||
|
||||
### --- Setup robo_unit_tests exec. & link ROBO_OBJ_FILES
|
||||
add_executable(robo_unit_tests ${SOURCES_TEST})
|
||||
add_dependencies(robo_unit_tests robomongo)
|
||||
target_include_directories(robo_unit_tests PRIVATE ${CMAKE_HOME_DIRECTORY}/src)
|
||||
|
||||
get_target_property(ROBO_SOURCES robomongo SOURCES)
|
||||
list(FILTER ROBO_SOURCES INCLUDE REGEX "cpp")
|
||||
list(FILTER ROBO_SOURCES EXCLUDE REGEX "main.cpp")
|
||||
|
||||
if(SYSTEM_WINDOWS)
|
||||
set(OBJ_DIR ${CMAKE_BINARY_DIR}/src/robomongo/robomongo.dir/${CMAKE_BUILD_TYPE}/)
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}mocs_compilation.obj;")
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}qrc_gui.obj;")
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}qrc_robo.obj;")
|
||||
foreach(SRC_FILE ${ROBO_SOURCES})
|
||||
get_filename_component(FILENAME ${SRC_FILE} NAME)
|
||||
string(REPLACE ".cpp" ".obj" FILENAME ${FILENAME})
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}${FILENAME};")
|
||||
endforeach()
|
||||
elseif(SYSTEM_MACOSX)
|
||||
set(OBJ_DIR ${CMAKE_BINARY_DIR}/src/robomongo/CMakeFiles/robomongo.dir/)
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_autogen/mocs_compilation.cpp.o;")
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_autogen/YHP5W5E6RA/qrc_gui.cpp.o;")
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_autogen/3YJK5W5UP7/qrc_robo.cpp.o;")
|
||||
foreach(SRC_FILE ${ROBO_SOURCES})
|
||||
string(REPLACE ".cpp" ".cpp.o" OBJ_FILE ${SRC_FILE})
|
||||
set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}${OBJ_FILE};")
|
||||
endforeach()
|
||||
|
||||
find_library(SECURITY NAMES Security)
|
||||
find_library(CORE_FOUNDATION NAMES CoreFoundation)
|
||||
set(SSL_LIBRARIES ${SECURITY} ${CORE_FOUNDATION})
|
||||
target_link_libraries(robo_unit_tests ${SSL_LIBRARIES} -lresolv)
|
||||
# elseif(SYSTEM_LINUX)
|
||||
# set(OBJ_DIR ${CMAKE_BINARY_DIR}/src/robomongo/CMakeFiles/robomongo.dir/)
|
||||
# message("--- OBJ_DIR: " ${OBJ_DIR})
|
||||
# set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_automoc.cpp.o;")
|
||||
# set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_automoc.dir/gui/resources/qrc_gui.cpp.o;")
|
||||
# set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}/robomongo_automoc.dir/resources/qrc_robo.cpp.o;")
|
||||
# foreach(SRC_FILE ${ROBO_SOURCES})
|
||||
# string(REPLACE ".cpp" ".cpp.o" OBJ_FILE ${SRC_FILE})
|
||||
# set(ROBO_OBJ_FILES "${ROBO_OBJ_FILES}${OBJ_DIR}${OBJ_FILE};")
|
||||
# endforeach()
|
||||
endif()
|
||||
|
||||
# Disable WebEngineWidgets for Linux
|
||||
SET(WebEngineWidgets "Qt5::WebEngineWidgets")
|
||||
if(SYSTEM_LINUX)
|
||||
SET(WebEngineWidgets)
|
||||
endif()
|
||||
|
||||
target_link_libraries(robo_unit_tests
|
||||
gtest
|
||||
gtest_main
|
||||
Qt5::Widgets
|
||||
Qt5::Network
|
||||
Qt5::Xml
|
||||
${WebEngineWidgets}
|
||||
qjson
|
||||
qscintilla
|
||||
mongodb
|
||||
ssh
|
||||
Threads::Threads
|
||||
${ROBO_OBJ_FILES}
|
||||
)
|
||||
|
||||
### --- Install DLLs for Windows
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(D "d")
|
||||
endif()
|
||||
|
||||
if(SYSTEM_WINDOWS)
|
||||
get_target_property(target_path Qt5::Core LOCATION)
|
||||
get_filename_component(qt_bin_dir ${target_path} DIRECTORY)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Core${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Gui${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Network${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5PrintSupport${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Widgets${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Xml${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Positioning${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Qml${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5Quick${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5QuickWidgets${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5WebChannel${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5WebEngineCore${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5WebEngineWidgets${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
set(QT_BIN_FILES "${QT_BIN_FILES}" ${qt_bin_dir}/Qt5PrintSupport${D}${CMAKE_SHARED_LIBRARY_SUFFIX};)
|
||||
|
||||
get_target_property(TESTS_BIN_DIR robo_unit_tests BINARY_DIR)
|
||||
file(COPY ${QT_BIN_FILES} DESTINATION ${TESTS_BIN_DIR}/${CMAKE_BUILD_TYPE})
|
||||
file(COPY
|
||||
${OpenSSL_DIR}/libssl-1_1-x64.dll
|
||||
${OpenSSL_DIR}/libcrypto-1_1-x64.dll
|
||||
DESTINATION ${TESTS_BIN_DIR}/${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
@@ -0,0 +1,14 @@
|
||||
This is just a placeholder for `cmake`.
|
||||
|
||||
Test source files are located in the same directory alongside the tested file in `robomongo/src/robomongo/` dir and sub-dirs.
|
||||
|
||||
e.g.
|
||||
```
|
||||
...
|
||||
RoboCrypt.cpp
|
||||
RoboCrypt_test.cpp
|
||||
...
|
||||
StringOperations.cpp
|
||||
StringOperations_test.cpp
|
||||
...
|
||||
```
|
||||
@@ -10,7 +10,6 @@ set(CMAKE_AUTOUIC ON)
|
||||
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${sanitize}")
|
||||
|
||||
set(SOURCES
|
||||
|
||||
# Isolated Scope #1
|
||||
core/utils/QtUtils.cpp
|
||||
core/utils/StdUtils.cpp
|
||||
@@ -28,14 +27,11 @@ set(SOURCES
|
||||
core/EventBus.cpp
|
||||
core/KeyboardManager.cpp
|
||||
core/domain/MongoNamespace.cpp
|
||||
core/domain/MongoUser.cpp
|
||||
core/domain/MongoUser.cpp
|
||||
core/domain/MongoFunction.cpp
|
||||
core/domain/MongoUtils.cpp
|
||||
core/domain/MongoCollection.cpp
|
||||
core/domain/MongoCollectionInfo.cpp
|
||||
core/domain/MongoQueryInfo.cpp
|
||||
core/domain/MongoShellResult.cpp
|
||||
core/domain/CursorPosition.cpp
|
||||
core/domain/ScriptInfo.cpp
|
||||
core/events/MongoEventsInfo.cpp
|
||||
@@ -56,12 +52,15 @@ set(SOURCES
|
||||
core/mongodb/ReplicaSet.cpp
|
||||
core/settings/SettingsManager.cpp
|
||||
core/AppRegistry.cpp
|
||||
utils/string_operations.cpp
|
||||
utils/StringOperations.cpp
|
||||
utils/common.cpp
|
||||
utils/SimpleCrypt.cpp
|
||||
utils/RoboCrypt.cpp
|
||||
|
||||
# Isolated Scope #3
|
||||
gui/GuiRegistry.cpp
|
||||
gui/dialogs/AboutDialog.cpp
|
||||
gui/dialogs/EulaDialog.cpp
|
||||
gui/dialogs/ConnectionAdvancedTab.cpp
|
||||
gui/dialogs/ConnectionAuthTab.cpp
|
||||
gui/dialogs/ConnectionBasicTab.cpp
|
||||
@@ -78,18 +77,20 @@ set(SOURCES
|
||||
# Isolated scope #4
|
||||
gui/dialogs/PreferencesDialog.cpp
|
||||
gui/dialogs/ConnectionsDialog.cpp
|
||||
gui/dialogs/CreateConnectionDialog.cpp
|
||||
gui/dialogs/ExportDialog.cpp
|
||||
gui/dialogs/ChangeShellTimeoutDialog.cpp
|
||||
|
||||
# Isolated scope #5
|
||||
gui/editors/PlainJavaScriptEditor.cpp
|
||||
gui/editors/JSLexer.cpp
|
||||
gui/editors/FindFrame.cpp
|
||||
gui/widgets/explorer/EditIndexDialog.cpp
|
||||
gui/widgets/explorer/AddEditIndexDialog.cpp
|
||||
gui/widgets/workarea/ScriptWidget.cpp
|
||||
|
||||
# Isolated scope #6
|
||||
gui/widgets/explorer/ExplorerCollectionTreeItem.cpp
|
||||
gui/widgets/explorer/ExplorerCollectionIndexesDir.cpp
|
||||
gui/widgets/explorer/ExplorerCollectionIndexItem.cpp
|
||||
gui/widgets/explorer/ExplorerTreeItem.cpp
|
||||
gui/widgets/explorer/ExplorerReplicaSetFolderItem.cpp
|
||||
gui/widgets/explorer/ExplorerReplicaSetTreeItem.cpp
|
||||
@@ -123,6 +124,7 @@ set(SOURCES
|
||||
gui/widgets/workarea/QueryWidget.cpp
|
||||
gui/widgets/workarea/WorkAreaTabBar.cpp
|
||||
gui/widgets/workarea/WorkAreaTabWidget.cpp
|
||||
gui/widgets/workarea/WelcomeTab.cpp
|
||||
|
||||
# Final scope
|
||||
gui/widgets/LogWidget.cpp
|
||||
@@ -135,28 +137,69 @@ set(SOURCES
|
||||
core/settings/ReplicaSetSettings.cpp
|
||||
core/mongodb/SshTunnelWorker.cpp
|
||||
|
||||
resources/robo.qrc
|
||||
gui/resources/gui.qrc
|
||||
)
|
||||
|
||||
|
||||
# Robomongo target
|
||||
add_executable(robomongo MACOSX_BUNDLE WIN32 app/main.cpp ${SOURCES})
|
||||
|
||||
# Disable WebEngineWidgets for Linux
|
||||
SET(WebEngineWidgets "Qt5::WebEngineWidgets")
|
||||
if(SYSTEM_LINUX)
|
||||
SET(WebEngineWidgets)
|
||||
endif()
|
||||
|
||||
target_link_libraries(robomongo
|
||||
PRIVATE
|
||||
Qt5::Widgets
|
||||
Qt5::Network
|
||||
Qt5::Xml
|
||||
${WebEngineWidgets}
|
||||
qjson
|
||||
qscintilla
|
||||
mongodb
|
||||
ssh
|
||||
Threads::Threads) # Target from FindThreads CMake module
|
||||
|
||||
if(APPLE)
|
||||
find_library(SECURITY NAMES Security)
|
||||
find_library(CORE_FOUNDATION NAMES CoreFoundation)
|
||||
set(SSL_LIBRARIES ${SECURITY} ${CORE_FOUNDATION})
|
||||
|
||||
target_link_libraries(robomongo
|
||||
PRIVATE
|
||||
${SSL_LIBRARIES}
|
||||
-lresolv)
|
||||
endif(APPLE)
|
||||
|
||||
target_include_directories(robomongo
|
||||
PRIVATE
|
||||
${CMAKE_HOME_DIRECTORY}/src)
|
||||
|
||||
# Get build number
|
||||
find_package(Git)
|
||||
if(GIT_FOUND)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE BUILD_NUMBER
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
else(GIT_FOUND)
|
||||
MESSAGE( FATAL_ERROR "Unable to find Git" )
|
||||
set(BUILD_NUMBER 0)
|
||||
endif(GIT_FOUND)
|
||||
|
||||
if(BUILD_NUMBER STREQUAL "")
|
||||
MESSAGE( FATAL_ERROR "Failed to get BUILD_NUMBER" )
|
||||
endif()
|
||||
|
||||
set(BUILD_NUMBER ${BUILD_NUMBER} CACHE INTERNAL "")
|
||||
|
||||
target_compile_definitions(robomongo
|
||||
PRIVATE
|
||||
BUILDING_ROBO
|
||||
PROJECT_NAME="${PROJECT_NAME}"
|
||||
PROJECT_NAME_TITLE="${PROJECT_NAME_TITLE}"
|
||||
PROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}"
|
||||
@@ -166,7 +209,17 @@ target_compile_definitions(robomongo
|
||||
PROJECT_GITHUB_FORK="${PROJECT_GITHUB_FORK}"
|
||||
PROJECT_GITHUB_ISSUES="${PROJECT_GITHUB_ISSUES}"
|
||||
PROJECT_VERSION="${PROJECT_VERSION}"
|
||||
PROJECT_NAME_LOWERCASE="${PROJECT_NAME_LOWERCASE}")
|
||||
PROJECT_VERSION_SHORT="${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
BUILD_NUMBER="${BUILD_NUMBER}"
|
||||
PROJECT_NAME_LOWERCASE="${PROJECT_NAME_LOWERCASE}"
|
||||
PROJECT_QT_VERSION="${Qt5Core_VERSION}"
|
||||
MongoDB_VERSION="${MongoDB_VERSION}"
|
||||
OPENSSL_VERSION="${OPENSSL_VERSION}"
|
||||
LIBSSH2_VERSION="${LIBSSH2_VERSION}"
|
||||
QJSON_VERSION="${QJSON_VERSION}"
|
||||
GOOGLE_TEST_VERSION="${GOOGLE_TEST_VERSION}"
|
||||
ESPRIMA_VERSION="${ESPRIMA_VERSION}"
|
||||
)
|
||||
|
||||
if(SYSTEM_WINDOWS)
|
||||
# Create Windows Resource file
|
||||
@@ -177,45 +230,47 @@ if(SYSTEM_WINDOWS)
|
||||
unset(windows_icon)
|
||||
|
||||
# Add additional source file to "robomongo" target
|
||||
target_sources(robomongo
|
||||
PRIVATE
|
||||
"${CMAKE_BINARY_DIR}/winres.rc")
|
||||
target_sources(robomongo PRIVATE "${CMAKE_BINARY_DIR}/winres.rc")
|
||||
|
||||
# Rename output name for Windows
|
||||
set_target_properties(robomongo PROPERTIES
|
||||
OUTPUT_NAME "Robomongo")
|
||||
set_target_properties(robomongo PROPERTIES OUTPUT_NAME "robo3t")
|
||||
|
||||
# Suppress "warning C4477: 'sprintf'..." from robomongo\shell\db\ptimeutil.cpp
|
||||
# Suppress "warning C4291: ...no matching operator delete found" from third_party\mozjs-60
|
||||
set_target_properties(robomongo PROPERTIES COMPILE_FLAGS "/wd4477 /wd4291")
|
||||
|
||||
# Start debug program with console
|
||||
set_target_properties(robomongo PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
|
||||
|
||||
# Seems that we do not need to do this with recent versions of Qt
|
||||
target_link_libraries(robomongo
|
||||
PRIVATE
|
||||
Qt5::WinMain)
|
||||
target_link_libraries(robomongo PRIVATE Qt5::WinMain)
|
||||
|
||||
elseif(SYSTEM_MACOSX)
|
||||
string(TIMESTAMP CURRENT_YEAR "%Y")
|
||||
set_target_properties(robomongo PROPERTIES
|
||||
INSTALL_RPATH "@executable_path/../Frameworks"
|
||||
OUTPUT_NAME "Robomongo"
|
||||
OUTPUT_NAME "Robo 3T"
|
||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/install/macosx/Info.plist.in"
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Robomongo"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "com.paralect.Robomongo"
|
||||
MACOSX_BUNDLE_INFO_STRING "Robomongo ${PROJECT_VERSION}. Copyright Paralect, 2013 - 2016"
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Robo 3T"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "com.3tsoftwarelabs.robo3t"
|
||||
MACOSX_BUNDLE_INFO_STRING "Robo 3T ${PROJECT_VERSION}. Copyright 3T Software Labs Ltd, 2014 - ${CURRENT_YEAR}"
|
||||
MACOSX_BUNDLE_SHORT_VERSION "${PROJECT_VERSION}"
|
||||
MACOSX_BUNDLE_LONG_VERSION "${PROJECT_VERSION}"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
|
||||
MACOSX_BUNDLE_COPYRIGHT "Copyright Paralect, 2013 - 2016"
|
||||
MACOSX_BUNDLE_ICON_FILE "Robomongo")
|
||||
MACOSX_BUNDLE_COPYRIGHT "Copyright 3T Software Labs Ltd, 2014 - ${CURRENT_YEAR}"
|
||||
MACOSX_BUNDLE_ICON_FILE "robomongo")
|
||||
|
||||
elseif(SYSTEM_LINUX)
|
||||
set_target_properties(robomongo PROPERTIES
|
||||
INSTALL_RPATH "$ORIGIN/../lib")
|
||||
INSTALL_RPATH "$ORIGIN/../lib"
|
||||
OUTPUT_NAME "robo3t")
|
||||
endif()
|
||||
|
||||
# Install
|
||||
include(RobomongoInstall)
|
||||
|
||||
|
||||
#
|
||||
# Tests targets (code below should be moved to separate file)
|
||||
#
|
||||
add_executable(tests WIN32 EXCLUDE_FROM_ALL app/main_test.cpp gui/editors/JSLexer.cpp)
|
||||
target_link_libraries(tests Qt5::Widgets qjson qscintilla mongodb Threads::Threads)
|
||||
target_include_directories(tests
|
||||
|
||||
@@ -6,20 +6,27 @@
|
||||
// Header "mongo/util/net/sock" is needed for mongo::enableIPv6()
|
||||
// Header "mongo/platform/basic" is required by "sock.h" under Windows
|
||||
#include <mongo/platform/basic.h>
|
||||
#include <mongo/util/net/sock.h>
|
||||
#include <mongo/util/net/socket_utils.h>
|
||||
#include <mongo/base/initializer.h>
|
||||
#include <mongo/util/net/ssl_options.h>
|
||||
#include <mongo/db/service_context.h>
|
||||
#include <mongo/transport/transport_layer_asio.h>
|
||||
#include <mongo/shell/shell_options.h>
|
||||
#include <mongo/db/storage/storage_engine_init.h>
|
||||
|
||||
#include "robomongo/core/AppRegistry.h"
|
||||
#include "robomongo/core/settings/SettingsManager.h"
|
||||
#include "robomongo/core/utils/Logger.h"
|
||||
#include "robomongo/gui/MainWindow.h"
|
||||
#include "robomongo/gui/AppStyle.h"
|
||||
#include "robomongo/gui/dialogs/EulaDialog.h"
|
||||
#include "robomongo/ssh/ssh.h"
|
||||
|
||||
#include "robomongo/utils/RoboCrypt.h"
|
||||
|
||||
int main(int argc, char *argv[], char** envp)
|
||||
{
|
||||
if (rbm_ssh_init()) {
|
||||
if (rbm_ssh_init())
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Please check, do we really need envp for other OSes?
|
||||
#ifdef Q_OS_WIN
|
||||
@@ -37,6 +44,19 @@ int main(int argc, char *argv[], char** envp)
|
||||
|
||||
// Initialization routine for MongoDB shell
|
||||
mongo::runGlobalInitializersOrDie(argc, argv, envp);
|
||||
mongo::setGlobalServiceContext(mongo::ServiceContext::make());
|
||||
// Todo from mongo repo: This should use a TransportLayerManager or TransportLayerFactory
|
||||
auto serviceContext = mongo::getGlobalServiceContext();
|
||||
mongo::transport::TransportLayerASIO::Options opts;
|
||||
// When true, it breaks connection to localhost, github #1757
|
||||
opts.enableIPv6 = mongo::shellGlobalParams.enableIPv6;
|
||||
opts.mode = mongo::transport::TransportLayerASIO::Options::kEgress;
|
||||
serviceContext->setTransportLayer(
|
||||
std::make_unique<mongo::transport::TransportLayerASIO>(opts, nullptr)
|
||||
);
|
||||
auto tlPtr = serviceContext->getTransportLayer();
|
||||
uassertStatusOK(tlPtr->setup());
|
||||
uassertStatusOK(tlPtr->start());
|
||||
|
||||
// Initialize Qt application
|
||||
QApplication app(argc, argv);
|
||||
@@ -53,14 +73,40 @@ int main(int argc, char *argv[], char** envp)
|
||||
#ifdef Q_OS_MAC
|
||||
app.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
#endif
|
||||
|
||||
// EULA License Agreement
|
||||
auto const& settings { Robomongo::AppRegistry::instance().settingsManager() };
|
||||
if (!settings->acceptedEulaVersions().contains(PROJECT_VERSION)) {
|
||||
bool const showFormPage { settings->programExitedNormally() && !settings->disableHttpsFeatures() };
|
||||
Robomongo::EulaDialog eulaDialog(showFormPage);
|
||||
settings->setProgramExitedNormally(false);
|
||||
settings->save();
|
||||
int const result = eulaDialog.exec();
|
||||
settings->setProgramExitedNormally(true);
|
||||
settings->save();
|
||||
if (QDialog::Rejected == result) {
|
||||
rbm_ssh_cleanup();
|
||||
return 1;
|
||||
}
|
||||
// EULA accepted
|
||||
settings->addAcceptedEulaVersion(PROJECT_VERSION);
|
||||
settings->save();
|
||||
}
|
||||
|
||||
// Init GUI style
|
||||
Robomongo::AppStyleUtils::initStyle();
|
||||
|
||||
// To be set true at normal program exit
|
||||
settings->setProgramExitedNormally(false);
|
||||
settings->save();
|
||||
|
||||
// Application main window
|
||||
Robomongo::MainWindow mainWindow;
|
||||
mainWindow.show();
|
||||
|
||||
for(auto const& msgAndSeverity : Robomongo::RoboCrypt::roboCryptLogs())
|
||||
Robomongo::LOG_MSG(msgAndSeverity.first, msgAndSeverity.second);
|
||||
|
||||
int rc = app.exec();
|
||||
rbm_ssh_cleanup();
|
||||
return rc;
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace Robomongo
|
||||
class MongoDocument;
|
||||
typedef boost::shared_ptr<MongoDocument> MongoDocumentPtr;
|
||||
|
||||
// todo: Use enum class
|
||||
enum ConnectionType {
|
||||
// This type of connection is shown in Explorer and also opens SSH tunnel for secondary
|
||||
// connections (if needed)
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
|
||||
namespace
|
||||
{
|
||||
struct RemoveIfReciver : public std::unary_function<const Robomongo::EventBus::SubscribersType&, bool>
|
||||
struct RemoveIfReciver
|
||||
{
|
||||
RemoveIfReciver(QObject *receiver) : _receiver(receiver) {}
|
||||
|
||||
bool operator()(const Robomongo::EventBus::SubscribersType& item) const {
|
||||
bool operator()(const Robomongo::EventBus::EventTypeAndSubscriber& item) const {
|
||||
if (item.second->receiver == _receiver) {
|
||||
delete item.second;
|
||||
return true;
|
||||
@@ -28,13 +28,13 @@ namespace
|
||||
QObject *_receiver;
|
||||
};
|
||||
|
||||
struct FindIfReciver : public std::unary_function<const Robomongo::EventBus::SubscribersType&, bool>
|
||||
struct FindIfReciver
|
||||
{
|
||||
FindIfReciver(QThread *thread) : _thread(thread) {}
|
||||
bool operator()(const Robomongo::EventBus::DispatchersType &item) const {
|
||||
if (item.first == _thread) {
|
||||
bool operator()(const Robomongo::EventBus::ThreadAndDispatcher &item) const {
|
||||
if (item.first == _thread)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
QThread *_thread;
|
||||
@@ -50,19 +50,16 @@ namespace Robomongo
|
||||
|
||||
EventBus::~EventBus()
|
||||
{
|
||||
for (DispatchersContainerType::iterator it = _dispatchersByThread.begin(); it != _dispatchersByThread.end(); ++it) {
|
||||
DispatchersType item = *it;
|
||||
delete item.second;
|
||||
}
|
||||
for (auto const& dispatchersByThread : _dispatchersByThread)
|
||||
delete dispatchersByThread.second;
|
||||
}
|
||||
|
||||
void EventBus::publish(Event *event)
|
||||
{
|
||||
QMutexLocker lock(&_lock);
|
||||
QList<QObject*> theReceivers;
|
||||
EventBusDispatcher *dis = NULL;
|
||||
for (SubscribersContainerType::iterator it = _subscribersByEventType.begin(); it != _subscribersByEventType.end(); ++it ) {
|
||||
SubscribersType item = *it;
|
||||
EventBusDispatcher *dis = nullptr;
|
||||
for (auto const& item : _subscribersByEventType) {
|
||||
if (event->type() == item.first) {
|
||||
EventBusSubscriber *subscriber = item.second;
|
||||
if (!subscriber->sender || subscriber->sender == event->sender()) {
|
||||
@@ -118,7 +115,7 @@ namespace Robomongo
|
||||
VERIFY(connect(receiver, SIGNAL(destroyed(QObject*)), this, SLOT(unsubscibe(QObject*))));
|
||||
|
||||
// add subscriber
|
||||
_subscribersByEventType.push_back(SubscribersType(type, new EventBusSubscriber(dis, receiver, sender)));
|
||||
_subscribersByEventType.push_back(EventTypeAndSubscriber(type, new EventBusSubscriber(dis, receiver, sender)));
|
||||
}
|
||||
|
||||
void EventBus::unsubscibe(QObject *receiver)
|
||||
@@ -134,8 +131,9 @@ namespace Robomongo
|
||||
*/
|
||||
EventBusDispatcher *EventBus::dispatcher(QThread *thread)
|
||||
{
|
||||
DispatchersContainerType::iterator disIt = std::find_if(
|
||||
_dispatchersByThread.begin(), _dispatchersByThread.end(), FindIfReciver(thread));
|
||||
auto const& disIt = std::find_if(
|
||||
_dispatchersByThread.begin(), _dispatchersByThread.end(), FindIfReciver(thread)
|
||||
);
|
||||
|
||||
if (disIt != _dispatchersByThread.end()) {
|
||||
return (*disIt).second;
|
||||
@@ -143,7 +141,7 @@ namespace Robomongo
|
||||
else {
|
||||
EventBusDispatcher *dis = new EventBusDispatcher();
|
||||
dis->moveToThread(thread);
|
||||
_dispatchersByThread.push_back(DispatchersType(thread, dis));
|
||||
_dispatchersByThread.push_back(ThreadAndDispatcher(thread, dis));
|
||||
return dis;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,10 +21,9 @@ namespace Robomongo
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
typedef std::pair<QEvent::Type, EventBusSubscriber *> SubscribersType;
|
||||
typedef std::vector<SubscribersType > SubscribersContainerType;
|
||||
typedef std::pair<QThread *, EventBusDispatcher *> DispatchersType;
|
||||
typedef std::vector<DispatchersType> DispatchersContainerType;
|
||||
typedef std::pair<QEvent::Type, EventBusSubscriber *> EventTypeAndSubscriber;
|
||||
typedef std::pair<QThread *, EventBusDispatcher *> ThreadAndDispatcher;
|
||||
|
||||
EventBus();
|
||||
~EventBus();
|
||||
|
||||
@@ -65,7 +64,7 @@ namespace Robomongo
|
||||
|
||||
private:
|
||||
QMutex _lock;
|
||||
SubscribersContainerType _subscribersByEventType;
|
||||
DispatchersContainerType _dispatchersByThread;
|
||||
std::vector<EventTypeAndSubscriber> _subscribersByEventType;
|
||||
std::vector<ThreadAndDispatcher> _dispatchersByThread;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "robomongo/core/EventError.h"
|
||||
|
||||
#include "robomongo/utils/string_operations.h"
|
||||
#include "robomongo/utils/StringOperations.h"
|
||||
|
||||
namespace Robomongo
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Robomongo
|
||||
|
||||
public:
|
||||
|
||||
enum ErrorCode { Unknown, SetPrimaryUnreachable };
|
||||
enum ErrorCode { Unknown, SetPrimaryUnreachable, ServerHasDifferentMembers };
|
||||
|
||||
/**
|
||||
* @brief Creates "null" (or, in other words, empty) error.
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace Robomongo
|
||||
|
||||
const char *p = s.c_str();
|
||||
for (size_t i = 0; i < bytes; i++) {
|
||||
data[i] = mongo::fromHex(p);
|
||||
data[i] = mongo::fromHex(p).getValue();
|
||||
p += 2;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "gtest/gtest.h"
|
||||
#include "HexUtils.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
/* Example Test:
|
||||
*
|
||||
* TEST( [Test_Case_Name], [Test_Name] )
|
||||
* TEST( [Test_Case_Name], [UnitOfWorkName_ScenarioUnderTest_ExpectedBehavior] )
|
||||
* TEST( StringParserTests, NumberLeftOf_StringWithoutNumber_ReturnsFalse) {
|
||||
// ...
|
||||
}
|
||||
*/
|
||||
|
||||
TEST(hex_utils_tests, test_1)
|
||||
{
|
||||
EXPECT_TRUE(Robomongo::HexUtils::isHexString("a"));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "robomongo/core/domain/App.h"
|
||||
|
||||
#include <QHash>
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "robomongo/core/domain/MongoServer.h"
|
||||
#include "robomongo/core/domain/MongoShell.h"
|
||||
@@ -35,6 +37,9 @@ namespace Robomongo
|
||||
}
|
||||
}
|
||||
|
||||
App::~App()
|
||||
{}
|
||||
|
||||
App::App(EventBus *const bus) : QObject(),
|
||||
_bus(bus), _lastServerHandle(0) {
|
||||
_bus->subscribe(this, EstablishSshConnectionResponse::Type);
|
||||
@@ -42,17 +47,75 @@ namespace Robomongo
|
||||
_bus->subscribe(this, LogEvent::Type);
|
||||
}
|
||||
|
||||
App::~App()
|
||||
std::unique_ptr<MongoServer>
|
||||
App::continueOpenServer(int serverHandle, ConnectionSettings* connSettings,
|
||||
ConnectionType type, int localport)
|
||||
{
|
||||
std::for_each(_shells.begin(), _shells.end(), stdutils::default_delete<MongoShell*>());
|
||||
std::for_each(_servers.begin(), _servers.end(), stdutils::default_delete<MongoServer*>());
|
||||
ConnectionSettings* connSettingsClone = connSettings->clone();
|
||||
|
||||
// Modify connection settings when SSH tunnel is used
|
||||
if ((type == ConnectionPrimary || type == ConnectionTest)
|
||||
&& !connSettingsClone->isReplicaSet()
|
||||
&& connSettingsClone->sshSettings()->enabled()
|
||||
) {
|
||||
connSettingsClone->setServerHost("127.0.0.1");
|
||||
connSettingsClone->setServerPort(localport);
|
||||
}
|
||||
|
||||
auto server { std::make_unique<MongoServer>(serverHandle, connSettingsClone, type) };
|
||||
server->runWorkerThread();
|
||||
|
||||
auto replicaSetStr = QString::fromStdString(connSettings->connectionName()) + " [Replica Set]";
|
||||
replicaSetStr = (connSettings->replicaSetSettings()->members().size() > 0)
|
||||
? replicaSetStr + QString::fromStdString(connSettings->replicaSetSettings()->members()[0])
|
||||
: replicaSetStr + "";
|
||||
|
||||
QString serverAddress = connSettings->isReplicaSet()
|
||||
? replicaSetStr
|
||||
: QString::fromStdString(connSettings->getFullAddress());
|
||||
|
||||
LOG_MSG(QString("Connecting to %1...").arg(serverAddress), mongo::logger::LogSeverity::Info());
|
||||
server->tryConnect();
|
||||
return server;
|
||||
}
|
||||
|
||||
bool App::openServer(ConnectionSettings *connection, ConnectionType type) {
|
||||
/**
|
||||
* Creates and opens new server connection.
|
||||
* @param connection: ConnectionSettings, that will be owned by MongoServer.
|
||||
* @param visible: should this server be visible in UI (explorer) or not.
|
||||
*/
|
||||
std::unique_ptr<MongoServer>
|
||||
App::openServerInternal(ConnectionSettings* connSettings, ConnectionType type)
|
||||
{
|
||||
++_lastServerHandle;
|
||||
|
||||
if (type == ConnectionPrimary)
|
||||
_bus->publish(new ConnectingEvent(this));
|
||||
|
||||
// When connection is SECONDARY or SSH not enabled or replica set,
|
||||
// then continue without SSH Tunnel
|
||||
if (type == ConnectionSecondary || !connSettings->sshSettings()->enabled()
|
||||
|| connSettings->isReplicaSet()
|
||||
) {
|
||||
return continueOpenServer(_lastServerHandle, connSettings, type);
|
||||
}
|
||||
|
||||
// Open SSH channel and only after that open connection
|
||||
LOG_MSG(QString("Creating SSH tunnel to %1:%2...")
|
||||
.arg(QtUtils::toQString(connSettings->sshSettings()->host()))
|
||||
.arg(connSettings->sshSettings()->port()), mongo::logger::LogSeverity::Info());
|
||||
|
||||
ConnectionSettings* settingsCopy = connSettings->clone();
|
||||
SshTunnelWorker* sshWorker = new SshTunnelWorker(settingsCopy);
|
||||
_bus->send(sshWorker, new EstablishSshConnectionRequest(this, _lastServerHandle, sshWorker, settingsCopy, type));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool App::openServer(ConnectionSettings *connection, ConnectionType type)
|
||||
{
|
||||
SshSettings *ssh = connection->sshSettings();
|
||||
|
||||
if (ssh->enabled() && ssh->askPassword() &&
|
||||
if (!connection->isReplicaSet() && ssh->enabled() && ssh->askPassword() &&
|
||||
(type == ConnectionPrimary || type == ConnectionTest)) {
|
||||
bool ok = false;
|
||||
|
||||
@@ -97,67 +160,43 @@ namespace Robomongo
|
||||
}
|
||||
}
|
||||
|
||||
openServerInternal(connection, type);
|
||||
_servers.push_back(move(openServerInternal(connection, type)));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and opens new server connection.
|
||||
* @param connection: ConnectionSettings, that will be owned by MongoServer.
|
||||
* @param visible: should this server be visible in UI (explorer) or not.
|
||||
*/
|
||||
MongoServer *App::openServerInternal(ConnectionSettings* connSettings, ConnectionType type) {
|
||||
++_lastServerHandle;
|
||||
|
||||
if (type == ConnectionPrimary)
|
||||
_bus->publish(new ConnectingEvent(this));
|
||||
|
||||
// When connection is SECONDARY or do not have
|
||||
// ssh settings enabled, continue without SSH Tunnel
|
||||
if (type == ConnectionSecondary || !connSettings->sshSettings()->enabled()) {
|
||||
return continueOpenServer(_lastServerHandle, connSettings, type);
|
||||
}
|
||||
|
||||
// Open SSH channel and only after that open connection
|
||||
LOG_MSG(QString("Creating SSH tunnel to %1:%2...")
|
||||
.arg(QtUtils::toQString(connSettings->sshSettings()->host()))
|
||||
.arg(connSettings->sshSettings()->port()), mongo::logger::LogSeverity::Info());
|
||||
|
||||
ConnectionSettings* settingsCopy = connSettings->clone();
|
||||
SshTunnelWorker* sshWorker = new SshTunnelWorker(settingsCopy);
|
||||
_bus->send(sshWorker, new EstablishSshConnectionRequest(this, _lastServerHandle, sshWorker, settingsCopy, type));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Closes MongoServer connection and frees all resources, owned
|
||||
* by MongoServer. Finally, specified MongoServer will also be deleted.
|
||||
*/
|
||||
void App::closeServer(MongoServer *server)
|
||||
{
|
||||
_servers.erase(std::remove_if(_servers.begin(), _servers.end(), stdutils::RemoveIfFound<MongoServer*>(server)),
|
||||
_servers.end());
|
||||
_servers.erase(std::remove_if(_servers.begin(), _servers.end(),
|
||||
[&](auto const& el) { return el.get() == server; }), _servers.end());
|
||||
}
|
||||
|
||||
void App::openShell(MongoCollection *collection, const QString &filePathToSave)
|
||||
{
|
||||
ConnectionSettings *connection = collection->database()->server()->connectionRecord();
|
||||
connection->setDefaultDatabase(collection->database()->name());
|
||||
QString script = detail::buildCollectionQuery(collection->name(), "find({})");
|
||||
openShell(collection->database()->server(), connection, ScriptInfo(script, true, CursorPosition(0, -2),
|
||||
QtUtils::toQString(collection->database()->name()), filePathToSave));
|
||||
auto const& dbname = collection->database()->name();
|
||||
connection->setDefaultDatabase(dbname);
|
||||
QString const& script = detail::buildCollectionQuery(collection->name(), "find({})");
|
||||
openShell(collection->database()->server(), connection,
|
||||
ScriptInfo(script, true, dbname, CursorPosition(0, -2), QtUtils::toQString(dbname), filePathToSave)
|
||||
);
|
||||
}
|
||||
|
||||
void App::openShell(MongoServer *server, const QString &script, const std::string &dbName,
|
||||
bool execute, const QString &shellName,
|
||||
const CursorPosition &cursorPosition, const QString &filePathToSave)
|
||||
bool execute, const QString &shellName,
|
||||
const CursorPosition &cursorPosition, const QString &filePathToSave)
|
||||
{
|
||||
ConnectionSettings *connection = server->connectionRecord();
|
||||
|
||||
if (!dbName.empty())
|
||||
connection->setDefaultDatabase(dbName);
|
||||
|
||||
openShell(server, connection, ScriptInfo(script, execute, cursorPosition, shellName, filePathToSave));
|
||||
openShell(server, connection,
|
||||
ScriptInfo(script, execute, dbName, cursorPosition, shellName, filePathToSave)
|
||||
);
|
||||
}
|
||||
|
||||
void App::openShell(MongoDatabase *database, const QString &script,
|
||||
@@ -166,22 +205,23 @@ namespace Robomongo
|
||||
{
|
||||
ConnectionSettings *connection = database->server()->connectionRecord();
|
||||
connection->setDefaultDatabase(database->name());
|
||||
openShell(database->server(), connection, ScriptInfo(script, execute, cursorPosition,
|
||||
shellName, filePathToSave));
|
||||
openShell(database->server(), connection, ScriptInfo(script, execute, database->name(),
|
||||
cursorPosition, shellName, filePathToSave));
|
||||
}
|
||||
|
||||
void App::openShell(MongoServer* server, ConnectionSettings* connection, const ScriptInfo &scriptInfo)
|
||||
{
|
||||
MongoServer *serverClone = openServerInternal(connection, ConnectionSecondary);
|
||||
auto serverClone{ openServerInternal(connection, ConnectionSecondary) };
|
||||
if (!serverClone || !server)
|
||||
return;
|
||||
|
||||
MongoShell *shell = new MongoShell(serverClone, scriptInfo);
|
||||
auto shell{ std::make_unique<MongoShell>(serverClone.get(), scriptInfo) };
|
||||
_servers.push_back(move(serverClone));
|
||||
// Connection between explorer's server and tab's MongoShells
|
||||
_bus->subscribe(server, ReplicaSetRefreshed::Type, shell);
|
||||
_shells.push_back(shell);
|
||||
_bus->publish(new OpeningShellEvent(this, shell));
|
||||
_bus->subscribe(server, ReplicaSetRefreshed::Type, shell.get());
|
||||
_bus->publish(new OpeningShellEvent(this, shell.get()));
|
||||
shell->execute();
|
||||
_shells.push_back(move(shell));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -191,45 +231,16 @@ namespace Robomongo
|
||||
*/
|
||||
void App::closeShell(MongoShell *shell)
|
||||
{
|
||||
auto const itr = std::find_if(_shells.begin(), _shells.end(),
|
||||
[&](auto const& el) { return el.get() == shell; }
|
||||
);
|
||||
|
||||
// Do nothing, if this shell not owned by this App.
|
||||
MongoShellsContainerType::iterator it = std::find_if(_shells.begin(), _shells.end(), std::bind1st(std::equal_to<MongoShell *>(), shell));
|
||||
if (it == _shells.end())
|
||||
if (itr == _shells.end())
|
||||
return;
|
||||
|
||||
_shells.erase(it);
|
||||
closeServer(shell->server());
|
||||
delete shell;
|
||||
}
|
||||
|
||||
MongoServer *App::continueOpenServer(int serverHandle, ConnectionSettings* connSettings, ConnectionType type,
|
||||
int localport)
|
||||
{
|
||||
ConnectionSettings* connSettingsClone = connSettings->clone();
|
||||
|
||||
// Modify connection settings when SSH tunnel is used
|
||||
if ((type == ConnectionPrimary || type == ConnectionTest)
|
||||
&& connSettingsClone->sshSettings()->enabled()) {
|
||||
connSettingsClone->setServerHost("127.0.0.1");
|
||||
connSettingsClone->setServerPort(localport);
|
||||
}
|
||||
|
||||
MongoServer *server = new MongoServer(serverHandle, connSettingsClone, type);
|
||||
_servers.push_back(server);
|
||||
|
||||
server->runWorkerThread();
|
||||
|
||||
auto replicaSetStr = QString::fromStdString(connSettings->connectionName()) + " [Replica Set]";
|
||||
replicaSetStr = (connSettings->replicaSetSettings()->members().size() > 0)
|
||||
? replicaSetStr + QString::fromStdString(connSettings->replicaSetSettings()->members()[0])
|
||||
: replicaSetStr + "";
|
||||
|
||||
QString serverAddress = connSettings->isReplicaSet()
|
||||
? replicaSetStr
|
||||
: QString::fromStdString(connSettings->getFullAddress());
|
||||
|
||||
LOG_MSG(QString("Connecting to %1...").arg(serverAddress), mongo::logger::LogSeverity::Info());
|
||||
server->tryConnect();
|
||||
return server;
|
||||
_shells.erase(itr);
|
||||
}
|
||||
|
||||
void App::handle(EstablishSshConnectionResponse *event) {
|
||||
@@ -242,26 +253,31 @@ namespace Robomongo
|
||||
|
||||
LOG_MSG(QString("SSH tunnel created successfully"), mongo::logger::LogSeverity::Info());
|
||||
|
||||
continueOpenServer(event->serverHandle, event->settings, event->connectionType, event->localport);
|
||||
_servers.push_back(move(
|
||||
continueOpenServer(event->serverHandle, event->settings, event->connectionType, event->localport)
|
||||
));
|
||||
_bus->send(event->worker, new ListenSshConnectionRequest(this, event->serverHandle, event->connectionType));
|
||||
}
|
||||
|
||||
void App::handle(LogEvent *event) {
|
||||
if (event->level == LogEvent::RBM_ERROR) {
|
||||
LOG_MSG(event->message, mongo::logger::LogSeverity::Error());
|
||||
} else if (event->level == LogEvent::RBM_WARN) {
|
||||
LOG_MSG(event->message, mongo::logger::LogSeverity::Warning());
|
||||
} else if (event->level == LogEvent::RBM_INFO) {
|
||||
LOG_MSG(event->message, mongo::logger::LogSeverity::Info());
|
||||
} else if (event->level == LogEvent::RBM_DEBUG) {
|
||||
LOG_MSG(event->message, mongo::logger::LogSeverity::Log());
|
||||
}
|
||||
LOG_MSG(event->message, event->mongoLogSeverity());
|
||||
|
||||
if (!event->informUser)
|
||||
return;
|
||||
|
||||
QMessageBox(
|
||||
event->qMessageBoxIcon(),
|
||||
QString::fromStdString(event->severity()),
|
||||
QtUtils::toQString(event->severity() + ": " + event->message)
|
||||
).exec();
|
||||
}
|
||||
|
||||
void App::handle(ListenSshConnectionResponse *event) {
|
||||
if (event->isError()) {
|
||||
_bus->publish(new ConnectionFailedEvent(this, event->serverHandle, event->connectionType, event->error().errorMessage(),
|
||||
ConnectionFailedEvent::SshChannel));
|
||||
_bus->publish(
|
||||
new ConnectionFailedEvent(this, event->serverHandle, event->connectionType,
|
||||
event->error().errorMessage(), ConnectionFailedEvent::SshChannel)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -287,7 +303,7 @@ namespace Robomongo
|
||||
|
||||
s << std::endl << "Enter your PEM key passphrase (will never be stored):";
|
||||
|
||||
QString userInput = QInputDialog::getText(NULL, tr("SSL Authentication"),
|
||||
QString userInput = QInputDialog::getText(NULL, tr("TLS Authentication"),
|
||||
QtUtils::toQString(s.str()),
|
||||
QLineEdit::Password, "", &ok);
|
||||
|
||||
|
||||
@@ -38,8 +38,6 @@ namespace Robomongo
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
typedef std::vector<MongoServer*> MongoServersContainerType;
|
||||
typedef std::vector<MongoShell*> MongoShellsContainerType;
|
||||
App(EventBus *const bus);
|
||||
~App();
|
||||
|
||||
@@ -63,19 +61,20 @@ namespace Robomongo
|
||||
void openShell(MongoCollection *collection, const QString &filePathToSave = QString());
|
||||
|
||||
void openShell(MongoServer *server, const QString &script, const std::string &dbName = std::string(),
|
||||
bool execute = true, const QString &shellName = QString(),
|
||||
const CursorPosition &cursorPosition = CursorPosition(), const QString &file = QString());
|
||||
bool execute = true, const QString &shellName = QString(),
|
||||
const CursorPosition &cursorPosition = CursorPosition(), const QString &file = QString());
|
||||
|
||||
void openShell(MongoDatabase *database, const QString &script,
|
||||
bool execute = true, const QString &shellName = QString(),
|
||||
const CursorPosition &cursorPosition = CursorPosition(), const QString &filePathToSave = QString());
|
||||
bool execute = true, const QString &shellName = QString(),
|
||||
const CursorPosition &cursorPosition = CursorPosition(),
|
||||
const QString &filePathToSave = QString());
|
||||
|
||||
/**
|
||||
* @brief Open new shell using explorer's MongoServer (ExplorerServerTreeItem's _server)
|
||||
*/
|
||||
void openShell(MongoServer* server, ConnectionSettings* connSettings, const ScriptInfo &scriptInfo);
|
||||
|
||||
MongoServersContainerType getServers() const { return _servers; };
|
||||
auto const& getServers() const { return _servers; };
|
||||
|
||||
/**
|
||||
* @brief Closes MongoShell and frees all resources, owned by specified MongoShell.
|
||||
@@ -83,7 +82,8 @@ namespace Robomongo
|
||||
*/
|
||||
void closeShell(MongoShell *shell);
|
||||
|
||||
void fireConnectionFailedEvent(int serverHandle, ConnectionType type, std::string errormsg, ConnectionFailedEvent::Reason reason);
|
||||
void fireConnectionFailedEvent(int serverHandle, ConnectionType type, std::string errormsg,
|
||||
ConnectionFailedEvent::Reason reason);
|
||||
|
||||
int getLastServerHandle() const { return _lastServerHandle; };
|
||||
|
||||
@@ -93,8 +93,10 @@ namespace Robomongo
|
||||
void handle(LogEvent *event);
|
||||
|
||||
private:
|
||||
MongoServer *openServerInternal(ConnectionSettings* connSettings, ConnectionType type);
|
||||
MongoServer *continueOpenServer(int serverHandle, ConnectionSettings* connSettings, ConnectionType type, int localport = 0);
|
||||
std::unique_ptr<MongoServer> openServerInternal(ConnectionSettings* connSettings, ConnectionType type);
|
||||
|
||||
std::unique_ptr<MongoServer>
|
||||
continueOpenServer(int serverHandle, ConnectionSettings* connSettings, ConnectionType type, int localport = 0);
|
||||
|
||||
/**
|
||||
* @brief Create prompt dialog to enter SSL PEM key passphrase and save passphrase into SSL settings
|
||||
@@ -106,12 +108,12 @@ namespace Robomongo
|
||||
/**
|
||||
* MongoServers, owned by this App.
|
||||
*/
|
||||
MongoServersContainerType _servers;
|
||||
std::vector<std::unique_ptr<MongoServer>> _servers;
|
||||
|
||||
/**
|
||||
* MongoShells, owned by this App.
|
||||
*/
|
||||
MongoShellsContainerType _shells;
|
||||
std::vector<std::unique_ptr<MongoShell>> _shells;
|
||||
|
||||
EventBus *const _bus;
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
namespace Robomongo
|
||||
{
|
||||
struct AggrInfo
|
||||
{
|
||||
AggrInfo() {}
|
||||
|
||||
AggrInfo(const std::string& collectionName, int skip, int batchSize,
|
||||
mongo::BSONObj const& pipeline, mongo::BSONObj const& options, int resultIndex) :
|
||||
collectionName(collectionName), skip(skip), batchSize(batchSize), pipeline(pipeline),
|
||||
options(options), isValid(true), resultIndex(resultIndex)
|
||||
{}
|
||||
|
||||
std::string collectionName = "";
|
||||
int skip = 0;
|
||||
int batchSize = 0;
|
||||
mongo::BSONObj pipeline;
|
||||
mongo::BSONObj options;
|
||||
bool isValid = false;
|
||||
int resultIndex = -1;
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "MongoCollectionInfo.h"
|
||||
#include "robomongo/core/utils/BsonUtils.h"
|
||||
#include <mongo/client/dbclientinterface.h>
|
||||
#include <mongo/client/dbclient_base.h>
|
||||
|
||||
namespace Robomongo
|
||||
{
|
||||
|
||||
@@ -81,39 +81,35 @@ namespace Robomongo
|
||||
_bus->send(_server->worker(), new CopyCollectionToDiffServerRequest(this, server->worker(), sourceDatabase, collection, _name));
|
||||
}
|
||||
|
||||
void MongoDatabase::createUser(const MongoUser &user, bool overwrite)
|
||||
void MongoDatabase::createUser(const MongoUser &user)
|
||||
{
|
||||
_bus->send(_server->worker(), new CreateUserRequest(this, _name, user, overwrite));
|
||||
_bus->send(_server->worker(), new CreateUserRequest(this, _name, user));
|
||||
}
|
||||
|
||||
void MongoDatabase::dropUser(const mongo::OID &id, std::string const& userName)
|
||||
void MongoDatabase::dropUser(std::string const& userName)
|
||||
{
|
||||
_bus->send(_server->worker(), new DropUserRequest(this, _name, id, userName));
|
||||
_bus->send(_server->worker(), new DropUserRequest(this, _name, userName));
|
||||
}
|
||||
|
||||
void MongoDatabase::createFunction(const MongoFunction &fun)
|
||||
{
|
||||
_bus->send(_server->worker(), new CreateFunctionRequest(this, _name, fun));
|
||||
_bus->send(_server->worker(), new CreateFunctionRequest(this, _name, _server->version(), fun));
|
||||
}
|
||||
|
||||
void MongoDatabase::updateFunction(const std::string &name, const MongoFunction &fun)
|
||||
{
|
||||
_bus->send(_server->worker(), new CreateFunctionRequest(this, _name, fun, name));
|
||||
_bus->send(_server->worker(), new CreateFunctionRequest(this, _name, _server->version(), fun, name));
|
||||
}
|
||||
|
||||
void MongoDatabase::dropFunction(const std::string &name)
|
||||
{
|
||||
_bus->send(_server->worker(), new DropFunctionRequest(this, _name, name));
|
||||
_bus->send(_server->worker(), new DropFunctionRequest(this, _name, _server->version(), name));
|
||||
}
|
||||
|
||||
void MongoDatabase::handle(LoadCollectionNamesResponse *event)
|
||||
{
|
||||
if (event->isError()) {
|
||||
if (_server->connectionRecord()->isReplicaSet()) // replica set
|
||||
handleIfReplicaSetUnreachable(event);
|
||||
else // single server
|
||||
_bus->publish(new MongoDatabaseCollectionListLoadedEvent(this, event->error()));
|
||||
|
||||
_bus->publish(new MongoDatabaseCollectionListLoadedEvent(this, event->error()));
|
||||
genericEventErrorHandler(event, "Failed to refresh 'Collections'.", _bus, this);
|
||||
return;
|
||||
}
|
||||
@@ -154,10 +150,10 @@ namespace Robomongo
|
||||
void MongoDatabase::handle(LoadUsersResponse *event)
|
||||
{
|
||||
if (event->isError()) {
|
||||
_bus->publish(new MongoDatabaseUsersLoadedEvent(this, event->error()));
|
||||
|
||||
if (_server->connectionRecord()->isReplicaSet()) // replica set
|
||||
handleIfReplicaSetUnreachable(event);
|
||||
else // single server
|
||||
_bus->publish(new MongoDatabaseUsersLoadedEvent(this, event->error()));
|
||||
|
||||
genericEventErrorHandler(event, "Failed to refresh 'Users'.", _bus, this);
|
||||
return;
|
||||
@@ -170,10 +166,10 @@ namespace Robomongo
|
||||
void MongoDatabase::handle(LoadFunctionsResponse *event)
|
||||
{
|
||||
if (event->isError()) {
|
||||
_bus->publish(new MongoDatabaseFunctionsLoadedEvent(this, event->error()));
|
||||
|
||||
if (_server->connectionRecord()->isReplicaSet()) // replica set
|
||||
handleIfReplicaSetUnreachable(event);
|
||||
else // single server
|
||||
_bus->publish(new MongoDatabaseFunctionsLoadedEvent(this, event->error()));
|
||||
|
||||
genericEventErrorHandler(event, "Failed to refresh 'Functions'.", _bus, this);
|
||||
return;
|
||||
|
||||
@@ -62,8 +62,8 @@ namespace Robomongo
|
||||
void duplicateCollection(const std::string &collection, const std::string &newCollection);
|
||||
void copyCollection(MongoServer *server, const std::string &sourceDatabase, const std::string &collection);
|
||||
|
||||
void createUser(const MongoUser &user, bool overwrite);
|
||||
void dropUser(const mongo::OID &id, std::string const& userName);
|
||||
void createUser(const MongoUser &user);
|
||||
void dropUser(std::string const& userName);
|
||||
|
||||
void createFunction(const MongoFunction &fun);
|
||||
void updateFunction(const std::string &name, const MongoFunction &fun);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "robomongo/core/domain/MongoDocument.h"
|
||||
|
||||
#include <mongo/client/dbclientinterface.h>
|
||||
#include <mongo/client/dbclient_base.h>
|
||||
#include "robomongo/core/settings/SettingsManager.h"
|
||||
#include "robomongo/core/AppRegistry.h"
|
||||
#include "robomongo/core/utils/BsonUtils.h"
|
||||
|
||||