1
0

zsh: update git functions

This commit is contained in:
Konstantin Demin 2024-02-12 12:07:41 +03:00
parent d65860c0ac
commit 8af457ab05
Signed by: krd
GPG Key ID: 1F33CB0BA4731BC6

View File

@ -1,25 +1,31 @@
#!/bin/zsh #!/bin/zsh
git-dir-usage() { git-dir-usage() {
local d x p local gitdir x topdir
d=$(__z_git rev-parse --git-dir) || return $? gitdir=$(__z_git rev-parse --git-dir) || return $?
x=$(__z_git rev-parse --path-format=absolute 2>/dev/null) x=$(__z_git rev-parse --path-format=absolute 2>/dev/null) || return $?
if [ -n "$x" ] ; then if [ -n "$x" ] ; then
## older git version which does not support "--path-format=absolute" ## older git version which does not support "--path-format=absolute"
: : TODO
else else
d=$(__z_git rev-parse --path-format=absolute --git-dir) gitdir=$(__z_git rev-parse --path-format=absolute --git-dir) || return $?
fi fi
case "$d" in case "${gitdir}" in
*/* ) p=${d%/*} ; d=${d:t} ;; */* ) topdir=${gitdir:h} ; gitdir=${gitdir:t} ;;
esac esac
## ${p:+ env -C "$p" } du -d2 "$d" local -a subdirs
if [ -n "$p" ] ; then subdirs+="${gitdir}/logs/refs"
env -C "$p" du -d2 "$d" subdirs+="${gitdir}/objects/info"
subdirs+="${gitdir}/objects/pack"
if [ -n "${topdir}" ] ; then
env -C "${topdir}" du -d1 "${gitdir}"
env -C "${topdir}" du -d1 "${subdirs[@]}"
else else
du -d2 "$d" du -d1 "${gitdir}"
du -d1 "${subdirs[@]}"
fi | grep -Ev '^[0-9]\s' | sort -Vk2 fi | grep -Ev '^[0-9]\s' | sort -Vk2
} }
@ -34,3 +40,15 @@ git-gc() {
git-gc-force() { git-gc-force() {
git-gc --aggressive --force git-gc --aggressive --force
} }
git-archive-ref() {
local name ver gitref topdir c_hash c_time out
name="${1:?}" ver="${2:?}" gitref="${3:?}"
topdir=$(__z_git rev-parse --show-toplevel) || return $?
c_hash=$(__z_git log -n 1 --format='%h' --abbrev=8 "${gitref}") || return $?
c_time=$(__z_git log -n 1 --format='%cd' --date='format:%Y%m%d.%H%M%S' "${gitref}") || return $?
out="${name}_${ver}+git.${c_time}.${c_hash}.tar"
topdir=${topdir:h}
git archive --format=tar -o "${topdir}/${out}" --prefix="${name}-${ver}-git.${c_hash}/" "${gitref}" || return $?
echo "archived to ${out} in ${topdir}/" >&2
}