dotfiles

:)
git clone https://git.sr.ht/~ashymad/dotfiles
Log | Files | Refs | Submodules | LICENSE

src-git (1303B)


      1 #!/bin/sh
      2 
      3 disp() {
      4     tr '\n' '\0' | xargs -0 -I '{}' printf "\x1b[2K%-25s %.60s\r" "$1" '{}'
      5 }
      6 
      7 for dir in ~/.usr/src/*; do
      8     [ -d "$dir"/.git ] || continue
      9 
     10     if git -C "$dir" symbolic-ref -q HEAD >/dev/null; then
     11         [ "$1" = "-u" ] && git -C "$dir" remote -v update 2>&1 | disp "$(basename $dir)"
     12         branch="$(git -C "$dir" rev-parse --abbrev-ref HEAD)"
     13         if [ "$branch" = "HEAD" ]; then
     14             echo "No branch or tag found for $pkg"
     15             exit 1
     16         fi
     17         if remote="$(git -C "$dir" rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null)"; then
     18             commits="$(git -C "$dir" rev-list --left-only --count "$remote...@")"
     19             if [ "$commits" != 0 ]; then
     20                 /usr/bin/printf "\x1b[2K%-25s %15s ++ %s\n" "$(basename $dir)" "$branch" "$commits"
     21             fi
     22         fi
     23     else
     24         tag="$(git -C "$dir" describe --exact-match --tags)"
     25         [ "$1" = "-u" ] && git -C "$dir" fetch -v --tags 2>&1 | disp "$(basename $dir)"
     26         remote_tag="$(git -C "$dir" for-each-ref --sort=creatordate --format '%(refname)' refs/tags | cut -d/ -f3 | tail -1)"
     27         if [ "${tag#v}" != "${remote_tag#v}" ]; then
     28             /usr/bin/printf "\x1b[2K%-25s %15s -> %s\n" "$(basename $dir)" "$tag" "$remote_tag"
     29         fi
     30     fi
     31 done