1
cargo-features = []
2
3
[workspace]
4
resolver = "3"
5
members = ["cli", "lib", "lib/gen-protos", "lib/proc-macros", "lib/testutils"]
6
7
[workspace.package]
8
version = "0.39.0"
9
license = "Apache-2.0"
10
rust-version = "1.89" # NOTE: remember to update CI, mise.toml, contributing.md, changelog.md, and install-and-setup.md
11
edition = "2024"
12
readme = "README.md"
13
homepage = "https://www.jj-vcs.dev/"
14
repository = "https://github.com/jj-vcs/jj"
15
documentation = "https://docs.jj-vcs.dev/"
16
categories = ["version-control", "development-tools"]
17
keywords = ["VCS", "DVCS", "SCM", "Git", "Mercurial"]
18
19
[workspace.dependencies]
20
ansi-to-tui = "8.0.1"
21
assert_cmd = "2.1.2"
22
assert_matches = "1.5.0"
23
async-trait = "0.1.89"
24
blake2 = "0.10.6"
25
bstr = "1.12.1"
26
chrono = { version = "0.4.44", default-features = false, features = [
27
"std",
28
"clock",
29
"serde",
30
] }
31
clap = { version = "4.5.60", features = [
32
"derive",
33
"deprecated",
34
"wrap_help",
35
"string",
36
] }
37
clap_complete = { version = "4.5.66", features = ["unstable-dynamic"] }
38
clap_complete_nushell = "4.5.10"
39
# Update clap-markdown manually since test_generate_md_cli_help snapshot
40
# will need regenerating.
41
clap-markdown = "=0.1.5"
42
clap_mangen = "0.2.25"
43
clru = "0.6.3"
44
criterion = "0.8.2"
45
crossterm = { version = "0.29", default-features = false, features = ["windows"] }
46
datatest-stable = "0.3.3"
47
digest = "0.10.7"
48
dunce = "1.0.5"
49
either = "1.15.0"
50
erased-serde = "0.4.9"
51
etcetera = "0.11.0"
52
futures = "0.3.32"
53
gix = { version = "0.80.0", default-features = false, features = [
54
"attributes",
55
"blob-diff",
56
"index",
57
"max-performance-safe",
58
"zlib-rs",
59
] }
60
globset = "0.4.18"
61
hashbrown = { version = "0.16.1", default-features = false, features = ["inline-more"] }
62
ignore = "0.4.25"
63
indexmap = { version = "2.13.0", features = ["serde"] }
64
indoc = "2.0.7"
65
insta = { version = "1.46.3", features = ["filters"] }
66
interim = { version = "0.2.1", features = ["chrono_0_4"] }
67
itertools = "0.14.0"
68
jsonschema = { version = "0.44.0", default-features = false }
69
libc = { version = "0.2.180" }
70
maplit = "1.0.2"
71
nix = "0.31.2"
72
num_cpus = "1.17.0"
73
once_cell = "1.21.3"
74
pest = "2.8.6"
75
pest_derive = "2.8.6"
76
pollster = "0.4.0"
77
pretty_assertions = "1.4.1"
78
proc-macro2 = "1.0.104"
79
proptest = "1.10.0"
80
proptest-derive = "0.8.0"
81
proptest-state-machine = "0.7.0"
82
prost = "0.14.3"
83
prost-build = "0.14.3"
84
quote = "1.0.42"
85
rand = "0.10.0"
86
rand_chacha = "0.10.0"
87
ratatui = { version = "0.30.0", features = ["crossterm"] }
88
rayon = "1.10.0"
89
ref-cast = "1.0.25"
90
regex = "1.12.3"
91
rpassword = "7.4.0"
92
rustix = { version = "1.1.4", features = ["fs"] }
93
same-file = "1.0.6"
94
sapling-renderdag = "0.1.0"
95
sapling-streampager = "0.12.0"
96
scm-record = "0.10.0"
97
serde = { version = "1.0", features = ["derive", "rc"] }
98
serde_json = "1.0.149"
99
shlex = "1.3.0"
100
slab = "0.4.12"
101
smallvec = { version = "1.15.1", features = [
102
"const_generics",
103
"const_new",
104
"serde",
105
"union",
106
] }
107
strsim = "0.11.1"
108
syn = "2.0.111"
109
rustversion = "1.0.22"
110
tempfile = "3.26.0"
111
test-case = "3.3.1"
112
textwrap = "0.16.2"
113
thiserror = "2.0.17"
114
timeago = { version = "0.6.0", default-features = false }
115
tokio = { version = "1.49.0", features = ["io-util"] }
116
toml = "0.9.11"
117
toml_edit = { version = "0.24.0", features = ["serde"] }
118
tracing = "0.1.44"
119
tracing-chrome = "0.7.2"
120
tracing-subscriber = { version = "0.3.22", default-features = false, features = [
121
"std",
122
"ansi",
123
"env-filter",
124
"fmt",
125
] }
126
unicode-width = "0.2.2"
127
watchman_client = "0.9.0"
128
whoami = "2.1.1"
129
winreg = "0.55"
130
131
# put all inter-workspace libraries, i.e. those that use 'path = ...' here in
132
# their own (alphabetically sorted) block
133
134
jj-lib = { path = "lib", version = "0.39.0", default-features = false }
135
jj-lib-proc-macros = { path = "lib/proc-macros", version = "0.39.0" }
136
testutils = { path = "lib/testutils" }
137
138
[workspace.lints.clippy]
139
borrow_as_ptr = "warn"
140
cast_lossless = "warn"
141
cloned_instead_of_copied = "warn"
142
elidable_lifetime_names = "warn"
143
explicit_into_iter_loop = "warn"
144
explicit_iter_loop = "warn"
145
flat_map_option = "warn"
146
format_collect = "warn"
147
format_push_string = "warn"
148
implicit_clone = "warn"
149
manual_let_else = "warn"
150
needless_for_each = "warn"
151
ptr_as_ptr = "warn"
152
ptr_cast_constness = "warn"
153
ref_as_ptr = "warn"
154
ref_option = "warn"
155
semicolon_if_nothing_returned = "warn"
156
single_char_pattern = "warn"
157
stable_sort_primitive = "warn"
158
uninlined_format_args = "warn"
159
unnecessary_literal_bound = "warn"
160
unnecessary_semicolon = "warn"
161
unnested_or_patterns = "warn"
162
unused_trait_names = "warn"
163
use_self = "warn"
164
useless_conversion = "warn"
165
while_let_loop = "warn"
166
167
[workspace.lints.rust]
168
let_underscore_drop = "warn"
169
redundant_imports = "warn"
170
171
[profile.dev]
172
# Opt-level 0 tends to run out of stack on Windows when running async code
173
opt-level = 1
174
175
[profile.dev.package]
176
# Insta suggests compiling these packages in opt mode for faster testing.
177
# See https://docs.rs/insta/latest/insta/#optional-faster-runs.
178
insta.opt-level = 3
179
similar.opt-level = 3
180
# Proptest suggests compiling itself and its RNG in opt mode as well.
181
# See https://proptest-rs.github.io/proptest/proptest/tips-and-best-practices.html#setting-opt-level
182
proptest.opt-level = 3
183
proptest-state-machine.opt-level = 3
184
rand_chacha.opt-level = 3
185
186
[profile.release]
187
strip = "debuginfo"
188
codegen-units = 1
189