summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Allen <michael@michaelallen.io>2015-02-17 19:54:05 +0000
committerMichael Allen <michael@michaelallen.io>2015-02-17 19:54:05 +0000
commita333df6a1a61f0c0e4bc6d774ceff4e9f6bd61f8 (patch)
tree5d90a4f56dfa75d4674f6c683dff49a1e1c244de
parentf05711dbcf196f98f0e08d783f760d47d98b93a6 (diff)
downloadgit-sonar-a333df6a1a61f0c0e4bc6d774ceff4e9f6bd61f8.tar.gz
git-sonar-a333df6a1a61f0c0e4bc6d774ceff4e9f6bd61f8.zip
add functions to show staged changes
Diffstat (limited to '')
-rwxr-xr-xgit-base.sh27
-rwxr-xr-xtest-files.sh83
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