92 lines
2.4 KiB
Ruby
Executable File
92 lines
2.4 KiB
Ruby
Executable File
#!/usr/bin/ruby
|
|
require 'erb'
|
|
|
|
# Determines package name from the origin url on github. It's hackish, but it
|
|
# works (mostly).
|
|
def pkgname
|
|
# originurl = `basename $(git config --get remote.origin.url)`.strip
|
|
pkgname = `basename $(git config --get remote.origin.url) .git | tr '\n' ' '`
|
|
# _, pkgname = originurl.match(/\/([a-z0-9\-_]+).git/i).to_a
|
|
pkgname
|
|
end
|
|
|
|
# Accepts a hash of git log data and returns a properly formatted debian
|
|
# changelog entry.
|
|
def debchangelog(logdata)
|
|
template = <<-EOF
|
|
<%=PKGNAME%> (<%=logdata[:tag]%>) unstable; urgency=low
|
|
|
|
* <%=logdata[:subj]%>
|
|
|
|
-- <%=logdata[:name]%> <%=logdata[:date]%>
|
|
|
|
EOF
|
|
ERB.new(template).result(binding)
|
|
end
|
|
|
|
# Checks to see if the repository has any tags already.
|
|
def repo_has_tag?
|
|
`git describe --tags 2>&1`
|
|
return ($? == 0)? true : false
|
|
end
|
|
|
|
# If the repository has no tags, we need to make one so we can get some kind
|
|
# of versioning number for the changelog.
|
|
def make_temporary_tag
|
|
firstcommit = `git log --format=%H | tail -1`.strip
|
|
`git tag #{TEMPTAG} #{firstcommit}`
|
|
end
|
|
|
|
# Removes the tag we added if the repo had no tags.
|
|
def cleanup_temporary_tag
|
|
`git tag -d #{TEMPTAG}`
|
|
end
|
|
|
|
# Removes jenkins build tags (if they exist)
|
|
def remove_jenkins_tags
|
|
IO.popen("git tag -l 'jenkins-*'").readlines.each do |tag|
|
|
`git tag -d #{tag}`
|
|
end
|
|
end
|
|
|
|
# Get the name of this repository
|
|
PKGNAME = pkgname
|
|
|
|
# Name for the temporary tag (only used if the repository has no tags)
|
|
TEMPTAG = 'GOPSI'
|
|
#TEMPTAG = pkgname
|
|
|
|
remove_jenkins_tags
|
|
|
|
if repo_has_tag?
|
|
dotagcleanup = false
|
|
else
|
|
dotagcleanup = true
|
|
make_temporary_tag
|
|
end
|
|
|
|
# Loop through the git log output and grab four lines at a time to parse.
|
|
gitlogcmd = %{git log --pretty=format:'hash: %H%nname: %aN <%aE>%ndate: %cD%nsubj: %s'}
|
|
IO.popen(gitlogcmd).readlines.each_slice(4) do |chunk|
|
|
|
|
temphash = {}
|
|
|
|
# split each line on the first colon and use what's on the left as the
|
|
# symbols within the hash
|
|
chunk.map { |line| line.split(/: /,2) }.each do |type, data|
|
|
temphash[type.to_sym] = data.strip
|
|
end
|
|
|
|
# dig up the most recent tag which contains the commit
|
|
temphash[:tag] = `git describe --tags #{temphash[:hash]} 2>/dev/null`.strip
|
|
if $? != 0
|
|
dotagcleanup = true
|
|
make_temporary_tag
|
|
temphash[:tag] = `git describe --tags #{temphash[:hash]}`.strip
|
|
end
|
|
|
|
puts debchangelog(temphash)
|
|
end
|
|
|
|
# If we added a temporary tag, let's remove it
|
|
cleanup_temporary_tag |