#!/bin/sh
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

defaultModifiedIndicator="+"

. "`dirname "${0}"`/brltty-prologue.sh"
addProgramOption a string.anything appendText "text to append to the revision identifier"
addProgramOption d string.anything defaultIdentifier "the default revision identifier"
addProgramOption f string.file outputFile "the file in which to write the revision identifier" "standard output"
addProgramOption i flag asInteger "render the revision identifier as a 32-bit integer"
addProgramOption m string.anything modifiedIndicator "the modified indicator" "${defaultModifiedIndicator}"
addProgramOption p string.anything prependText "text to prepend to the revision identifier"
addProgramOption r string.anything revisionIdentifier "the revision identifier"
addProgramOption s flag asString "render the revision identifier as a quoted string"
addProgramParameter source sourceRoot "the top-level directory of the source tree"
parseProgramArguments "${@}"

[ -e "${sourceRoot}" ] || semanticError "directory not found: ${sourceRoot}"
[ -d "${sourceRoot}" ] || semanticError "not a directory: ${sourceRoot}"

[ -n "${modifiedIndicator}" ] || modifiedIndicator="${defaultModifiedIndicator}"

[ -n "${revisionIdentifier}" ] || {
  if [ -e "${sourceRoot}/.git" ]
  then
     revisionIdentifier="`git -C "${sourceRoot}" describe --tags --abbrev=8 --dirty="${modifiedIndicator}" --match="BRLTTY-*" 2>/dev/null`"
  elif [ -d "${sourceRoot}/.svn" ]
  then
     revisionIdentifier="`svnversion -n "${sourceRoot}" 2>/dev/null`"
     [ "${revisionIdentifier}" != "exported" ] || revisionIdentifier=""
  else
     revisionFile="${sourceRoot}/REVISION"
     [ -f "${revisionFile}" ] && read <"${revisionFile}" revisionIdentifier
  fi

  [ -n "${revisionIdentifier}" ] || logWarning "unrecognized source repository type: ${sourceRoot}"
}

[ -n "${revisionIdentifier}" ] || {
  [ -n "${defaultIdentifier}" ] || semanticError "revision identifier not known"
  revisionIdentifier="${defaultIdentifier}"
}

"${asInteger}" && {
  makeInteger() {
    set -- `echo "${revisionIdentifier}" | sed -e 's/-/ /g'`
    local commitCount="${3:-0}"

    revisionIdentifier=0
    local width=6
    local shift=30
    local number

    for number in `echo "${2}" | sed -e 's/\./ /g'`
    do
      shift=$((shift - width))
      revisionIdentifier=$((revisionIdentifier | (number << shift)))
    done

    revisionIdentifier=$((revisionIdentifier | commitCount))
  }

  makeInteger
}

[ -n "${prependText}" ] && revisionIdentifier="${prependText}${revisionIdentifier}"
[ -n "${appendText}" ] && revisionIdentifier="${revisionIdentifier}${appendText}"
"${asString}" && revisionIdentifier='"'"${revisionIdentifier}"'"'

if [ -z "${outputFile}" ]
then
   echo "${revisionIdentifier}"
else
   if [ -e "${outputFile}" ]
   then
      [ -f "${outputFile}" ] || semanticError "not a file: ${outputFile}"
      [ -r "${outputFile}" ] || semanticError "file not readable: ${outputFile}"

      exec 3<"${outputFile}"
      read <&3 -r firstLine && {
         [ "${firstLine}" != "${revisionIdentifier}" ] || read <&3 -r secondLine || exit 0
      }
      exec 3<&-

      [ -w "${outputFile}" ] || semanticError "file not writable: ${outputFile}"
   else
      outputDirectory="$(dirname "${outputFile}")"
      [ -d "${outputDirectory}" ] || semanticError "not a directory: ${outputDirectory}"
      [ -w "${outputDirectory}" ] || semanticError "directory not writable: ${outputDirectory}"
   fi

   echo "${revisionIdentifier}" >"${outputFile}"
fi

exit 0
