Switchable the main branch on network graph
This commit is contained in:
parent
c84675ee06
commit
525a8cd3e9
9 changed files with 43 additions and 22 deletions
18
app/controllers/graph_controller.rb
Normal file
18
app/controllers/graph_controller.rb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
class GraphController < ProjectResourceController
|
||||||
|
include ExtractsPath
|
||||||
|
|
||||||
|
# Authorize
|
||||||
|
before_filter :authorize_read_project!
|
||||||
|
before_filter :authorize_code_access!
|
||||||
|
before_filter :require_non_empty_project
|
||||||
|
|
||||||
|
def show
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
format.json do
|
||||||
|
graph = Gitlab::Graph::JsonBuilder.new(project, @ref)
|
||||||
|
render :json => graph.to_json
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -90,16 +90,6 @@ class ProjectsController < ProjectResourceController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def graph
|
|
||||||
respond_to do |format|
|
|
||||||
format.html
|
|
||||||
format.json do
|
|
||||||
graph = Gitlab::Graph::JsonBuilder.new(project)
|
|
||||||
render :json => graph.to_json
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
return access_denied! unless can?(current_user, :remove_project, project)
|
return access_denied! unless can?(current_user, :remove_project, project)
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ class RefsController < ProjectResourceController
|
||||||
format.html do
|
format.html do
|
||||||
new_path = if params[:destination] == "tree"
|
new_path = if params[:destination] == "tree"
|
||||||
project_tree_path(@project, (@ref + "/" + params[:path]))
|
project_tree_path(@project, (@ref + "/" + params[:path]))
|
||||||
|
elsif params[:destination] == "graph"
|
||||||
|
project_graph_path(@project, @ref)
|
||||||
else
|
else
|
||||||
project_commits_path(@project, @ref)
|
project_commits_path(@project, @ref)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
%h3.page_title Project Network Graph
|
%h3.page_title Project Network Graph
|
||||||
%br
|
%br
|
||||||
|
= render partial: 'shared/ref_switcher', locals: {destination: 'graph', path: @path}
|
||||||
|
%br
|
||||||
.graph_holder
|
.graph_holder
|
||||||
%h4
|
%h4
|
||||||
%small You can move around the graph by using the arrow keys.
|
%small You can move around the graph by using the arrow keys.
|
||||||
|
@ -11,7 +12,8 @@
|
||||||
var branch_graph;
|
var branch_graph;
|
||||||
$(function(){
|
$(function(){
|
||||||
branch_graph = new BranchGraph($("#holder"), {
|
branch_graph = new BranchGraph($("#holder"), {
|
||||||
url: '#{url_for controller: 'projects', action: 'graph', format: :json}',
|
url: '#{project_graph_path(@project, @ref, format: :json)}',
|
||||||
commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}'
|
commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
|
||||||
|
ref: '#{@ref}'
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -20,8 +20,8 @@
|
||||||
= link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref)
|
= link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref)
|
||||||
= nav_link(controller: %w(commit commits compare repositories protected_branches)) do
|
= nav_link(controller: %w(commit commits compare repositories protected_branches)) do
|
||||||
= link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref)
|
= link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref)
|
||||||
= nav_link(path: 'projects#graph') do
|
= nav_link(controller: %w(graph)) do
|
||||||
= link_to "Network", graph_project_path(@project)
|
= link_to "Network", project_graph_path(@project, @ref || @repository.root_ref)
|
||||||
|
|
||||||
- if @project.issues_enabled
|
- if @project.issues_enabled
|
||||||
= nav_link(controller: %w(issues milestones labels)) do
|
= nav_link(controller: %w(issues milestones labels)) do
|
||||||
|
|
|
@ -163,7 +163,6 @@ Gitlab::Application.routes.draw do
|
||||||
resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do
|
resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do
|
||||||
member do
|
member do
|
||||||
get "wall"
|
get "wall"
|
||||||
get "graph"
|
|
||||||
get "files"
|
get "files"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -173,6 +172,7 @@ Gitlab::Application.routes.draw do
|
||||||
resources :compare, only: [:index, :create]
|
resources :compare, only: [:index, :create]
|
||||||
resources :blame, only: [:show], constraints: {id: /.+/}
|
resources :blame, only: [:show], constraints: {id: /.+/}
|
||||||
resources :blob, only: [:show], constraints: {id: /.+/}
|
resources :blob, only: [:show], constraints: {id: /.+/}
|
||||||
|
resources :graph, only: [:show], constraints: {id: /.+/}
|
||||||
match "/compare/:from...:to" => "compare#show", as: "compare",
|
match "/compare/:from...:to" => "compare#show", as: "compare",
|
||||||
:via => [:get, :post], constraints: {from: /.+/, to: /.+/}
|
:via => [:get, :post], constraints: {from: /.+/, to: /.+/}
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,10 @@ module ExtractsPath
|
||||||
input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "")
|
input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "")
|
||||||
# Remove project, actions and all other staff from path
|
# Remove project, actions and all other staff from path
|
||||||
input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "")
|
input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "")
|
||||||
input.gsub!(/^\/(tree|commits|blame|blob|refs)\//, "") # remove actions
|
input.gsub!(/^\/(tree|commits|blame|blob|refs|graph)\//, "") # remove actions
|
||||||
input.gsub!(/\?.*$/, "") # remove stamps suffix
|
input.gsub!(/\?.*$/, "") # remove stamps suffix
|
||||||
input.gsub!(/.atom$/, "") # remove rss feed
|
input.gsub!(/.atom$/, "") # remove rss feed
|
||||||
|
input.gsub!(/.json$/, "") # remove json suffix
|
||||||
input.gsub!(/\/edit$/, "") # remove edit route part
|
input.gsub!(/\/edit$/, "") # remove edit route part
|
||||||
|
|
||||||
if input.match(/^([[:alnum:]]{40})(.+)/)
|
if input.match(/^([[:alnum:]]{40})(.+)/)
|
||||||
|
|
|
@ -9,8 +9,9 @@ module Gitlab
|
||||||
@max_count ||= 650
|
@max_count ||= 650
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize project
|
def initialize project, ref
|
||||||
@project = project
|
@project = project
|
||||||
|
@ref = ref
|
||||||
@repo = project.repo
|
@repo = project.repo
|
||||||
@ref_cache = {}
|
@ref_cache = {}
|
||||||
|
|
||||||
|
@ -66,9 +67,9 @@ module Gitlab
|
||||||
heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote}
|
heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote}
|
||||||
# sort heads so the master is top and current branches are closer
|
# sort heads so the master is top and current branches are closer
|
||||||
heads.sort! do |a,b|
|
heads.sort! do |a,b|
|
||||||
if a.name == "master"
|
if a.name == @ref
|
||||||
-1
|
-1
|
||||||
elsif b.name == "master"
|
elsif b.name == @ref
|
||||||
1
|
1
|
||||||
else
|
else
|
||||||
b.commit.committed_date <=> a.commit.committed_date
|
b.commit.committed_date <=> a.commit.committed_date
|
||||||
|
|
11
vendor/assets/javascripts/branch-graph.js
vendored
11
vendor/assets/javascripts/branch-graph.js
vendored
|
@ -73,7 +73,8 @@
|
||||||
, cumonth = ""
|
, cumonth = ""
|
||||||
, offsetX = 20
|
, offsetX = 20
|
||||||
, offsetY = 60
|
, offsetY = 60
|
||||||
, barWidth = Math.max(graphWidth, this.dayCount * 20 + 320);
|
, barWidth = Math.max(graphWidth, this.dayCount * 20 + 320)
|
||||||
|
, scrollLeft = cw;
|
||||||
|
|
||||||
this.raphael = r;
|
this.raphael = r;
|
||||||
|
|
||||||
|
@ -145,12 +146,18 @@
|
||||||
|
|
||||||
if (this.commits[i].refs) {
|
if (this.commits[i].refs) {
|
||||||
this.appendLabel(x, y, this.commits[i].refs);
|
this.appendLabel(x, y, this.commits[i].refs);
|
||||||
|
|
||||||
|
// The main branch is displayed in the center.
|
||||||
|
re = new RegExp('(^| )' + this.options.ref + '( |$)');
|
||||||
|
if (this.commits[i].refs.match(re)) {
|
||||||
|
scrollLeft = x - graphWidth / 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.appendAnchor(top, this.commits[i], x, y);
|
this.appendAnchor(top, this.commits[i], x, y);
|
||||||
}
|
}
|
||||||
top.toFront();
|
top.toFront();
|
||||||
this.element.scrollLeft(cw);
|
this.element.scrollLeft(scrollLeft);
|
||||||
this.bindEvents();
|
this.bindEvents();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue