aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhongheng Liu <z.liu@outlook.com.gr>2024-12-23 11:02:41 +0200
committerZhongheng Liu <z.liu@outlook.com.gr>2024-12-23 11:02:41 +0200
commit51f3ed41cc49dea1143e638825c26274eb836b7b (patch)
tree07554d93a3f1c2817e2d4dc945f09131b89d8d0f
parent54bc34d7dc91c76f4f87ea64549ec6d48301d9df (diff)
downloadnixos-configuration-51f3ed41cc49dea1143e638825c26274eb836b7b.tar.gz
nixos-configuration-51f3ed41cc49dea1143e638825c26274eb836b7b.tar.bz2
nixos-configuration-51f3ed41cc49dea1143e638825c26274eb836b7b.zip
feat: add new git check clean script
-rw-r--r--home-manager/stvnliu/scripts/default.nix4
-rw-r--r--home-manager/stvnliu/scripts/git_check_clean.script.nix48
2 files changed, 52 insertions, 0 deletions
diff --git a/home-manager/stvnliu/scripts/default.nix b/home-manager/stvnliu/scripts/default.nix
index f2f984f..765cc78 100644
--- a/home-manager/stvnliu/scripts/default.nix
+++ b/home-manager/stvnliu/scripts/default.nix
@@ -9,5 +9,9 @@
inherit pkgs;
inherit config;
})
+ (import ./git_check_clean.script.nix {
+ inherit pkgs;
+ inherit config;
+ })
];
}
diff --git a/home-manager/stvnliu/scripts/git_check_clean.script.nix b/home-manager/stvnliu/scripts/git_check_clean.script.nix
new file mode 100644
index 0000000..6ee2747
--- /dev/null
+++ b/home-manager/stvnliu/scripts/git_check_clean.script.nix
@@ -0,0 +1,48 @@
+{
+ pkgs,
+ config,
+}: let
+ git = config.programs.git.package;
+in
+ pkgs.writeShellScriptBin "git-check-clean" ''
+ #!${pkgs.bash}/bin/bash
+ cd_err() {
+ echo "change-directory occurred error. interrupting..."
+ }
+ git_check() {
+ prev=$1
+ repo_dir=$2
+ filter=$3
+ if [[ ! "$filter" == "dirty" && ! "$filter" = "clean" ]]; then
+ echo "Could not parse filter string"
+ return
+ fi
+ cd "$repo_dir" || return
+ inside_git_repo="$(${git}/bin/git rev-parse --is-inside-work-tree 2>/dev/null)"
+ if [ "$inside_git_repo" ]; then
+ if [ "$(${git}/bin/git status --porcelain)" ]; then
+ result=0
+ else
+ result=1
+ fi
+ #echo "not a git repository"
+ fi
+ if [ "$filter" = "dirty" ]; then
+ if [[ $result -eq 0 ]]; then
+ echo "DIRTY $PWD"
+ fi
+ else
+ if [[ $result -eq 1 ]]; then
+ echo "CLEAN $PWD"
+ fi
+ fi
+ #echo "going back to $prev"
+ cd "$prev" || return
+ }
+ export -f git_check
+ export -f cd_err
+ path=$PWD
+ for item in $(${pkgs.findutils}/bin/find . -maxdepth 1 -type d); do
+ git_check "$path" "$item" "$1"
+ done
+ ''