Skip to content
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
6 changes: 5 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ There are two crates.
working without code of our own.
- `status.rs` and `diff.rs` parse `git status --porcelain=v2` and unified diffs, and build the
patches for staging single lines.
- `watch.rs` watches the working tree and the refs, and says when something changed that git
does not ignore. Reading should not write (`git status` runs without optional locks): a write
wakes the watcher again.

Its tests run against real repositories made with `git` in a temporary folder
(`crates/core/tests`), plus property tests for the graph layout.
Expand All @@ -65,7 +68,8 @@ Its tests run against real repositories made with `git` in a temporary folder

- `app.rs` holds the state. Views never change it directly: they push an `Action`, which
`Workspace::apply` carries out after the frame. Anything that touches the repository runs on a
background thread and is followed by a reload, so the window never waits.
background thread and is followed by a reload, so the window never waits. The tab on screen
also reloads by itself when its watcher saw a change.
- `start.rs` (open, clone and create), `ui.rs` (tabs and toolbar), `graph.rs`, `sidebar.rs`, `details.rs`
and `diff.rs` draw the views, and `theme.rs` has the colours.

Expand Down
180 changes: 180 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ repository = "https://github.com/Lars-/gitcraft"

[workspace.dependencies]
gitcraft-core = { path = "crates/core", version = "0.3.0" }
gix = { version = "0.90", default-features = false, features = ["max-performance", "sha1"] }
gix = { version = "0.90", default-features = false, features = ["max-performance", "sha1", "excludes"] }
notify = "8.2"
thiserror = "2"
eframe = { version = "0.37", default-features = false, features = ["default_fonts", "glow", "wayland", "x11", "persistence"] }
egui_kittest = "0.37"
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ with that one.
- **Start**: open a folder, clone from a URL with git's progress as it goes, or create a new
repository.
- **Tabs**: keep several repositories open at once; they open again where you left them.
- **Live**: what you change in an editor, a build or a terminal shows up by itself; files git
ignores do not wake it.
- **Graph**: every branch, remote branch and tag in one graph, children above parents, with
coloured lanes, branch and tag labels and the uncommitted changes on top. Arrow keys walk it.
- **Commits**: message, author, parents and the files they changed, with the diff of each file.
Expand Down
32 changes: 16 additions & 16 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,28 @@ drive it the way a user does, and keeps every benchmark as fast as before.
- [x] Refresh when the window gets focus
- [x] Clone and init from the start screen, with progress
- [x] Tabs: several repositories open at once, remembered between runs
- [x] Live refresh: watch the working tree and refs, and reload by itself

## Next

1. **Live refresh**: watch the working tree and refs, and reload by itself.
2. **Discard** changes per file, hunk or line.
3. **Confirm destructive actions**: hard reset, deleting a branch with unmerged commits, force push.
4. **Undo and redo** of the last action, through the reflog.
5. **Conflicts**: list conflicted files, resolve them in a three-way view (ours, theirs, result),
1. **Discard** changes per file, hunk or line.
2. **Confirm destructive actions**: hard reset, deleting a branch with unmerged commits, force push.
3. **Undo and redo** of the last action, through the reflog.
4. **Conflicts**: list conflicted files, resolve them in a three-way view (ours, theirs, result),
mark them resolved, and continue or abort a merge, rebase or cherry-pick.
6. **Interactive rebase**: reorder, squash, fix up, reword and drop commits, by dragging in the
5. **Interactive rebase**: reorder, squash, fix up, reword and drop commits, by dragging in the
graph.
7. **Credentials**: ask for a username, password or passphrase when git needs one.
8. **Push and pull options**: force with lease, push tags, pick the remote, pull with rebase.
9. **Remotes**: add, edit and remove.
10. **Search the graph** by message, author or SHA, and jump to any branch or tag.
11. **File history and blame.**
12. **Better diffs**: side by side, word-level changes, syntax colouring, images.
13. **Keyboard**: shortcuts for everything, and a command palette.
14. **Settings**: light and dark theme, font size, date format, default pull mode.
15. **Graph polish**: resizable columns, compact lanes, author avatars (optional, never by default
6. **Credentials**: ask for a username, password or passphrase when git needs one.
7. **Push and pull options**: force with lease, push tags, pick the remote, pull with rebase.
8. **Remotes**: add, edit and remove.
9. **Search the graph** by message, author or SHA, and jump to any branch or tag.
10. **File history and blame.**
11. **Better diffs**: side by side, word-level changes, syntax colouring, images.
12. **Keyboard**: shortcuts for everything, and a command palette.
13. **Settings**: light and dark theme, font size, date format, default pull mode.
14. **Graph polish**: resizable columns, compact lanes, author avatars (optional, never by default
over the network).
16. **Packaging**: installers with the icon for Windows (MSI), macOS (.app in a .dmg) and Linux
15. **Packaging**: installers with the icon for Windows (MSI), macOS (.app in a .dmg) and Linux
(AppImage, .deb, Flatpak), signed where the platform expects it.

## After 1.0
Expand Down
Loading
Loading