Yuya Nishihara
c88e69ad6f
git_backend: replace git2::Repository with gix::Repository
...
My gut feeling is that gitoxide aims to be more transparent than libgit2. We'll
need to know more about the underlying Git data model.
Random comments on gix API:
* gix::Repository provides API similar to git2::Repository, but has less
"convenient" functions. For example, we need to use .find_object() +
.try_to/into_<kind>() instead of .find_<kind>().
* gix::Object, Blob, etc. own raw data as bytes. gix::object and gix::objs
types provide high-level views on such data.
* Tree building is pretty low-level compared to git2.
* gix leverages bstr (i.e. bytes) extensively.
It's probably not difficult to migrate git::import/export_refs(). It might
help eliminate the startup overhead of libssl initialization. The gix-based
GitBackend appears to be a bit faster, but that wouldn't practically matter.
#2316
2023-11-02 19:33:06 +09:00
Yuya Nishihara
9a86b77e38
tests: force gitoxide to not load config nor use "main" as default branch
...
AFAIK, there's no global config state for gitoxide. We can use
Config::isolated() in tests, but GitBackend should load config files in a
normal way.
https://docs.rs/gix/0.55.2/gix/open/permissions/struct.Config.html#method.isolated
https://docs.rs/gix/0.55.2/gix/init/constant.DEFAULT_BRANCH_NAME.html
2023-11-02 19:33:06 +09:00
Yuya Nishihara
f5a61dc2b7
git_backend: open just-initialized repo with canonicalized path
...
Otherwise, the initialized repo could have a different work-dir path than the
load()-ed one. libgit2 appears to do some normalization somewhere, but gix
won't.
2023-11-02 19:33:06 +09:00
Yuya Nishihara
fd187d266f
git_backend: box GitBackendInit/LoadError up front
...
These error enums will wrap gix error types, and will become bigger enough for
clippy to complain.
2023-11-02 19:33:06 +09:00
Yuya Nishihara
b48569b104
cargo: add gitoxide (or gix) dependency
...
I've enabled the "index" component from the "basic" feature set, which would
be needed to implement colocated repo functionality. The doc suggests that
a library shouldn't activate "max-performance-safe", but our crate is also
an application so it would be okay to enable the feature. We'll need "parallel"
anyway to make GitBackend Sync.
https://docs.rs/gix/latest/gix/#feature-flags
2023-11-02 19:33:06 +09:00
Martin von Zweigbergk
46a8afe144
formatter: reset colors on early drop
...
If we create a `ColorFormatter`, add some labels to it, print
something using the configured style, and then return early because of
an error, we would leave the terminal in a bad state. I think many
shells reset color codes after a command returns, but let's still do
our best.
2023-11-01 21:41:25 -07:00
Ilya Grigoriev
2f6cce1e4f
Fix 0.11 title in CHANGELOG.md
...
As reported by several people on Discord.
2023-11-01 19:05:25 -07:00
Martin von Zweigbergk
f00f7527dd
release: release version 0.11.0
...
Thanks to everyone who's contributed!
2023-11-01 11:08:44 -07:00
dependabot[bot]
9e523cd218
cargo: bump the cargo-dependencies group with 1 update
...
Bumps the cargo-dependencies group with 1 update: [indexmap](https://github.com/bluss/indexmap ).
- [Changelog](https://github.com/bluss/indexmap/blob/master/RELEASES.md )
- [Commits](https://github.com/bluss/indexmap/compare/2.0.2...2.1.0 )
---
updated-dependencies:
- dependency-name: indexmap
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: cargo-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 08:39:59 -07:00
Yuya Nishihara
f89f2f9e7d
cli: add "branch list [NAMES]..." filter
...
Like "jj log PATHS...", unmatched name isn't an error. I don't think
"jj branch list glob:'push-*'" should fail just because there are no in-flight
PR branches.
2023-11-01 08:38:55 -07:00
Isabella Basso
749d8bb15a
git: preserve HEAD when possible
...
Closes : #2210
2023-11-01 08:23:52 -03:00
Tal Pressman
6b1217ec6d
add FAQ for divergent changes
2023-11-01 16:55:57 +09:00
Ilya Grigoriev
0df851e6e2
glossary.md: Add a stub for "Hidden commits, Abandoned commits"
2023-10-31 23:41:41 -07:00
Ilya Grigoriev
c79920095b
glossary.md: Clarify description of "visible commits"
2023-10-31 23:41:41 -07:00
Ilya Grigoriev
4c490d2ca9
revsets.md: correct description of "visible commits"
2023-10-31 23:41:41 -07:00
Ilya Grigoriev
d2c2c270f8
cli rebase: Move misplaced paragraph, fixup to 8bc3f5fd67
2023-10-31 18:57:02 -07:00
Ilya Grigoriev
a3f21f7a9d
revsets.md: clarify string patterns and file patterns
...
I had to increase indent on two list items for multiple paragraphs to work in
MkDocs.
2023-10-31 17:49:49 -07:00
dependabot[bot]
02f728277f
cargo: bump the cargo-dependencies group with 1 update
...
Bumps the cargo-dependencies group with 1 update: [serde_json](https://github.com/serde-rs/json ).
- [Release notes](https://github.com/serde-rs/json/releases )
- [Commits](https://github.com/serde-rs/json/compare/v1.0.107...v1.0.108 )
---
updated-dependencies:
- dependency-name: serde_json
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: cargo-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
2023-10-31 15:54:17 +00:00
Ilya Grigoriev
38daa9abe3
install-and-setup.md: Document binary installation with cargo-binstall
...
I also mentioned this in the changelog, since people reading it are more likely
to use `binstall` than most.
2023-10-30 15:12:23 -07:00
Ilya Grigoriev
2cd262def3
install-and-setup.md: Make headings more consistent
2023-10-30 15:12:23 -07:00
Yuya Nishihara
1788b5014e
git_backend: remove redundant copy back of author timestamp
...
Only the committer timestamp can be updated inside a loop.
2023-10-31 06:51:27 +09:00
Yuya Nishihara
f5aa739c70
git_backend: use .strip_suffix() instead of manual slicing
2023-10-31 06:51:27 +09:00
Yuya Nishihara
9bd84c55e0
git_backend: use file mode extensively in read_tree()
...
Both filemode() and kind() are calculated from the same underlying data,
and kind() is libgit2-specific API.
2023-10-31 06:51:27 +09:00
Yuya Nishihara
b3c9cab12d
git_backend: handle read_tree() lookup/encoding errors gracefully
2023-10-31 06:51:27 +09:00
Yuya Nishihara
847adc832f
git_backend: use lossy conversion to decode non-UTF-8 commit message
...
If message() returned None, it doesn't mean the commit message is empty. I
originally mapped it to an error, but that made import of linux repo fail.
https://docs.rs/git2/latest/git2/struct.Commit.html#method.message
2023-10-31 06:51:27 +09:00
Yuya Nishihara
06c254e742
git_backend: use non-owned str::from_utf8() to decode symlink target
...
Just for consistency with the other changes. str::Utf8Error is 2 words long,
so I removed the boxing.
2023-10-31 06:51:27 +09:00
Yuya Nishihara
d1c71c05c9
git_backend: remove redundant error handling for invalid hash length
...
The only error that could be returned by libgit2 is invalid hash length, and
we check that explicitly. If we switch the backends to gitoxide, there will be
panicking constructor.
https://docs.rs/git2/latest/git2/struct.Oid.html#method.from_bytes
2023-10-31 06:51:27 +09:00
Ilya Grigoriev
8bc3f5fd67
cli rebase: Allow jj rebase -r
to rebase a commit onto a descendant
...
#1188
There are some additional test changes because children and descendants are now
rebased before the commit itself.
2023-10-30 10:56:27 -07:00
Antoine Cezar
1d6b883406
commands: move obslog code to obslog.rs
2023-10-30 18:35:08 +01:00
Antoine Cezar
b24a85f879
commands: move prev code to prev.rs
2023-10-30 18:35:08 +01:00
Antoine Cezar
d1135917b0
commands: move next code to next.rs
2023-10-30 18:35:08 +01:00
Martin von Zweigbergk
23a0baba14
cli: make jj workspace add
preserve all parents of current workspace
2023-10-29 21:53:29 -07:00
Yuya Nishihara
2d3fe7eee2
rewrite: replace use of "lift"ed function application with try_collect()
...
Also removed redundant borrow + clone.
2023-10-30 13:50:37 +09:00
Ilya Grigoriev
b482898924
immutable commits: remove the hint if trying to edit the root commit
...
The hint is a bit misleading in this case. I also changed the message slightly.
2023-10-29 21:13:39 -07:00
Ilya Grigoriev
ebb6b942ac
cli new: have --before/--after
respect immutable commits
...
I wasn't very careful to make the function
pretty; I'm planning to refactor it anyway as
part of implementing `rebase --before` and
`rebase --after`.
2023-10-29 21:13:39 -07:00
Ilya Grigoriev
62e0729f41
debug.rs: make one of the imports optional
...
This removes a warning rust-analyzer otherwise shows me.
2023-10-29 20:19:44 -07:00
Ilya Grigoriev
2571169251
clippy: run cargo clippy --fix --workspace
with recent nightly
2023-10-29 20:19:44 -07:00
Ilya Grigoriev
1d918dff08
commands: move rebase code to rebase.rs
2023-10-29 18:19:06 -07:00
Ilya Grigoriev
887e5665d5
commands: move resolve code to resolve.rs
...
The print_conflicted_paths function could belong either
to `resolve.rs` or `status.rs`; I put it into the former for now.
Cc #2465 , #2457
2023-10-29 18:19:06 -07:00
Antoine Cezar
19a658e757
commands: move merge code to merge.rs
2023-10-29 23:28:51 +01:00
Antoine Cezar
92739ebf11
commands: move move code to move.rs
2023-10-29 23:28:51 +01:00
Antoine Cezar
6af13ea89b
commands: move new code to new.rs
2023-10-29 23:28:51 +01:00
Antoine Cezar
e43b544a06
commands: move log code to log.rs
2023-10-29 23:28:51 +01:00
Antoine Cezar
e9d7a22fc0
commands: move interdiff code to interdiff.rs
2023-10-29 23:28:51 +01:00
Antoine Cezar
60433583b6
commands: move init code to init.rs
2023-10-29 23:28:51 +01:00
Martin von Zweigbergk
35a23172ec
backend: delete unused Phase
enum
...
The idea was to support phases like in hg, but that hasn't happened
yet. We can add back this simple enum if we do add support for phases.
2023-10-29 12:02:40 -07:00
Austin Seipp
e5fa5910f2
chore: nix flake update
...
Summary: Hopefully #2458 will take over this job in the future.
Signed-off-by: Austin Seipp <aseipp@pobox.com>
Change-Id: I68a85a5b73a896e16a6e32014022820a
2023-10-28 19:14:40 -05:00
Martin von Zweigbergk
cfcdd71865
backend: make read_conflict
synchronous again
...
This avoids https://github.com/rust-lang/futures-rs/issues/2090 . I
don't think we need to worry about reading legacy conflicts
asynchronously - async is really only useful for Google's backend
right now, and we don't use the legacy format at Google. In
particular, I don't want `MergedTree::value()` to have to be async.
2023-10-28 16:45:40 -07:00
Antoine Cezar
42795898de
commands: move files code to files.rs
2023-10-28 19:02:54 +02:00
Antoine Cezar
4257341dbe
commands: move edit code to edit.rs
2023-10-28 18:44:35 +02:00