From 7792e45f491dd6197ed65cffa3a9c242b551306a Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sat, 15 Jan 2011 14:06:23 +0100 Subject: [PATCH] +hook Signed-off-by: Nico Schottelius --- doc/internal/git-post-commit-hook | 108 +++++++++++++++++++++++++++ test/ssh-pseudo-interactive-explorer | 78 +++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100755 doc/internal/git-post-commit-hook create mode 100755 test/ssh-pseudo-interactive-explorer diff --git a/doc/internal/git-post-commit-hook b/doc/internal/git-post-commit-hook new file mode 100755 index 00000000..b16caa2a --- /dev/null +++ b/doc/internal/git-post-commit-hook @@ -0,0 +1,108 @@ +#!/usr/bin/env bash +# Distributed under the terms of the GNU General Public License v2 +# Copyright (c) 2006 Fernando J. Pereda +# +# Git CIA bot in bash. (no, not the POSIX shell, bash). +# It is *heavily* based on Git ciabot.pl by Petr Baudis. +# +# It is meant to be run either on a post-commit hook or in an update +# hook: +# +# post-commit: It parses latest commit and current HEAD to get the +# information it needs. +# +# update: You have to call it once per merged commit: +# +# refname=$1 +# oldhead=$2 +# newhead=$3 +# for merged in $(git rev-list ${oldhead}..${newhead} | tac) ; do +# /path/to/ciabot.bash ${refname} ${merged} +# done +# + +# The project as known to CIA +project="cdist" + +# Set to true if you want the full log to be sent +noisy=false + +# Addresses for the e-mail +from="nico-cia.vc@schottelius.org" +to="cia@cia.vc" + +# SMTP client to use +sendmail="/usr/sbin/sendmail -f ${from} ${to}" + +# Changeset URL +url="http://git.schottelius.org/?p=${project};a=commit;h=@@sha1@@" + +# You shouldn't be touching anything else. +if [[ $# = 0 ]] ; then + refname=$(git symbolic-ref HEAD 2>/dev/null) + merged=$(git rev-parse HEAD) +else + refname=$1 + merged=$2 +fi + +refname=${refname##refs/heads/} + +gitver=$(git --version) +gitver=${gitver##* } + +rev=$(git describe ${merged} 2>/dev/null) +[[ -z ${rev} ]] && rev=${merged:0:12} + +rawcommit=$(git cat-file commit ${merged}) + +author=$(sed -n -e '/^author .*<\([^@]*\).*$/s--\1-p' \ + <<< "${rawcommit}") + +logmessage=$(sed -e '1,/^$/d' <<< "${rawcommit}") +${noisy} || logmessage=$(head -n 1 <<< "${logmessage}") +logmessage=${logmessage//&/&} +logmessage=${logmessage///>} + +ts=$(sed -n -e '/^author .*> \([0-9]\+\).*$/s--\1-p' \ + <<< "${rawcommit}") + +out=" + + + CIA Bash client for Git + ${gitver} + http://dev.gentoo.org/~ferdy/stuff/ciabot.bash + + + ${project} + ${refname} + + ${ts} + + + ${author} + ${rev} + + $(git diff-tree -r --name-only ${merged} | + sed -e '1d' -e 's-.*-&-') + + +${logmessage} + + ${url//@@sha1@@/${merged}} + + +" + +${sendmail} << EOM +Message-ID: <${merged:0:12}.${author}@${project}> +From: ${from} +To: ${to} +Content-type: text/xml +Subject: DeliverXML +${out} +EOM + +# vim: set tw=70 : diff --git a/test/ssh-pseudo-interactive-explorer b/test/ssh-pseudo-interactive-explorer new file mode 100755 index 00000000..81ad0db5 --- /dev/null +++ b/test/ssh-pseudo-interactive-explorer @@ -0,0 +1,78 @@ +#!/bin/sh +# +# 2010 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Let's build a cconfig tree from a generic configuration (example) +# + +d1="$(date)" +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +uname=$(ssh localhost "uname -r") +d2="$(date)" + +echo $d1 $d2