1
0
mirror of https://github.com/zplug/zplug synced 2025-04-09 09:09:08 +02:00

Add __zplug::core::cache::commit

This commit is contained in:
b4b4r07 2016-11-28 01:24:36 +09:00
parent d6d1bb0d6e
commit eabcfb8842
5 changed files with 182 additions and 166 deletions

@ -29,5 +29,6 @@ done
rm -rf \
"$ZPLUG_CACHE_FILE" \
"$ZPLUG_CACHE_FILE/cache" \
"$ZPLUG_HOME/zcompdump" \
"$ZPLUG_HOME/zcompdump.zwc"

@ -1,28 +1,20 @@
#!/bin/zsh
#!/usr/bin/env zsh
# Description:
# Source installed plugins and add installed commands to $PATH
# Check if cache is up-to-date
if __zplug::core::cache::loadable; then
echo "zplug: load from cache"
__zplug::core::load::cache
return $status
fi
local repo
local repo arg
local -a repos
local is_verbose=false
local arg
local -A tags
local -F SECONDS
repos=(
"${(k)zplugs[@]}"
)
repos=( "${(k)zplugs[@]}" )
while (( $# > 0 ))
do
arg="$1"
case "$arg" in
--verbose)
is_verbose=true
zstyle ':zplug:core:load' verbose yes
;;
-*|--*)
__zplug::core::options::unknown "$arg"
@ -42,30 +34,14 @@ do
shift
done
if [[ -f $ZPLUG_CACHE_FILE ]]; then
rm -rf "$ZPLUG_CACHE_FILE"
# Check if cache is up-to-date
if __zplug::core::cache::loadable; then
return 0
fi
mkdir -p "$ZPLUG_CACHE_FILE"
rm -f "$_zplug_cache[before_plugin]"
rm -f "$_zplug_cache[after_plugin]"
rm -f "$_zplug_cache[plugin]"
rm -f "$_zplug_cache[lazy_plugin]"
rm -f "$_zplug_cache[theme]"
rm -f "$_zplug_cache[command]"
rm -f "$_zplug_cache[fpath]"
rm -f "$_zplug_cache[hook-load]"
touch "$_zplug_cache[before_plugin]"
touch "$_zplug_cache[after_plugin]"
touch "$_zplug_cache[plugin]"
touch "$_zplug_cache[lazy_plugin]"
touch "$_zplug_cache[theme]"
touch "$_zplug_cache[command]"
touch "$_zplug_cache[fpath]"
touch "$_zplug_cache[hook-load]"
local -F SECONDS
set +m
for repo in "$repos[@]"
__zplug::core::load::prepare
for repo in "${repos[@]}"
do
# Generate cache for each as:type in parallel
{
@ -89,7 +65,6 @@ do
--func \
"as tag is invalid value (%s)\n" \
"$fg[green]$repo$reset_color"
return 1
;;
esac
#echo "$repo ($SECONDS) - $tags[as]"
@ -97,6 +72,7 @@ do
done
wait
zstyle ':zplug:core:load' verbose no
# Load packages from cache
__zplug::core::load::cache --verbose
__zplug::core::load::from_cache
return $status

@ -1,10 +1,117 @@
__zplug::core::cache::expose()
{
if [[ -f $ZPLUG_HOME/.cache/cache ]]; then
cat "$ZPLUG_HOME/.cache/cache"
fi
}
__zplug::core::cache::update()
{
__zplug::core::interface::expose \
>|"$ZPLUG_HOME/.cache/cache"
}
__zplug::core::cache::commit()
{
local pkg hook pair
local -A hook_load
local -A reply_hash
local -A load_commands
local -aU load_plugins load_fpaths lazy_plugins nice_plugins
local -aU unclassified_plugins
reply_hash=( "$argv[@]" )
lazy_plugins=( ${(@f)reply_hash[lazy_plugins]} )
load_fpaths=( ${(@f)reply_hash[load_fpaths]} )
load_plugins=( ${(@f)reply_hash[load_plugins]} )
load_themes=( ${(@f)reply_hash[load_themes]} "$unclassified_plugins[@]" )
nice_plugins=( ${(@f)reply_hash[nice_plugins]} )
unclassified_plugins=( ${(@f)reply_hash[unclassified_plugins]} )
for pair in ${(@f)reply_hash[load_commands]}
do
load_commands+=( ${(@s:\0:)pair} ) # Each line (pair) is null character-separated
done
for pair in ${(@f)reply_hash[hook_load]}
do
hook_load+=( ${(@s:\0:)pair} ) # Each line (pair) is null character-separated
done
# Record packages to cache file
if (( $#load_plugins > 0 )); then
for pkg in "$load_plugins[@]"
do
__zplug::job::state::flock "$_zplug_cache[plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#nice_plugins > 0 )); then
for pkg in "$nice_plugins[@]"
do
__zplug::job::state::flock "$_zplug_cache[before_plugin]" "source ${(qqq)pkg}"
__zplug::job::state::flock "$_zplug_cache[after_plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#lazy_plugins > 0 )); then
for pkg in "$lazy_plugin[@]"
do
__zplug::job::state::flock "$_zplug_cache[lazy_plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#load_fpaths > 0 )); then
for pkg in "$load_fpaths[@]"
do
__zplug::job::state::flock "$_zplug_cache[fpath]" "fpath+=(${(qqq)pkg})"
done
fi
if (( $#hook_load > 0 )); then
for hook in "${(k)hook_load[@]}"
do
__zplug::job::state::flock "$_zplug_cache[hook-load]" "$hook_load[$hook]"
done
fi
if (( $#load_commands > 0 )); then
for pkg in "${(k)load_commands[@]}"
do
__zplug::job::state::flock "$_zplug_cache[command]" "chmod 755 ${(qqq)pkg}"
__zplug::job::state::flock "$_zplug_cache[command]" "ln -snf ${(qqq)pkg} ${(qqq)load_commands[$pkg]}"
done
fi
if (( $#load_themes > 0 )); then
for pkg in "$load_themes[@]"
do
__zplug::job::state::flock "$_zplug_cache[theme]" "source ${(qqq)pkg}"
done
fi
}
__zplug::core::cache::loadable()
{
# Check if cache is up-to-date
local key
$ZPLUG_USE_CACHE || return 2
if [[ -e $ZPLUG_CACHE_FILE ]]; then
# TODO:
return 0
2> >(__zplug::io::log::capture) >/dev/null \
diff -b \
<(__zplug::core::cache::expose) \
<(__zplug::core::interface::expose)
case $status in
0)
# same
__zplug::core::load::from_cache
return $status
;;
1)
# differ
;;
2)
# error
;;
esac
fi
# if cache file doesn't find,
# returns non-zero exit code
return 1
}
@ -12,12 +119,6 @@ __zplug::core::cache::plugins()
{
local repo="${1:?}"
local -A tags
local -aU unclassified_plugins
local -aU load_plugins load_fpaths lazy_plugins nice_plugins
local -aU ignore_patterns
local -A reply_hash
local -A hook_load
local pkg hook
__zplug::core::tags::parse "$repo"
tags=( "${reply[@]}" )
@ -64,54 +165,8 @@ __zplug::core::cache::plugins()
"load_plugin" \
"$tags[from]" \
"$repo"
reply_hash=( "$reply[@]" )
# Temporary array until files get sorted into
# {load,lazy,nice}_plugins
unclassified_plugins=( ${(@f)reply_hash[unclassified_plugins]} )
# Plugins
load_plugins=( ${(@f)reply_hash[load_plugins]} )
lazy_plugins=( ${(@f)reply_hash[lazy_plugins]} )
nice_plugins=( ${(@f)reply_hash[nice_plugins]} )
# fpath
load_fpaths=( ${(@f)reply_hash[load_fpaths]} )
for pair in ${(@f)reply_hash[hook_load]}
do
hook_load+=( ${(@s:\0:)pair} )
done
if (( $#load_plugins > 0 )); then
for pkg in "$load_plugins[@]"
do
__zplug::job::state::flock "$_zplug_cache[plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#nice_plugins > 0 )); then
for pkg in "$nice_plugins[@]"
do
__zplug::job::state::flock "$_zplug_cache[before_plugin]" "source ${(qqq)pkg}"
__zplug::job::state::flock "$_zplug_cache[after_plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#lazy_plugins > 0 )); then
for pkg in "$lazy_plugin[@]"
do
__zplug::job::state::flock "$_zplug_cache[lazy_plugin]" "source ${(qqq)pkg}"
done
fi
if (( $#load_fpaths > 0 )); then
for pkg in "$load_fpaths[@]"
do
__zplug::job::state::flock "$_zplug_cache[fpath]" "fpath+=(${(qqq)pkg})"
done
fi
if (( $#hook_load > 0 )); then
for hook in "${(k)hook_load[@]}"
do
__zplug::job::state::flock "$_zplug_cache[hook-load]" "$hook_load[$hook]"
done
fi
__zplug::core::cache::commit "$reply[@]"
fi
}
@ -119,14 +174,6 @@ __zplug::core::cache::commands()
{
local repo="${1:?}"
local -A tags
local -aU unclassified_plugins
local -aU ignore_patterns
local -A reply_hash
local -A load_commands
local pkg hook
local pair
local -aU load_plugins load_fpaths lazy_plugins nice_plugins
local -A hook_load
__zplug::core::tags::parse "$repo"
tags=( "${reply[@]}" )
@ -172,40 +219,8 @@ __zplug::core::cache::commands()
"load_command" \
"$tags[from]" \
"$repo"
reply_hash=( "$reply[@]" )
load_fpaths+=( ${(@f)reply_hash[load_fpaths]} )
for pair in ${(@f)reply_hash[load_commands]}
do
# Each line (pair) is null character-separated
load_commands+=( ${(@s:\0:)pair} )
done
for pair in ${(@f)reply_hash[hook_load]}
do
hook_load+=( ${(@s:\0:)pair} )
done
if (( $#load_commands > 0 )); then
for pkg in "${(k)load_commands[@]}"
do
__zplug::job::state::flock "$_zplug_cache[command]" "chmod 755 ${(qqq)pkg}"
__zplug::job::state::flock "$_zplug_cache[command]" "ln -snf ${(qqq)pkg} ${(qqq)load_commands[$pkg]}"
done
fi
if (( $#load_fpaths > 0 )); then
for pkg in "$load_fpaths[@]"
do
__zplug::job::state::flock "$_zplug_cache[fpath]" "fpath+=(${(qqq)pkg})"
done
fi
if (( $#hook_load > 0 )); then
for hook in "${(k)hook_load[@]}"
do
__zplug::job::state::flock "$_zplug_cache[hook-load]" "$hook_load[$hook]"
done
fi
__zplug::core::cache::commit "$reply[@]"
fi
}
@ -213,12 +228,6 @@ __zplug::core::cache::themes()
{
local repo="${1:?}"
local -A tags
local -aU unclassified_plugins
local -aU load_plugins load_fpaths lazy_plugins nice_plugins
local -aU ignore_patterns
local -A reply_hash
local pkg hook
local -A hook_load
__zplug::core::tags::parse "$repo"
tags=( "${reply[@]}" )
@ -265,26 +274,9 @@ __zplug::core::cache::themes()
"load_theme" \
"$tags[from]" \
"$repo"
reply_hash=( "$reply[@]" )
load_themes=( ${(@f)reply_hash[load_themes]} "$unclassified_plugins[@]" )
for pair in ${(@f)reply_hash[hook_load]}
do
hook_load+=( ${(@s:\0:)pair} )
done
if (( $#load_themes > 0 )); then
for pkg in "$load_themes[@]"
do
__zplug::job::state::flock "$_zplug_cache[theme]" "source ${(qqq)pkg}"
done
fi
if (( $#hook_load > 0 )); then
for hook in "${(k)hook_load[@]}"
do
__zplug::job::state::flock "$_zplug_cache[hook-load]" "$hook_load[$hook]"
done
fi
__zplug::core::cache::commit "$reply[@]"
fi
setopt prompt_subst
}

11
base/core/interface.zsh Normal file

@ -0,0 +1,11 @@
__zplug::core::interface::expose()
{
local name
for name in "${(ok)zplugs[@]}"
do
# In order to sort $zplugs[$name],
# do not quate this string
echo "${name}${zplugs[$name]:+, ${(os:, :)zplugs[$name]}}"
done
}

@ -1,5 +1,36 @@
__zplug::core::load::cache()
__zplug::core::load::prepare()
{
unsetopt monitor
if [[ -f $ZPLUG_CACHE_FILE ]]; then
rm -rf "$ZPLUG_CACHE_FILE"
fi
mkdir -p "$ZPLUG_CACHE_FILE"
local file
for file in "${(k)_zplug_cache[@]}"
do
rm -f "$_zplug_cache[$file]"
touch "$_zplug_cache[$file]"
done
}
__zplug::core::load::from_cache()
{
local is_verbose=false
zstyle -s ':zplug:core:load' verbose is_verbose
if (( $_zplug_boolean_true[(I)$is_verbose] )); then
__zplug::io::print::f \
--zplug \
"$fg[yellow]Load from cache$reset_color\n"
fi
# Default
setopt monitor
# Load the cache in order
{
source "$_zplug_cache[fpath]"
@ -11,20 +42,25 @@ __zplug::core::load::cache()
compinit -C -d /Users/b4b4r07/.zplug/zcompdump
source "$_zplug_cache[before_plugin]"
source "$_zplug_cache[after_plugin]"
} #&>/dev/null
} &>/dev/null
# Cache in background
{
__zplug::core::cache::update
} &!
}
__zplug::core::load::plugins()
__zplug::core::load::as_plugin()
{
:
}
__zplug::core::load::commands()
__zplug::core::load::as_command()
{
:
}
__zplug::core::load::themes()
__zplug::core::load::as_theme()
{
:
}