Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions app/src/main/java/com/zeapo/pwdstore/git/BaseGitActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()
}

Expand Down Expand Up @@ -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"
}
}
13 changes: 9 additions & 4 deletions app/src/main/java/com/zeapo/pwdstore/git/BreakOutOfDetached.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
}
Expand Down Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
}
Expand Down
32 changes: 21 additions & 11 deletions app/src/main/java/com/zeapo/pwdstore/git/ResetToRemoteOperation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -22,27 +24,35 @@ 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
*
* @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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
37 changes: 30 additions & 7 deletions app/src/main/res/layout/activity_git_clone.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand All @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -125,22 +127,43 @@

<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">

<com.google.android.material.textfield.TextInputEditText
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"
Expand All @@ -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"
Expand Down