mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-30 02:49:39 +02:00
fix(config,cli): reject --resolved+--show-origin; drop dead ActiveContext.server
config view --resolved --show-origin silently dropped --show-origin; add clap conflicts_with so the parser rejects the combo loudly. Remove the unused `server` field from ActiveContext (parsed, always written None, never read) — server-qualified active context is a V2/V3 concern; don't ship an unfulfilled field.
This commit is contained in:
parent
c7c82beafb
commit
922666fc70
3 changed files with 20 additions and 10 deletions
|
|
@ -533,7 +533,7 @@ enum ConfigCommand {
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
config: Option<PathBuf>,
|
config: Option<PathBuf>,
|
||||||
/// Resolve the named graph (or `defaults.graph`) to its typed locator.
|
/// Resolve the named graph (or `defaults.graph`) to its typed locator.
|
||||||
#[arg(long)]
|
#[arg(long, conflicts_with = "show_origin")]
|
||||||
resolved: bool,
|
resolved: bool,
|
||||||
/// Annotate each value with the layer (global/project) it came from.
|
/// Annotate each value with the layer (global/project) it came from.
|
||||||
#[arg(long = "show-origin")]
|
#[arg(long = "show-origin")]
|
||||||
|
|
@ -3166,7 +3166,6 @@ async fn main() -> Result<()> {
|
||||||
resolved.resolve_graph(None, Some(&graph))?;
|
resolved.resolve_graph(None, Some(&graph))?;
|
||||||
write_active_context(&ActiveContext {
|
write_active_context(&ActiveContext {
|
||||||
graph: graph.clone(),
|
graph: graph.clone(),
|
||||||
server: None,
|
|
||||||
})?;
|
})?;
|
||||||
println!("active graph set to '{graph}'");
|
println!("active graph set to '{graph}'");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -371,6 +371,19 @@ fn config_view_resolved_prints_embedded_and_remote_locators() {
|
||||||
assert_eq!(remote["graph_id"], "prod");
|
assert_eq!(remote["graph_id"], "prod");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn config_view_resolved_conflicts_with_show_origin() {
|
||||||
|
// The two modes are mutually exclusive; the parser rejects the combo loudly
|
||||||
|
// rather than silently dropping --show-origin.
|
||||||
|
output_failure(
|
||||||
|
cli()
|
||||||
|
.arg("config")
|
||||||
|
.arg("view")
|
||||||
|
.arg("--resolved")
|
||||||
|
.arg("--show-origin"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn use_sets_active_graph_targeted_by_bare_commands() {
|
fn use_sets_active_graph_targeted_by_bare_commands() {
|
||||||
let graph_dir = tempdir().unwrap();
|
let graph_dir = tempdir().unwrap();
|
||||||
|
|
|
||||||
|
|
@ -1072,14 +1072,13 @@ pub fn global_config_file() -> Option<PathBuf> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The active context selected by `omnigraph use` — RFC-002 §5. A thin pointer to
|
/// The active context selected by `omnigraph use` — RFC-002 §5. A thin pointer to
|
||||||
/// the default graph (and optionally its server), written to
|
/// the default graph, written to `<global>/state/active.yaml` and read as the
|
||||||
/// `<global>/state/active.yaml` and read as the `State` layer (between global and
|
/// `State` layer (between global and project) so a bare command targets the active
|
||||||
/// project) so a bare command targets the active graph.
|
/// graph. (A default *server* belongs here too once server-qualified selection
|
||||||
|
/// lands in V2/V3 — not modeled now to avoid an unused field.)
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ActiveContext {
|
pub struct ActiveContext {
|
||||||
pub graph: String,
|
pub graph: String,
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
||||||
pub server: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Path of the active-context state file (`<global>/state/active.yaml`).
|
/// Path of the active-context state file (`<global>/state/active.yaml`).
|
||||||
|
|
@ -1100,9 +1099,8 @@ pub fn write_active_context(context: &ActiveContext) -> Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Build the synthetic `State` layer config from an active-context file, if it
|
/// Build the synthetic `State` layer config from an active-context file, if it
|
||||||
/// exists: a thin config whose only effect is setting `defaults.graph` (and, when
|
/// exists: a thin config whose only effect is setting `defaults.graph`. Marked
|
||||||
/// present, the default server). Marked not-loaded-from-file so it raises no
|
/// not-loaded-from-file so it raises no version/legacy warnings.
|
||||||
/// version/legacy warnings.
|
|
||||||
fn load_state_layer(path: &Path) -> Result<Option<OmnigraphConfig>> {
|
fn load_state_layer(path: &Path) -> Result<Option<OmnigraphConfig>> {
|
||||||
if !path.exists() {
|
if !path.exists() {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue