masschallenge/impact-api

View on GitHub
infer_repository_revision.sh

Summary

Maintainability
Test Coverage
#!/bin/bash
DEFAULT_BRANCH=development

REVISION_ARG=$1
REPO_URL=$2

# allow for an override, if DJANGO_ACCELERATOR_REVISION is already set in env.
if [[  (! -z $DJANGO_ACCELERATOR_REVISION) && $REPO_URL == *"django-accelerator"* ]];then
  echo $DJANGO_ACCELERATOR_REVISION
  exit
fi
# allow for an override, if FRONT_END_REVISION is already set in env.
if [[ (! -z $FRONT_END_REVISION) && $REPO_URL == *"front-end"* ]];then
  echo $FRONT_END_REVISION
  exit
fi

# use default branch if input parameter is missing
if [[ -z $REVISION_ARG ]]; then
  REQUESTED_REVISION=$DEFAULT_BRANCH
else
  REQUESTED_REVISION=$REVISION_ARG
fi
# check if the requested revision exists in remote
PARSED_REVISION=`git ls-remote $REPO_URL $REQUESTED_REVISION | xargs echo | tr -s ' ' | cut -d ' ' -f 2 | cut -d'/' -f 3`

# Use DEFAULT_BRANCH if PARSED_REVISION is empty
if [[ -z $PARSED_REVISION ]]; then
  # check if exists as commit sha1
  mkdir tmp-repo-dir
  cd tmp-repo-dir
  git init -q
  git remote add origin $REPO_URL
  git fetch origin -qt --dry-run  # does not get files, but updates commit info
  REVISION_VALID_IF_EMPTY=`git cat-file -e $REQUESTED_REVISION 2>&1`
  # if variable is empty, then this is a valid revision, use it.
  if [[ -z $REVISION_VALID_IF_EMPTY ]]; then
    INFERRED_REVISION=$REQUESTED_REVISION
  else
    # not a valid branch, tag or revision. Use default branch.
    INFERRED_REVISION=$DEFAULT_BRANCH
  fi
  # clean up the directory
  cd ..
  rm -rf tmp-repo-dir/
else
  INFERRED_REVISION=$PARSED_REVISION
fi

# Return the inferred revision
echo $INFERRED_REVISION
exit