diff options
Diffstat (limited to 'app/src')
7 files changed, 77 insertions, 28 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt b/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt index a8f4c5b3..7a818bcf 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt @@ -41,6 +41,7 @@ abstract class BaseGitActivity : AppCompatActivity() { lateinit var serverPath: String lateinit var username: String lateinit var email: String + lateinit var branch: String private var identityBuilder: SshApiSessionFactory.IdentityBuilder? = null private var identity: SshApiSessionFactory.ApiIdentity? = null lateinit var settings: SharedPreferences @@ -61,6 +62,7 @@ abstract class BaseGitActivity : AppCompatActivity() { serverPath = settings.getString(PreferenceKeys.GIT_REMOTE_LOCATION, null) ?: "" username = settings.getString(PreferenceKeys.GIT_CONFIG_USER_NAME, null) ?: "" email = settings.getString(PreferenceKeys.GIT_CONFIG_USER_EMAIL, null) ?: "" + branch = settings.getString(PreferenceKeys.GIT_BRANCH_NAME, null) ?: "master" updateUrl() } @@ -248,10 +250,9 @@ abstract class BaseGitActivity : AppCompatActivity() { const val REQUEST_PULL = 101 const val REQUEST_PUSH = 102 const val REQUEST_CLONE = 103 - const val REQUEST_INIT = 104 - const val REQUEST_SYNC = 105 - const val BREAK_OUT_OF_DETACHED = 106 - const val REQUEST_RESET = 107 + const val REQUEST_SYNC = 104 + const val BREAK_OUT_OF_DETACHED = 105 + const val REQUEST_RESET = 106 const val TAG = "AbstractGitActivity" } } diff --git a/app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt b/app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt index 664497bd..149cabd8 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt +++ b/app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt @@ -5,8 +5,10 @@ package com.zeapo.pwdstore.git import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceManager import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.zeapo.pwdstore.R +import com.zeapo.pwdstore.utils.PreferenceKeys import java.io.File import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.GitCommand @@ -16,6 +18,9 @@ import org.eclipse.jgit.api.RebaseCommand class BreakOutOfDetached(fileDir: File, callingActivity: AppCompatActivity) : GitOperation(fileDir, callingActivity) { private lateinit var commands: List<GitCommand<out Any>> + private val gitBranch = PreferenceManager + .getDefaultSharedPreferences(callingActivity.applicationContext) + .getString(PreferenceKeys.GIT_BRANCH_NAME, "master") /** * Sets the command @@ -24,7 +29,7 @@ class BreakOutOfDetached(fileDir: File, callingActivity: AppCompatActivity) : Gi */ fun setCommands(): BreakOutOfDetached { val git = Git(repository) - val branchName = "conflicting-master-${System.currentTimeMillis()}" + val branchName = "conflicting-$gitBranch-${System.currentTimeMillis()}" this.commands = listOf( // abort the rebase @@ -33,8 +38,8 @@ class BreakOutOfDetached(fileDir: File, callingActivity: AppCompatActivity) : Gi git.checkout().setCreateBranch(true).setName(branchName), // push the changes git.push().setRemote("origin"), - // switch back to master - git.checkout().setName("master") + // switch back to ${gitBranch} + git.checkout().setName(gitBranch) ) return this } @@ -76,7 +81,7 @@ class BreakOutOfDetached(fileDir: File, callingActivity: AppCompatActivity) : Gi MaterialAlertDialogBuilder(callingActivity) .setTitle(callingActivity.resources.getString(R.string.git_abort_and_push_title)) .setMessage("There was a conflict when trying to rebase. " + - "Your local master branch was pushed to another branch named conflicting-master-....\n" + + "Your local $gitBranch branch was pushed to another branch named conflicting-$gitBranch-....\n" + "Use this branch to resolve conflict on your computer") .setPositiveButton(callingActivity.resources.getString(R.string.dialog_ok)) { _, _ -> callingActivity.finish() diff --git a/app/src/main/java/com/zeapo/pwdstore/git/GitConfigActivity.kt b/app/src/main/java/com/zeapo/pwdstore/git/GitConfigActivity.kt index 35cbc68a..0498f6ed 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/GitConfigActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/git/GitConfigActivity.kt @@ -36,7 +36,7 @@ class GitConfigActivity : BaseGitActivity() { if (repo != null) { try { val objectId = repo.resolve(Constants.HEAD) - val ref = repo.getRef("refs/heads/master") + val ref = repo.getRef("refs/heads/$branch") val head = if (ref.objectId.equals(objectId)) ref.name else "DETACHED" binding.gitCommitHash.text = String.format("%s (%s)", objectId.abbreviate(8).name(), head) diff --git a/app/src/main/java/com/zeapo/pwdstore/git/GitServerConfigActivity.kt b/app/src/main/java/com/zeapo/pwdstore/git/GitServerConfigActivity.kt index 283b0b89..6c87e0f6 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/GitServerConfigActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/git/GitServerConfigActivity.kt @@ -102,6 +102,13 @@ class GitServerConfigActivity : BaseGitActivity() { } } + binding.serverBranch.apply { + setText(branch) + doOnTextChanged { text, _, _, _ -> + branch = text.toString().trim() + } + } + binding.saveButton.setOnClickListener { if (isClone && PasswordRepository.getRepository(null) == null) PasswordRepository.initialize(this) @@ -114,12 +121,14 @@ class GitServerConfigActivity : BaseGitActivity() { putString(PreferenceKeys.GIT_REMOTE_PORT, serverPort) putString(PreferenceKeys.GIT_REMOTE_USERNAME, serverUser) putString(PreferenceKeys.GIT_REMOTE_LOCATION, serverPath) + putString(PreferenceKeys.GIT_BRANCH_NAME, branch) } if (!isClone) { Snackbar.make(binding.root, getString(R.string.git_server_config_save_success), Snackbar.LENGTH_SHORT).show() Handler().postDelayed(500) { finish() } - } else + } else { cloneRepository() + } } else -> Snackbar.make(binding.root, getString(R.string.git_server_config_save_error_prefix, getString(result.textRes)), Snackbar.LENGTH_LONG).show() } diff --git a/app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt b/app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt index c570bf27..60a9fbf3 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt +++ b/app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt @@ -6,13 +6,15 @@ package com.zeapo.pwdstore.git import android.content.Intent import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceManager import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.zeapo.pwdstore.R +import com.zeapo.pwdstore.utils.PreferenceKeys import java.io.File -import org.eclipse.jgit.api.AddCommand -import org.eclipse.jgit.api.FetchCommand import org.eclipse.jgit.api.Git +import org.eclipse.jgit.api.GitCommand import org.eclipse.jgit.api.ResetCommand +import org.eclipse.jgit.api.TransportCommand /** * Creates a new git operation @@ -22,9 +24,7 @@ import org.eclipse.jgit.api.ResetCommand */ class ResetToRemoteOperation(fileDir: File, callingActivity: AppCompatActivity) : GitOperation(fileDir, callingActivity) { - private var addCommand: AddCommand? = null - private var fetchCommand: FetchCommand? = null - private var resetCommand: ResetCommand? = null + private lateinit var commands: List<GitCommand<out Any>> /** * Sets the command @@ -32,17 +32,27 @@ class ResetToRemoteOperation(fileDir: File, callingActivity: AppCompatActivity) * @return the current object */ fun setCommands(): ResetToRemoteOperation { + val remoteBranch = PreferenceManager + .getDefaultSharedPreferences(callingActivity.applicationContext) + .getString(PreferenceKeys.GIT_BRANCH_NAME, "master") val git = Git(repository) - this.addCommand = git.add().addFilepattern(".") - this.fetchCommand = git.fetch().setRemote("origin") - this.resetCommand = git.reset().setRef("origin/master").setMode(ResetCommand.ResetType.HARD) + val cmds = arrayListOf( + git.add().addFilepattern("."), + git.fetch().setRemote("origin"), + git.reset().setRef("origin/$remoteBranch").setMode(ResetCommand.ResetType.HARD) + ) + if (git.branchList().call().none { it.name == remoteBranch }) { + cmds.add( + git.branchCreate().setName(remoteBranch).setForce(true) + ) + } + commands = cmds return this } override fun execute() { - this.fetchCommand?.setCredentialsProvider(this.provider) - GitAsyncTask(callingActivity, this, Intent()) - .execute(this.addCommand, this.fetchCommand, this.resetCommand) + commands.filterIsInstance<TransportCommand<*, *>>().map { it.setCredentialsProvider(provider) } + GitAsyncTask(callingActivity, this, Intent()).execute(*commands.toTypedArray()) } override fun onError(err: Exception) { diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PreferenceKeys.kt b/app/src/main/java/com/zeapo/pwdstore/utils/PreferenceKeys.kt index 9eb549da..24bf2096 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PreferenceKeys.kt +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PreferenceKeys.kt @@ -35,6 +35,7 @@ object PreferenceKeys { const val GIT_REMOTE_SERVER = "git_remote_server" const val GIT_REMOTE_USERNAME = "git_remote_username" const val GIT_SERVER_INFO = "git_server_info" + const val GIT_BRANCH_NAME = "git_branch" const val HTTPS_PASSWORD = "https_password" const val LENGTH = "length" const val OREO_AUTOFILL_CUSTOM_PUBLIC_SUFFIXES = "oreo_autofill_custom_public_suffixes" diff --git a/app/src/main/res/layout/activity_git_clone.xml b/app/src/main/res/layout/activity_git_clone.xml index 8026fa4a..f9bec00a 100644 --- a/app/src/main/res/layout/activity_git_clone.xml +++ b/app/src/main/res/layout/activity_git_clone.xml @@ -20,7 +20,7 @@ <androidx.appcompat.widget.AppCompatTextView android:id="@+id/server_label" style="@style/TextAppearance.MaterialComponents.Headline5" - android:layout_width="match_parent" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:text="@string/server_name" @@ -32,7 +32,7 @@ <androidx.appcompat.widget.AppCompatTextView android:id="@+id/label_server_protocol" style="@style/TextAppearance.MaterialComponents.Headline6" - android:layout_width="wrap_content" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:text="@string/server_protocol" @@ -42,7 +42,7 @@ <com.google.android.material.button.MaterialButtonToggleGroup android:id="@+id/clone_protocol_group" style="@style/TextAppearance.MaterialComponents.Headline1" - android:layout_width="wrap_content" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" app:layout_constraintStart_toStartOf="parent" @@ -67,10 +67,12 @@ <com.google.android.material.textfield.TextInputLayout android:id="@+id/server_user_layout" - android:layout_width="match_parent" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:hint="@string/server_user" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/clone_protocol_group"> <com.google.android.material.textfield.TextInputEditText @@ -125,10 +127,11 @@ <com.google.android.material.textfield.TextInputLayout android:id="@+id/label_server_path" - android:layout_width="match_parent" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:hint="@string/server_path" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/label_server_url"> @@ -136,11 +139,31 @@ android:id="@+id/server_path" android:layout_width="match_parent" android:layout_height="wrap_content" - android:imeOptions="actionDone" + android:imeOptions="actionNext" + android:nextFocusForward="@id/server_branch" android:inputType="textWebEmailAddress" /> </com.google.android.material.textfield.TextInputLayout> + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/label_server_branch" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:hint="Branch" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/label_server_path"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/server_branch" + android:imeOptions="actionDone" + android:layout_width="match_parent" + android:inputType="textNoSuggestions" + android:layout_height="wrap_content" /> + + </com.google.android.material.textfield.TextInputLayout> + <androidx.appcompat.widget.AppCompatTextView android:id="@+id/label_connection_mode" style="@style/TextAppearance.MaterialComponents.Headline6" @@ -151,7 +174,7 @@ android:layout_marginBottom="16dp" android:text="@string/connection_mode" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/label_server_path" /> + app:layout_constraintTop_toBottomOf="@id/label_server_branch" /> <com.google.android.material.button.MaterialButtonToggleGroup android:id="@+id/connection_mode_group" |