diff --git a/BUCK b/BUCK index 1f28a9478b..9d1827312f 100644 --- a/BUCK +++ b/BUCK @@ -3,6 +3,8 @@ alias(name = name, actual = actual) for (name, actual) in [ # (top-level name, fully-qualified target name) + ("jj", "//cli:jj"), + ("jj-cli", "//cli:cli"), ("jj-lib", "//lib:lib"), ("gen-protos", "//lib/gen-protos:gen-protos"), ("proc-macros", "//lib/proc-macros:proc-macros"), diff --git a/cli/BUCK b/cli/BUCK new file mode 100644 index 0000000000..6885f63d14 --- /dev/null +++ b/cli/BUCK @@ -0,0 +1,90 @@ + +load("//buck/shims/jj.bzl", "jj") + +alias( + # NOTE: default target for this package + name = 'cli', + actual = ':jj', +) + +ALL_DEPS = [ + # CARGO-SYNC-START: dependencies + '//lib:jj-lib', + 'third-party//rust:chrono', + 'third-party//rust:clap', + 'third-party//rust:clap-markdown', + 'third-party//rust:clap_complete', + 'third-party//rust:clap_complete_nushell', + 'third-party//rust:clap_mangen', + 'third-party//rust:config', + 'third-party//rust:criterion', + 'third-party//rust:crossterm', + 'third-party//rust:dirs', + 'third-party//rust:esl01-renderdag', + 'third-party//rust:futures', + 'third-party//rust:git2', + 'third-party//rust:gix', + 'third-party//rust:hex', + 'third-party//rust:indexmap', + 'third-party//rust:itertools', + 'third-party//rust:maplit', + 'third-party//rust:minus', + 'third-party//rust:once_cell', + 'third-party//rust:pest', + 'third-party//rust:pest_derive', + 'third-party//rust:pollster', + 'third-party//rust:rayon', + 'third-party//rust:regex', + 'third-party//rust:rpassword', + 'third-party//rust:scm-record', + 'third-party//rust:serde', + 'third-party//rust:slab', + 'third-party//rust:strsim', + 'third-party//rust:tempfile', + 'third-party//rust:textwrap', + 'third-party//rust:thiserror', + 'third-party//rust:timeago', + 'third-party//rust:toml_edit', + 'third-party//rust:tracing', + 'third-party//rust:tracing-chrome', + 'third-party//rust:tracing-subscriber', + 'third-party//rust:unicode-width', + # CARGO-SYNC-END +] + select({ + "config//os:windows": [], + "DEFAULT": [ + # CARGO-SYNC-START: dependencies@cfg(unix) + 'third-party//rust:libc', + # CARGO-SYNC-END + ], +}) + +jj.rust_binary( + name = 'jj', + srcs = ['src/main.rs'], + features = [ + "watchman", + "git", + ], + linker_flags = [ '-lstdc++' ], # XXX FIXME (aseipp): should be implied by `bssl` + deps = [ ":jj-cli" ] + ALL_DEPS, +) + +jj.rust_library( + name = "jj-cli", + srcs = glob([ + "src/**/*.rs", + "src/**/*.toml", + "src/**/*.json", + "src/**/*.pest", + ], exclude = [ + "**/main.rs" + ]), + + features = [ + "watchman", + "git", + ], + + deps = ALL_DEPS, +) diff --git a/cli/PACKAGE b/cli/PACKAGE new file mode 100644 index 0000000000..5019e6766b --- /dev/null +++ b/cli/PACKAGE @@ -0,0 +1,4 @@ + +package( + visibility = [ 'PUBLIC' ], +) diff --git a/cli/src/template_parser.rs b/cli/src/template_parser.rs index 99f418b0e8..5756485ca1 100644 --- a/cli/src/template_parser.rs +++ b/cli/src/template_parser.rs @@ -28,6 +28,12 @@ use pest::Parser; use pest_derive::Parser; use thiserror::Error; +#[cfg(buck_build)] +#[derive(Parser)] +#[grammar = "cli/src/template.pest"] +struct TemplateParser; + +#[cfg(not(buck_build))] #[derive(Parser)] #[grammar = "template.pest"] struct TemplateParser;