summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Gemfile5
-rw-r--r--Gemfile.lock21
-rw-r--r--app/controllers/projects/commit_controller.rb8
-rw-r--r--app/controllers/projects/repositories_controller.rb2
-rw-r--r--app/models/commit.rb4
-rw-r--r--app/models/project_wiki.rb12
-rw-r--r--app/models/repository.rb4
-rw-r--r--app/models/wiki_page.rb4
-rw-r--r--app/views/projects/wikis/history.html.haml6
-rw-r--r--app/views/projects/wikis/pages.html.haml2
-rw-r--r--app/views/projects/wikis/show.html.haml2
-rw-r--r--app/views/shared/_file_hljs.html.haml13
-rw-r--r--lib/api/branches.rb4
-rw-r--r--lib/gitlab/diff/file.rb2
-rw-r--r--lib/gitlab/project_search_results.rb16
-rw-r--r--lib/gitlab/satellite/merge_action.rb22
-rw-r--r--spec/features/security/project/internal_access_spec.rb2
-rw-r--r--spec/features/security/project/private_access_spec.rb2
-rw-r--r--spec/features/security/project/public_access_spec.rb2
-rw-r--r--spec/models/wiki_page_spec.rb2
-rw-r--r--spec/requests/api/branches_spec.rb2
21 files changed, 83 insertions, 54 deletions
diff --git a/Gemfile b/Gemfile
index cfc205fd866..19171e94f46 100644
--- a/Gemfile
+++ b/Gemfile
@@ -31,7 +31,8 @@ gem 'omniauth-shibboleth'
# Extracting information from a git repository
# Provide access to Gitlab::Git library
-gem "gitlab_git", '~> 6.0'
+# gem "gitlab_git", path: '../../gitlab_git'
+gem "gitlab_git", git: 'https://gitlab.com/gitlab-org/gitlab_git.git', ref: 'b53b948a9248ea3a4b7f2bd6c7f9938fbd5e952b'
# Ruby/Rack Git Smart-HTTP Server Handler
gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack'
@@ -157,7 +158,7 @@ gem "rack-attack"
# Ace editor
gem 'ace-rails-ap'
-# Keyboard shortcuts
+# Keyboard shortcuts
gem 'mousetrap-rails'
# Semantic UI Sass for Sidebar
diff --git a/Gemfile.lock b/Gemfile.lock
index bd7ebf3ef44..eaa9f10105f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,3 +1,15 @@
+GIT
+ remote: https://gitlab.com/gitlab-org/gitlab_git.git
+ revision: b53b948a9248ea3a4b7f2bd6c7f9938fbd5e952b
+ ref: b53b948a9248ea3a4b7f2bd6c7f9938fbd5e952b
+ specs:
+ gitlab_git (7.0.0.pre)
+ activesupport (~> 4.0)
+ charlock_holmes (~> 0.6)
+ gitlab-linguist (~> 3.0)
+ rubyzip (~> 1.1)
+ rugged (~> 0.21.0)
+
GEM
remote: https://rubygems.org/
specs:
@@ -179,12 +191,6 @@ GEM
mime-types (~> 1.19)
gitlab_emoji (0.0.1.1)
emoji (~> 1.0.1)
- gitlab_git (6.3.0)
- activesupport (~> 4.0)
- charlock_holmes (~> 0.6)
- gitlab-grit (~> 2.6)
- gitlab-linguist (~> 3.0)
- rugged (~> 0.21.0)
gitlab_meta (7.0)
gitlab_omniauth-ldap (1.1.0)
net-ldap (~> 0.7.0)
@@ -440,6 +446,7 @@ GEM
ruby-progressbar (1.2.0)
rubyntlm (0.1.1)
rubypants (0.2.0)
+ rubyzip (1.1.6)
rugged (0.21.0)
safe_yaml (0.9.7)
sanitize (2.1.0)
@@ -617,7 +624,7 @@ DEPENDENCIES
gitlab-grack (~> 2.0.0.pre)
gitlab-linguist (~> 3.0.0)
gitlab_emoji (~> 0.0.1.1)
- gitlab_git (~> 6.0)
+ gitlab_git!
gitlab_meta (= 7.0)
gitlab_omniauth-ldap (= 1.1.0)
gollum-lib (~> 3.0.0)
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index c344297ba8a..34bd682bd90 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -19,13 +19,7 @@ class Projects::CommitController < Projects::ApplicationController
[]
end
- begin
- @diffs = @commit.diffs
- rescue Grit::Git::GitTimeout
- @diffs = []
- @diff_timeout = true
- end
-
+ @diffs = @commit.diffs
@note = project.build_commit_note(commit)
@notes_count = project.notes.for_commit_id(commit.id).count
@notes = project.notes.for_commit_id(@commit.id).not_inline.fresh
diff --git a/app/controllers/projects/repositories_controller.rb b/app/controllers/projects/repositories_controller.rb
index f30eaadd928..c030320d037 100644
--- a/app/controllers/projects/repositories_controller.rb
+++ b/app/controllers/projects/repositories_controller.rb
@@ -5,7 +5,7 @@ class Projects::RepositoriesController < Projects::ApplicationController
before_filter :require_non_empty_project
def stats
- @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref)
+ @stats = Gitlab::Git::Stats.new(@repository.raw_repository, @repository.root_ref)
@graph = @stats.graph
end
diff --git a/app/models/commit.rb b/app/models/commit.rb
index ff5392957ce..c8b2e0475ff 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -108,4 +108,8 @@ class Commit
super
end
+
+ def parents
+ @parents ||= Commit.decorate(super)
+ end
end
diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb
index a82a300a672..770a26ed894 100644
--- a/app/models/project_wiki.rb
+++ b/app/models/project_wiki.rb
@@ -107,6 +107,18 @@ class ProjectWiki
[title.gsub(/\.[^.]*$/, ""), title_array.join("/")]
end
+ def search_files(query)
+ repository.search_files(query, default_branch)
+ end
+
+ def repository
+ Repository.new(path_with_namespace, default_branch)
+ end
+
+ def default_branch
+ wiki.class.default_ref
+ end
+
private
def create_repo!
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 9dd8603621f..a2bdfe87469 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -25,7 +25,7 @@ class Repository
raw_repository.empty?
end
- def commit(id = nil)
+ def commit(id = 'HEAD')
return nil unless raw_repository
commit = Gitlab::Git::Commit.find(raw_repository, id)
commit = Commit.new(commit) if commit
@@ -137,7 +137,7 @@ class Repository
def graph_log
Rails.cache.fetch(cache_key(:graph_log)) do
- stats = Gitlab::Git::GitStats.new(raw, root_ref, Gitlab.config.git.timeout)
+ stats = Gitlab::Git::GitStats.new(raw_repository, root_ref, Gitlab.config.git.timeout)
stats.parsed_log
end
end
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index b8a0a9eb58b..b9ab6702c53 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -87,14 +87,14 @@ class WikiPage
def version
return nil unless persisted?
- @version ||= Commit.new(Gitlab::Git::Commit.new(@page.version))
+ @version ||= @page.version
end
# Returns an array of Gitlab Commit instances.
def versions
return [] unless persisted?
- @page.versions.map { |v| Commit.new(Gitlab::Git::Commit.new(v)) }
+ @page.versions
end
def commit
diff --git a/app/views/projects/wikis/history.html.haml b/app/views/projects/wikis/history.html.haml
index 7bc566cf7f5..d3a66c48c9b 100644
--- a/app/views/projects/wikis/history.html.haml
+++ b/app/views/projects/wikis/history.html.haml
@@ -17,11 +17,11 @@
%tr
%td
= link_to project_wiki_path(@project, @page, version_id: commit.id) do
- = commit.short_id
+ = commit.id[0..10]
%td
- = commit_author_link(commit, avatar: true, size: 24)
+ = commit.author.name
%td
- = commit.title
+ = commit.message
%td
#{time_ago_with_tooltip(version.date)}
%td
diff --git a/app/views/projects/wikis/pages.html.haml b/app/views/projects/wikis/pages.html.haml
index 74317faf9d6..264b48ec36c 100644
--- a/app/views/projects/wikis/pages.html.haml
+++ b/app/views/projects/wikis/pages.html.haml
@@ -8,5 +8,5 @@
= link_to wiki_page.title, project_wiki_path(@project, wiki_page)
%small (#{wiki_page.format})
.pull-right
- %small Last edited #{time_ago_with_tooltip(wiki_page.commit.created_at)}
+ %small Last edited #{time_ago_with_tooltip(wiki_page.commit.authored_date)}
= paginate @wiki_pages, theme: 'gitlab'
diff --git a/app/views/projects/wikis/show.html.haml b/app/views/projects/wikis/show.html.haml
index cb923e4ca32..ede4fef9e24 100644
--- a/app/views/projects/wikis/show.html.haml
+++ b/app/views/projects/wikis/show.html.haml
@@ -17,4 +17,4 @@
%hr
.wiki-last-edit-by
- Last edited by #{commit_author_link(@page.commit, avatar: true, size: 16)} #{time_ago_with_tooltip(@page.commit.created_at)}
+ Last edited by #{@page.commit.author.name} #{time_ago_with_tooltip(@page.commit.authored_date)}
diff --git a/app/views/shared/_file_hljs.html.haml b/app/views/shared/_file_hljs.html.haml
index 7dd97c2b25c..cbc01bd60e0 100644
--- a/app/views/shared/_file_hljs.html.haml
+++ b/app/views/shared/_file_hljs.html.haml
@@ -1,11 +1,12 @@
%div.highlighted-data{class: user_color_scheme_class}
.line-numbers
- - blob.data.lines.to_a.size.times do |index|
- - offset = defined?(first_line_number) ? first_line_number : 1
- - i = index + offset
- = link_to "#L#{i}", id: "L#{i}", rel: "#L#{i}" do
- %i.icon-link
- = i
+ - if blob.data.present?
+ - blob.data.lines.to_a.size.times do |index|
+ - offset = defined?(first_line_number) ? first_line_number : 1
+ - i = index + offset
+ = link_to "#L#{i}", id: "L#{i}", rel: "#L#{i}" do
+ %i.icon-link
+ = i
.highlight
%pre
%code{ class: highlightjs_class(blob.name) }
diff --git a/lib/api/branches.rb b/lib/api/branches.rb
index 75783628e3d..14f8b20f6b2 100644
--- a/lib/api/branches.rb
+++ b/lib/api/branches.rb
@@ -14,7 +14,7 @@ module API
# Example Request:
# GET /projects/:id/repository/branches
get ":id/repository/branches" do
- present user_project.repo.heads.sort_by(&:name), with: Entities::RepoObject, project: user_project
+ present user_project.repository.branches.sort_by(&:name), with: Entities::RepoObject, project: user_project
end
# Get a single branch
@@ -25,7 +25,7 @@ module API
# Example Request:
# GET /projects/:id/repository/branches/:branch
get ':id/repository/branches/:branch', requirements: { branch: /.*/ } do
- @branch = user_project.repo.heads.find { |item| item.name == params[:branch] }
+ @branch = user_project.repository.branches.find { |item| item.name == params[:branch] }
not_found!("Branch does not exist") if @branch.nil?
present @branch, with: Entities::RepoObject, project: user_project
end
diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb
index 19a1198c68c..4daf65331e8 100644
--- a/lib/gitlab/diff/file.rb
+++ b/lib/gitlab/diff/file.rb
@@ -24,7 +24,7 @@ module Gitlab
end
def raw_diff
- diff.diff
+ diff.diff.to_s
end
def next_line(index)
diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb
index 9dc8b34d9c7..8b85f3da83f 100644
--- a/lib/gitlab/project_search_results.rb
+++ b/lib/gitlab/project_search_results.rb
@@ -4,7 +4,11 @@ module Gitlab
def initialize(project_id, query, repository_ref = nil)
@project = Project.find(project_id)
- @repository_ref = repository_ref
+ @repository_ref = if repository_ref.present?
+ repository_ref
+ else
+ nil
+ end
@query = Shellwords.shellescape(query) if query.present?
end
@@ -41,7 +45,7 @@ module Gitlab
private
def blobs
- if project.empty_repo?
+ if project.empty_repo? || query.blank?
[]
else
project.repository.search_files(query, repository_ref)
@@ -49,11 +53,11 @@ module Gitlab
end
def wiki_blobs
- if project.wiki_enabled?
- wiki_repo = Repository.new(ProjectWiki.new(project).path_with_namespace)
+ if project.wiki_enabled? && query.present?
+ project_wiki = ProjectWiki.new(project)
- if wiki_repo.exists?
- wiki_repo.search_files(query)
+ unless project_wiki.empty?
+ project_wiki.search_files(query)
else
[]
end
diff --git a/lib/gitlab/satellite/merge_action.rb b/lib/gitlab/satellite/merge_action.rb
index 7c9b2294647..e9141f735aa 100644
--- a/lib/gitlab/satellite/merge_action.rb
+++ b/lib/gitlab/satellite/merge_action.rb
@@ -65,15 +65,16 @@ module Gitlab
prepare_satellite!(merge_repo)
update_satellite_source_and_target!(merge_repo)
if merge_request.for_fork?
- # Only show what is new in the source branch compared to the target branch, not the other way around.
- # The line below with merge_base is equivalent to diff with three dots (git diff branch1...branch2)
- # From the git documentation: "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B"
- common_commit = merge_repo.git.native(:merge_base, default_options, ["origin/#{merge_request.target_branch}", "source/#{merge_request.source_branch}"]).strip
- diffs = merge_repo.diff(common_commit, "source/#{merge_request.source_branch}")
+ repository = Gitlab::Git::Repository.new(merge_repo.path)
+ diffs = Gitlab::Git::Diff.between(
+ repository,
+ "source/#{merge_request.source_branch}",
+ "origin/#{merge_request.target_branch}"
+ )
else
raise "Attempt to determine diffs between for a non forked merge request in satellite MergeRequest.id:[#{merge_request.id}]"
end
- diffs = diffs.map { |diff| Gitlab::Git::Diff.new(diff) }
+
return diffs
end
rescue Grit::Git::CommandFailed => ex
@@ -97,11 +98,16 @@ module Gitlab
prepare_satellite!(merge_repo)
update_satellite_source_and_target!(merge_repo)
if (merge_request.for_fork?)
- commits = merge_repo.commits_between("origin/#{merge_request.target_branch}", "source/#{merge_request.source_branch}")
+ repository = Gitlab::Git::Repository.new(merge_repo.path)
+ commits = Gitlab::Git::Commit.between(
+ repository,
+ "origin/#{merge_request.target_branch}",
+ "source/#{merge_request.source_branch}"
+ )
else
raise "Attempt to determine commits between for a non forked merge request in satellite MergeRequest.id:[#{merge_request.id}]"
end
- commits = commits.map { |commit| Gitlab::Git::Commit.new(commit, nil) }
+
return commits
end
rescue Grit::Git::CommandFailed => ex
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index f86b3db32eb..598d554a946 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -90,7 +90,7 @@ describe "Internal Project Access", feature: true do
describe "GET /:project_path/blob" do
before do
commit = project.repository.commit
- path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob) }.first.name
+ path = '.gitignore'
@blob_path = project_blob_path(project, File.join(commit.id, path))
end
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index a27361f4d15..b1d4c79e05b 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -90,7 +90,7 @@ describe "Private Project Access", feature: true do
describe "GET /:project_path/blob" do
before do
commit = project.repository.commit
- path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob) }.first.name
+ path = '.gitignore'
@blob_path = project_blob_path(project, File.join(commit.id, path))
end
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index f114965bd4a..a4c8a2be25a 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -95,7 +95,7 @@ describe "Public Project Access", feature: true do
describe "GET /:project_path/blob" do
before do
commit = project.repository.commit
- path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob) }.first.name
+ path = '.gitignore'
@blob_path = project_blob_path(project, File.join(commit.id, path))
end
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb
index cb42822b9bb..d065431ee3a 100644
--- a/spec/models/wiki_page_spec.rb
+++ b/spec/models/wiki_page_spec.rb
@@ -36,7 +36,7 @@ describe WikiPage do
end
it "sets the version attribute" do
- @wiki_page.version.should be_a Commit
+ @wiki_page.version.should be_a Grit::Commit
end
end
end
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index caded2c9289..8834a6cfa83 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -17,7 +17,7 @@ describe API::API, api: true do
get api("/projects/#{project.id}/repository/branches", user)
response.status.should == 200
json_response.should be_an Array
- json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name
+ json_response.first['name'].should == project.repository.branch_names.first
end
end