#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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
#
# 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.

# An example hook script to prepare the commit log message.
# Called by "git commit" with the name of the file that has the
# commit message, followed by the description of the commit
# message's source.  The hook's purpose is to edit the commit
# message file.  If the hook fails with a non-zero status,
# the commit is aborted.
#
# To enable this hook, rename this file to "prepare-commit-msg".

# This hook includes three examples.  The first comments out the
# "Conflicts:" part of a merge commit.
#
# The second includes the output of "git diff --name-status -r"
# into the message, just before the "git status" output.  It is
# commented because it doesn't cope with --amend or with squashed
# commits.
#
# The third example adds a Signed-off-by line to the message, that can
# still be edited.  This is rarely a good idea.

#case "$2,$3" in
#  merge,)
#    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;

# ,|template,)
#   /usr/bin/perl -i.bak -pe '
#      print "\n" . `git diff --cached --name-status -r`
#	 if /^#/ && $first++ == 0' "$1" ;;

#  *) ;;
#esac

# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

run_generic_commit () {
local file=$1
SOB=$(git var GIT_AUTHOR_IDENT)
cat <<EOF > $file
################################# 80 chars #####################################
Summary: 

Detail: 

BUG-ID: 
Bugfix-for: 
Reviewed-by: 
Reported-by: 
Signed-off-by: ${SOB}
################################# 80 chars #####################################
# The following is an example of how to fill out the above form. Please limit
# your formatting to 80 cols.
#
# Summary: One line description of commit, followed by blank line
#
# Detail: Multi-line description, followed by blank line
#
# BUG-ID: CLOUDSTACK-9999
# Bugfix-for: 4.0 (a branch that this should be considered for in a bugfix release)
# Reviewed-by: Bar Barlington <bar@example.com>, Foo McFooson <foo@example.com>
# Reported-by: Baz Bazelli <baz@example.com>
# Signed-off-by: You <you@yourdomain.com>
#
$ORIGINAL
EOF
}

case "$2,$3" in
  merge,*)
  ;;

  template,*)
  ;;

  message,*)
  ;;

  squash,*)
  ;;

  *)
  run_generic_commit $1
  ;;
esac

