Skip to content

ADFA-2883: Git pull and push#1128

Merged
dara-abijo-adfa merged 30 commits intostagefrom
ADFA-2883-git-pull-push
Apr 2, 2026
Merged

ADFA-2883: Git pull and push#1128
dara-abijo-adfa merged 30 commits intostagefrom
ADFA-2883-git-pull-push

Conversation

@dara-abijo-adfa
Copy link
Copy Markdown
Contributor

@dara-abijo-adfa dara-abijo-adfa commented Mar 26, 2026

  • Display current branch name
  • Implement git push
  • Implement git pull

@coderabbitai

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (2)
app/src/main/res/layout/dialog_git_credentials.xml (1)

24-29: Consider adding autofill hints for better credential manager integration.

Adding android:autofillHints would improve the UX by allowing password managers to assist users.

✨ Suggested improvement
         <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/username"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="text"
+            android:autofillHints="username"
             android:maxLines="1" />

And for the token field:

         <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/token"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textPassword"
+            android:autofillHints="password"
             android:maxLines="1" />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/src/main/res/layout/dialog_git_credentials.xml` around lines 24 - 29, Add
platform autofill hints to the credential input fields so password managers can
populate them: update the TextInputEditText with id "username" to include
android:autofillHints="username" (or "emailAddress" if appropriate) and update
the token/password TextInputEditText (e.g., id "token" or the field handling the
token) to include android:autofillHints="password" (or "oneTimeCode" if it's a
temporary token); ensure you add the attribute to the corresponding XML elements
(TextInputEditText with id "username" and the token field) so credential
managers can recognize and autofill them.
git-core/src/main/java/com/itsaky/androidide/git/core/GitRepository.kt (1)

31-35: Keep JGit transport types inside the repository layer.

These signatures force app callers to depend on CredentialsProvider, PullResult, and PushResult, which weakens the GitRepository abstraction. Prefer a repo-owned credentials/result model and convert to JGit inside JGitRepository.

Also applies to: 39-43

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/GitRepository.kt`
around lines 31 - 35, The public suspend functions push and pull expose JGit
types (CredentialsProvider, PushResult, PullResult) which leaks transport
details; change GitRepository's signatures (functions named push and pull) to
accept and return repository-owned types (e.g., a
RepoCredentials/CredentialsModel and RepoPushResult/RepoPullResult or simple
DTOs) instead of JGit types, then convert between those repo types and JGit's
CredentialsProvider/PushResult/PullResult inside the JGitRepository
implementation (map inputs to JGit types before calling JGit APIs and map JGit
results back to the repo result models).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt`:
- Around line 236-239: When handling a successful pull in
GitBottomSheetViewModel (the block that sets _pullState.value =
PullUiState.Success and calls refreshStatus() and getCommitHistoryList()),
persist the validated credentials into GitCredentialsManager so future pulls
skip the dialog; retrieve the username/token used for the pull (the same values
passed into your pull method or the credentials input model) and call the
credential-persistence API on GitCredentialsManager (e.g., its save/set/store
credentials method) before or immediately after updating pull state and
refreshing status.
- Around line 216-220: The delayed resets use fire-and-forget
viewModelScope.launch with delay(3000) which can overwrite newer operations; fix
by introducing cancellable Jobs (e.g., pushIdleResetJob and pullIdleResetJob) or
an operation-id guard, canceling any existing job before launching a new one and
only setting _pushState.value = PushUiState.Idle (and the equivalent pull reset)
from the launched coroutine if it has not been canceled (or if the current state
still matches the operation-id); update the code around viewModelScope.launch /
delay(3000) and the corresponding block that sets _pushState to Idle (and the
similar block at the other location) to cancel the previous job or validate the
operation id before writing Idle.

In `@app/src/main/res/layout/dialog_git_credentials.xml`:
- Around line 10-15: The TextView's android:text attribute uses a raw string
reference ("string/git_credentials_message") so the literal text will display;
update the TextView (the element in dialog_git_credentials.xml) to use a proper
resource reference by changing the attribute to reference the string resource
(prepend @) so it reads the string resource name (e.g.,
`@string/git_credentials_message`) instead of the literal path.

In
`@git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt`:
- Around line 18-27: The getPrefs method currently uses deprecated
MasterKeys.getOrCreate and EncryptedSharedPreferences.create on every call (see
getPrefs, MasterKeys.getOrCreate, EncryptedSharedPreferences.create), which is
both deprecated and potentially expensive/throwing; replace this by migrating
cryptographic key management to Android Keystore using javax.crypto.KeyGenerator
with a KeyGenParameterSpec to generate and persist the AES/GCM key, create a
single cached SharedPreferences/secure-storage instance (lazy-init a private val
or synchronized singleton used by getPrefs) instead of calling create on every
access, and add try/catch handling for GeneralSecurityException and IOException
around key creation/initialization so callers receive a clear fallback or
propagated exception rather than crashing.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/JGitRepository.kt`:
- Around line 225-246: The method getLocalCommitsCount currently treats a null
trackingBranch (and unresolved remote refs) as 0 and swallows all Exceptions;
change it to return a sentinel (e.g. -1) when there is no upstream to indicate
"can't compare yet" by returning -1 if trackingBranch == null or if
repository.resolve(trackingBranch) == null, and stop catching all
Exceptions—replace the broad catch(Exception) with only the specific
I/O/ref-resolution exceptions you expect (e.g. IOException,
MissingObjectException/IncorrectObjectTypeException) so real errors still
surface while "no upstream" remains distinguishable; keep the RevWalk/parsing
logic (RevWalk(repository), walk.parseCommit, walk.markStart/markUninteresting)
unchanged aside from the new null checks and narrowed catch.

---

Nitpick comments:
In `@app/src/main/res/layout/dialog_git_credentials.xml`:
- Around line 24-29: Add platform autofill hints to the credential input fields
so password managers can populate them: update the TextInputEditText with id
"username" to include android:autofillHints="username" (or "emailAddress" if
appropriate) and update the token/password TextInputEditText (e.g., id "token"
or the field handling the token) to include android:autofillHints="password" (or
"oneTimeCode" if it's a temporary token); ensure you add the attribute to the
corresponding XML elements (TextInputEditText with id "username" and the token
field) so credential managers can recognize and autofill them.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/GitRepository.kt`:
- Around line 31-35: The public suspend functions push and pull expose JGit
types (CredentialsProvider, PushResult, PullResult) which leaks transport
details; change GitRepository's signatures (functions named push and pull) to
accept and return repository-owned types (e.g., a
RepoCredentials/CredentialsModel and RepoPushResult/RepoPullResult or simple
DTOs) instead of JGit types, then convert between those repo types and JGit's
CredentialsProvider/PushResult/PullResult inside the JGitRepository
implementation (map inputs to JGit types before calling JGit APIs and map JGit
results back to the repo result models).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 98b6410b-d498-42e9-8563-6ce95f6bed59

📥 Commits

Reviewing files that changed from the base of the PR and between f011e8b and ff20e49.

📒 Files selected for processing (14)
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitBottomSheetFragment.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/adapter/GitCommitHistoryAdapter.kt
  • app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt
  • app/src/main/res/layout/dialog_git_commit_history.xml
  • app/src/main/res/layout/dialog_git_credentials.xml
  • app/src/main/res/layout/fragment_git_bottom_sheet.xml
  • app/src/main/res/layout/item_git_commit.xml
  • app/src/main/res/layout/item_git_file_change.xml
  • git-core/build.gradle.kts
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitRepository.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/JGitRepository.kt
  • resources/src/main/res/values/strings.xml
💤 Files with no reviewable changes (1)
  • app/src/main/res/layout/item_git_file_change.xml

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt (1)

47-62: Consider documenting or handling cipher exceptions.

Both encrypt() and decrypt() can throw exceptions (IllegalBlockSizeException, BadPaddingException, AEADBadTagException for tampered data). If the caller (GitCredentialsManager) doesn't handle these, corrupted stored data could crash the app when decrypting.

At minimum, document the exception behavior. Ideally, handle exceptions here and return null or a Result type to indicate failure gracefully.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt`
around lines 47 - 62, encrypt() and decrypt() currently throw crypto exceptions
that can crash callers like GitCredentialsManager; wrap the cipher operations in
try/catch inside CryptoManager (functions encrypt and decrypt) to catch
IllegalBlockSizeException, BadPaddingException, AEADBadTagException and other
GeneralSecurityException, log the error, and return a failure indicator (e.g.,
change encrypt() to return Pair<ByteArray,ByteArray>? or a Result type and
decrypt() to return String? or Result<String>) so callers can handle
corrupted/tampered data gracefully; ensure getSecretKey() use remains the same
and document the new nullable/Result return contract in the method KDoc.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt`:
- Line 235: In pull(), avoid the early return that leaves the UI stuck in the
Pulling state when currentRepository is null: check currentRepository and if
it's null set the view model state back to Idle (or dispatch the same
state-reset logic used in the finally block) before returning. Locate the use of
currentRepository inside the pull() coroutine, and either replace the early
return with a null-check that sets state = GitUiState.Idle (or calls
resetUiState()) prior to returning, or restructure the method to run the
finally-style cleanup even when currentRepository is absent.
- Line 184: The early return at "val repository = currentRepository ?:
return@launch" leaves the UI in Pushing until the finally block's delayed reset
runs; instead, detect currentRepository == null and immediately update the view
state (e.g., set the push UI state to an Error or Idle and/or emit an error
message) before returning from the coroutine, so the user gets immediate
feedback; update the null branch to set the appropriate state via the existing
state holder (e.g., _pushState, uiState, or whatever the ViewModel exposes) and
then return@launch to keep the finally block behavior unchanged.
- Around line 115-119: There are two identical methods, getLocalCommitsCount()
and checkLocalCommits(), that both launch a coroutine to set _localCommitsCount
to currentRepository?.getLocalCommitsCount() ?: 0; remove one of them (prefer
keeping getLocalCommitsCount()) and delete the duplicate method body, then
replace every call site of checkLocalCommits() with getLocalCommitsCount() so
all callers use the single remaining function.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt`:
- Around line 21-23: The KeyStore initialization in the CryptoManager object
(private val keyStore: KeyStore = KeyStore.getInstance(...).apply { load(null)
}) can throw during class init and crash the app; change this to a safely lazy
and nullable initialization (e.g., private var keyStore: KeyStore? = null or
lazy { ... } wrapped in try-catch), catch
KeyStoreException/CertificateException/IOException and record a failure state or
log the error, and then update all usages such as getSecretKey(),
createSecretKey(), deleteKey(), and any other methods referencing keyStore to
handle a null/failed keyStore (return errors, throw controlled exceptions, or
use fallback behavior) so class initialization no longer throws.

---

Nitpick comments:
In `@git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt`:
- Around line 47-62: encrypt() and decrypt() currently throw crypto exceptions
that can crash callers like GitCredentialsManager; wrap the cipher operations in
try/catch inside CryptoManager (functions encrypt and decrypt) to catch
IllegalBlockSizeException, BadPaddingException, AEADBadTagException and other
GeneralSecurityException, log the error, and return a failure indicator (e.g.,
change encrypt() to return Pair<ByteArray,ByteArray>? or a Result type and
decrypt() to return String? or Result<String>) so callers can handle
corrupted/tampered data gracefully; ensure getSecretKey() use remains the same
and document the new nullable/Result return contract in the method KDoc.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 13157a5a-e001-44fd-acb4-c39aa3bac93e

📥 Commits

Reviewing files that changed from the base of the PR and between ff20e49 and 26fd63c.

📒 Files selected for processing (8)
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitBottomSheetFragment.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt
  • app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt
  • app/src/main/res/layout/dialog_git_credentials.xml
  • git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/JGitRepository.kt
  • resources/src/main/res/values/strings.xml
🚧 Files skipped from review as they are similar to previous changes (5)
  • app/src/main/res/layout/dialog_git_credentials.xml
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt
  • resources/src/main/res/values/strings.xml
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitBottomSheetFragment.kt

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (1)
git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt (1)

21-29: Keep the original KeyStore failure as the cause.

Returning null here makes later credential failures collapse to IllegalStateException("KeyStore could not be initialized"), which strips the device-specific keystore exception from the logs. Preserve the caught throwable and chain it from getSecretKey() instead of swallowing it. Based on learnings: In Kotlin files across the AndroidIDE project, prefer narrow exception handling that catches only the specific exception type reported in crashes instead of a broad catch-all.

Also applies to: 31-33

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt`
around lines 21 - 29, The lazy-initialized keyStore currently swallows all
exceptions by returning null, which loses the original cause; change the
initializer for the keyStore property to catch only the specific exception type
thrown by KeyStore.getInstance/load (e.g.,
KeyStoreException/IOException/NoSuchAlgorithmException/CertificateException as
appropriate) and retain the caught throwable (store it in a private backing
field or rethrow as a wrapped exception), then update getSecretKey() to throw an
IllegalStateException("KeyStore could not be initialized", cause) using that
preserved throwable so the original keystore error is chained and not lost;
update the same pattern in the other failing block referenced (lines 31-33) to
use narrow exception handling and preserve the cause.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt`:
- Around line 28-30: GitCommitHistoryDialog is using
androidx.activityViewModels() and manually new-ing
GitCredentialsManager(requireContext()), which breaks the Koin
constructor-injected GitBottomSheetViewModel contract and can fail on
recreation; replace the activityViewModels() usage with Koin's
activityViewModel() and obtain GitCredentialsManager via Koin injection (mirror
GitDiffViewerDialog). Update the properties (e.g., viewModel:
GitBottomSheetViewModel and credentialsManager: GitCredentialsManager) to use
activityViewModel() and Koin's inject() (or the project equivalent) so the
ViewModel receives its constructor-injected GitCredentialsManager and remove
manual instantiation; apply the same change to the other occurrences mentioned
(lines 49-50).

In
`@app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt`:
- Around line 306-317: Change the default error resource id for both
PullUiState.Error and PushUiState.Error from R.string.unknown_error to null so
that when only a message is provided the UI will prefer and display the message;
update the sealed classes PullUiState and PushUiState (specifically the Error
data classes) to use errorResId: Int? = null instead of the current default.
- Around line 118-121: The method getLocalCommitsCount() currently launches a
new coroutine with viewModelScope.launch so exceptions from
currentRepository?.getLocalCommitsCount() escape the caller's try/catch; change
getLocalCommitsCount() into a suspend function that directly assigns
_localCommitsCount (no viewModelScope.launch), then update callers
(refreshStatus() and getCommitHistoryList()) to invoke getLocalCommitsCount()
directly inside their existing try/catch so any thrown exceptions are handled by
the caller's error handling.

In
`@git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt`:
- Around line 54-57: hasCredentials() currently only checks for the presence of
KEY_USERNAME_DATA and KEY_TOKEN_DATA, which can be true for corrupted/partial
entries; change it to also verify the corresponding IV keys (e.g.,
KEY_USERNAME_IV and KEY_TOKEN_IV) exist and attempt to decrypt the stored blobs
to ensure decryption succeeds and returns non-null/valid strings before
returning true. In practice, update hasCredentials() to read prefs for
KEY_USERNAME_DATA/KEY_USERNAME_IV and KEY_TOKEN_DATA/KEY_TOKEN_IV, quickly try
the same decryption path you use in getCredentials() (or call a shared decrypt
method) and return true only if both username and token decrypt and are
non-empty/valid; otherwise return false so the UI will prompt for credentials.
Ensure you reference and reuse existing decrypt helper functions used elsewhere
to avoid duplicating crypto logic.

In `@resources/src/main/res/values/strings.xml`:
- Line 1219: The string resource named cancel_clone contains a typo ("Cancel
cl.one"); update the value of the string resource for cancel_clone to the
correct user-facing text (e.g., "Cancel clone" or whatever approved label) in
values/strings.xml so the clone screen's cancel button displays the corrected
text.

---

Nitpick comments:
In `@git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt`:
- Around line 21-29: The lazy-initialized keyStore currently swallows all
exceptions by returning null, which loses the original cause; change the
initializer for the keyStore property to catch only the specific exception type
thrown by KeyStore.getInstance/load (e.g.,
KeyStoreException/IOException/NoSuchAlgorithmException/CertificateException as
appropriate) and retain the caught throwable (store it in a private backing
field or rethrow as a wrapped exception), then update getSecretKey() to throw an
IllegalStateException("KeyStore could not be initialized", cause) using that
preserved throwable so the original keystore error is chained and not lost;
update the same pattern in the other failing block referenced (lines 31-33) to
use narrow exception handling and preserve the cause.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bb9734c5-3226-4d43-b97b-5d68b78b298f

📥 Commits

Reviewing files that changed from the base of the PR and between 26fd63c and d00ac4d.

📒 Files selected for processing (8)
  • app/src/main/java/com/itsaky/androidide/di/AppModule.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitBottomSheetFragment.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitDiffViewerDialog.kt
  • app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/CryptoManager.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt
  • resources/src/main/res/values/strings.xml
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitBottomSheetFragment.kt

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt`:
- Around line 122-144: When handling GitBottomSheetViewModel.PushUiState.Error,
restore the push CTA UI and clear the stale push state: re-enable and set
binding.btnPush.text back to the original label (undo the null set made in
Push), hide binding.pushProgress, and call viewModel.resetPushState() so the
Error state doesn't persist/replay when the dialog is reopened; use the same
resetPushState() used in the Success branch and ensure the
MaterialAlertDialogBuilder still shows the error message.
- Around line 98-105: The code currently calls
credentialsManager.hasCredentials() (which decrypts) and then calls
getUsername()/getToken() again causing duplicate decryption and possible
mismatch; instead, read the credentials once into local variables (e.g., obtain
username and token via a single credentials retrieval method or call
getUsername()/getToken() a single time after confirming presence), validate they
are non-null/non-empty, and then call viewModel.push(username = ..., token =
...); if validation fails, call showCredentialsDialog(); update the logic around
hasCredentials(), getUsername(), getToken(), and viewModel.push() in
GitCommitHistoryDialog to avoid double-reading and to use the single validated
credential set.

In
`@git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt`:
- Around line 46-48: Replace the broad Exception catches in the credential
crypto flow with specific exceptions: in the encrypt/save path (around
CryptoManager.encrypt and Base64.encodeToString) catch GeneralSecurityException
instead of Exception and log the error; in the decrypt/load path (around
Base64.decode and CryptoManager.decrypt) catch IllegalArgumentException for
invalid Base64 input and GeneralSecurityException for decryption failures
(either as separate catches or multi-catch), so only expected crypto/encoding
errors are handled and unexpected exceptions surface.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f1c061dd-7014-4a4c-bca7-ffaddf81098a

📥 Commits

Reviewing files that changed from the base of the PR and between edb660c and b103ccd.

📒 Files selected for processing (4)
  • app/src/main/java/com/itsaky/androidide/fragments/git/GitCommitHistoryDialog.kt
  • app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt
  • git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt
  • resources/src/main/res/values/strings.xml
🚧 Files skipped from review as they are similar to previous changes (2)
  • resources/src/main/res/values/strings.xml
  • app/src/main/java/com/itsaky/androidide/viewmodel/GitBottomSheetViewModel.kt

@dara-abijo-adfa dara-abijo-adfa force-pushed the ADFA-2883-git-pull-push branch from b103ccd to b88de50 Compare March 31, 2026 13:50
@dara-abijo-adfa dara-abijo-adfa merged commit b68bc5a into stage Apr 2, 2026
2 checks passed
@dara-abijo-adfa dara-abijo-adfa deleted the ADFA-2883-git-pull-push branch April 2, 2026 20:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants