File: day_297__optparse-applicative.mdwn

package info (click to toggle)
git-annex 6.20170101-1%2Bdeb9u2
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 50,088 kB
  • sloc: haskell: 53,116; sh: 1,582; ansic: 341; makefile: 292; perl: 144
file content (25 lines) | stat: -rw-r--r-- 1,239 bytes parent folder | download | duplicates (8)
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
Now working on converting git-annex to use
[optparse-applicative](https://github.com/pcapriotti/optparse-applicative)
for its command line parsing. I've wanted to do this for a long time, 
because the current code for options is generally horrible, runs in
IO, and is not at all type safe, while optparse-applicative has wonderful
composable parsers and lets each subcommand have its own data type
repesenting all its options.

What pushed me over the edge is that optparse-applicative has automatic
bash completion!

	# source <(git-annex --bash-completion-script `which git-annex`)
	# git-annex fsck -
	--all                   --key                   -S
	--from                  --more                  -U

Since nobody has managed to write a full bash completion for git-annex
before, let alone keep it up-to-date with changes to the code, automating
the problem away is a really nice win. :)

The conversion is a rather huge undertaking; the diff is already over 3000
lines large after 8 hours of work, and I'm maybe 1/3rd done, with
the groundwork laid (except for global options still todo) and a few
subcommands  converted. This won't land for this week's release; it'll
need a lot of testing before it'll be ready for any release.