From 31e58dcb92b944a54a834d9b85a573a78b19acc5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 11 Jun 2025 17:18:42 +0200 Subject: [PATCH] nix-instantiate --eval --xml: Devirtualize the output --- src/nix-instantiate/nix-instantiate.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/nix-instantiate/nix-instantiate.cc b/src/nix-instantiate/nix-instantiate.cc index 6f386a5d8..f327454ec 100644 --- a/src/nix-instantiate/nix-instantiate.cc +++ b/src/nix-instantiate/nix-instantiate.cc @@ -59,12 +59,16 @@ void processExpr(EvalState & state, const Strings & attrPaths, context); // We intentionally don't output a newline here. The default PS1 for Bash in NixOS starts with a newline // and other interactive shells like Zsh are smart enough to print a missing newline before the prompt. - else if (output == okXML) - printValueAsXML(state, strict, location, vRes, std::cout, context, noPos); + else if (output == okXML) { + std::ostringstream s; + printValueAsXML(state, strict, location, vRes, s, context, noPos); + std::cout << state.devirtualize(s.str(), context); + } else if (output == okJSON) { auto j = printValueAsJSON(state, strict, vRes, v.determinePos(noPos), context); std::cout << state.devirtualize(j.dump(), context) << std::endl; - } else { + } + else { if (strict) state.forceValueDeep(vRes); std::set seen; printAmbiguous(state, vRes, std::cout, &seen, std::numeric_limits::max());