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.