On Fri, Jul 07, 2017 at 05:06:10AM -0400, Jeff King wrote: > +test_expect_failure 'walking multiple reflogs shows all' ' > + # We expect to see all entries for all reflogs, but interleaved by > + # date, with order no the command line breaking ties. We > + # can use "sort" on the separate lists to generate this, > + # but note two tricks: > + # > + # 1. We use "{" as the delimiter, which lets us skip to the reflog > + # date specifier as our second field, and then our "-n" numeric > + # sort ignores the bits after the timestamp. > + # > + # 2. POSIX leaves undefined whether this is a stable sort or not. So > + # we use "-k 1" to ensure that we see HEAD before master before > + # side when breaking ties. > + { > + do_walk --date=unix HEAD && > + do_walk --date=unix side && > + do_walk --date=unix master > + } >expect.raw && > + sort -t "{" -k 2nr -k 1 <expect.raw >expect && I won't lie; the contortions needed for this "sort" made me a little sick to my stomach. It would be much easier if we could do something like: git log -g --format="%gt %gd" and just get the reflog timestamp separately. But we never added %gt, so we'd have to munge it with sed or perl. One thing that perl would buy is that we could rely on a stable sort, and ask for an order besides alphabetical. I.e., we could ask for: do_walk side master HEAD and confirm that "side" comes before "HEAD", even though it doesn't byte-wise sort. I didn't think writing a perl snippet was worth the trouble for that minor benefit, though probably it would be shorter than the comment I needed to explain the "sort" invocation. ;) -Peff