Commit graph

452 commits

Author SHA1 Message Date
Danny Stoll
49555ce966
perf: prevent repeated status fetches in large repos (#2824)
* perf: prevent repeated status fetches in large repos

Replace time-based cache invalidation with a generation counter.

The old `StatusParams` included a millisecond timestamp (tick) in its
hash, causing the cache to invalidate on every UI tick. For large repos
with millions of files, this led to repeated index loading and 5+ minute load times.

This change uses a different strategy to manage cache invalidation:
- Remove tick from StatusParams hash
- Add generation counter that increments after each fetch completes
- Include generation in cache hash

This ensures:
- No repeated fetches while one is already pending, making gitui usable
  in large repos
- New fetch starts immediately after completion, keeping gitui responsive
  in small repos
- External file changes will still be detected on the next fetch cycle

* fix changelog

---------

Co-authored-by: Daniel Stoll <dstoll@radix.trade>
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
Co-authored-by: extrawurst <mail@rusticorn.com>
2026-03-20 01:12:14 +00:00
extrawurst
5d6731326e
Rust msrv bump to 1.88 (#2879) 2026-03-19 18:33:52 +00:00
extrawurst
28cd5e7bb2 clippy fixes 2026-03-19 14:13:55 +00:00
Christoph Rüßler
b65de976e6
Fix clippy issues on nightly (#2852)
This fixes issues found by `clippy 0.1.95 (f134bbc78d 2026-01-24)`.
2026-01-25 16:20:23 -05:00
dependabot[bot]
13d75df6cd
Bump gix from 0.77.0 to 0.78.0 (#2849) 2026-01-23 21:05:05 +01:00
extrawurst
1c118d75f3
proper pre-push hook implementation (#2811) 2026-01-18 17:37:45 +01:00
dependabot[bot]
68ca5701f1
Bump gix from 0.75.0 to 0.77.0 (#2826)
* Bump gix from 0.75.0 to 0.77.0

Bumps [gix](https://github.com/GitoxideLabs/gitoxide) from 0.75.0 to 0.77.0.
- [Release notes](https://github.com/GitoxideLabs/gitoxide/releases)
- [Changelog](https://github.com/GitoxideLabs/gitoxide/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GitoxideLabs/gitoxide/compare/gix-v0.75.0...gix-v0.77.0)

---
updated-dependencies:
- dependency-name: gix
  dependency-version: 0.77.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Adapt to API changes

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Christoph Rüßler <christoph.ruessler@mailbox.org>
2026-01-10 12:07:36 -05:00
Christoph Rüßler
7f9aa97ada
Don't stop status iter on error, log warning instead (#2821) 2025-12-31 10:55:31 -05:00
Fatpandac
3082396bf1
Support choosing checkout branch method when status is not empty (#2494) 2025-11-28 18:36:40 -03:00
Christoph Rüßler
a6d6f31885
Overwrite committer on amend when gpgsign = false (#2792) 2025-11-28 17:11:22 -03:00
Christoph Rüßler
3de0b23ef2
Take workdir into account in gix_repo (#2789)
* Use gix_repo in get_tags

* Take workdir into account in gix_repo
2025-11-27 12:12:08 -03:00
Christoph Rüßler
8a57155c4d
Add test for gix_repo respecting workdir (#2790) 2025-11-27 07:43:34 -03:00
xlai89
cb17cfe105
feat: support pre-push hooks (#2737)
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2025-10-31 08:57:27 +01:00
extrawurst
2374e00302
validate path on startup for gix aswell (#2768)
so far we only try to open using the legacy libgit2 based one
2025-10-29 22:07:46 +01:00
extrawurst
58490961c5
update log (#2766) 2025-10-29 15:27:28 +01:00
extrawurst
1032cccd55
cleanup format strings (#2765) 2025-10-29 13:58:27 +01:00
extrawurst
6bb216c0d4
fix warnings and deny deprecated (#2753)
* fix gitoxide warning

* do not allow deprecated fn
2025-10-28 18:03:19 +01:00
linkmauve
88ace76db5
Fix typos (#2740)
Thanks to typos for finding those!

Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2025-10-28 16:35:05 +01:00
linkmauve
26a38183cf
Fix all mismatched_lifetime_syntaxes warnings (#2727) 2025-10-28 16:34:42 +01:00
Christoph Rüßler
dd475801ae
Restore default for showUntrackedFiles (#2751)
This restores the behaviour of `gitui` <= 0.27.
2025-10-28 15:59:03 +01:00
Christoph Rüßler
db211e5ac7
Update gix from 0.71.0 to 0.74.1 (#2745)
* Update gix from 0.71.0 to 0.74.1

* Bump MSRC from 1.81 to 1.82

This is required by `gitoxide` 0.74.

* Address clippy issues

* Add getrandom and rustix to deny.toml

* Document reasons for ignoring duplicates
2025-10-27 18:37:30 +01:00
Christoph Rüßler
60912c0b47
Derive Default per clippy recommendation (#2712) 2025-09-08 16:49:15 +02:00
Christoph Rüßler
fd46b9a0c1
Use gitoxide for get_tags (#2664) 2025-08-06 14:26:19 -07:00
Christoph Rüßler
fdd5a19d20
Extract GixError (#2687) 2025-08-05 12:55:59 -07:00
Christoph Rüßler
6685f9adb3
Use gitoxide in get_status (#2673) 2025-07-28 19:28:02 +02:00
Peer Sommerlund
6d0a2ec115
Minimal docs at module level (#2639) 2025-06-24 09:23:02 +02:00
Christoph Rüßler
2d7d1730ba
Use gitoxide in get_commit_info (#2654)
* Implement From<gix::ObjectId> for CommitId

* Use gitoxide in get_commit_info
2025-05-26 23:06:36 +02:00
extrawurst
3453e4624d fix nightly 2025-04-30 10:37:38 +02:00
Johannes Agricola
e08d954573
Clean up a few #[allow]s (#2614) 2025-04-16 10:45:08 +02:00
Johannes Agricola
7f88934d05
Bump msrv to 1.81 (#2613)
Co-authored-by: Naseschwarz <naseschwarz@0x53a.de>
2025-04-16 09:21:06 +02:00
Joshix-1
711210b97b
Run git-hooks more correctly (#2483) 2025-04-15 15:01:39 +02:00
extrawurst
cc907996f4
fix latest clippy (#2597) 2025-04-07 16:06:00 +02:00
Johannes Agricola
7f75307f6e
Resolve core.hooksPath relative to GIT_WORK_TREE (#2571)
* Resolve core.hooksPath relative to GIT_WORK_TREE

git supports relative values in core.hooksPath.

`man git-config`:

> A relative path is taken as relative to the directory where the hooks are
> run (see the "DESCRIPTION" section of githooks[5]).

`man githooks`:

> Before Git invokes a hook, it changes its working directory to either
> $GIT_DIR in a bare repository or the root of the working tree in a >
> non-bare repository.

I.e. relative paths in core.hooksPath in non-bare repositories are always
relative to GIT_WORK_TREE.

There is a further exception; I believe this is not considered for path
resolution:

> An exception are hooks triggered during a push (pre-receive, update,
> post-receive, post-update, push-to-checkout) which are always executed
> in $GIT_DIR.

* Favor Repository::workdir() over path().parent()

This more clearly errors in case of bare repositories instead of using
the parent directory of the bare repository.

---------

Co-authored-by: Naseschwarz <naseschwarz@0x53a.de>
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2025-04-04 15:28:44 +02:00
Johannes Agricola
89f73d2ec2
Disable dotted range commit yanking (#2577)
The algorithm for computing marked_consecutive assumes that commits are
consecutive in the commit graph if they are consecutive in the
linearized log used in` commitlist.rs`. That is not universally correct,
as siblings may also be displayed consecutively in this list.

For now, this just removes generating commit lists in dotted range
notation.

Co-authored-by: Naseschwarz <naseschwarz@0x53a.de>
2025-04-04 15:27:50 +02:00
Lena
92ef9f6fde
Respect .mailmap (#2485) 2025-03-19 14:44:02 +01:00
vlad-anger
979fa68837
Push with refspec (#2542)
* push: respect `branch.*.merge` when push default is upstream
2025-03-18 18:35:39 +01:00
Johannes Agricola
a91132d187
Bump git2 from 0.20.0 to 0.20.1 (#2567)
* Bump git2 from 0.20.0 to 0.20.1

Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.20.0 to 0.20.1.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/git2-0.20.0...git2-0.20.1)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Avoid passing reference into struct

git2-rs changed the lifetime of the result of Patch::hunk() to reference
the patch struct:
https://github.com/rust-lang/git2-rs/pull/1141

Thus, returning a patch struct and a reference into it is flagged by the
borrow checker upon move when returning.

This patch avoids returning both alltogether by separating retrieving
and retrieving the patch.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Naseschwarz <naseschwarz@0x53a.de>
2025-03-18 09:09:11 +01:00
Vasley
4031b0d1a7
Change links to point to gitui-org instead of extrawurst (#2538) 2025-03-16 15:33:28 +01:00
extrawurst
01ad0615b2
git2 upgrade (#2473) 2025-01-10 15:28:52 +01:00
extrawurst
66af52ae70 rust 1.84 update 2025-01-09 17:38:44 +01:00
extrawurst
640bf333fc
Fix ci (#2447) 2024-12-10 09:44:01 +01:00
Christoph Rüßler
b49bacfac1
Bump gix from 0.66.0 to 0.67.0 and adapt to API changes (#2422)
* Bump gix from 0.66.0 to 0.67.0

Bumps [gix](https://github.com/GitoxideLabs/gitoxide) from 0.66.0 to 0.67.0.
- [Release notes](https://github.com/GitoxideLabs/gitoxide/releases)
- [Changelog](https://github.com/GitoxideLabs/gitoxide/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GitoxideLabs/gitoxide/compare/gix-v0.66.0...gix-v0.67.0)

---
updated-dependencies:
- dependency-name: gix
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Adapt to API changes

* Update backtrace

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-08 09:53:43 +01:00
Christoph Rüßler
9c4bd29fc8
Improve test for env variables (#2409)
* Add test for AsyncLog respecting GIT_DIR

* Mark test as serial

* Mark additional test as serial

* Unwrap result to get more info in error case

---------

Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2024-10-29 09:42:25 +01:00
extrawurst
d7765c4239 fix doc comments to please new rust version lints 2024-10-18 18:02:02 +02:00
extrawurst
c4f517acb5 Revert "Add test for AsyncLog respecting GIT_DIR (#2387)"
This reverts commit 9c433b4de3.
2024-10-17 11:28:40 +02:00
Christoph Rüßler
9c433b4de3
Add test for AsyncLog respecting GIT_DIR (#2387) 2024-10-15 20:20:03 +02:00
Robin
d4f9400e04
Remotes popup (#2350)
Co-authored-by: extrawurst <mail@rusticorn.com>
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2024-09-18 16:31:21 +02:00
Christoph Rüßler
2b8ef40289
Fix log crashing in subdirectories (#2301)
* Fix log crashing in subdirectories
Replace `gix::open` by `gix::discover`. `gix::open` errors when the
passed directory is not a git repository.
* Add test for AsyncLog in sub-directory
* Respect env variables when discovering repo

---------

Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2024-09-17 11:37:52 +02:00
extrawurst
0f5cf893f7 fix fmt 2024-09-11 22:24:32 +02:00
extrawurst
134ef734a4 clippy fix 2024-09-11 21:30:34 +02:00