Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 00:03
· 114 commits to main since this release
af62247

The registry reads 270 commands through 737 definitions, up from 227
through 600: sar's reports, gpg keys, git's branches and config, file
system and partition tools (dumpe2fs, wipefs, gdisk, partx), CUPS's
lpstat and more. What was read wrong with exit 0 is refused instead: a
csv whose lines end with a carriage return alone, and YAML text after a
flow collection. A csv record read as data is bounded by the input limit
like every other format, an option error names the option the way the
help writes it, and top -b -n N is a list with a record per iteration.

Added

  • Twenty-three commands: dumpe2fs -h and tune2fs -l (the superblock
    of an ext2/3/4 file system), e2freefrag (free space summary and
    histogram), wipefs (the signature table, and the report --all
    prints), partx --show (with rounded sizes and with -b), gdisk -l
    and sgdisk -p (a GPT listing), filefrag -v (the extents of each
    file), fincore (with rounded sizes and with -b), diffstat,
    gocyclo (with -avg and -avg-short), exif (libexif's table),
    isoinfo -d, cmp and cmp -b, cloud-init status --long,
    pro status on a machine with no subscription (also as ua),
    oomctl, pinky and pinky -l, stty and stty -a,
    setxkbmap -query, udisksctl status, lpstat -p, -v and -t,
    and cpupower frequency-info. git diff --stat is no longer read
    from diffstat output, whose count column git never prints at that
    width. The registry holds 270 commands through 737 definitions.
  • net-tools arp, arp -n and arp -i IFACE (arp/net-tools), the
    cache as a table, and ifconfig -s (ifconfig/net-tools-short).
    arp -a reads an entry published for a proxy, which net-tools prints
    with <from_interface> for its hardware address and was refused.
    net-tools route -ee (route/linux-extended) and route -A inet6
    (route/linux-inet6), and route -e through netstat/routing. A
    rejecting route, whose counts net-tools prints as -, was refused by
    route/linux and netstat/routing; the counts are null now, and the
    published schemas are unchanged, since they already allowed it. The
    registry holds 247 commands through 704 definitions.
  • numactl --show (the NUMA policy and the processors and nodes a
    process is bound to) and taskset -p (the affinity mask of a process,
    beside the list taskset -pc already gave), and resolvectl query
    (the answers for each name, with the link, the protocol, how long it
    took and where the data came from). The registry holds 247 commands
    through 707 definitions.
  • gpg -k and gpg -K, each key with its algorithm, dates,
    capabilities and fingerprint, its user IDs with their validity, and its
    subkeys. The registry holds 247 commands through 700 definitions.
  • dpkg-deb -I (a package's size, the members of its control archive
    and its control fields) and dpkg-deb -c, which prints the listing
    tar/gnu reads, and dpkg-divert --list. The registry holds 247
    commands through 699 definitions.
  • readelf -s -W, each symbol table with the value, size, type,
    binding, visibility, section and name of every symbol, and the version
    a symbol is bound to. The registry holds 245 commands through 697
    definitions.
  • Three commands of poppler-utils: pdfinfo (the document information,
    page count, page size and version), pdffonts (each font with its
    type, encoding and whether it is embedded) and pdfimages -list
    (each image with its size, color space and encoding), and trust list from p11-kit (each certificate of the trust store). The registry
    holds 245 commands through 696 definitions.
  • The checksum lines of more tools: cksum -a ALGORITHM (tagged, and
    with --untagged), cksum -a bsd, shasum with no algorithm, -a 1,
    224, 384 and 512 and with --tag, and b2sum -l BITS for 128,
    256 and 384 bits. Each goes to the definition whose line it prints.
  • git config --list --show-origin and --show-scope (the scope, the
    kind of origin and the file of each setting), git diff --shortstat
    and git ls-tree -l (the size of each blob). The registry holds 241
    commands through 692 definitions.
  • go tool cover -func (the coverage of each function and the total),
    git status --porcelain=v2 (the branch headers, and each entry by
    kind with its modes and object names), and git log --numstat,
    --name-status and --name-only (and git show with them), which
    before failed with exit 3. git/log now refuses those forms and -p
    with exit 4. The registry holds 241 commands through 689 definitions.
  • Seventeen definitions. Eight commands jz did not read: apt-config dump, avahi-browse -p (and with -r the resolved host, address,
    port and TXT record; a browse left running is read as a stream),
    fc-match, gio mime TYPE, gpgconf --list-dirs and
    --list-components, gsettings list-recursively (a value kept as the
    GVariant text printed), pwdx (read only when named) and
    systemd-delta --diff=false. More of three it did: git diff --name-status (a quoted path decoded), git reflog, git ls-remote,
    git cherry, systemd-analyze timespan, timestamp and calendar,
    and resolvectl dns and domain.
  • Three more: sum (the BSD checksum, told from cksum by its padding),
    ipcs -l (a record per resource) and df -P with -B, -m or
    --block-size (the unit the heading names in bytes). The registry
    holds 236 commands through 620 definitions.
  • sar -d, the activity of each block device, and for ELF files
    readelf -S -W (the section headers), readelf -d (the dynamic
    section) and size -A (the size and address of each section), and
    rustc -vV and cargo -vV, and BusyBox top -b (a virtual size
    that runs into the percentage beside it is told apart). The registry
    holds 237 commands through 627 definitions.
  • Twenty-five sar reports: -W, -H, -v, -I, -u ALL, -r ALL,
    -m CPU, and with -n the reports EDEV, NFS, NFSD, SOCK,
    IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6,
    EIP6, ICMP6, EICMP6, UDP6 and SOFT, pidstat -U, the
    per-task report with user names, and iostat -x -d, the extended
    device counters without the CPU table, and vmstat -p PARTITION
    (655 definitions).
  • Network settings: ethtool -g (ring sizes) and ethtool -a (pause
    frames), ip route get, nmcli -t device, iw reg get (the
    regulatory rules per frequency range) and hostname -I.
  • pmap -x (a record per process with its mappings and totals),
    pgrep -l and getent ahosts.
  • rpm -qi and rpm -qia (rpm/info), one object per package with
    the description kept whole, read from rpm 4.14, 4.16 and 6.0 output;
    git log --stat and --shortstat (git/log-stat), each commit with
    its diffstat as files and summary; ifconfig from net-tools
    (ifconfig/net-tools) and from macOS and FreeBSD (ifconfig/bsd);
    and macOS arp -a (arp/darwin).
  • /proc/pressure/* (pressure stall averages), /proc/self/io,
    /proc/cgroups, /proc/net/sockstat, /proc/PID/maps and
    /proc/net/if_inet6.
  • apt-cache show (a record per package version, sizes typed), and
    snap refresh --list, snap aliases and snap version.
  • For git, branch (which branch is checked out here or in another
    worktree), status -sb (the branch, its upstream and how far ahead or
    behind, then the changed paths), worktree list --porcelain and
    count-objects -vH; and go version. The registry holds 241 commands
    through 684 definitions.
  • jz run --format NAME reads the command's output as a data format,
    the way COMMAND | jz --format NAME reads it, with --stream,
    --columns and --type as there. jz run --type already told the
    caller to give --format csv, which jz run did not take.

Changed

  • jz run --help lists --format, --columns and --type under
    Input and the parser options under the same heading as jz --help,
    where --columns and --type were among the parser options and
    --format among the options for the command.
  • npm ls -g and npm ls -g --all are read. The first line is the
    global directory with no package name, so the project's name in
    npm/ls and the root's name in npm/ls-all may be null, and both
    schemas are version 2. Before, the output was refused with exit 4.
  • go list -m -u all is read: go/list-modules adds update, the newer
    version shown in brackets, retracted and deprecated, and the same
    three for the replacement. Before, the first line with any of them
    failed with exit 3. Every object now has these keys, so the schema is
    version 2.
  • git branch -r is read, and git branch -a when the current branch
    is past the twentieth line. Both were refused with exit 4, since the
    signature asked for a line marked current.
  • An args entry that ends in = also matches the one-dash spelling
    of Go's flag package: any: ["-func="] takes -func=c.out, which
    before was only split into letters.
  • git log --stat output named as --parser git --variant log is
    refused by the signature (exit 4) instead of failing inside the message
    (exit 3), and detection hands it to git/log-stat. The published
    schema of git/log is unchanged.
  • A file path names more definitions: a dot in the file name is looked
    up as a dash (jz --file /etc/resolv.conf reads with etc/resolv-conf)
    and a file one directory down has that directory joined to its name
    (/proc/net/dev is proc/net-dev, /proc/self/io is proc/self-io).
    Before, both went to automatic detection, which refuses formats that
    are read only when named. A capture saved as fstab.txt still names
    nothing.
  • iostat -s and iostat -xs print short forms whose columns
    (kB_w+d/s, kB/s, rqm/s, await, areq-sz, aqu-sz, %util)
    iostat/linux read as strings; they are numbers now, and the published
    schema of iostat/linux is version 3.
  • top/linux is a list with one record per iteration, so top -b -n 2
    and jz run --stream top -b -d 1 are read: before, the second
    iteration's summary was taken for a row of the first one's task table
    and the reading ended with exit 3. top -b -n1 is now a list of one
    object instead of the object; the published schema is version 2. A
    stream writes an iteration once the next one begins, or the output
    ends.
  • jz new KEY=@FILE and --text-file KEY=PATH leave out a byte order
    mark at the start of the file, as --format text and jz new --each KEY=@- already did. A document built from a file saved with one no
    longer starts its value with U+FEFF.

Fixed

  • A csv or tsv whose lines end with a carriage return alone was read as
    one header line and no rows, exit 0. A carriage return outside a quoted
    value is refused with exit 3 now.
  • Reading a csv or tsv as data refused a record longer than 1 MiB, the
    line limit of command output, while every other data format took one up
    to the 64 MiB input limit. The input limit bounds a csv record too.
  • jz run --parser P -- CMD named P where CMD printed nothing
    (df printed nothing for sh -c ...). It names the command it ran.
  • jz run --timeout -1s ran with no limit. A negative duration is a usage
    error.
  • An option jz does not have, or a value one cannot take, was reported in
    the words of Go's flag package with one dash (flag provided but not defined: -nope, invalid value "x" for flag -timeout: parse error).
    It is unknown option --nope and --timeout expects a duration such as 30s or 2m, got "x" now.
  • YAML read with exit 0 into something other than the text said: text
    after a flow collection on its line was dropped (a: [b]c read as
    {"a":["b"]}), an anchor on a key inside a flow mapping or after ?
    became part of the key ({&x a: 1} read as {"&x a":1}), and ? in
    a flow collection became part of the key. Each is refused with exit 3.
  • A YAML file that opens with a %YAML 1.2 directive and --- was
    refused as holding two documents. The directive is read, a version
    other than 1 is refused by name, and so is %TAG, whose tags jz does
    not read.
  • jz run file with a name outside ASCII returned the name as file
    printed it in the C locale (caf\303\251.txt) with exit 0, and jz run ps aux, top -b -c and pgrep -l returned a command line outside
    ASCII as question marks. jz now runs file, GNU tar, ps, top and pgrep
    in the C.UTF-8 locale, where the text is printed as it is. A file name
    still written with an octal escape, which could be a name holding those
    characters, is refused. jz run tar -tvf reads a name outside ASCII
    instead of failing with exit 3.
  • Output that adds what a definition does not read is refused with exit
    4 instead of reaching it and failing with exit 3: mpstat -A,
    mpstat -I CPU, sar -A, two sar or pidstat reports in one run
    (sar -u -r, pidstat -u -d), sar -h, readelf -a and two readelf
    reports together (readelf -h -S), ip -s address, ip -d address,
    and ip -s -h link and ip -s -d link.
  • jz new 'a[][]=1' wrote {"a[]":["1"]}, a key the documentation says
    a plain argument cannot name. A key that still ends in [] once the
    [] that appends is taken off is refused with exit 2, in a plain
    argument and in --string and --text-file.
  • sar -B, pidstat, pidstat -U and pidstat -r are identified by
    their whole header rather than its first columns, so the forms an
    older sysstat prints (%vmeff in place of pgprom/s and pgdem/s,
    no %wait) are refused as another format (exit 4) instead of chosen
    and then failing on their first row (exit 3).
  • sar -u ALL piped to jz was read as mpstat with exit 0: the two
    print the same ten CPU columns, sar with %steal before %irq, and
    mpstat/linux looked only as far as %nice, so steal time came out as
    interrupt time. mpstat/linux now asks for its whole header.
  • A command that prints at an interval gets its records out while it
    runs. jz run --stream ping HOST never chose a definition, since
    ping/linux asked for the summary ping prints only at its end, and
    jz run ping -c 25 HOST failed with exit 4 because that summary came
    past the lines a signature looks at. free -h -s 1 and journalctl -f waited for twenty lines or for the command to end before their
    first record, since a rival variant could still have matched a later
    line; the free and journalctl signatures now look at the lines those
    formats open with. The same summary rule is gone from FreeBSD
    vmstat -i, whose interrupt list can be longer than the window.
  • docker stats without --no-stream is read: each refresh leaves a
    space before the clear-to-end-of-line sequence, which failed the row.
  • An int field, and --type COLUMN=int, keeps an integer past 64 bits
    with every digit instead of refusing it with exit 3: ipcs -l prints
    a shared memory limit of 2^64 - 4. A + and zeros in front are left
    out as they are for a smaller integer.
  • jz run refuses, before it starts the command, --stream when no
    variant it could read the output with has a streaming form, and a key
    to --extract or --exclude that none of them can have. It used to
    run the command first, and with --define or no output at all it
    either wrote [] for the key or stopped the command part way.
  • A key the definition cannot have is exit 2 whether the input is read
    whole or as a stream; read whole, a line the definition could not read
    was reported first, with 3.
  • A command jz run started that fails having printed nothing but blank
    lines gets no JSON and its own status, with --define and with
    --stream as without them: --define wrote [], and --stream
    added a message about the empty output. Blank output from a command
    that succeeds is answered the same way with --stream as without.
  • --stream --extract KEY on a csv or a tsv refuses a key no column has
    before writing a record, as the whole document does; it wrote an empty
    object per record and then refused the key.
  • jz run returns the command's status when it failed and its output
    lacks a key named to --extract, as it does for every other failure
    to read the output; without --stream it returned 2.