rosa-build/app/helpers/git_helper.rb

122 lines
3.8 KiB
Ruby
Raw Normal View History

2011-04-01 01:36:34 +01:00
module GitHelper
2013-04-11 12:19:24 +01:00
def submodule_url(node, treeish)
# node.url(treeish) looks like:
# - http://0.0.0.0:3000/abf/git@abf.rosalinux.ru:abf/rhel-scripts.git
# - git://github.com/avokhmin/mdv-scripts.git
# - empty string if ".gitmodules" does not exist
url = node.url(treeish)
return nil if url.blank?
url.gsub!(/.git$/, '')
2013-04-11 12:19:24 +01:00
if url =~ /^git:/
url.gsub!(/^git/, 'http')
2013-04-11 13:07:29 +01:00
elsif str = /git@.*:.*/.match(url)
str = str[0].gsub(/^git@/, '')
2013-04-11 12:19:24 +01:00
domen = str.gsub(/:.*/, '')
owner = str.gsub(/^#{domen}:/, '').gsub(/\/.*/, '')
project = str.gsub(/.*\//, '')
url = "http://#{domen}/#{owner}/#{project}"
end
url
end
2011-04-01 01:36:34 +01:00
def render_path
# TODO: Looks ugly, rewrite with clear mind.
if @path.present?
if @treeish == @project.default_branch
res = "#{link_to @project.name, tree_path(@project)} / "
2011-04-01 01:36:34 +01:00
else
res = "#{link_to @project.name, tree_path(@project, @treeish)} / "
2011-04-01 01:36:34 +01:00
end
parts = @path.split("/")
current_path = parts.first
2013-12-30 16:08:42 +00:00
res << (parts.length == 1 ? parts.first : link_to(parts.first, tree_path(@project, @treeish, current_path)) + " / ")
2011-04-01 01:36:34 +01:00
parts[1..-2].each do |part|
current_path = File.join([current_path, part].compact)
2013-12-30 16:08:42 +00:00
res << link_to(part, tree_path(@project, @treeish, current_path))
res << " / "
2011-04-01 01:36:34 +01:00
end
2013-12-30 16:08:42 +00:00
res << parts.last if parts.length > 1
2011-04-01 01:36:34 +01:00
else
res = "#{link_to @project.name, tree_path(@project)} /"
2011-04-01 01:36:34 +01:00
end
res.html_safe
end
2011-04-01 01:36:34 +01:00
def render_line_numbers(n)
res = ""
2013-12-30 16:08:42 +00:00
1.upto(n){ |i| res << "<span id='L#{i}'><a href='#L#{i}'>#{i}</a></span><br/>" }
2011-04-01 01:36:34 +01:00
res.html_safe
2011-04-01 01:36:34 +01:00
end
def iterate_path(path, &block)
path.split(File::SEPARATOR).inject('') do |a, e|
if e != '.' and e != '..'
a = File.join(a, e)
a = a[1..-1] if a[0] == File::SEPARATOR
block.call(a, e) if a.length > 1
end
a
end
end
def branch_selector_options(project)
2013-02-22 10:26:06 +00:00
p, tag_enabled = params.dup, !(controller_name == 'trees' && action_name == 'branches')
p.delete(:path) if p[:path].present? # to root path
2014-01-21 04:51:49 +00:00
p.merge!(project_id: project.id, treeish: project.default_branch).delete(:id) unless p[:treeish].present?
current = url_for(p).split('?', 2).first
res = []
if params[:treeish].present? && !project.repo.branches_and_tags.map(&:name).include?(params[:treeish])
res << [I18n.t('layout.git.repositories.commits'), [params[:treeish].truncate(20)]]
end
2014-01-21 04:51:49 +00:00
linking = Proc.new {|name| [name.truncate(20), url_for(p.merge treeish: name).split('?', 2).first]}
2013-04-22 18:29:02 +01:00
res << [I18n.t('layout.git.repositories.branches'), project.repo.branches.map(&:name).sort.map(&linking)]
2013-02-22 10:26:06 +00:00
if tag_enabled
2013-04-22 18:29:02 +01:00
res << [I18n.t('layout.git.repositories.tags'), project.repo.tags.map(&:name).sort.map(&linking)]
2013-02-22 09:34:12 +00:00
else
2014-01-21 04:51:49 +00:00
res << [I18n.t('layout.git.repositories.tags'), project.repo.tags.map(&:name).sort.map {|name| [name.truncate(20), {disabled: true}]}]
2013-02-22 09:34:12 +00:00
end
grouped_options_for_select(res, current)
end
2012-05-25 11:48:44 +01:00
def versions_for_group_select(project)
2013-03-27 12:18:24 +00:00
return [] unless project
2013-01-21 17:08:19 +00:00
[ ['Branches', project.repo.branches.map(&:name)],
['Tags', project.repo.tags.map(&:name)] ]
end
2012-05-25 11:48:44 +01:00
def split_commits_by_date(commits)
commits.sort{|x, y| y.authored_date <=> x.authored_date}.inject({}) do |h, commit|
2012-05-25 11:48:44 +01:00
dt = commit.authored_date
h[dt.year] ||= {}
h[dt.year][dt.month] ||= {}
h[dt.year][dt.month][dt.day] ||= []
h[dt.year][dt.month][dt.day] << commit
h
end
end
2014-04-15 10:11:14 +01:00
def blob_highlight(blob)
if blob.mime_type == 'text/rpm-spec'
Pygments.highlight blob.data, lexer: 'spec'
else
blob.colorize
end.html_safe
end
def blame_highlight(blob, text)
if blob.mime_type == 'text/rpm-spec'
Pygments.highlight(text, lexer: 'spec')
else
blob.lexer.highlight text
end.html_safe
end
end