From 8deef6e10962b91e0d67ef2db6f52a4cfae20f6b Mon Sep 17 00:00:00 2001 From: b4b4r07 Date: Fri, 6 Jan 2017 15:55:01 +0900 Subject: [PATCH] Fix #348 This is because grep may not be able to correctly distinguish tab characters. In order to solve this, added a ltsv parser written by awk. - Fix #326 (see also second commit in P-R #344), fix #348 - Add `__zplug::utils::awk::ltsv function` --- base/job/process.zsh | 6 +++--- base/utils/awk.zsh | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/base/job/process.zsh b/base/job/process.zsh index f98d2f86..bd08e07e 100644 --- a/base/job/process.zsh +++ b/base/job/process.zsh @@ -22,9 +22,9 @@ __zplug::job::process::get_status_code() { fi cat "$_zplug_log[$target]" \ - | grep "^repo:$repo\t" \ - | awk '{print $2}' \ - | cut -d: -f2 + | __zplug::utils::awk::ltsv \ + 'key("repo")=="'"$repo"'"{print key("status")}' + return $status } diff --git a/base/utils/awk.zsh b/base/utils/awk.zsh index ef942bb3..07dc3448 100644 --- a/base/utils/awk.zsh +++ b/base/utils/awk.zsh @@ -64,3 +64,24 @@ __zplug::utils::awk::available() return 1 fi } + +__zplug::utils::awk::ltsv() +{ + local \ + user_awk_script="$1" \ + ltsv_awk_script + + ltsv_awk_script=$(cat <<-'EOS' + function key(name) { + for (i = 1; i <= NF; i++) { + match($i, ":"); + xs[substr($i, 0, RSTART)] = substr($i, RSTART+1); + }; + return xs[name":"]; + } +EOS + ) + + awk -F'\t' \ + "${ltsv_awk_script} ${user_awk_script}" +}