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

regex matching regression in 5.0.0 vs. 4.3.17



Hey,

I've been using the following two lines inside a function whose output
is used in PS1. Basically: PS1="...$(parse_git_branch)..."

And the lines I'm talking about:

function parse_git_branch {
  git_dir="$(git rev-parse --git-dir 2> /dev/null)"
  branch_pattern="\*\s+([^${IFS}]+)"
  no_branch_pattern="\*\s+\(no branch\)"

  if [[ ${git_status} =~ ${no_branch_pattern} ]]; then
    branch="detached"
  elif [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch="${match[1]}"
  elif [[ -f ${git_dir}/BISECT_LOG ]]; then
    branch="${CLR_LIGHT_CYAN}bisecting"
  fi

  if [[ ! -z ${branch} ]]; then
    echo " (${branch})"
  fi
}

The idea is to get the current branch name if I'm inside a git repository.

This worked nicely with zsh 4.3.17 on my Ubuntu.

Now I wanted to use that same function on Arch Linux which is already
at zsh 5.0.0 and got the following error:

  parse_git_branch:8: failed to compile regex: Unmatched [ or [^

Turned out it didn't like the ${IFS} inside the pattern (never mind
the line number discrepency, I've cut out some other stuff from the
function).

I also made sure that this isn't Arch Linux specific by compiling zsh
5.0.0 from source on my Ubuntu machine (the one which usually runs
4.3.17). Same issue.

Replacing ${IFS} with \n gets rid of the error but does something
different than it did before if more than one local branch exists in a
git repository. Instead of just the current line ${match[1]} contains
everything starting from the current line until the end. Probably
because I don't escape that newline character properly.

So... any pointers? I'll try to bisect the actual change that caused
this, might take some time though.

Kind regards,
mosu



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