I understand that requiring the `path` to be the first argument simplifies the argument parsing a little bit, but I'm worried that this `blame` example handles arguments so differently from actual `git blame` that it could cause some confusion.

One alternative approach might be to keep an array of up to three arguments that are not prefixed with `-`. If parsing finds more than three, pop up `usage()`. After parsing, assume the last element of the array is the path and if there are any preceding elements, those are the commit range (as either one element or two). Does that make any sense?

I don't think this would be much more code and I think it will make the argument handling closer to compatible with core Git. Ideally, I'd love to be able to take most of the simple examples from the `git blame` docs and run them (provided they use simple options that we support).