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 | 
