diff options
Diffstat (limited to 'fpga/usrp3/tools/scripts/git-hash.sh')
-rwxr-xr-x | fpga/usrp3/tools/scripts/git-hash.sh | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/fpga/usrp3/tools/scripts/git-hash.sh b/fpga/usrp3/tools/scripts/git-hash.sh new file mode 100755 index 000000000..ed8d7963f --- /dev/null +++ b/fpga/usrp3/tools/scripts/git-hash.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +function help { + cat <<EOHELP +Utilities to read/write the git hash for the project. + +The script will attempt to get info in the following order: +- Using a git command +- Using a hash file (if speficied by user) +- Otherwise hash = 0xFFFFFFFF + +Usage: $0 [--help|-h] [--write] [--hashfile=HASH_FILE] + +--hashfile : Location of git hash file [project.githash] +--write : Write the git hash to HASH_FILE in the Ettus 32-bit register format +--help : Shows this message + +EOHELP +} + +hashfile="project.githash" +write=0 +for arg in "$@"; do + if [[ $arg == "--help" ]]; then + help + exit 0 + elif [[ $arg =~ "--hashfile="(.*) ]]; then + hashfile=${BASH_REMATCH[1]} + elif [[ $arg =~ "--write" ]]; then + write=1 + fi +done + +# Default hash value (failsafe) +ettus_githash32="ffffffff" + +if [[ $write -eq 0 ]]; then + git_success=0 + # First attempt: Use git + if [[ $(command -v git) != "" ]]; then + # Attempt to get hash from git. + # This command will fail if we are not in a git tree + short_hash="$(git rev-parse --verify HEAD --short=7 2>/dev/null)" && git_success=1 + if [[ $git_success -eq 1 ]]; then + # Check if tree is clean. If yes, the top 4 bits are 0 + if (git diff --quiet 2>/dev/null); then + ettus_githash32="0$short_hash" + else + ettus_githash32="f$short_hash" + fi + fi + fi + # Second attempt: Read from file if it exists + if [[ $git_success -eq 0 ]]; then + if [[ -f $hashfile ]]; then + ettus_githash32=$(cat $hashfile) + fi + fi + echo ${ettus_githash32} + exit 0 +else + # Require git + command -v git >/dev/null || { echo "ERROR: git not found"; exit 1; } + # Get hash from git + short_hash="$(git rev-parse --verify HEAD --short=7 2>/dev/null)" || { echo "ERROR: Not a git tree"; exit 2; } + # Check if tree is clean. If yes, the top 4 bits are 0 + if (git diff --quiet 2>/dev/null); then + ettus_githash32="0$short_hash" + else + ettus_githash32="f$short_hash" + fi + echo $ettus_githash32 > $hashfile + echo "INFO: Wrote $ettus_githash32 to $hashfile" + exit 0 +fi |