#!/usr/bin/env bash
#==========================================================================
#
#   Copyright Insight Software Consortium
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#          http://www.apache.org/licenses/LICENSE-2.0.txt
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
#==========================================================================*/

# This is a list of third party libraries we maintain as Git subtree's
# and the URL with their contribution instructions.
#
# The third party name used should be same as the directory name in
# ITK/Modules/ThirdParty/
third_party_contrib_urls=( "KWSys:https://www.itk.org/Wiki/KWSys/Git/Develop"
  "MetaIO:https://github.com/Kitware/MetaIO/blob/master/CONTRIBUTING.rst"
  "GDCM:http://gdcm.sourceforge.net/wiki/index.php/Git"
  "VNL:https://github.com/vxl/vxl" )

upstream_subtree_regex='Modules/ThirdParty/[^/]+/src/[^/]+/'
changed_upstream_dirs=$(git diff --name-only HEAD~1.. |
  egrep -o $upstream_subtree_regex | uniq)
if test -z "$changed_upstream_dirs"; then
  exit
fi

echo "$changed_upstream_dirs" |
while read upstream_dir; do
  lib=$(echo "$upstream_dir" | sed  -e 's%Modules/ThirdParty/\([^/]\+\)/src/[^/]\+/%\1%')

  subject=$(git show -s --format=%f HEAD)
  patchfile=/tmp/${lib}-${subject}.patch
  sha=$(git rev-parse --short HEAD)
  contrib_url=""
  for third_party in "${third_party_contrib_urls[@]}"; do
    name=${third_party%%:*}
    url=${third_party#*:}
    if test "$name" = "$lib"; then
      contrib_url="$url"
      break
    fi
  done

cat << EOF
Changes were detected to the third party library $lib. If the change is
relevant to the upstream library, please submit it upstream.

To create a patch file that can be contributed upstream, run:

  git diff -p --relative="$upstream_dir" $sha~1..$sha -- "$upstream_dir" > "$patchfile"

EOF
if test -n "$contrib_url"; then
  cat << EOF

Submit the patch file to the upstream library as instructed at

  $contrib_url

EOF
fi
cat << EOF

The patch can be applied to a local $lib repository with

  cd /path/to/$lib
  patch -p1 < $patchfile


EOF
done
