#tfs #githooks #pivotaltracker
#tfs #githooks #pivotaltracker
Вопрос:
У нас был pivotal tracker, интегрированный с GitHub, и когда мы использовали фиксацию с идентификатором истории, он обновлял историю сообщением о фиксации статуса истории.
Недавно мы перешли на Team Foundation Server с GitHub, и эта интеграция больше не работает.
Похоже, что приложения для интеграции пока не существует.
Есть ли программный способ сделать это?
Ответ №1:
Создайте файл с именем pre-push
(без какого-либо расширения) и поместите его в ./.git/hooks/
папку внутри вашего репозитория. Эта папка уже должна существовать, если она является допустимым репозиторием. Скопируйте и вставьте следующий код в файл. Не забудьте заменить значение токена API в следующем коде —
#!/usr/bin/env ruby
# encoding: UTF-8
require 'net/https'
require 'json'
class GitLogs
attr_accessor :raw_log, :commit_data, :commit, :author, :message, :refs
def initialize
self.commit = 'Commit: ' `git log -1 --pretty=format:%h`.force_encoding('utf-8')
self.author = 'Author: ' `git log -1 --pretty=format:%aN`.force_encoding('utf-8')
self.message = 'Message: ' `git log -1 --pretty=format:%s`.force_encoding('utf-8')
self.refs = 'Refs: ' `git log -1 --pretty=format:%d`.force_encoding('utf-8')
# Example git formatted log output:
#
# Commit: 8872e8fe03a10238d7be84d78813874d79ce0c3d
# Author: John Doe <john.doe@unknown.com>
# Message: [#90743834] test new v5 hook addition
# Refs: (HEAD, feature/hook-test)
parse!
self
end
def parse!
self.commit_data = GitLog.new(self.commit, self.author, self.message, self.refs)
end
def pivotal_sync!
Pivotal.new(commit_data).send! if commit_has_story_id?
end
def commit_has_story_id?
# somewhere between square brackets there has to be a hash followed by multiple digits
!commit_data.message.scan(/[* #(d )D?(.*)]/).empty?
end
end
class GitLog
attr_accessor :hash, :author, :message, :refs
def initialize hash, author, message, refs
self.hash = hash
self.author = author
self.refs = refs
self.message = message
updated_message
end
def updated_message
return message
end
def to_json
{ source_commit:
{ commit_id: self.hash,
author: self.author,
message: self.message,
}
}.to_json
end
end
class Pivotal
attr_accessor :git_log, :tracker_token
BASE_URI = URI('https://www.pivotaltracker.com/')
def initialize git_log
self.git_log = git_log
self.tracker_token = get_token
end
def get_token
'YOUR APT TOKEN GOES HERE. CAN GET IT FROM https://www.pivotaltracker.com/profile'
end
def send!
https = Net::HTTP.start(BASE_URI.host, 443, {
use_ssl: true,
verify_mode: OpenSSL::SSL::VERIFY_NONE
})
request = Net::HTTP::Post.new('/services/v5/source_commits')
request['X-TrackerToken'] = tracker_token
request['Content-type'] = 'application/json'
request.body = git_log.to_json
response = https.request(request)
end
end
GitLogs.new().pivotal_sync!