aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/app/passwordstore/Application.kt3
-rw-r--r--app/src/main/java/app/passwordstore/util/git/operation/GcOperation.kt19
-rw-r--r--app/src/main/java/app/passwordstore/util/git/operation/ResetToRemoteOperation.kt2
-rw-r--r--app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt2
4 files changed, 24 insertions, 2 deletions
diff --git a/app/src/main/java/app/passwordstore/Application.kt b/app/src/main/java/app/passwordstore/Application.kt
index 794dea10..9bc4c83e 100644
--- a/app/src/main/java/app/passwordstore/Application.kt
+++ b/app/src/main/java/app/passwordstore/Application.kt
@@ -35,6 +35,7 @@ import logcat.LogPriority.DEBUG
import logcat.LogPriority.VERBOSE
import logcat.LogcatLogger
import logcat.logcat
+import org.eclipse.jgit.storage.file.WindowCacheConfig
@Suppress("Unused")
@HiltAndroidApp
@@ -51,6 +52,8 @@ class Application : android.app.Application(), SharedPreferences.OnSharedPrefere
override fun onCreate() {
super.onCreate()
instance = this
+ // JGit registers its pack cache statistics with JMX by default; Android has no JMX.
+ WindowCacheConfig().apply { exposeStatsViaJmx = false }.install()
if (
BuildConfig.ENABLE_DEBUG_FEATURES ||
prefs.getBoolean(PreferenceKeys.ENABLE_DEBUG_LOGGING, false)
diff --git a/app/src/main/java/app/passwordstore/util/git/operation/GcOperation.kt b/app/src/main/java/app/passwordstore/util/git/operation/GcOperation.kt
index cf6ab1c4..c1487fbf 100644
--- a/app/src/main/java/app/passwordstore/util/git/operation/GcOperation.kt
+++ b/app/src/main/java/app/passwordstore/util/git/operation/GcOperation.kt
@@ -7,6 +7,8 @@ package app.passwordstore.util.git.operation
import androidx.appcompat.app.AppCompatActivity
import org.eclipse.jgit.api.GitCommand
+import org.eclipse.jgit.internal.storage.file.FileRepository
+import org.eclipse.jgit.internal.storage.file.GC
/**
* Run an aggressive garbage collection job on the repository, expiring every loose object to
@@ -16,5 +18,20 @@ class GcOperation(callingActivity: AppCompatActivity) : GitOperation(callingActi
override val requiresAuth: Boolean = false
override val commands: Array<GitCommand<out Any>> =
- arrayOf(git.gc().setAggressive(true).setExpire(null))
+ arrayOf(
+ object : GitCommand<Unit>(repository) {
+ // ponytail: JGit's GC.gc() takes a PID lock that calls java.lang.management, which
+ // Android lacks, so run its steps directly. The lock only guards against concurrent gc
+ // processes on one repository, which cannot happen here. No aggressive packing either:
+ // too slow on a phone for a password store's size.
+ override fun call() {
+ GC(repository as FileRepository).run {
+ setExpire(null)
+ packRefs()
+ repack()
+ prune(emptySet())
+ }
+ }
+ }
+ )
}
diff --git a/app/src/main/java/app/passwordstore/util/git/operation/ResetToRemoteOperation.kt b/app/src/main/java/app/passwordstore/util/git/operation/ResetToRemoteOperation.kt
index 17d3d3a1..7ca1282b 100644
--- a/app/src/main/java/app/passwordstore/util/git/operation/ResetToRemoteOperation.kt
+++ b/app/src/main/java/app/passwordstore/util/git/operation/ResetToRemoteOperation.kt
@@ -19,7 +19,7 @@ class ResetToRemoteOperation(callingActivity: AppCompatActivity, remoteBranch: S
// Force-create $remoteBranch if it doesn't exist. This covers the case where a branch name is
// changed.
git.branchCreate().setName(remoteBranch).setForce(true),
- git.checkout().setName(remoteBranch).setForce(true).setUpstreamMode(TRACK),
+ git.checkout().setName(remoteBranch).setForceRefUpdate(true).setUpstreamMode(TRACK),
// Do a hard reset to the remote branch. Equivalent to git reset --hard
// origin/$remoteBranch
git.reset().setRef("origin/$remoteBranch").setMode(ResetCommand.ResetType.HARD),
diff --git a/app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt b/app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt
index 325ed1ad..51657b02 100644
--- a/app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt
+++ b/app/src/main/java/app/passwordstore/util/git/sshj/SshjSessionFactory.kt
@@ -75,6 +75,8 @@ class SshjSessionFactory(
private var currentSession: SshjSession? = null
+ override fun getType() = "sshj"
+
override fun getSession(
uri: URIish,
credentialsProvider: CredentialsProvider?,