123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- #!/bin/bash
-
- . "$MKIT_DIR/include/ini.sh" || die "cannot import ini.sh"
-
- git_bool() {
-
-
-
- local bool_name="$1"
- git_present || warn "can't give bool outside git repo: $bool_name"
- case "$bool_name" in
- dirty_files)
- git diff-files | grep -qm 1 .
- ;;
- dirty_index)
- git diff-index HEAD | grep -qm 1 .
- ;;
- dirty)
- git_bool dirty_files || git_bool dirty_index
- ;;
- *)
- warn "unknown git bool asked: $bool_name"
- return 2
- ;;
- esac
- }
-
- git_fact() {
-
-
-
- local fact_name="$1"
- git_present || warn "can't give fact outside git repo: $fact_name"
- case "$fact_name" in
- latest_tag)
- git log --format="%d" \
- | sed 's/,/\n/g' \
- | sed 's/^[[:blank:]]*//' \
- | grep -E '^\(?tag' \
- | tr -cd '[[:digit:]].v\n' \
- | grep . -m 1
- ;;
- latest_version)
- git_fact latest_tag | git_tag2ver
- ;;
- current_branch)
- git rev-parse --abbrev-ref HEAD
- ;;
- reldiff)
- git log --oneline "$(git_fact latest_tag)..HEAD" --name-only
- ;;
- latest_sha)
- git log -1 --pretty=format:%h HEAD
- ;;
- *)
- warn "unknown git fact asked: $fact_name"
- ;;
- esac
- }
-
- git_present() {
-
-
-
- git rev-parse HEAD >&/dev/null
- }
-
- git_tag2ver() {
-
-
-
- sed s/^v//
- }
-
- git_ver2tag() {
-
-
-
- sed s/^/v/
- }
-
- git_lasthash() {
-
-
-
-
-
-
-
-
- if git_present;
- then
- local last_hash=$(git rev-parse HEAD)
- echo -n "$last_hash"
- git_bool dirty && echo -n ".dirty"
- else
- grep . .mkit/git_lasthash || {
- echo UNKNOWN
- warn "malformed source, could not determine git hash"
- }
- fi
- }
-
- semver() {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- local version=$(ini 1value project:version)
- local prerl=$(ini 1value project:prerl)
- grep ":" <<<"$prerl" && warn "colon in project:prerl may corrupt version data: $prerl"
- if git_present;
- then
- local latest_tag=$(git_fact latest_tag)
- if ! git describe --tags --exact-match HEAD >&/dev/null;
- then
- local commit="$(git_fact current_branch).g$(git_fact latest_sha)"
- fi
- local dirty=""
- local suffix=""
- git_bool dirty; dirty=$?
- test -n "$latest_tag" && version=${latest_tag:1}
- case "$dirty:$commit" in
- 1:) suffix="" ;;
- 0:) suffix="+dirty" ;;
- 1:*) suffix="+$commit" ;;
- 0:*) suffix="+$commit.dirty" ;;
- *) suffix=MKIT_BUG;
- warn "MKIT_BUG: bad dirt/commit detection" ;;
- esac
- test -n "$prerl" && suffix="-$prerl$suffix"
- version="$version$suffix"
- fi
- echo "$version"
- }
|