getver.sh 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/env bash
  2. export LANG=C
  3. export LC_ALL=C
  4. [ -n "$TOPDIR" ] && cd $TOPDIR
  5. GET_REV=$1
  6. try_version() {
  7. [ -f version ] || return 1
  8. REV="$(cat version)"
  9. [ -n "$REV" ]
  10. }
  11. try_git() {
  12. git rev-parse --git-dir >/dev/null 2>&1 || return 1
  13. [ -n "$GET_REV" ] || GET_REV="HEAD"
  14. case "$GET_REV" in
  15. r*)
  16. GET_REV="$(echo $GET_REV | tr -d 'r')"
  17. BASE_REV="$(git rev-list reboot..HEAD | wc -l)"
  18. REV="$(git rev-parse HEAD~$((BASE_REV - GET_REV)))"
  19. ;;
  20. *)
  21. UPSTREAM_BASE="$(git merge-base $GET_REV origin/master)"
  22. UPSTREAM_REV="$(git rev-list reboot..$UPSTREAM_BASE | wc -l | awk '{print $1}')"
  23. REV="$(git rev-list reboot..$GET_REV | wc -l | awk '{print $1}')"
  24. if [ -n "$REV" -a -n "$UPSTREAM_REV" -a "$REV" -gt "$UPSTREAM_REV" ]; then
  25. REV="r${UPSTREAM_REV}+$((REV - UPSTREAM_REV))"
  26. else
  27. REV="${REV:+r$REV}"
  28. fi
  29. ;;
  30. esac
  31. [ -n "$REV" ]
  32. }
  33. try_hg() {
  34. [ -d .hg ] || return 1
  35. REV="$(hg log -r-1 --template '{desc}' | awk '{print $2}' | sed 's/\].*//')"
  36. REV="${REV:+r$REV}"
  37. [ -n "$REV" ]
  38. }
  39. try_version || try_git || try_hg || REV="unknown"
  40. echo "$REV"