nix-env/query: don't use RAII for closing xml tag

I could instead add the right braces or manually ensure the
XMLOpenElement destructor is run at the right time. Or I could just
write what I actually want to happen.

Fixes #1137.

Change-Id: Ie1f157de1632571fb0c21e26d8e3cae56a6a6964
This commit is contained in:
Qyriad
2026-02-24 12:28:45 +01:00
parent 1ef7ccfc72
commit 6b4de44461
2 changed files with 26 additions and 1 deletions
+4 -1
View File
@@ -1137,7 +1137,7 @@ static void opQuery(Globals & globals, Strings opFlags, Strings opArgs)
Table table;
std::ostringstream xmlStream;
XMLWriter xml(true, xmlStream);
XMLOpenElement xmlRoot(xml, "items");
xml.openElement("items");
for (auto & i : elems) {
try {
@@ -1366,6 +1366,9 @@ static void opQuery(Globals & globals, Strings opFlags, Strings opArgs)
}
}
// </items>
xml.closeElement();
if (!xmlOutput) {
pager << formatTable(table);
} else {
@@ -0,0 +1,22 @@
from xml.etree import ElementTree
from testlib.fixtures.file_helper import with_files
from testlib.fixtures.nix import Nix
from testlib.utils import get_global_asset_pack
@with_files(get_global_asset_pack("dependencies"))
def test_correct_xml(nix: Nix):
"""Test that nix-env --query --xml produces valid XML."""
query_output = (
nix.nix_env(
["--query", "--available", "--attr-path", "--xml", "--file", "./dependencies.nix"]
)
.run()
.ok()
.stdout_plain
)
# Should parse without raising.
parsed = ElementTree.fromstring(query_output)
assert parsed.tag == "items"