getver.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. REBOOT=ee53a240ac902dc83209008a2671e7fdcf55957a
  13. git rev-parse --git-dir >/dev/null 2>&1 || return 1
  14. [ -n "$GET_REV" ] || GET_REV="HEAD"
  15. case "$GET_REV" in
  16. r*)
  17. GET_REV="$(echo $GET_REV | tr -d 'r')"
  18. BASE_REV="$(git rev-list ${REBOOT}..HEAD 2>/dev/null | wc -l | awk '{print $1}')"
  19. [ $((BASE_REV - GET_REV)) -ge 0 ] && REV="$(git rev-parse HEAD~$((BASE_REV - GET_REV)))"
  20. ;;
  21. *-*-*) # ISO date format - for approximating when packages were removed or renamed
  22. GET_REV="$(git log -n 1 --format="%h" --until "$GET_REV")"
  23. ;& # FALLTHROUGH
  24. *)
  25. BRANCH="$(git rev-parse --abbrev-ref HEAD)"
  26. ORIGIN="$(git rev-parse --verify --symbolic-full-name ${BRANCH}@{u} 2>/dev/null)"
  27. [ -n "$ORIGIN" ] || ORIGIN="$(git rev-parse --verify --symbolic-full-name main@{u} 2>/dev/null)"
  28. REV="$(git rev-list ${REBOOT}..$GET_REV 2>/dev/null | wc -l | awk '{print $1}')"
  29. if [ -n "$ORIGIN" ]; then
  30. UPSTREAM_BASE="$(git merge-base $GET_REV $ORIGIN)"
  31. UPSTREAM_REV="$(git rev-list ${REBOOT}..$UPSTREAM_BASE 2>/dev/null | wc -l | awk '{print $1}')"
  32. else
  33. UPSTREAM_REV=0
  34. fi
  35. if [ "$REV" -gt "$UPSTREAM_REV" ]; then
  36. REV="${UPSTREAM_REV}+$((REV - UPSTREAM_REV))"
  37. fi
  38. REV="${REV:+r$REV-$(git log -n 1 --format="%h" $UPSTREAM_BASE)}"
  39. ;;
  40. esac
  41. [ -n "$REV" ]
  42. }
  43. try_hg() {
  44. [ -d .hg ] || return 1
  45. REV="$(hg log -r-1 --template '{desc}' | awk '{print $2}' | sed 's/\].*//')"
  46. REV="${REV:+r$REV}"
  47. [ -n "$REV" ]
  48. }
  49. try_version || try_git || try_hg || REV="unknown"
  50. echo "$REV"