Jakub Narebski wrote: > Shawn Pearce wrote: > >> There was just a short conversation on #git about converting >> the sha1 expression evaluator into a split parser/interpreter >> model. The idea here would be to convert an expression such as >> >> HEAD@{yesterday}~3^{tree} >> >> into a an expression tree such as (in LISP style): >> >> (peel-onion (walk-back 3 (date-spec yesterday (ref HEAD)))) >> >> with such a tree it is relatively easy to evaluate the expression, >> but its also easy to determine if a ref name is valid. Just pass >> it through the parser and see if you get back anything more complex >> then '(ref <input>)'. > > Didn't you meant to see if we get correct tree (not a forest), > and if the root of said tree is '(ref <commit-ish>)' [1]? I'm sorry. Of course branch names (ref names) should be limited to the ones that doesn't make problems for the parser, i.e. they should parse to single element parse tree: <input> ---parses to---> (ref <input>) and doesn't give problems for other parsers (e.g.commit list parser including '^A B' and 'A..B'; remotes branch mapping parser 'srcref:destref' and '+srcref:destref') and shell (e.g. globbing). P.S. Hmmm... is '--' branch name (heads/--) possible? P.P.S. Would branch name which include '!' and/or '$' cause trouble? -- Jakub Narebski Warsaw, Poland - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html