OK, it's time to get serious about updating Patterns in Polymer and finishing the screencasts. But where to start? I know what needs to be done for the screencasts: record them (the upcoming long US weekend should help there). But how best to focus my efforts on the chapters in the book?
Working through each chapter based on last modified date seems the best bet, but all of the chapter files on my filesystem have the same last modified timestamp:
$ ls -l *asc ... -rw-r--r-- 1 chris chris 13163 Jun 28 10:06 i18n.asc -rw-r--r-- 1 chris chris 5213 Jun 28 10:06 live_reload.asc -rw-r--r-- 1 chris chris 10713 Jun 28 10:06 mdv.asc -rw-r--r-- 1 chris chris 7917 Jun 28 10:06 plain_old_forms.asc -rw-r--r-- 1 chris chris 12495 Jun 28 10:06 polymer.asc -rw-r--r-- 1 chris chris 794 Jun 28 10:06 strategy.ascEither I made a very large commit on June 28 at 10:06 or that was the last time that I checked these files out fresh (either from a new clone or switching from a sparse branch).
In fact, the last time that I updated the i18n chapter was back in April (yikes!):
$ git log i18n.asc | head -5 commit 030968dff38794ba7e20fa3ae839fc62a999eee2 Author: Chris StromSo how do I go about sorting by the last-modified-in-git date? That turns out to be tricky. Thankfully, there is a nice Stack Overflow post on the subject.
Date: Sun Apr 20 23:39:09 2014 -0400 Fix up i18n copy and code
The date timestamp from that article will not help sorting, but ISO 8601 will. Happily, git-log supports logging with ISO 8601:
$ git log -1 --date=iso --format="%ad" i18n.asc 2014-04-20 23:39:09 -0400It have the feeling that I would like to use this again, so I will create a git subcommand:
git-lslt(similar to the usual
ls -lt). Git subcommands are trivial—I need only a script prefixed with
git-. So I create
#!/bin/sh ls | \ while read filename; do echo "$(git log -1 --date=iso --format="%ad" -- $filename) $filename" done | \ grep '^2' | \ sortMost of that is from the Stack Overflow article. The
sortis self-explanatory. The
grep '^2'selects only entries with date stamps—meaning that files not tracked by git will be ignored.
The output looks like:
$ git lslt 2013-11-16 16:26:38 -0500 about.asc 2013-11-16 16:26:38 -0500 chapter_1.asc 2013-11-16 17:51:48 -0500 getting_help.asc 2014-01-14 19:58:38 -0500 book_dart.asc 2014-01-14 19:58:38 -0500 book_js.asc 2014-02-12 02:52:49 -0500 copyright.asc ...Most of that is boilerplate code that never needs an update. I suspect that the "about" file has since been absorbed into the introduction and can be deleted.
After grepping the output a bit more, I find a few surprises:
$ git lslt | \ grep .asc | \ grep -v 'chapter_1\|contents\|copyright\|book.*.asc\|bibliography' ... 2014-02-14 01:13:27 -0500 parent_events.asc 2014-02-15 01:16:04 -0500 parent_child.asc 2014-02-15 01:16:04 -0500 svg.asc 2014-02-15 16:12:16 -0500 configuration.asc ...I am surprised that the parent events and parent-child chapters have not been updated. I could have sworn that I got (and incorporated) feedback on at least one of those. The configuration chapter has since been removed (possibly permanently), so that is no surprise. But I have learned a ton about SVG since February—I am quite surprised that I have not included any of that knowledge in that chapter.
git lsltsubcommand has already paid some nice dividends. I know where I need to focus my initial update/rewrite efforts. Starting tomorrow.