- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 396
Description
Discussed in #1767
Originally posted by eatradish January 14, 2025
Hi all, I have written a git status plugin for Bash called bash-git-status, which previously leveraged git-status to detect and prompt users about a Git repository's status:
- Red if the repository contains uncommited changes.
- Purpose if the repository contains untracked files.
- Green if the repository is clean.
Now that gix status is ready, I followed starship#6476 to re-implement this function in hope of better performance. You may find the current implementation here:
However, I found that the performance improvements, while significant, is not consistently found in all cases. For instance, in a "clean" (unchanged) aosc-os-abbs copy, I observed an 1.3x improvement in response time; however, in a "clean" linux copy, the reponse time worsened by about 5x.
The benchmark results are as follows, using
hyperfine -i --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' '/home/saki/bash-git-status/target/release/bash-git-status' 'bash-git-status'linux get 5x slower with unchanged or untracked:
Benchmark 1: /home/saki/bash-git-status/target/release/bash-git-status
  Time (mean ± σ):      1.567 s ±  0.009 s    [User: 0.185 s, System: 1.061 s]
  Range (min … max):    1.547 s …  1.580 s    10 runs
  Warning: Ignoring non-zero exit code.
Benchmark 2: bash-git-status
  Time (mean ± σ):     316.9 ms ±   8.2 ms    [User: 108.7 ms, System: 699.8 ms]
  Range (min … max):   307.1 ms … 332.7 ms    10 runs
  Warning: Ignoring non-zero exit code.
Summary
  bash-git-status ran
    4.95 ± 0.13 times faster than /home/saki/bash-git-status/target/release/bash-git-status
changed:
Benchmark 1: /home/saki/bash-git-status/target/release/bash-git-status
  Time (mean ± σ):      87.1 ms ±   2.1 ms    [User: 24.4 ms, System: 153.6 ms]
  Range (min … max):    84.1 ms …  91.1 ms    10 runs
  Warning: Ignoring non-zero exit code.
Benchmark 2: bash-git-status
  Time (mean ± σ):     314.9 ms ±  10.1 ms    [User: 110.4 ms, System: 683.4 ms]
  Range (min … max):   299.4 ms … 327.3 ms    10 runs
  Warning: Ignoring non-zero exit code.
Summary
  /home/saki/bash-git-status/target/release/bash-git-status ran
    3.62 ± 0.15 times faster than bash-git-status
Test Enviromment:
- OS: AOSC OS (Linux Kernel 6.12.9)
- CPU: AMD Ryzen 8845H @ 5.14Ghz (8c16t)
- RAM: 32GiB
- Storage: Samsung Electronics Co Ltd NVMe SSD Controller PM9C1a (DRAM-less)