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

Re: [BUG] String equal when compared, processed differently via //

It's easy to test as a minimal test case, actually. If one will get
along with the complicated git format – %x01 is just $'\1'.

I attach minimal.zsh. It reveals bug when extendedglob is added to
emulate -LR zsh. Just to be run in any git directory, hoping that any
log message will have "(HEAD -> master, origin/master)" at top.
Interestingly, --max-count=1 instead of 2 stops the bug.

Example runs in two different repositories:

15f1acdUpdated README.md (HEAD -> master, origin/master)4 days
agoSebastian Gniazdowski
0280384Information on source of *foo*~^*bar*4 days agoSebastian Gniazdowski
15f1acd 'Updated README.md'
0280384 'Information on source of *foo*~^*bar*' >< '4 days ago'
Sebastian Gniazdowski

e6d9a0eA stub for uizcm, with binding (^O^U) (HEAD -> master)3 hours
agoSebastian Gniazdowski
feb4624myctags: Message about recompilation request (origin/master)3
hours agoSebastian Gniazdowski
e6d9a0e 'A stub for uizcm, with binding (^O^U)'
feb4624 'myctags: Message about recompilation request' >
(origin/master)< '3 hours ago' Sebastian Gniazdowski

It can be seen that third line doesn't have (HEAD -> master) etc.

Attached code:


#!/usr/bin/env zsh

emulate -LR zsh
setopt extendedglob

gitcmd=( git log --max-count=2
--pretty=format:'%h%x01%s%x02%d%x03%cr%x04%an' --abbrev-commit )
gitout=( "${(@f)"$( "${gitcmd[@]}" )"}" )

print -rl -- "${gitout[@]}"

gitout=( "${gitout[@]//(#b)([^$'\1']#)$'\1'([^$'\2']#)$'\2'([^$'\3']#)$'\3'([^$'\4']#)$'\4'(*)/${match[1]}
${(q-)match[2]}} >${match[3]}< ${(q-)match[4]} ${match[5]}" )

print -rl -- "${gitout[@]}"

Attachment: minimal.zsh
Description: Binary data

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