An earlier question resulted in some ideas on how to check whether your Git repo contains a dirty index or untracked files. The answer I adopted from that discussion was the following:
#!/bin/sh
exit $(git status --porcelain | wc -l)
The idea behind that answer was to emulate what the programmer would do: run git status and then examine the output.
Unfortunately git status --porcelain and git status do not do exactly the same thing. In particular, git status will report unpushed changes, while git status --porcelain will not. Here is an example
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
So my question is: what do I need to add to the original script to also identify when the repo has unpushed changes? In particular, would this be a correct approach?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != "0" \
        -o $(git log @{u}.. | wc -l) != "0" ];  then
        echo "local repo is not clean"
Would it be ok, in the long run, to rely on git log, or should I use a "plumbing" command instead?
 
     
     
    