getver.sh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. BRANCH="$(git rev-parse --abbrev-ref HEAD)"
  22. ORIGIN="$(git rev-parse --symbolic-full-name ${BRANCH}@{u} 2>/dev/null)"
  23. [ -n "$ORIGIN" ] || ORIGIN="$(git rev-parse --symbolic-full-name master@{u} 2>/dev/null)"
  24. REV="$(git rev-list reboot..$GET_REV | wc -l | awk '{print $1}')"
  25. if [ -n "$ORIGIN" ]; then
  26. UPSTREAM_BASE="$(git merge-base $GET_REV $ORIGIN)"
  27. UPSTREAM_REV="$(git rev-list reboot..$UPSTREAM_BASE | wc -l | awk '{print $1}')"
  28. else
  29. UPSTREAM_REV=$REV
  30. fi
  31. if [ "$REV" -gt "$UPSTREAM_REV" ]; then
  32. REV="${UPSTREAM_REV}+$((REV - UPSTREAM_REV))"
  33. fi
  34. REV="${REV:+r$REV}"
  35. ;;
  36. esac
  37. [ -n "$REV" ]
  38. }
  39. try_hg() {
  40. [ -d .hg ] || return 1
  41. REV="$(hg log -r-1 --template '{desc}' | awk '{print $2}' | sed 's/\].*//')"
  42. REV="${REV:+r$REV}"
  43. [ -n "$REV" ]
  44. }
  45. try_version || try_git || try_hg || REV="unknown"
  46. echo "$REV"