diff options
Diffstat (limited to 'appl/cmd/install/info.b')
| -rw-r--r-- | appl/cmd/install/info.b | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/appl/cmd/install/info.b b/appl/cmd/install/info.b new file mode 100644 index 00000000..1c95128f --- /dev/null +++ b/appl/cmd/install/info.b @@ -0,0 +1,73 @@ +implement Info; + +include "sys.m"; + sys: Sys; +include "draw.m"; +include "bufio.m"; + bufio: Bufio; + Iobuf: import bufio; +include "daytime.m"; + daytime: Daytime; +include "arg.m"; + arg: Arg; +include "wrap.m"; + wrap : Wrap; + +Info: module{ + init: fn(nil: ref Draw->Context, nil: list of string); +}; + +root : string; + +TYPLEN : con 4; +typestr := array[TYPLEN] of { "???", "package", "update", "full update" }; + +fatal(err : string) +{ + sys->fprint(sys->fildes(2), "%s\n", err); + raise "fail:error"; +} + +init(nil: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + bufio = load Bufio Bufio->PATH; + daytime = load Daytime Daytime->PATH; + arg = load Arg Arg->PATH; + wrap = load Wrap Wrap->PATH; + wrap->init(bufio); + + arg->init(args); + while ((c := arg->opt()) != 0) { + case c { + 'r' => + root = arg->arg(); + if (root == nil) + fatal("missing root name"); + * => + fatal(sys->sprint("bad argument -%c", c)); + } + } + args = arg->argv(); + if (args == nil || tl args != nil) + fatal("usage: install/info [-r root] package"); + w := wrap->openwraphdr(hd args, root, nil, 0); + if (w == nil) + fatal("no such package found"); + tm := daytime->text(daytime->local(w.tfull)); + sys->print("%s (complete as of %s)\n", w.name, tm[0:28]); + for (i := w.nu; --i >= 0;) { + typ := w.u[i].typ; + if (typ < 0 || typ >= TYPLEN) + sys->print("%s", typestr[0]); + else + sys->print("%s", typestr[typ]); + sys->print(" %s", wrap->now2string(w.u[i].time, 0)); + if (typ & wrap->UPD) + sys->print(" updating %s", wrap->now2string(w.u[i].utime, 0)); + if (w.u[i].desc != nil) + sys->print(": %s", w.u[i].desc); + sys->print("\n"); + } + wrap->end(); +} |
