--- Begin Message ---
Subject: |
[PATCH] processes: Optionally normalize recutils output. |
Date: |
Wed, 04 Nov 2020 20:31:01 -0800 |
Hi Guix,
Please let me know if there is already a way to do what I want without
this patch :). I really don't know a whole lot of recutils beyond what I
learned this morning.
I was trying to extract PIDs of the child processes of sessions from the
output of guix processes. I ran into the following problem: the PID and
the command are on the same line.
---- Begin ----
$ guix processes
SessionPID: 4278
ClientPID: 4268
ClientCommand: /gnu/store/...
ChildProcess: 4435: /gnu/store/...
ChildProcess: 4554: /gnu/store/...
ChildProcess: 4646: guile --no-auto-compile ...
---- End ----
I ended up having to use sed to remove the trailing command for the
child process. After reading the documentation for recutils I found out
that records can also be expressed in separate record sets that can be
joined together.
This patch adds a --normalize flag that specifies the
recutils output be put in separate record sets for Locks, Sessions, and
ChildProcesses. For example:
---- Begin ----
PAGER=cat ./pre-inst-env guix processes --normalize
%rec: Session
%type: PID int
%type: ClientPID int
%key: PID
PID: 4278
ClientPID: 4268
ClientCommand: /gnu/store/...
%rec: Lock
%type: Session rec Session
%rec: ChildProcess
%type: Session rec Session
%type: PID int
%key: PID
Session: 4278
PID: 4435
Command: /gnu/store/...
Session: 4278
PID: 4554
Command: /gnu/store/...
Session: 4278
PID: 4646
Command: guile --no-auto-compile ...
---- End ----
What do you think?
John
0001-processes-Optionally-normalize-recutils-output.patch
Description: Text Data
--- End Message ---
--- Begin Message ---
Subject: |
Re: [bug#44460] Add copyright lines |
Date: |
Sun, 29 Nov 2020 23:49:56 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Hi,
John Soo <jsoo1@asu.edu> skribis:
>>From 6082c559d1200e632b3fb45eb0633d28829667a1 Mon Sep 17 00:00:00 2001
> From: John Soo <jsoo1@asu.edu>
> Date: Thu, 12 Nov 2020 21:16:48 -0800
> Subject: [PATCH 1/2] processes: Put ChildProcess and ChildPID on separate
> lines.
>
> * guix/scripts/processes.scm: Put child process information in
> separate fields.
> * doc/guix.texi: Document change in output of guix processes.
Applied.
>>From becf3a8fee4aea0a49dde47f5728410b97d94fbf Mon Sep 17 00:00:00 2001
> From: John Soo <jsoo1@asu.edu>
> Date: Wed, 4 Nov 2020 07:51:52 -0800
> Subject: [PATCH 2/2] processes: Optionally normalize recutils output.
>
> * guix/scripts/processes.scm: Add "format" and "list-formats" flag.
> * doc/guix.texi: Document new flags.
Applied with the changes below.
I also tweaked the commit logs to list the entities added or modified.
Thanks!
Ludo’.
diff --git a/doc/guix.texi b/doc/guix.texi
index b739464853..fcaa2f2b63 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12884,14 +12884,15 @@ Produce output in the specified @var{format}, one of:
@table @code
@item recutils
The default option. It outputs a set of Session recutils records
-that include each ChildProcess as a field.
+that include each @code{ChildProcess} as a field.
@item normalized
Normalize the output records into record sets (@pxref{Record Sets,,,
recutils, GNU recutils manual}). Normalizing into record sets allows
joins across record types. The example below lists the PID of each
-ChildProcess and the associated PID for Session that spawned the
-ChildProcess where the Session was started using guix build.
+@code{ChildProcess} and the associated PID for @code{Session} that
+spawned the @code{ChildProcess} where the @code{Session} was started
+using @command{guix build}.
@example
$ guix processes --format=normalized | \
@@ -12899,7 +12900,7 @@ $ guix processes --format=normalized | \
-j Session \
-t ChildProcess \
-p Session.PID,PID \
- -e 'Session.ClientCommand ~ "guix build'"
+ -e 'Session.ClientCommand ~ "guix build"'
PID: 4435
Session_PID: 4278
diff --git a/guix/scripts/processes.scm b/guix/scripts/processes.scm
index bcc541badb..87e687852c 100644
--- a/guix/scripts/processes.scm
+++ b/guix/scripts/processes.scm
@@ -338,8 +338,10 @@ List the current Guix sessions and their processes."))
(define-command (guix-processes . args)
(category plumbing)
(synopsis "list currently running sessions")
+
(define options
- (parse-command-line args %options (list %default-options)))
+ (parse-command-line args %options (list %default-options)
+ #:build-options? #f))
(with-paginated-output-port port
(match (assoc-ref options 'format)
--- End Message ---