diff options
-rwxr-xr-x | git-base.sh | 27 | ||||
-rwxr-xr-x | test-files.sh | 83 |
2 files changed, 106 insertions, 4 deletions
diff --git a/git-base.sh b/git-base.sh index d9dc10a..20388aa 100755 --- a/git-base.sh +++ b/git-base.sh @@ -181,10 +181,29 @@ porcelain_status() { echo "$(git status --porcelain 2>/dev/null)" } -untracked_files() { +count_from_porcelain() { if is_repo; then - git_status="$(porcelain_status)" - untracked="$(echo "$git_status" | grep -p "?? " | wc -l | grep -oEi '[0-9][0-9]*')" - echo "$untracked" + status="$(porcelain_status)" + pattern="$2" + echo "$(echo "$status" | grep -p "$pattern" | wc -l | grep -oEi '[0-9][0-9]*')" + else + echo "0" fi } + +untracked_files() { + echo "$(count_from_porcelain "$git_status" "?? ")" +} + +staged_added_changes() { + echo "$(count_from_porcelain "$git_status" "A[A|M|C|D|U|R ] ")" +} +staged_modified_changes() { + echo "$(count_from_porcelain "$git_status" "M[A|M|C|D|U|R ] ")" +} +staged_deleted_changes() { + echo "$(count_from_porcelain "$git_status" "D[A|M|C|D|U|R ] ")" +} +staged_renamed_changes() { + echo "$(count_from_porcelain "$git_status" "R[A|M|C|D|U|R ] ")" +} diff --git a/test-files.sh b/test-files.sh index ee583cc..22a1966 100755 --- a/test-files.sh +++ b/test-files.sh @@ -30,4 +30,87 @@ test_untracked_files() { rm_tmp } +test_staged_added_files() { + cd_to_tmp + git init --quiet + + assertEquals "0" "$(staged_added_changes)" + + touch foo + git add . + assertEquals "1" "$(staged_added_changes)" + + touch bar + git add . + assertEquals "2" "$(staged_added_changes)" + + rm_tmp +} + +test_staged_modified_files() { + cd_to_tmp + git init --quiet + + assertEquals "0" "$(staged_modified_changes)" + + touch foo + touch bar + git add . + git commit -m "foo and bar" >/dev/null + + echo "foo" >> foo + git add . + assertEquals "1" "$(staged_modified_changes)" + + echo "bar" >> bar + git add . + assertEquals "2" "$(staged_modified_changes)" + + rm_tmp +} + +test_staged_deleted_files() { + cd_to_tmp + git init --quiet + + assertEquals "0" "$(staged_deleted_changes)" + + touch foo + touch bar + git add . + git commit -m "foo and bar" >/dev/null + + rm foo + git add . + assertEquals "1" "$(staged_deleted_changes)" + + rm bar + git add . + assertEquals "2" "$(staged_deleted_changes)" + + rm_tmp +} + +test_staged_renamed_files() { + cd_to_tmp + git init --quiet + + assertEquals "0" "$(staged_renamed_changes)" + + touch foo + touch bar + git add . + git commit -m "foo and bar" >/dev/null + + mv foo foo2 + git add . + assertEquals "1" "$(staged_renamed_changes)" + + mv bar bar2 + git add . + assertEquals "2" "$(staged_renamed_changes)" + + rm_tmp +} + . ./shunit/shunit2 |