Commit graph

585 commits

Author SHA1 Message Date
extrawurst
b1db21e10a
fix panic when opening submodule (#2896)
this is caused by us dropping the git notify channel and creating a new one when opening the submodule.

closes #2895
2026-03-31 12:38:05 +01:00
extrawurst
0cf38b5def
use tombi for toml formatting (#2894) 2026-03-28 21:02:05 +01:00
extrawurst
6aeffb4be8 cargo sort 2026-03-21 12:55:31 +00:00
extrawurst
09b68f8f5b more cargo pumps 2026-03-21 12:49:38 +00:00
extrawurst
98e130f8c8 release prep 2026-03-21 12:45:40 +00:00
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]
71208ed570
Bump the cargo-minor group across 1 directory with 2 updates (#2836)
Bumps the cargo-minor group with 2 updates in the / directory: [indexmap](https://github.com/indexmap-rs/indexmap) and [serial_test](https://github.com/palfrey/serial_test).


Updates `indexmap` from 2.12.1 to 2.13.0
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.12.1...2.13.0)

Updates `serial_test` from 3.2.0 to 3.3.1
- [Release notes](https://github.com/palfrey/serial_test/releases)
- [Commits](https://github.com/palfrey/serial_test/compare/v3.2.0...v3.3.1)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-version: 2.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: serial_test
  dependency-version: 3.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 11:09:41 -05: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
extrawurst
c06235a1d5 bump git2-hooks 2025-12-14 15:01:52 -05:00
extrawurst
197bcb5fc9 version bumps for release 0.28 2025-12-14 14:57:20 -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
dependabot[bot]
5f23781c10
Bump the cargo-minor group across 1 directory with 8 updates (#2750)
Bumps the cargo-minor group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [bitflags](https://github.com/bitflags/bitflags) | `2.9.1` | `2.10.0` |
| [bytesize](https://github.com/bytesize-rs/bytesize) | `2.0.1` | `2.1.0` |
| [indexmap](https://github.com/indexmap-rs/indexmap) | `2.9.0` | `2.12.0` |
| [notify](https://github.com/notify-rs/notify) | `8.0.0` | `8.2.0` |
| [rayon-core](https://github.com/rayon-rs/rayon) | `1.12.1` | `1.13.0` |
| [syntect](https://github.com/trishume/syntect) | `5.2.0` | `5.3.0` |
| [rayon](https://github.com/rayon-rs/rayon) | `1.10.0` | `1.11.0` |



Updates `bitflags` from 2.9.1 to 2.10.0
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.9.1...2.10.0)

Updates `bytesize` from 2.0.1 to 2.1.0
- [Release notes](https://github.com/bytesize-rs/bytesize/releases)
- [Changelog](https://github.com/bytesize-rs/bytesize/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bytesize-rs/bytesize/compare/bytesize-v2.0.1...bytesize-v2.1.0)

Updates `indexmap` from 2.9.0 to 2.12.0
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.9.0...2.12.0)

Updates `notify` from 8.0.0 to 8.2.0
- [Release notes](https://github.com/notify-rs/notify/releases)
- [Changelog](https://github.com/notify-rs/notify/blob/main/CHANGELOG.md)
- [Commits](https://github.com/notify-rs/notify/compare/notify-8.0.0...notify-8.2.0)

Updates `rayon-core` from 1.12.1 to 1.13.0
- [Changelog](https://github.com/rayon-rs/rayon/blob/main/RELEASES.md)
- [Commits](https://github.com/rayon-rs/rayon/compare/rayon-core-v1.12.1...rayon-core-v1.13.0)

Updates `serde` from 1.0.219 to 1.0.228
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.219...v1.0.228)

Updates `syntect` from 5.2.0 to 5.3.0
- [Release notes](https://github.com/trishume/syntect/releases)
- [Changelog](https://github.com/trishume/syntect/blob/master/CHANGELOG.md)
- [Commits](https://github.com/trishume/syntect/compare/v5.2.0...v5.3.0)

Updates `rayon` from 1.10.0 to 1.11.0
- [Changelog](https://github.com/rayon-rs/rayon/blob/main/RELEASES.md)
- [Commits](https://github.com/rayon-rs/rayon/compare/rayon-core-v1.10.0...rayon-core-v1.11.0)

---
updated-dependencies:
- dependency-name: bitflags
  dependency-version: 2.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: bytesize
  dependency-version: 2.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: indexmap
  dependency-version: 2.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: notify
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: rayon-core
  dependency-version: 1.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: serde
  dependency-version: 1.0.228
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: syntect
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: rayon
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
2025-10-28 16:34:17 +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
extrawurst
69fd7e664c bump git2-hooks version 2025-05-26 23:22:26 +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
Christoph Rüßler
7625277953
Have cargo-sort 2.0.1 sort Cargo.toml's (#2653) 2025-05-24 22:14:26 +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
9781608584
upgrade dirs (#2569) 2025-04-15 09:22:50 +02:00
extrawurst
eeebb0a647
fix cargo deny advisory warning (#2598) 2025-04-07 18:02:34 +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