Message ID | 9ce5ddadf0bb13229461d67451094a373348771e.1723727653.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f037e607a875790dcadbba3f7a8fc185e2877792 |
Headers | show |
Series | git-prompt: support more shells v2 | expand |
On Thu, Aug 15, 2024 at 01:14:06PM +0000, Avi Halachmi (:avih) via GitGitGadget wrote: > From: "Avi Halachmi (:avih)" <avihpit@yahoo.com> > > Here-documend is standard, and works in all shells. > > Both here-string and here-doc add final newline, which is important > in this case, because $output is without final newline, but we do > want "read" to succeed on the last line as well. > > Shells which support here-string: > - bash, zsh, mksh, ksh93, yash (non-posix-mode). > > shells which don't, and got fixed: > - ash-derivatives (dash, free/net bsd sh, busybox-ash). > - pdksh, openbsd sh. > - All Schily Bourne shell variants. > > Signed-off-by: Avi Halachmi (:avih) <avihpit@yahoo.com> > --- > contrib/completion/git-prompt.sh | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh > index 5330e769a72..ebf2e30d684 100644 > --- a/contrib/completion/git-prompt.sh > +++ b/contrib/completion/git-prompt.sh > @@ -137,7 +137,9 @@ __git_ps1_show_upstream () > upstream_type=svn+git # default upstream type is SVN if available, else git > ;; > esac > - done <<< "$output" > + done <<-OUTPUT > + $output > + OUTPUT I was a bit sceptical at first whether this produces the correct output, because I wasn't sure whether the first line might be indented while the others wouldn't be. And that would only happen if we indented with spaces, but when indenting with a tab it seems to work as expected. Patrick > # parse configuration values > local option > -- > gitgitgadget > >
On Friday, August 16, 2024 at 11:50:12 AM GMT+3, Patrick Steinhardt <ps@pks.im> wrote: > On Thu, Aug 15, 2024 at 01:14:06PM +0000, Avi Halachmi (:avih) via GitGitGadget wrote: >> - done <<< "$output" >> + done <<-OUTPUT >> + $output >> + OUTPUT > > I was a bit sceptical at first whether this produces the correct output, > because I wasn't sure whether the first line might be indented while the > others wouldn't be. And that would only happen if we indented with > spaces, but when indenting with a tab it seems to work as expected. That's what the "-" does in "<<-". It strips leading input tab chars at the content and the last line, and was specified as such since the first POSIX release in 1994: If the redirection symbol is <<−, all leading tab characters will be stripped from input lines and the line containing the trailing delimiter.
On Fri, Aug 16, 2024 at 09:37:15AM +0000, avih wrote: > On Friday, August 16, 2024 at 11:50:12 AM GMT+3, Patrick Steinhardt <ps@pks.im> wrote: > > On Thu, Aug 15, 2024 at 01:14:06PM +0000, Avi Halachmi (:avih) via GitGitGadget wrote: > >> - done <<< "$output" > >> + done <<-OUTPUT > >> + $output > >> + OUTPUT > > > > I was a bit sceptical at first whether this produces the correct output, > > because I wasn't sure whether the first line might be indented while the > > others wouldn't be. And that would only happen if we indented with > > spaces, but when indenting with a tab it seems to work as expected. > > That's what the "-" does in "<<-". It strips leading input tab chars > at the content and the last line, and was specified as such since the > first POSIX release in 1994: > > If the redirection symbol is <<−, all leading tab characters will > be stripped from input lines and the line containing the trailing > delimiter. Oh, I know what `<<-` does. I just wasn't sure how it would behave when "$output" expands to a multi-line string, where subsequent expanded lines might or might not be indented. Patrick
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index 5330e769a72..ebf2e30d684 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -137,7 +137,9 @@ __git_ps1_show_upstream () upstream_type=svn+git # default upstream type is SVN if available, else git ;; esac - done <<< "$output" + done <<-OUTPUT + $output + OUTPUT # parse configuration values local option