Skip to content

Commit dcfb0db

Browse files
committed
Merge branch 'release/v7.1.0' into 'master'
Release 7.1.0 See merge request megachat/MEGAchat!2001
2 parents 2757484 + 9e0db33 commit dcfb0db

22 files changed

+650
-179
lines changed

bindings/java/nz/mega/sdk/MegaChatApiJava.java

+34
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,17 @@ public void retryPendingConnections(boolean disconnect, MegaChatRequestListenerI
519519
megaChatApi.retryPendingConnections(disconnect, createDelegateRequestListener(listener));
520520
}
521521

522+
/**
523+
* Refresh DNS servers and retry pending connections
524+
*
525+
* The associated request type with this request is MegaChatRequest::TYPE_RETRY_PENDING_CONNECTIONS
526+
*
527+
* @param disconnect boolean
528+
*/
529+
public void retryPendingConnections(boolean disconnect){
530+
megaChatApi.retryPendingConnections(disconnect);
531+
}
532+
522533
/**
523534
* Refresh URLs and establish fresh connections
524535
*
@@ -1750,6 +1761,29 @@ public void requestLastGreen(long userid, MegaChatRequestListenerInterface liste
17501761
megaChatApi.requestLastGreen(userid, createDelegateRequestListener(listener));
17511762
}
17521763

1764+
/**
1765+
* Request the number of minutes since the user was seen as green by last time.
1766+
*
1767+
* Apps may call this function to retrieve the minutes elapsed since the user was seen
1768+
* as green (MegaChatApi::STATUS_ONLINE) by last time.
1769+
* Apps must NOT call this function if the current status of the user is already green.
1770+
*
1771+
* The number of minutes since the user was seen as green by last time, if any, will
1772+
* be notified in the MegaChatListener::onChatPresenceLastGreen callback. Note that,
1773+
* if the user was never seen green by presenced or the user has disabled the visibility
1774+
* of the last-green with MegaChatApi::setLastGreenVisible, there will be no notification
1775+
* at all.
1776+
*
1777+
* The associated request type with this request is MegaChatRequest::TYPE_LAST_GREEN
1778+
* Valid data in the MegaChatRequest object received on callbacks:
1779+
* - MegaChatRequest::getUserHandle() - Returns the handle of the user
1780+
*
1781+
* @param userid MegaChatHandle from user that last green has been requested
1782+
*/
1783+
public void requestLastGreen(long userid){
1784+
megaChatApi.requestLastGreen(userid);
1785+
}
1786+
17531787
/**
17541788
* Signal there is some user activity
17551789
*

examples/qtmegachatapi/MainWindow.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,6 @@ void MainWindow::onSchedMeetingOccurrencesUpdate(MegaChatApi* /*api*/, MegaChatH
495495

496496
void MainWindow::closeEvent(QCloseEvent *event)
497497
{
498-
delete this;
499498
event->accept();
500499
}
501500

examples/qtmegachatapi/MegaChatApplication.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,14 @@ MegaChatApplication::~MegaChatApplication()
5757
delete megaChatNotificationListenerDelegate;
5858
delete megaChatRequestListenerDelegate;
5959
delete megaListenerDelegate;
60-
delete mMainWin;
60+
if (mMainWin != nullptr)
61+
{
62+
delete mMainWin;
63+
mMainWin = nullptr;
64+
}
6165
delete mMegaChatApi;
6266
delete mMegaApi;
67+
mMegaChatApi->setLoggerObject(nullptr);
6368
delete mLogger;
6469
delete [] mSid;
6570
}

jenkinsfile/Jenkinsfile_MR_crossiOS

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pipeline {
3939
timeout(time: 200, unit: 'MINUTES')
4040
buildDiscarder(logRotator(numToKeepStr: '135', daysToKeepStr: '21'))
4141
gitLabConnection('GitLabConnectionJenkins')
42+
ansiColor('xterm')
4243
}
4344
environment {
4445
BUILD_OPTIONS = ' '

jenkinsfile/Jenkinsfile_MR_linux_cmake

+3-3
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ pipeline {
149149
steps{
150150
dir(megachat_sources_workspace){
151151
sh """
152-
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS}#g" tests/sdk_test/sdk_test.h
152+
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS_MEGACHAT}#g" tests/sdk_test/sdk_test.h
153153
"""
154154
sh "echo Building SDK"
155155
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
@@ -184,12 +184,12 @@ pipeline {
184184
ulimit -c unlimited
185185
if [ -z \"${TESTS_PARALLEL}\" ]; then
186186
# Sequential run
187-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} &
187+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} &
188188
pid=\$!
189189
wait \$pid || FAILED=1
190190
else
191191
# Parallel run
192-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
192+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
193193
[ \"\${PIPESTATUS[0]}\" != \"0\" ] && FAILED=1
194194
fi
195195

jenkinsfile/Jenkinsfile_MR_macOS_cmake

+7-4
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,22 @@ pipeline {
110110
MEGAQTPATH= "${env.HOME}/Qt-build/5.15.13/5.15.13/arm64"
111111
}
112112
steps{
113+
script {
114+
BUILD_TYPE = (env.gitlabTriggerPhrase != null && env.gitlabTriggerPhrase.contains('--upload_megaclc')) ? 'Release' : 'Debug'
115+
}
113116
dir(megachat_sources_workspace){
114117
//Build for arm64
115-
sh "echo Building for arm64"
118+
sh "echo Building for arm64 in ${BUILD_TYPE} mode"
116119
sh "mkdir ${BUILD_DIR}"
117-
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
120+
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
118121
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR} -DCMAKE_PREFIX_PATH=${MEGAQTPATH} \
119122
-DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF"
120123
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR} -j3"
121124

122125
//build for x64
123-
sh "echo \"Building for x64 (crosscompiling)\""
126+
sh "echo Building for x64-crosscompiling in ${BUILD_TYPE} mode"
124127
sh "mkdir ${BUILD_DIR_X64}"
125-
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
128+
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
126129
-DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF \
127130
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR_X64} -DCMAKE_PREFIX_PATH=${MEGAQTPATH}"
128131
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR_X64} -j3"

jenkinsfile/Jenkinsfile_MR_windows_cmake

+8-6
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,15 @@ pipeline {
112112
BUILD_DIR = "build_dir"
113113
}
114114
steps{
115+
script {
116+
BUILD_TYPE = (env.gitlabTriggerPhrase != null && env.gitlabTriggerPhrase.contains('--upload_megaclc')) ? 'Release' : 'Debug'
117+
}
115118
dir(megachat_sources_workspace){
116-
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT='${VCPKGPATH}' ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
119+
sh "echo Building in ${BUILD_TYPE} mode"
120+
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT='${VCPKGPATH}' ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
117121
-DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF \
118122
-S '${megachat_sources_workspace}' -B '${megachat_sources_workspace}'\\\\${BUILD_DIR}\\\\"
119-
sh "cmake --build '${megachat_sources_workspace}'\\\\${BUILD_DIR} -j2"
123+
sh "cmake --build '${megachat_sources_workspace}'\\\\${BUILD_DIR} --config ${BUILD_TYPE} -j2"
120124
}
121125
script {
122126
uploadMegaclcExecuted = false
@@ -133,7 +137,7 @@ pipeline {
133137
JF_PATH = "${megachat_sources_workspace}\\.."
134138
}
135139
steps {
136-
dir('build_dir\\examples\\megaclc\\Debug'){
140+
dir('build_dir\\examples\\megaclc\\Release'){
137141
script {
138142
uploadMegaclcExecuted = true
139143
def windows_artifactory_upload = { String ART_UPLOAD_PATH ->
@@ -152,9 +156,7 @@ pipeline {
152156
}
153157

154158
post{
155-
always{
156-
deleteDir()
157-
}
159+
158160
success {
159161
script{
160162
if (uploadMegaclcExecuted){
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
pipeline {
2+
agent { label 'osx && arm64' }
3+
options {
4+
buildDiscarder(logRotator(numToKeepStr: '135', daysToKeepStr: '21'))
5+
gitLabConnection('GitLabConnectionJenkins')
6+
ansiColor('xterm')
7+
}
8+
environment {
9+
APIURL_TO_TEST = "https://g.api.mega.co.nz/"
10+
IOS_BRANCH = "develop"
11+
SDK_BRANCH = "develop"
12+
MEGACHAT_BRANCH = "develop"
13+
}
14+
stages {
15+
stage('Checkout SDK MEGAchat and iOS'){
16+
steps {
17+
deleteDir()
18+
checkout([
19+
$class: 'GitSCM',
20+
branches: [[name: "origin/${env.IOS_BRANCH}"]],
21+
userRemoteConfigs: [[ url: "[email protected]:mobile/ios/iOS_dev.git", credentialsId: "12492eb8-0278-4402-98f0-4412abfb65c1" ]],
22+
extensions: [
23+
[$class: "UserIdentity",name: "jenkins", email: "jenkins@jenkins"]
24+
]
25+
])
26+
dir("Modules/DataSource/MEGAChatSDK/Sources/MEGAChatSDK"){
27+
checkout([
28+
$class: 'GitSCM',
29+
branches: [[name: "origin/${env.MEGACHAT_BRANCH}"]],
30+
userRemoteConfigs: [[ url: "[email protected]:megachat/MEGAchat.git", credentialsId: "12492eb8-0278-4402-98f0-4412abfb65c1" ]],
31+
extensions: [
32+
[$class: "UserIdentity",name: "jenkins", email: "jenkins@jenkins"],
33+
]
34+
])
35+
}
36+
dir('Modules/Datasource/MEGASDK/Sources/MEGASDK'){
37+
checkout([
38+
$class: 'GitSCM',
39+
branches: [[name: "origin/${env.SDK_BRANCH}"]],
40+
userRemoteConfigs: [[ url: "[email protected]:sdk/sdk.git", credentialsId: "12492eb8-0278-4402-98f0-4412abfb65c1" ]],
41+
extensions: [
42+
[$class: "UserIdentity",name: "jenkins", email: "jenkins@jenkins"]
43+
]
44+
])
45+
}
46+
sh """
47+
git submodule update --init iMEGA/Vendor/SVProgressHUD
48+
git submodule update --init iMEGA/Vendor/LTHPasscodeViewController
49+
"""
50+
script{
51+
ios_sources_workspace = WORKSPACE
52+
sdk_sources_workspace = "${ios_sources_workspace}/Modules/DataSource/MEGASDK/Sources/MEGASDK"
53+
megachat_sources_workspace = "${ios_sources_workspace}/Modules/DataSource/MEGAChatSDK/Sources/MEGAChatSDK"
54+
}
55+
}
56+
}
57+
stage('Build MEGACHAT SDK and iOS'){
58+
environment{
59+
PATH = "/usr/local/bin:${env.PATH}"
60+
LIBTOOLIZE = "/usr/local/bin/glibtoolize"
61+
}
62+
steps{
63+
sh """
64+
bundle config set --local path 'vendor/bundle'
65+
bundle install
66+
"""
67+
dir("${megachat_sources_workspace}/src"){
68+
sh """
69+
cmake -P genDbSchema.cmake
70+
"""
71+
}
72+
sh """
73+
bundle exec fastlane configure_sdk_and_chat_library use_cache:true
74+
"""
75+
withCredentials([gitUsernamePassword(credentialsId: 'jenkins_sdk_token_with_user', gitToolName: 'Default')]) {
76+
sh """
77+
bundle exec fastlane update_plugins
78+
bundle exec fastlane build_simulator
79+
"""
80+
}
81+
}
82+
}
83+
}
84+
post {
85+
always {
86+
deleteDir()
87+
}
88+
}
89+
}
90+
// vim: syntax=groovy tabstop=4 shiftwidth=4

jenkinsfile/specific_branches/MEGAChat_debian64_cmake_without_webrtc.groovy

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pipeline {
3535
steps{
3636
dir(megachat_sources_workspace){
3737
sh """
38-
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS}#g" tests/sdk_test/sdk_test.h
38+
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS_MEGACHAT}#g" tests/sdk_test/sdk_test.h
3939
"""
4040
sh "echo Building SDK"
4141
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DUSE_WEBRTC=OFF -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
@@ -71,12 +71,12 @@ pipeline {
7171
ulimit -c unlimited
7272
if [ -z \"${TESTS_PARALLEL}\" ]; then
7373
# Sequential run
74-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} &
74+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} &
7575
pid=\$!
7676
wait \$pid || FAILED=1
7777
else
7878
# Parallel run
79-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
79+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} ${GTEST_FILTER} ${GTEST_REPEAT} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
8080
[ \"\${PIPESTATUS[0]}\" != \"0\" ] && FAILED=1
8181
fi
8282

jenkinsfile/specific_branches/MEGAChat_linux.groovy

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pipeline {
3535
steps{
3636
dir(megachat_sources_workspace){
3737
sh """
38-
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS}#g" tests/sdk_test/sdk_test.h
38+
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS_MEGACHAT}#g" tests/sdk_test/sdk_test.h
3939
"""
4040
sh "echo Building SDK"
4141
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
@@ -72,12 +72,12 @@ pipeline {
7272
ulimit -c unlimited
7373
if [ -z \"${TESTS_PARALLEL}\" ]; then
7474
# Sequential run
75-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} &
75+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} &
7676
pid=\$!
7777
wait \$pid || FAILED=1
7878
else
7979
# Parallel run
80-
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS} --APIURL:${APIURL_TO_TEST} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
80+
tests/sdk_test/megachat_tests --USERAGENT:${env.USER_AGENT_TESTS_MEGACHAT} --APIURL:${APIURL_TO_TEST} ${TESTS_PARALLEL} 2>&1 | tee tests.stdout
8181
[ \"\${PIPESTATUS[0]}\" != \"0\" ] && FAILED=1
8282
fi
8383
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
pipeline {
2+
agent { label 'osx && arm64' }
3+
options {
4+
buildDiscarder(logRotator(numToKeepStr: '135', daysToKeepStr: '21'))
5+
gitLabConnection('GitLabConnectionJenkins')
6+
ansiColor('xterm')
7+
}
8+
environment {
9+
PATH = "/usr/local/bin:${env.PATH}"
10+
VCPKGPATH = "${env.HOME}/jenkins/vcpkg"
11+
MEGAQTPATH= "${env.HOME}/Qt-build/5.15.13/5.15.13/arm64"
12+
BUILD_TYPE= "Release"
13+
APIURL_TO_TEST = "https://g.api.mega.co.nz/"
14+
SDK_BRANCH = "develop"
15+
MEGACHAT_BRANCH = "develop"
16+
BUILD_OPTIONS = ' '
17+
BUILD_DIR = "build_dir"
18+
BUILD_DIR_X64 = "build_dir_x64"
19+
}
20+
stages {
21+
stage('Checkout SDK and MEGAchat'){
22+
steps {
23+
checkout([
24+
$class: 'GitSCM',
25+
branches: [[name: "origin/${env.MEGACHAT_BRANCH}"]],
26+
userRemoteConfigs: [[ url: "${env.GIT_URL_MEGACHAT}", credentialsId: "12492eb8-0278-4402-98f0-4412abfb65c1" ]],
27+
])
28+
dir('third-party/mega'){
29+
sh "echo Cloning SDK branch ${SDK_BRANCH}"
30+
checkout([
31+
$class: 'GitSCM',
32+
branches: [[name: "origin/${SDK_BRANCH}"]],
33+
userRemoteConfigs: [[ url: "${env.GIT_URL_SDK}", credentialsId: "12492eb8-0278-4402-98f0-4412abfb65c1" ]],
34+
])
35+
}
36+
script{
37+
megachat_sources_workspace = WORKSPACE
38+
}
39+
}
40+
}
41+
stage('Build MEGAchat'){
42+
steps{
43+
dir(megachat_sources_workspace){
44+
//Build for arm64
45+
sh "echo Building for arm64 in ${BUILD_TYPE} mode"
46+
sh "mkdir ${BUILD_DIR}"
47+
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
48+
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR} -DCMAKE_PREFIX_PATH=${MEGAQTPATH} \
49+
-DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF"
50+
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR} -j3"
51+
52+
//build for x64
53+
sh "echo Building for x64-crosscompiling in ${BUILD_TYPE} mode"
54+
sh "mkdir ${BUILD_DIR_X64}"
55+
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
56+
-DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF \
57+
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR_X64} -DCMAKE_PREFIX_PATH=${MEGAQTPATH}"
58+
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR_X64} -j3"
59+
}
60+
}
61+
}
62+
}
63+
post {
64+
always {
65+
deleteDir()
66+
}
67+
}
68+
}
69+
// vim: syntax=groovy tabstop=4 shiftwidth=4

0 commit comments

Comments
 (0)