Jacob Keller <jacob.keller@xxxxxxxxx> writes: >> + are left behind. If a displayed ref has fewer components than >> + `<N>`, the command aborts with an error. >> > > Would it make more sense to not die and instead just return the empty > string? On the one hand, if we die() it's obvious that you tried to > strip too many components. But on the other hand, it's also somewhat > annoying to have the whole command fail because we happen upon a > single ref that has fewer components? > > So, for positive numbers, we simply strip what we can, which may > result in the empty string, and for negative numbers, we keep up to > what we said, while potentially keeping the entire string. I feel > that's a better alternative than a die() in the middle of a ref > filter.. > > What are other people's thoughts on this? There probably are three ways to handle a formatting request that cannot be satisfied for some refs but not others [*1*]. I agree with you that dying the whole thing is probably the least useful one. We already format "%(taggername)" into an empty string when the ref points at an object that is not an annotated tag, and substituting an unsatisifiable request "%(refname:lstrip=N)" with an empty string for a ref whose name does not have enough number of components is in line with that existing practice. The other possibility is to omit refs that cannot be formatted according to the format specifier. We do not currently have provision for doing so, but it may not be bad if we can say: $ git for-each-ref \ --require="%(taggername)" \ --require="%(refname:lstrip=4)" \ --format="%(refname:short)" \ refs/tags/ to list _only_ annotated tags that has at least 4 components from refs/tags/ hierarchy. The "--require" thing obviously is an orthogonal feature, that nobody has asked for, and does not have to exist. For the purpose of this review thread, I think it is OK to just conclude: "--format" should replace "%(any unsatisifiable atom)" with an empty string. Thanks. [Footnote] *1* A malformed formatting request (e.g. %(if) that is not closed) cannot be satisified but that is true for all refs and is outside of the scope of this discussion. The command should die and I think it already does.