Merge pull request #1874 from nextcloud/feature/noid/ktlintPluginAndHooks

Use ktlint plugin instead of manual ktlint tasks
This commit is contained in:
Andy Scherzinger 2022-03-17 20:28:39 +01:00 committed by GitHub
commit 4e7e5b1e9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 107 additions and 66 deletions

View file

@ -10,7 +10,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
task: [ detekt, ktlint ] task: [ detekt, ktlintCheck ]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Set up JDK 8 - name: Set up JDK 8

View file

@ -31,10 +31,7 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.github.spotbugs' apply plugin: 'com.github.spotbugs'
apply plugin: 'io.gitlab.arturbosch.detekt' apply plugin: 'io.gitlab.arturbosch.detekt'
apply plugin: "org.jlleitschuh.gradle.ktlint"
configurations {
ktlint
}
def urlFile = { url, fileName -> def urlFile = { url, fileName ->
File file = new File("$buildDir/download/${fileName}") File file = new File("$buildDir/download/${fileName}")
@ -149,7 +146,7 @@ android {
} }
} }
check.dependsOn 'spotbugsGplayDebugReport', 'lint', 'ktlint', 'detekt' check.dependsOn 'spotbugsGplayDebug', 'lint', 'ktlintCheck', 'detekt'
lint.dependsOn 'preBuild' lint.dependsOn 'preBuild'
compileOptions { compileOptions {
@ -206,7 +203,6 @@ dependencies {
implementation ('com.gitlab.bitfireAT:dav4jvm:2.1.3', { implementation ('com.gitlab.bitfireAT:dav4jvm:2.1.3', {
exclude group: 'org.ogce', module: 'xpp3' // Android comes with its own XmlPullParser exclude group: 'org.ogce', module: 'xpp3' // Android comes with its own XmlPullParser
}) })
ktlint "com.pinterest:ktlint:0.44.0"
implementation 'org.conscrypt:conscrypt-android:2.5.2' implementation 'org.conscrypt:conscrypt-android:2.5.2'
implementation 'androidx.camera:camera-core:1.0.2' implementation 'androidx.camera:camera-core:1.0.2'
@ -338,20 +334,6 @@ dependencies {
gplayImplementation "com.google.firebase:firebase-messaging:23.0.0" gplayImplementation "com.google.firebase:firebase-messaging:23.0.0"
} }
task ktlint(type: JavaExec, group: "verification") {
description = "Check Kotlin code style."
main = "com.pinterest.ktlint.Main"
classpath = configurations.ktlint
args "--reporter=plain", "--reporter=plain,output=${buildDir}/ktlint.txt,src/**/*.kt"
}
task ktlintFormat(type: JavaExec, group: "formatting") {
description = "Fix Kotlin code style deviations."
main = "com.pinterest.ktlint.Main"
classpath = configurations.ktlint
args "-F", "src/**/*.kt"
}
detekt { detekt {
reports { reports {
xml { xml {

View file

@ -59,11 +59,10 @@ import java.security.cert.CertificateException
import javax.inject.Inject import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class ServerSelectionController : NewBaseController(R.layout.controller_server_selection) { class ServerSelectionController :
private val binding: ControllerServerSelectionBinding by viewBinding(ControllerServerSelectionBinding::bind) NewBaseController(R.layout.controller_server_selection) {
override val appBarLayoutType: AppBarLayoutType private val binding: ControllerServerSelectionBinding by viewBinding(ControllerServerSelectionBinding::bind)
get() = AppBarLayoutType.EMPTY
@Inject @Inject
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@ -75,14 +74,18 @@ class ServerSelectionController : NewBaseController(R.layout.controller_server_s
fun onCertClick() { fun onCertClick() {
if (activity != null) { if (activity != null) {
KeyChain.choosePrivateKeyAlias(activity!!, { alias: String? -> KeyChain.choosePrivateKeyAlias(
activity!!,
{ alias: String? ->
if (alias != null) { if (alias != null) {
appPreferences!!.temporaryClientCertAlias = alias appPreferences!!.temporaryClientCertAlias = alias
} else { } else {
appPreferences!!.removeTemporaryClientCertAlias() appPreferences!!.removeTemporaryClientCertAlias()
} }
setCertTextView() setCertTextView()
}, arrayOf("RSA", "EC"), null, null, -1, null) },
arrayOf("RSA", "EC"), null, null, -1, null
)
} }
} }
@ -367,6 +370,9 @@ class ServerSelectionController : NewBaseController(R.layout.controller_server_s
statusQueryDisposable = null statusQueryDisposable = null
} }
override val appBarLayoutType: AppBarLayoutType
get() = AppBarLayoutType.EMPTY
companion object { companion object {
const val TAG = "ServerSelectionController" const val TAG = "ServerSelectionController"
const val MIN_SERVER_MAJOR_VERSION = 13 const val MIN_SERVER_MAJOR_VERSION = 13

View file

@ -241,7 +241,9 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
} }
}.start() }.start()
} else { } else {
KeyChain.choosePrivateKeyAlias(activity!!, { chosenAlias: String? -> KeyChain.choosePrivateKeyAlias(
activity!!,
{ chosenAlias: String? ->
if (chosenAlias != null) { if (chosenAlias != null) {
appPreferences!!.temporaryClientCertAlias = chosenAlias appPreferences!!.temporaryClientCertAlias = chosenAlias
Thread { Thread {
@ -265,7 +267,13 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
} else { } else {
request.cancel() request.cancel()
} }
}, arrayOf("RSA", "EC"), null, request.host, request.port, null) },
arrayOf("RSA", "EC"),
null,
request.host,
request.port,
null
)
} }
} }

View file

@ -212,17 +212,8 @@ class SetStatusDialogFragment :
binding.emoji.disableKeyboardInput(popup) binding.emoji.disableKeyboardInput(popup)
binding.emoji.forceSingleEmoji() binding.emoji.forceSingleEmoji()
val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.simple_spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
adapter.add(getString(R.string.dontClear))
adapter.add(getString(R.string.thirtyMinutes))
adapter.add(getString(R.string.oneHour))
adapter.add(getString(R.string.fourHours))
adapter.add(getString(R.string.today))
adapter.add(getString(R.string.thisWeek))
binding.clearStatusAfterSpinner.apply { binding.clearStatusAfterSpinner.apply {
this.adapter = adapter this.adapter = createClearTimesArrayAdapter()
onItemSelectedListener = object : OnItemSelectedListener { onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
setClearStatusAfterValue(position) setClearStatusAfterValue(position)
@ -244,6 +235,18 @@ class SetStatusDialogFragment :
} }
} }
private fun createClearTimesArrayAdapter(): ArrayAdapter<String> {
val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.simple_spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
adapter.add(getString(R.string.dontClear))
adapter.add(getString(R.string.thirtyMinutes))
adapter.add(getString(R.string.oneHour))
adapter.add(getString(R.string.fourHours))
adapter.add(getString(R.string.today))
adapter.add(getString(R.string.thisWeek))
return adapter
}
@Suppress("ComplexMethod") @Suppress("ComplexMethod")
private fun setClearStatusAfterValue(item: Int) { private fun setClearStatusAfterValue(item: Int) {

View file

@ -40,6 +40,7 @@ buildscript {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
classpath 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.5' classpath 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.5'
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.19.0" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.19.0"
classpath "org.jlleitschuh.gradle:ktlint-gradle:10.2.1"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files

14
scripts/hooks/pre-commit Normal file
View file

@ -0,0 +1,14 @@
#!/bin/bash
# Pre-commit hook: don't allow commits if detekt or ktlint fail. Skip with "git commit --no-verify".
echo "Running pre-commit checks..."
if ! ./gradlew --daemon ktlintCheck &>/dev/null; then
echo >&2 "ktlint failed! Run ./gradlew ktlintCheck for details"
echo >&2 "Hint: fix most lint errors with ./gradlew ktlintFormat"
exit 1
fi
if ! ./gradlew --daemon detekt &>/dev/null; then
echo >&2 "Detekt failed! See report at file://$(pwd)/app/build/reports/detekt/detekt.html"
exit 1
fi

27
scripts/hooks/pre-push Normal file
View file

@ -0,0 +1,27 @@
#!/bin/bash
# Pre-push: Don't allow commits without Signed-off-by. Skip with "git push --no-verify".
set -euo pipefail
z40=0000000000000000000000000000000000000000 # magic deleted ref
while read local_ref local_sha remote_ref remote_sha; do
if [ "$local_sha" != $z40 ]; then
if [ "$remote_sha" = $z40 ]; then
# New branch, examine all commits
range="$(git merge-base master $local_sha)..$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for commits without sign-off
commit=$(git rev-list --no-merges --grep 'Signed-off-by' --invert-grep "$range")
if [ -n "$commit" ]; then
echo >&2 "Found commits without sign-off in $local_ref. Aborting push. Offending commits:"
echo >&2 "$commit"
exit 1
fi
fi
done
exit 0