API – Sebastians Blog https://sgaul.de Neues aus den Softwareminen Fri, 14 Mar 2014 13:32:16 +0000 de-DE hourly 1 https://wordpress.org/?v=6.1.7 https://sgaul.de/wp-content/uploads/2019/02/cropped-sgaul-2-1-32x32.jpg API – Sebastians Blog https://sgaul.de 32 32 Git-Commit-Messages aus Redmine-Issues https://sgaul.de/2014/03/07/git-commit-messages-aus-redmine-issues/ Fri, 07 Mar 2014 17:10:20 +0000 https://sgaul.de/?p=2462 Git-Commit-Messages aus Redmine-Issues weiterlesen]]> Ein nerviges Prozedere ist das Suchen nach Issue-Nummern, wenn ich via Git eine Änderung commiten möchte. Git kann hier helfen und bietet mit seinen Hooks die Möglichkeit eigene Skripts in allen denkbaren Situationen auszulösen. Hierzu zählt auch die Modifikation der Commit-Message-Vorlage, die Git mit Status-Kommentaren füllt:

 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch new
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   zeus.json
#


Hier hätte ich gern eine Liste der Issues, an denen ich aktuell arbeite. Hierfür muss man in Redmine die Rest-Authentification aktivieren und kann dann im Git-Projekt unter .git/hooks/prepare-commit-msg den folgenden Hook hinterlegen:

#!/usr/bin/env python

import sys, socket, urllib2, json

url = 'http://myredmine/issues.json?key=abcd&project_id=myproject&assigned_to_id=me'
socket.setdefaulttimeout(3)

try:
	originalfile = open(sys.argv[1], "r")
	original = originalfile.read()
	originalfile.close()
	messagefile = open(sys.argv[1], "w")
	data = json.load(urllib2.urlopen(url))
	messagefile.write('\n\n')
	for issue in data["issues"]:
		messagefile.write(('# Issue #' + str(issue["id"]) + ' ' + issue["subject"] + '\n').encode('utf-8'))
	if not original.splitlines()[0]:
		messagefile.write(original)
	messagefile.close()
except:
	print "Failed to get issues from Redmine."

Leider habe ich keine wirkliche Erfahrung mit Python, aber immerhin macht das Skript seinen Job: Es lädt mittels Redmine-API die mir zugewiesenen, offenen Tickets herunter und zeigt Nummer und Titel als Kommentare an.

# Issue #2 Find a new issue #1
# Issue #1 Microsoft has a majority market share

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch new
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   zeus.json
#

Nachtrag

Die Commit-Message sollte nur verändert werden, wenn die erste Zeile noch frei ist. Andernfalls kann es zu Problemen mit anderen Programmen wie Git Cola kommen, so dass die Issue-Nummer vor der Commit-Nachricht eingefügt und als Teil dieser Nachricht angesehen wird.

]]>