summaryrefslogtreecommitdiff
path: root/doc/todo/nicer_whereis_output.mdwn
blob: bfcfa73e5844bb054450ef3fb5249bc2d026b8fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 <joeyh> foo
17:01:34 <joeyh> |bar
17:01:34 <joeyh> ||baz (untrusted)
17:01:34 <joeyh> |||
17:01:34 <joeyh> XXx 3?  img.png
17:01:36 <joeyh> _X_ 1!  bigfile
17:01:37 <joeyh> XX_ 2   zort
17:01:39 <joeyh> __x 1?! maybemissing
17:02:09 * joeyh does a s/\?/+/ in the above
17:02:24 <joeyh> and decrements the counters for untrusted
17:03:37 <joeyh> __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 <joeyh> 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 <joeyh> make that second one formatWhereis :: [(RemoteName, TrueLevel, Bool)] -> FileName -> String
20:49:37 <joeyh> gah, typos
20:49:45 <joeyh> 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]]