We had some informal discussions on IRC about improving the output of the `whereis` command. [[!toc levels=2]] First version: columns ====================== [[mastensg]] started by implementing a [simple formatter](https://gist.github.com/mastensg/6500982) that would display things in columns [screenshot](http://www.ping.uio.no/~mastensg/whereis.png) Second version: Xs ================== After some suggestions from [[joey]], [[mastensg]] changed the format slightly ([screenshot](http://www.ping.uio.no/~mastensg/whereis2.png)): [[!format txt """ 17:01:34 foo 17:01:34 |bar 17:01:34 ||baz (untrusted) 17:01:34 ||| 17:01:34 XXx 3? img.png 17:01:36 _X_ 1! bigfile 17:01:37 XX_ 2 zort 17:01:39 __x 1?! maybemissing 17:02:09 * joeyh does a s/\?/+/ in the above 17:02:24 and decrements the counters for untrusted 17:03:37 __x 0+! maybemissing """]] Third version: incremental ========================== Finally, [[anarcat]] worked on making it run faster on large repositories, in a [fork](https://gist.github.com/anarcat/6502988) of that first gist. Then paging was added (so headers are repeated). Fourth version: tuning and blocked ================================== [[TobiasTheViking]] provided some bugfixes, and the next step was to implement the trusted/untrusted detection, and have a counter. This required more advanced parsing of the remotes, and instead of starting to do some JSON parsing, [[anarcat]] figured it was time to learn some Haskell instead. Current status: needs merge =========================== So right now, the most recent version of the python script is in [anarcat's gist](https://gist.github.com/anarcat/6502988) and works reasonably well. However, it doesn't distinguish between trusted and untrusted repos and so on. Furthermore, we'd like to see this factored into the `whereis` command directly. A [raw.hs](http://codepad.org/miVJb5oK) file has been programmed by `mastensg`, and is now available in the above gist. It fits the desired output and prototypes, and has been `haskellized` thanks to [[guilhem]]. Now we just need to merge those marvelous functions in `Whereis.hs` - but I can't quite figure out where to throw that code, so I'll leave it to someone more familiar with the internals of git-annex. The most recent version is still in [anarcat's gist](https://gist.github.com/anarcat/6502988). --[[anarcat]] Desired output -------------- The output we're aiming for is: foo |bar ||baz (untrusted) ||| XXx 2+ img.png _X_ 1! bigfile XX_ 2 zort __x 0+! maybemissing Legend: * `_` - file missing from repo * `x` - file may be present in untrusted repo * `X` - file is present in trusted repo * `[0-9]` - number of copies present in trusted repos * `+` - indicates there may be more copies present * `!` - indicates only one copy is left Implementation notes -------------------- [[!format txt """ 20:48:18 if someone writes me a headerWhereis :: [(RemoteName, TrustLevel)] -> String and a formatWhereis :: [(RemoteName, TrustLevel, UUID)] -> [UUD] -> FileName -> String , I can do the rest ;) 20:49:22 make that second one formatWhereis :: [(RemoteName, TrueLevel, Bool)] -> FileName -> String 20:49:37 gah, typos 20:49:45 suppose you don't need the RemoteName either """]] > So, I incorporated this, in a new remotes command. > Showing all known repositories seemed a bit much > (I have 30-some known repositories in some cases), > so just showing configured remotes seems a good simplification. > [[done]] > --[[Joey]]