mirror of
https://github.com/android-password-store/Android-Password-Store
synced 2025-09-03 07:45:08 +00:00
refactor: make ResetToRemoteOperation
actually work and use its own remoteBranch
input
This commit is contained in:
@@ -57,6 +57,12 @@ abstract class BaseGitActivity : AppCompatActivity() {
|
|||||||
@Inject lateinit var gitSettings: GitSettings
|
@Inject lateinit var gitSettings: GitSettings
|
||||||
@GitPreferences @Inject lateinit var gitPrefs: SharedPreferences
|
@GitPreferences @Inject lateinit var gitPrefs: SharedPreferences
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poor workaround to pass in a specified remote branch for [ResetToRemoteOperation]. Callers of
|
||||||
|
* [launchGitOperation] should set this before calling the method with [GitOp.RESET].
|
||||||
|
*/
|
||||||
|
protected var remoteBranch = ""
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to launch the requested Git operation.
|
* Attempt to launch the requested Git operation.
|
||||||
* @param operation The type of git operation to launch
|
* @param operation The type of git operation to launch
|
||||||
@@ -77,7 +83,7 @@ abstract class BaseGitActivity : AppCompatActivity() {
|
|||||||
GitOp.PUSH -> PushOperation(this)
|
GitOp.PUSH -> PushOperation(this)
|
||||||
GitOp.SYNC -> SyncOperation(this, gitSettings.rebaseOnPull)
|
GitOp.SYNC -> SyncOperation(this, gitSettings.rebaseOnPull)
|
||||||
GitOp.BREAK_OUT_OF_DETACHED -> BreakOutOfDetached(this)
|
GitOp.BREAK_OUT_OF_DETACHED -> BreakOutOfDetached(this)
|
||||||
GitOp.RESET -> ResetToRemoteOperation(this)
|
GitOp.RESET -> ResetToRemoteOperation(this, remoteBranch)
|
||||||
GitOp.GC -> GcOperation(this)
|
GitOp.GC -> GcOperation(this)
|
||||||
}
|
}
|
||||||
return (if (op.requiresAuth) {
|
return (if (op.requiresAuth) {
|
||||||
|
@@ -11,10 +11,12 @@ import android.os.Looper
|
|||||||
import android.util.Patterns
|
import android.util.Patterns
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import androidx.core.os.postDelayed
|
import androidx.core.os.postDelayed
|
||||||
|
import androidx.fragment.app.setFragmentResultListener
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import app.passwordstore.R
|
import app.passwordstore.R
|
||||||
import app.passwordstore.data.repo.PasswordRepository
|
import app.passwordstore.data.repo.PasswordRepository
|
||||||
import app.passwordstore.databinding.ActivityGitConfigBinding
|
import app.passwordstore.databinding.ActivityGitConfigBinding
|
||||||
|
import app.passwordstore.ui.dialogs.TextInputDialog
|
||||||
import app.passwordstore.ui.git.base.BaseGitActivity
|
import app.passwordstore.ui.git.base.BaseGitActivity
|
||||||
import app.passwordstore.ui.git.log.GitLogActivity
|
import app.passwordstore.ui.git.log.GitLogActivity
|
||||||
import app.passwordstore.util.extensions.viewBinding
|
import app.passwordstore.util.extensions.viewBinding
|
||||||
@@ -115,12 +117,21 @@ class GitConfigActivity : BaseGitActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.gitResetToRemote.setOnClickListener {
|
binding.gitResetToRemote.setOnClickListener {
|
||||||
lifecycleScope.launch {
|
val dialog =
|
||||||
launchGitOperation(GitOp.RESET)
|
TextInputDialog.newInstance(getString(R.string.git_utils_reset_remote_branch_title))
|
||||||
.fold(
|
dialog.show(supportFragmentManager, "BRANCH_INPUT_DIALOG")
|
||||||
success = ::finishOnSuccessHandler,
|
dialog.setFragmentResultListener(TextInputDialog.REQUEST_KEY) { _, bundle ->
|
||||||
failure = { err -> promptOnErrorHandler(err) { finish() } },
|
val result = bundle.getString(TextInputDialog.BUNDLE_KEY_TEXT)
|
||||||
)
|
if (!result.isNullOrEmpty()) {
|
||||||
|
remoteBranch = result
|
||||||
|
lifecycleScope.launch {
|
||||||
|
launchGitOperation(GitOp.RESET)
|
||||||
|
.fold(
|
||||||
|
success = ::finishOnSuccessHandler,
|
||||||
|
failure = { err -> promptOnErrorHandler(err) { finish() } },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.gitGc.setOnClickListener {
|
binding.gitGc.setOnClickListener {
|
||||||
|
@@ -5,22 +5,22 @@
|
|||||||
package app.passwordstore.util.git.operation
|
package app.passwordstore.util.git.operation
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode.TRACK
|
||||||
import org.eclipse.jgit.api.ResetCommand
|
import org.eclipse.jgit.api.ResetCommand
|
||||||
|
|
||||||
class ResetToRemoteOperation(callingActivity: AppCompatActivity) : GitOperation(callingActivity) {
|
class ResetToRemoteOperation(callingActivity: AppCompatActivity, remoteBranch: String) :
|
||||||
|
GitOperation(callingActivity) {
|
||||||
|
|
||||||
override val commands =
|
override val commands =
|
||||||
arrayOf(
|
arrayOf(
|
||||||
// Stage all files
|
|
||||||
git.add().addFilepattern("."),
|
|
||||||
// Fetch everything from the origin remote
|
// Fetch everything from the origin remote
|
||||||
git.fetch().setRemote("origin"),
|
git.fetch().setRemote("origin").setRemoveDeletedRefs(true),
|
||||||
|
// 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),
|
||||||
// Do a hard reset to the remote branch. Equivalent to git reset --hard
|
// Do a hard reset to the remote branch. Equivalent to git reset --hard
|
||||||
// origin/$remoteBranch
|
// origin/$remoteBranch
|
||||||
git.reset().setRef("origin/$remoteBranch").setMode(ResetCommand.ResetType.HARD),
|
git.reset().setRef("origin/$remoteBranch").setMode(ResetCommand.ResetType.HARD),
|
||||||
// Force-create $remoteBranch if it doesn't exist. This covers the case where you
|
|
||||||
// switched
|
|
||||||
// branches from 'master' to anything else.
|
|
||||||
git.branchCreate().setName(remoteBranch).setForce(true),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -368,4 +368,5 @@
|
|||||||
<string name="git_run_gc_job">Run garbage collection job</string>
|
<string name="git_run_gc_job">Run garbage collection job</string>
|
||||||
<string name="activity_label_pgp_key_manager">PGP Key Manager</string>
|
<string name="activity_label_pgp_key_manager">PGP Key Manager</string>
|
||||||
<string name="pgp_key_manager_delete_confirmation_dialog_title">Delete key?</string>
|
<string name="pgp_key_manager_delete_confirmation_dialog_title">Delete key?</string>
|
||||||
|
<string name="git_utils_reset_remote_branch_title">Remote branch name</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Reference in New Issue
Block a user