summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarsh Shandilya <msfjarvis@gmail.com>2020-07-29 16:25:49 +0530
committerGitHub <noreply@github.com>2020-07-29 16:25:49 +0530
commit017abd0f61663889e911fdb6328cbd793de960ac (patch)
tree54b7066eed90bee1db232dbf5fa09044a81b0c57
parent729fc80255a2b9b8a2ff669530d189a4f4ab06f8 (diff)
Add ability to change default branch (#977)
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r--CHANGELOG.md3
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt9
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt13
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/GitConfigActivity.kt2
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/GitServerConfigActivity.kt11
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt32
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/PreferenceKeys.kt1
-rw-r--r--app/src/main/res/layout/activity_git_clone.xml37
8 files changed, 80 insertions, 28 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e322e692..a43462eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+### Added
+- Allow changing the branch used for Git operations
+
### Changed
- Slightly reduce APK size
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"