From cead20ec91e443db63397d707f3b34b94d2a91b0 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Thu, 27 Oct 2016 21:41:38 +0200 Subject: [PATCH] script: Add commit message check hook --- script/commit-msg.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 script/commit-msg.go diff --git a/script/commit-msg.go b/script/commit-msg.go new file mode 100644 index 00000000..40160047 --- /dev/null +++ b/script/commit-msg.go @@ -0,0 +1,53 @@ +// Copyright (C) 2016 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build ignore + +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "regexp" +) + +const ( + exitSuccess = 0 + exitError = 1 +) + +var subject = regexp.MustCompile(`^[\w/,\. ]+: \w`) + +func main() { + if len(os.Args) != 2 { + fmt.Printf("Usage: %s \n", filepath.Base(os.Args[0])) + os.Exit(exitError) + } + + bs, err := ioutil.ReadFile(os.Args[1]) + if err != nil { + fmt.Println("Reading input:", err) + os.Exit(exitError) + } + + lines := bytes.Split(bs, []byte{'\n'}) + if !subject.Match(lines[0]) { + fmt.Printf(`Commit message subject: + %s + +doesn't look like "tag: One sentence description". Specifically, it doesn't +match this pattern: + + %s +`, lines[0], subject) + os.Exit(exitError) + } + + os.Exit(exitSuccess) +}