#!/bin/sh
#
# Copyright (C) 1999-2023 The ViewCVS Group. All Rights Reserved.
#
# By using this file, you agree to the terms and conditions set forth in
# the LICENSE.html file which can be found at the top level of the ViewVC
# distribution or at http://viewvc.org/license-1.html.
#
# For more information, visit http://viewvc.org/
#
# -----------------------------------------------------------------------
#
# make-release: internal tool for creating ViewVC releases
#
# -----------------------------------------------------------------------
#

### Validate input
if test $# != 2 && test $# != 1; then
  echo "Usage: $0 TARGET-DIRECTORY [VERSION]"
  echo ""
  echo "If VERSION (i.e. \"1.1.0\" or \"1.0.x\") is not provided,"
  echo "the release will be rolled from \"master\"."
  exit 1
fi

TARGET=${1}
if test $# = 1; then
  BRANCH=master
else
  BRANCH=${2}
fi

if test -e ${TARGET}; then
  echo "ERROR: must remove ${TARGET} first."
  exit 1
fi

### Grab an export from the GitHub repository.
TARBALL_URL="https://github.com/viewvc/viewvc/tarball/${BRANCH}"
for PLATFORM in unix windows; do
  echo "Beginning build for ${PLATFORM}:"

  echo "   Creating target directory..."
  mkdir ${TARGET}

  echo "   Exporting '${TARBALL_URL}' into '${TARGET}'..."
  (cd ${TARGET}; wget -q -O - "${TARBALL_URL}" | tar xz --strip-components=1)

  ### Various shifting, cleanup.  

  # Remove some not useful stuff.  We'll first try to read a
  # 'tools/release-ignores' file from the exported data for the list
  # of what to ignore.  Failing that, we'll use a hard-coded
  # historical list.
  JUNK_FILES=".gitignore notes tests tools misc elemx tparse"
  if [ -f "${TARGET}/tools/release-ignores" ]; then
      echo "   Found release-specific ignorables file."
      JUNK_FILES=`cat "${TARGET}/tools/release-ignores"`
  fi
  for JUNK in ${JUNK_FILES}; do
    if [ -d ${TARGET}/${JUNK} ]; then
      echo "   Removing directory ${TARGET}/${JUNK}..."
      rm -r ${TARGET}/${JUNK}
    elif [ -f ${TARGET}/${JUNK} ]; then
      echo "   Removing file ${TARGET}/${JUNK}..."
      rm ${TARGET}/${JUNK}
    else
      echo "   Skipping missing ${TARGET}/${JUNK}..."
    fi
  done

  # Make sure permissions are reasonable:
  echo "   Normalizing permissions..."
  find ${TARGET} -print | xargs chmod uoa+r
  find ${TARGET} -type d -print | xargs chmod uoa+x

  if test ${PLATFORM} = windows; then
    # Create also a ZIP file for those poor souls :-) still using Windows: 
    echo "   Creating ZIP archive..."
    zip -qor9 ${TARGET}.zip ${TARGET}
  else
    # Cut the tarball:
    echo "   Creating tarball archive..."
    tar cf - ${TARGET} | gzip -9 > ${TARGET}.tar.gz
  fi

  # Remove target directory
  echo "   Removing target directory..."
  rm -r ${TARGET}
done
echo "Done."
