Yuya Nishihara
0de36918e4
config: merge and print inline tables as values
...
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Before, "jj config get"/"list" and .get() functions processed inline tables as
tables (or directories in filesystem analogy), whereas "set"/"unset" processed
ones as values (or files.) This patch makes all commands and functions process
inline tables as values. We rarely use the inline table syntax, and it's very
hard to pack many (unrelated) values into an inline table. TOML doesn't allow
newlines between { .. }. Our common use case is to define color styles, which
wouldn't be meant to inherit attributes from the default settings.
The default pager setting is flattened in case user overrides pager.env without
changing the command args.
2024-12-12 10:11:51 +09:00
Yuya Nishihara
168c7979fe
working_copy: on snapshot, warn new large files and continue
...
I think this provides a better UX than refusing any operation due to large
files. Because untracked files won't be overwritten, it's usually safe to
continue operation ignoring the untracked files. One caveat is that new large
files can become tracked if files of the same name checked out. (see the test
case)
FWIW, the warning will be printed only once if watchman is enabled. If we use
the snapshot stats to print untracked paths in "jj status", this will be a
problem.
Closes #3616 , #3912
2024-12-11 20:19:51 +09:00
Yuya Nishihara
f4fdc19d9e
working_copy: plumbing to propagate untracked paths to caller
2024-12-11 20:19:51 +09:00
Yuya Nishihara
0975cb5374
cargo: drop dependency on config crate
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
2024-12-10 16:08:50 +09:00
Yuya Nishihara
118e76e5c2
config: add ConfigLoadError, replace uses of config::ConfigError
2024-12-10 16:08:50 +09:00
Yuya Nishihara
e2be4fa1ac
config: migrate underlying data structure to toml_edit
...
This patch does not change the handling of inline tables yet. Both inline and
non-inline tables are merged as before. OTOH, .set_value() is strict about table
types because it should refuse to overwrite a table whereas an inline table
should be overwritten as a value. This matches "jj config set"/"unset"
semantics. rules_from_config() in formatter.rs uses .as_inline_table(), which is
valid because toml_edit::Value type never contains non-inline table.
Since toml_edit::Value doesn't implement PartialEq, stacking tests now use
insta::assert_snapshot!().
2024-12-10 12:11:39 +09:00
Yuya Nishihara
45c80c2a5f
local_working_copy: optimize path comparison in prefixed file states
...
Since all entries in filtered file states share the same directory prefix, we
don't need to compare full file paths.
The added functions take (path, name) instead of (path, sub_path) because the
comparison can be slightly faster if the name is guaranteed to be a single path
component.
Benchmark:
1. original (omitted)
2. per-directory spawn (omitted)
3. per-directory deleted files (previous patch)
4. shorter path comparison (this patch)
gecko-dev (~357k files, ~25k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 480.1 ms ± 8.8 ms [User: 3190.5 ms, System: 2127.2 ms]
Range (min … max): 471.2 ms … 509.8 ms 30 runs
Benchmark 4: target/release-with-debug/jj-4 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 404.0 ms ± 4.4 ms [User: 1933.4 ms, System: 2148.8 ms]
Range (min … max): 396.4 ms … 416.9 ms 30 runs
Relative speed comparison
1.19 ± 0.03 target/release-with-debug/jj-3 -R ~/mirrors/gecko-dev debug snapshot
1.00 target/release-with-debug/jj-4 -R ~/mirrors/gecko-dev debug snapshot
```
linux (~87k files, ~6k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 204.2 ms ± 3.0 ms [User: 667.3 ms, System: 545.6 ms]
Range (min … max): 197.1 ms … 209.2 ms 30 runs
Benchmark 4: target/release-with-debug/jj-4 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 191.3 ms ± 3.3 ms [User: 467.4 ms, System: 542.2 ms]
Range (min … max): 186.1 ms … 200.6 ms 30 runs
Relative speed comparison
1.07 ± 0.02 target/release-with-debug/jj-3 -R ~/mirrors/linux debug snapshot
1.00 target/release-with-debug/jj-4 -R ~/mirrors/linux debug snapshot
```
nixpkgs (~45k files, ~31k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 173.3 ms ± 6.7 ms [User: 899.4 ms, System: 889.0 ms]
Range (min … max): 166.5 ms … 197.9 ms 30 runs
Benchmark 4: target/release-with-debug/jj-4 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 161.7 ms ± 2.5 ms [User: 739.1 ms, System: 881.7 ms]
Range (min … max): 156.5 ms … 166.4 ms 30 runs
Relative speed comparison
1.07 ± 0.04 target/release-with-debug/jj-3 -R ~/mirrors/nixpkgs debug snapshot
1.00 target/release-with-debug/jj-4 -R ~/mirrors/nixpkgs debug snapshot
```
git (~4.5k files, 0.2k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 30 --runs 50 ..
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 28.8 ms ± 1.0 ms [User: 33.0 ms, System: 37.6 ms]
Range (min … max): 26.8 ms … 31.3 ms 50 runs
Benchmark 4: target/release-with-debug/jj-4 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 28.8 ms ± 1.9 ms [User: 30.3 ms, System: 36.5 ms]
Range (min … max): 26.0 ms … 39.2 ms 50 runs
Relative speed comparison
1.00 target/release-with-debug/jj-3 -R ~/mirrors/git debug snapshot
1.00 ± 0.08 target/release-with-debug/jj-4 -R ~/mirrors/git debug snapshot
```
2024-12-10 10:51:04 +09:00
Yuya Nishihara
8caec186c1
local_working_copy: filter deleted files per directory (or job)
...
This greatly reduces the amount of paths to be sent over the channel and the
strings to be hashed.
Benchmark:
1. original (omitted)
2. per-directory spawn (previous patch)
3. per-directory deleted files (this patch)
4. shorter path comparison (omitted)
gecko-dev (~357k files, ~25k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 710.7 ms ± 9.1 ms [User: 3070.7 ms, System: 2142.6 ms]
Range (min … max): 695.9 ms … 740.1 ms 30 runs
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 480.1 ms ± 8.8 ms [User: 3190.5 ms, System: 2127.2 ms]
Range (min … max): 471.2 ms … 509.8 ms 30 runs
Relative speed comparison
1.76 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/gecko-dev debug snapshot
1.19 ± 0.03 target/release-with-debug/jj-3 -R ~/mirrors/gecko-dev debug snapshot
```
linux (~87k files, ~6k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 242.3 ms ± 3.3 ms [User: 656.8 ms, System: 538.0 ms]
Range (min … max): 236.9 ms … 252.3 ms 30 runs
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 204.2 ms ± 3.0 ms [User: 667.3 ms, System: 545.6 ms]
Range (min … max): 197.1 ms … 209.2 ms 30 runs
Relative speed comparison
1.27 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/linux debug snapshot
1.07 ± 0.02 target/release-with-debug/jj-3 -R ~/mirrors/linux debug snapshot
```
nixpkgs (~45k files, ~31k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 190.7 ms ± 4.1 ms [User: 859.3 ms, System: 881.1 ms]
Range (min … max): 184.6 ms … 202.4 ms 30 runs
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 173.3 ms ± 6.7 ms [User: 899.4 ms, System: 889.0 ms]
Range (min … max): 166.5 ms … 197.9 ms 30 runs
Relative speed comparison
1.18 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/nixpkgs debug snapshot
1.07 ± 0.04 target/release-with-debug/jj-3 -R ~/mirrors/nixpkgs debug snapshot
```
git (~4.5k files, 0.2k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 30 --runs 50 ..
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 30.6 ms ± 1.1 ms [User: 33.8 ms, System: 39.0 ms]
Range (min … max): 29.0 ms … 35.0 ms 50 runs
Benchmark 3: target/release-with-debug/jj-3 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 28.8 ms ± 1.0 ms [User: 33.0 ms, System: 37.6 ms]
Range (min … max): 26.8 ms … 31.3 ms 50 runs
Relative speed comparison
1.06 ± 0.05 target/release-with-debug/jj-2 -R ~/mirrors/git debug snapshot
1.00 target/release-with-debug/jj-3 -R ~/mirrors/git debug snapshot
```
2024-12-10 10:51:04 +09:00
Yuya Nishihara
99d8703d3b
local_working_copy: spawn snapshot job per directory with file count threshold
...
This change basically means two things:
a. a directory scan isn't split into too many small jobs, and
b. a directory scan isn't blocked by recursive visit_directory() calls.
Before, small jobs were created at each recursion depth, so there were silent
time slice before these jobs started producing work.
I don't know if this mitigates the issue #4508 , but it's slightly faster on my
Linux machine.
matcher.visit(dir) is moved to caller because it's silly to spawn an empty job.
TreeState::snapshot() already checks that for the root path.
Benchmark:
1. original
2. per-directory spawn (this patch)
3. per-directory deleted files (omitted)
4. shorter path comparison (omitted)
gecko-dev (~357k files, ~25k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 1: target/release-with-debug/jj-1 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 764.9 ms ± 16.7 ms [User: 3274.7 ms, System: 2183.3 ms]
Range (min … max): 731.9 ms … 814.2 ms 30 runs
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/gecko-dev debug snapshot
Time (mean ± σ): 710.7 ms ± 9.1 ms [User: 3070.7 ms, System: 2142.6 ms]
Range (min … max): 695.9 ms … 740.1 ms 30 runs
Relative speed comparison
1.89 ± 0.05 target/release-with-debug/jj-1 -R ~/mirrors/gecko-dev debug snapshot
1.76 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/gecko-dev debug snapshot
```
linux (~87k files, ~6k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 1: target/release-with-debug/jj-1 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 268.2 ms ± 11.3 ms [User: 636.6 ms, System: 518.5 ms]
Range (min … max): 247.5 ms … 295.2 ms 30 runs
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/linux debug snapshot
Time (mean ± σ): 242.3 ms ± 3.3 ms [User: 656.8 ms, System: 538.0 ms]
Range (min … max): 236.9 ms … 252.3 ms 30 runs
Relative speed comparison
1.40 ± 0.06 target/release-with-debug/jj-1 -R ~/mirrors/linux debug snapshot
1.27 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/linux debug snapshot
```
nixpkgs (~45k files, ~31k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 3 --runs 30 ..
Benchmark 1: target/release-with-debug/jj-1 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 201.0 ms ± 8.5 ms [User: 929.3 ms, System: 917.6 ms]
Range (min … max): 170.3 ms … 218.5 ms 30 runs
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/nixpkgs debug snapshot
Time (mean ± σ): 190.7 ms ± 4.1 ms [User: 859.3 ms, System: 881.1 ms]
Range (min … max): 184.6 ms … 202.4 ms 30 runs
Relative speed comparison
1.24 ± 0.06 target/release-with-debug/jj-1 -R ~/mirrors/nixpkgs debug snapshot
1.18 ± 0.03 target/release-with-debug/jj-2 -R ~/mirrors/nixpkgs debug snapshot
```
git (~4.5k files, 0.2k dirs)
```
% JJ_CONFIG=/dev/null hyperfine --sort command --warmup 30 --runs 50 ..
Benchmark 1: target/release-with-debug/jj-1 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 30.3 ms ± 1.1 ms [User: 40.5 ms, System: 39.4 ms]
Range (min … max): 28.3 ms … 35.7 ms 50 runs
Benchmark 2: target/release-with-debug/jj-2 -R ~/mirrors/git debug snapshot
Time (mean ± σ): 30.6 ms ± 1.1 ms [User: 33.8 ms, System: 39.0 ms]
Range (min … max): 29.0 ms … 35.0 ms 50 runs
Relative speed comparison
1.05 ± 0.05 target/release-with-debug/jj-1 -R ~/mirrors/git debug snapshot
1.06 ± 0.05 target/release-with-debug/jj-2 -R ~/mirrors/git debug snapshot
```
- CPU: 8-core AMD Ryzen 7 PRO 4750U with Radeon Graphics (-MT MCP-)
- speed/min/max: 1600/1400/1700 MHz Kernel: 6.11.10-amd64 x86_64
- Filesystem: ext4
2024-12-10 10:51:04 +09:00
Yuya Nishihara
e98589a15a
local_working_copy: extract loop body of visit_directory() to function
...
It's annoying that rustfmt indents a large code block depending on the length
of parameters and method calls needed to configure the parallel iterator.
2024-12-10 10:51:04 +09:00
Yuya Nishihara
60d3354923
local_working_copy: extract function that visits gitignore-d tracked files
...
.try_for_each_with() wasn't needed because mpsc::Sender can be Sync from Rust
1.72.0.
2024-12-10 10:51:04 +09:00
Yuya Nishihara
6d23d5ac8b
local_working_copy: extract helper function that emits new file value and state
...
visit_directory() is big. Let's make it fit in one screen.
2024-12-10 10:51:04 +09:00
Yuya Nishihara
514803dc09
config: add method to iterate over merged table keys
...
.get_table() callers will be migrated to .table_keys() + .get() to attach source
indication to error message. It might be a bit more expensive, but we can get by
without introducing table wrapper that tracks source config layers.
2024-12-09 10:09:23 +09:00
Yuya Nishihara
85816f2c9b
settings: explicitly convert integer to HumanByteSize
...
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Since config::Value type was lax about data types, an integer value could be
deserialized through a string. This won't apply to new toml_edit-based value
types.
2024-12-08 09:19:35 +09:00
Yuya Nishihara
2461602b56
settings: extract HumanByteSize parsing wrapper to FromStr trait
...
I'm going to rewrite the deserialization constructor to accept either integer
or string, but the from_str() API is generally useful.
This patch also fixes lifetime of the parse error message.
2024-12-08 09:19:35 +09:00
Yuya Nishihara
b681df0c93
config: add .get_value_with() to handle type not implementing Deserialize
...
The serde::Deserialize interface isn't always useful. Suppose we're going to
make parsing of color tables stricter, we would have to process a string|table
value. It could be encoded as an untagged enum in serde, but that means the
error message has to be static str (e.g. "expected string or color table") and a
detailed error (e.g. "invalid color name: xxx") would be lost. It's way easier
to dispatch based on the ConfigValue type, than on serde data model.
2024-12-08 09:19:35 +09:00
Yuya Nishihara
da3c75b3cb
config: add convenient method to insert value into layer, migrate callers
...
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
The current implementation is silly, which will be reimplemented to be using
toml_edit::DocumentMut. "jj config set" will probably be ported to this API.
2024-12-07 11:06:21 +09:00
Yuya Nishihara
d226bc2762
config: extract helper method that inserts multiple layers
...
Default configuration will be split to per-source layers.
2024-12-07 11:06:21 +09:00
Yuya Nishihara
c0ce88003e
config: introduce our ConfigGetError type
...
Since most callers don't need to handle loading/parsing errors, it's probably
better to add a separate error type for "get" operations. The other uses of
ConfigError will be migrated later.
Since ConfigGetError can preserve the source name/path information, this patch
also removes some ad-hock error handling codes.
2024-12-06 10:52:10 +09:00
Yuya Nishihara
ba739b2f76
config: move ConfigResultExt from settings module
...
As the name suggests, this helper should be in the config module.
2024-12-06 10:52:10 +09:00
Yuya Nishihara
dfa5a6b1e4
settings: remove useless Result type from settings.with_repo()
...
I have no idea how this method will be redesigned, but it's unlikely we'll do
some fallible I/O or parsing here.
2024-12-06 10:52:10 +09:00
Yuya Nishihara
aa4f48c7b7
config: wrap per-layer table access API
...
The added function is not "get_table(name) -> Result<Table, Error>" because
callers need to know whether the value was missing or shadowed by non-table
value. We just don't have this problem in template/revset-aliases because these
tables are top-level items.
2024-12-06 10:52:10 +09:00
Yuya Nishihara
8748a1e73a
config: remove merge() function which is used only in tests
2024-12-04 10:33:22 +09:00
Yuya Nishihara
23b24120fb
config: migrate resolved_config_values() to new getter API
...
When I wrote the original lookup function, I didn't notice that the root config
value could be accessed as &config.cache without cloning. That's the only reason
I added split_safe_prefix().
2024-12-04 10:33:22 +09:00
Yuya Nishihara
21a6a244b3
local_working_copy: move DirectoryToVisit closer to new snapshotter type
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
2024-12-03 11:13:46 +09:00
Yuya Nishihara
88c3008724
local_working_copy: move common parameters out of visit_directory() arguments
...
The shared lifetime looks a bit wonky, but we don't have a reason to assign
per-field lifetime right now.
2024-12-03 11:13:46 +09:00
Yuya Nishihara
1a1d36979a
local_working_copy: extract immutable part of snapshot() to separate struct
...
I'll move common parameters to the snapshotter type.
2024-12-03 11:13:46 +09:00
Yuya Nishihara
4e2e9e9b69
local_working_copy: reorder code to place snapshot functions closer
2024-12-03 11:13:46 +09:00
Yuya Nishihara
13ccd92766
settings: do not store "debug.randomness-seed" in stringified form
...
While this is a debug option, it doesn't make sense to store an integer value
as a string. We can parse the environment variable instead. The variable is
temporarily parsed into i64 because i64 is the integer type of TOML.
toml_edit::Value doesn't implement any other integer conversion functions.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
3890e426e5
settings: migrate get() to StackedConfig, rename .stacked_config to .config
...
The goal is to remove dependency on config::Config and replace the underlying
table type to toml_edit::Table. Other StackedConfig::merge() users will be
migrated in the next batch.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
8fadac4114
config: add StackedConfig method that looks up value from all layers
...
This patch adds separate .get<T>(), .get_table(), and .get_value() methods
because generic value types in toml_edit don't implement Deserialize.
There's a bit of naming inconsistency right now. Low-level generic object is
called an "item", whereas mid-level generic object is called a "value". These
objects will become different types when we migrate to toml_edit.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
8557a0ff0a
config: add basic abstraction over &str, [&str], and &ConfigNamePathBuf
...
We usually look up config objects with a static name, but commands like "jj
config get" has to parse a user input as a config key. We could consolidate the
name type to &ConfigNamePathBuf, but it would be inconvenient if all callers had
to do config.get(&"..".parse()?). It's also undesirable to pass a raw user input
in to .get() as a string.
I originally considered making it support fallible conversion, but doing that
would complicate error handling path. Not all functions should return an error.
It's better to do fallible parsing at the call sites instead.
A string config name is parsed into a temporary ConfigNamePathBuf object. If the
allocation cost matters, the output path type can be abstracted.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
5946ef3880
settings: forward .get_table(key) to underlying config object
...
This will help migrate away from config::Config. We'll probably need a better
abstraction to preserve error source indication, but let's leave that for now.
.get_table() isn't forwarded to .get::<T>() because ConfigTable won't implement
Deserialize if we migrate to toml_edit.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
ba07c3bc54
config: reexport table and value types
...
These types will be replaced with toml_edit::Table and ::Value respectively.
2024-12-03 09:42:47 +09:00
Yuya Nishihara
824cd132cc
local_working_copy: leverage iterator API of channel receiver
2024-12-03 09:39:17 +09:00
Yuya Nishihara
934a2ba478
local_working_copy: remove useless Result wrapping in snapshot()
2024-12-03 09:39:17 +09:00
Yuya Nishihara
d2c0d92fa2
local_working_copy: propagate read_dir error from snapshot()
2024-12-03 09:39:17 +09:00
Yuya Nishihara
8f55680787
local_working_copy: remove unneeded boxing of diff stream
2024-12-03 09:39:17 +09:00
Essien Ita Essien
694dfb8722
jj-lib: abstract a lower-level api for fetching from git.
...
* GitFetch{} separates `fetch()` from `import_refs()`.
* This allows more control over the stages of the fetch so multiple fetches
can happen before `import_refs` resolves the changes in the local jj repo.
* Implement `git::fetch` in terms of the new api.
* Add a test case for initial fetch from a repo without `HEAD` set. This tests
the default branch retrieving behaviour.
Issue: #4923
2024-12-01 12:22:09 +00:00
Yuya Nishihara
0ca6f00421
merged_tree: slightly adjust doc comment of inner trees() helpers
2024-11-30 10:20:43 +09:00
Yuya Nishihara
4931b2ba04
merged_tree: remove redundant .clone() from TreeDiffStreamImpl::new()
2024-11-30 10:20:43 +09:00
Yuya Nishihara
c741e3db39
merged_tree: use Merge<Tree> to represent pending trees in TreeDiffStreamImpl
...
This seems a slightly better in that MergedTree no longer represent a subtree.
2024-11-30 10:20:43 +09:00
Yuya Nishihara
991b0e8b68
merged_tree: keep Arc<Store> globally in TreeDiffStreamImpl
...
I'll replace treeN: MergedTree with Merge<Tree>, and it's simpler to just
keep the store by TreeDiffStreamImpl.
2024-11-30 10:20:43 +09:00
Yuya Nishihara
a3ca6c6f46
tests: do not pass in commit objects loaded from different store
...
For the same reason as 37c41d0eaf
.
2024-11-30 10:20:43 +09:00
Yuya Nishihara
ecf25a1d9b
tests: extract helper that instantiates StackedConfig with commit timestamp
2024-11-30 10:01:05 +09:00
Yuya Nishihara
da01734639
settings: own StackedConfig by UserSettings, migrate tests to use config layer
...
UserSettings::get_*() will be changed to look up a merged value from
StackedConfig, not from a merged config::Value. This will help migrate away
from the config crate.
Not all tests are ported to ConfigLayer::parse() because it seemed a bit odd
to format!() a TOML document and parse it to build a table of configuration
variables.
2024-11-30 10:01:05 +09:00
Yuya Nishihara
512d85bfad
config: add convenient function that constructs ConfigLayer from TOML string
...
This will be used mainly in tests. The default layers might also be migrated to
per-file layers constructed by ConfigLayer::parse().
2024-11-30 10:01:05 +09:00
Ilya Grigoriev
1b96d27b66
cli git fetch: clarify the error for invalid branch names/globs
...
Create a clearer error when a branch name contains `*`.
Slightly clarify the error message for `?` in branch name/glob.
2024-11-29 11:27:05 -08:00
Martin von Zweigbergk
a5690beab5
test_merged_tree: avoid a temporary lifetime extension
...
binaries / Build binary artifacts (push) Waiting to run
nix / flake check (push) Waiting to run
build / build (, macos-13) (push) Waiting to run
build / build (, macos-14) (push) Waiting to run
build / build (, ubuntu-latest) (push) Waiting to run
build / build (, windows-latest) (push) Waiting to run
build / build (--all-features, ubuntu-latest) (push) Waiting to run
build / Build jj-lib without Git support (push) Waiting to run
build / Check protos (push) Waiting to run
build / Check formatting (push) Waiting to run
build / Check that MkDocs can build the docs (push) Waiting to run
build / Check that MkDocs can build the docs with latest Python and uv (push) Waiting to run
build / cargo-deny (advisories) (push) Waiting to run
build / cargo-deny (bans licenses sources) (push) Waiting to run
build / Clippy check (push) Waiting to run
Codespell / Codespell (push) Waiting to run
website / prerelease-docs-build-deploy (ubuntu-latest) (push) Waiting to run
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
I think it's just clearer to assign the owned value to the variable
than to assign a reference to a temporary value.
2024-11-27 18:53:28 -08:00
Martin von Zweigbergk
409be2e1c4
store: make get_tree()
functions take owned repo path
...
The function needs an owned value, so we might as well pass it one and
avoid a few clone calls.
2024-11-27 18:53:28 -08:00