aboutsummaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
authorrottedfm <rottedfm@proton.me>2026-08-19 11:21:47 -0400
committerrottedfm <rottedfm@proton.me>2026-08-19 11:21:47 -0400
commitea0bd36167b684c0accdb5ce2b2e21b8d84aeb25 (patch)
treebe1267972b5de2f1ae592577dfabce67f1fe6e87 /build.rs
parent8c0b4c53b130555f040884c1f52b90f16b23e241 (diff)
feat: implement Helix-style modal buffer under DO-178C DAL-C
The repository was an unmodified ratatui component template: no editor code, JSON5 config, and placeholder widgets. This establishes the first working baseline — `moji <file>` opens a file into a ropey rope and edits it with Helix selection-first semantics. Requirements, implementation and tests land together because they must: the traceability check rejects requirements with no implementation and tests naming requirements that do not exist, so neither half is a valid commit on its own. Package renamed to mojibake-editor (mojibake was taken on crates.io); binary is moji, library target stays mojibake. Class: New behaviour Requirements: MJB-HLR-001..019, MJB-LLR-001..205 Derived: MJB-DR-001..007 (DR-001 resolved, six open for review) Verified: cargo build; clippy --all-targets -D warnings clean; cargo test 294 passing; ./scripts/check-trace.sh 98/98/98; cargo package clean Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/build.rs b/build.rs
new file mode 100644
index 0000000..20c813a
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,37 @@
+use anyhow::Result;
+use vergen_gix::{Build, Cargo, Emitter, Gix};
+
+/// Fallback used when the crate is built outside a git checkout (e.g. from a
+/// packaged `.crate` file), so `env!("VERGEN_GIT_REMOTE_URL")` always resolves.
+const UNKNOWN_REMOTE: &str = "unknown";
+
+fn main() -> Result<()> {
+ let build = Build::all_build();
+ let gix = Gix::all_git();
+ let cargo = Cargo::all_cargo();
+ Emitter::default()
+ .default_on_error()
+ .add_instructions(&build)?
+ .add_instructions(&gix)?
+ .add_instructions(&cargo)?
+ .emit()?;
+
+ emit_git_remote_url();
+ Ok(())
+}
+
+/// vergen only reports the local checkout (sha, branch, describe...), so read the
+/// `origin` remote out of the same repository and expose it alongside the rest of
+/// the `VERGEN_GIT_*` variables.
+fn emit_git_remote_url() {
+ let url = git_remote_url().unwrap_or_else(|| UNKNOWN_REMOTE.to_string());
+ println!("cargo:rustc-env=VERGEN_GIT_REMOTE_URL={url}");
+ println!("cargo:rerun-if-changed=.git/config");
+}
+
+fn git_remote_url() -> Option<String> {
+ let repo = gix::discover(env!("CARGO_MANIFEST_DIR")).ok()?;
+ let remote = repo.find_remote("origin").ok()?;
+ let url = remote.url(gix::remote::Direction::Fetch)?;
+ Some(url.to_bstring().to_string())
+}