1
0
Fork 0
mirror of https://github.com/zdharma-continuum/fast-syntax-highlighting.git synced 2025-02-25 01:29:29 +01:00
fast-syntax-highlighting/-fast-run-git-command

43 lines
1.8 KiB
Bash

# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# Copyright (c) 2018 Sebastian Gniazdowski
#
# It runs given command, which in general will be a git command,
# automatically looking at cache first (a field named *-cache,
# in FAST_HIGHLIGHT), which is valid for 5 seconds, and in case
# of outdated or not existing cache, runs the command, splitting
# on new-lines, first checking if PWD is inside git repository.
#
# FAST_HIGHLIGHT hash serves as container for variables that
# prevents creating them in global scope. (P) flag is not used,
# output array is fixed (__lines_list).
#
# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is
# added automatically
# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two
# additional fields will be used, $2-cache, $2-cache-born-at
# $3 - what to remove from beginning of the lines returned by the
# command
# $4 - cache validity time, default 5 (seconds)
#
# Output: array __lines_list, with output of the (git) command ran
# User should not forget to define this array, the below code
# will only ensure that it's array (can also define a global)
typeset -ga __lines_list
if [[ -z "${FAST_HIGHLIGHT[$2-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then
FAST_HIGHLIGHT[$2-cache-born-at]="$EPOCHSECONDS"
if [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then
__lines_list=( ${${(f)"$(${(Qz)1} 2>/dev/null)"}#$3} )
else
__lines_list=()
fi
FAST_HIGHLIGHT[$2-cache]="${(j:;:)__lines_list};"
else
# Quoted (s:;:) flag without @ will skip empty elements. It
# still produces array output, interesingly. All this is for
# the trailing ";" above, to skip last, empty element.
__lines_list=( "${(s:;:)FAST_HIGHLIGHT[$2-cache]}" )
fi
# vim:ft=zsh:et:sw=4