Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: vcs_info: '%' in payloads not escaped

Coming back to this thread...

Bart Schaefer wrote on Fri, Jan 06, 2017 at 09:27:11 -0800:
> I'm not very familiar with VCS_info.  Frank seemed concerned that the
> same variable might contain substrings both from git output that
> had one set of quoting needs and also from other sources that had
> another set of quoting needs.

That's exactly what happens.

The code flow is:

     1	if gen-applied-string hook is active:
     2	    applied_string=$(what the hook returns)
     3	else:
     4	    applied_string="literal value from the VCS"
     6	if set-patch-format hook is active:
     7	    hook_com[applied]=$applied_string
     8	    percent_m=$(what the hook returns)
     9	else:
    10	    percent_m=$(zformat ... p:${applied_string})
    12	VCS_INFO_formats … $percent_m

The catch is that both hooks have access to $applied_string, and either
of them might %-escape it and added prompt sequences (e.g., for
coloring) around it.  That is: once gen-applied-string has run, we don't
know whether it has already %-escaped the string it returns, and by
extension we don't know whether set-patch-format expects its
${hook_com[applied]} input to be literal or %-escaped.

So perhaps what we _can_ do is:

1) If *neither* hook was called, have vcs_info itself perform %-escaping
appropriately.  (That is: perform escaping on line 7 iff line 4 was

2) Document that if *either* hook is registered, then handling
%-escaping is up to the user.

Would that address everyone's concerns?


(optimizing for backwards compatibility)

Messages sorted by: Reverse Date, Date, Thread, Author