Commit 541d8994 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Project.repository should never be nil so you can call repository.exists? or repository.empty?

Also specify separate project factory for project with filled repo
parent 49b024f5
......@@ -96,7 +96,7 @@ module ApplicationHelper
]
project_nav = []
if @project && @project.repository && @project.repository.root_ref
if @project && @project.repository.exists? && @project.repository.root_ref
project_nav = [
{ label: "#{simple_sanitize(@project.name_with_namespace)} - Issues", url: project_issues_path(@project) },
{ label: "#{simple_sanitize(@project.name_with_namespace)} - Commits", url: project_commits_path(@project, @ref || @project.repository.root_ref) },
......
......@@ -141,13 +141,7 @@ class Project < ActiveRecord::Base
end
def repository
if path
@repository ||= Repository.new(path_with_namespace, default_branch)
else
nil
end
rescue Gitlab::Git::NoRepository
nil
@repository ||= Repository.new(path_with_namespace, default_branch)
end
def saved?
......@@ -332,14 +326,14 @@ class Project < ActiveRecord::Base
end
def valid_repo?
repo
repository.exists?
rescue
errors.add(:path, "Invalid repository path")
false
end
def empty_repo?
!repository || repository.empty?
!repository.exists? || repository.empty?
end
def ensure_satellite_exists
......@@ -363,7 +357,7 @@ class Project < ActiveRecord::Base
end
def repo_exists?
@repo_exists ||= (repository && repository.branches.present?)
@repo_exists ||= repository.exists?
rescue
@repo_exists = false
end
......
......@@ -3,6 +3,16 @@ class Repository
def initialize(path_with_namespace, default_branch)
@raw_repository = Gitlab::Git::Repository.new(path_with_namespace, default_branch)
rescue Gitlab::Git::Repository::NoRepository
nil
end
def exists?
raw_repository
end
def empty?
raw_repository.empty?
end
def commit(id = nil)
......
......@@ -4,7 +4,7 @@
.form-horizontal= render "shared/clone_panel"
.span4.pull-right
.pull-right
- unless @project.empty_repo?
- if @project.empty_repo?
- if can? current_user, :download_code, @project
= link_to archive_project_repository_path(@project), class: "btn-small btn grouped" do
%i.icon-download-alt
......
......@@ -3,14 +3,14 @@ module SharedProject
# Create a project without caring about what it's called
And "I own a project" do
@project = create(:project)
@project = create(:project_with_code)
@project.team << [@user, :master]
end
# Create a specific project called "Shop"
And 'I own project "Shop"' do
@project = Project.find_by_name "Shop"
@project ||= create(:project, name: "Shop")
@project ||= create(:project_with_code, name: "Shop")
@project.team << [@user, :master]
end
......
......@@ -372,7 +372,7 @@ module Gitlab
ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
commits = user_project.repository.commits(ref, nil, per_page, page * per_page)
present CommitDecorator.decorate(commits), with: Entities::RepoCommit
present commits, with: Entities::RepoCommit
end
# Get a project snippets
......
......@@ -85,8 +85,8 @@ module ExtractsPath
# - @id - A string representing the joined ref and path
# - @ref - A string representing the ref (e.g., the branch, tag, or commit SHA)
# - @path - A string representing the filesystem path
# - @commit - A CommitDecorator representing the commit from the given ref
# - @tree - A TreeDecorator representing the tree at the given ref/path
# - @commit - A Commit representing the commit from the given ref
# - @tree - A Tree representing the tree at the given ref/path
#
# If the :id parameter appears to be requesting a specific response format,
# that will be handled as well.
......
......@@ -187,7 +187,7 @@ module Gitlab
def reference_commit(identifier)
if @project.valid_repo? && commit = @project.repository.commit(identifier)
link_to(identifier, project_commit_url(@project, commit), html_options.merge(title: CommitDecorator.new(commit).link_title, class: "gfm gfm-commit #{html_options[:class]}"))
link_to(identifier, project_commit_url(@project, commit), html_options.merge(title: commit.link_title, class: "gfm gfm-commit #{html_options[:class]}"))
end
end
end
......
......@@ -25,7 +25,7 @@ FactoryGirl.define do
factory :project do
sequence(:name) { |n| "project#{n}" }
path { 'gitlabhq' }
path { name.downcase.gsub(/\s/, '_') }
creator
end
......@@ -34,6 +34,10 @@ FactoryGirl.define do
issues_tracker_id { "project_name_in_redmine" }
end
factory :project_with_code, parent: :project do
path { 'gitlabhq' }
end
factory :group do
sequence(:name) { |n| "group#{n}" }
path { name.downcase.gsub(/\s/, '_') }
......
......@@ -7,7 +7,7 @@ describe GitlabMarkdownHelper do
let!(:project) { create(:project) }
let(:user) { create(:user, username: 'gfm') }
let(:commit) { CommitDecorator.decorate(Commit.new(project.repository.commit)) }
let(:commit) { project.repository.commit) }
let(:issue) { create(:issue, project: project) }
let(:merge_request) { create(:merge_request, project: project) }
let(:snippet) { create(:snippet, project: project) }
......
......@@ -3,35 +3,32 @@ require 'spec_helper'
describe Commit do
let(:commit) { create(:project).repository.commit }
describe CommitDecorator do
let(:decorator) { CommitDecorator.new(commit) }
describe '#title' do
it "returns no_commit_message when safe_message is blank" do
decorator.stub(:safe_message).and_return('')
decorator.title.should == "--no commit message"
end
describe '#title' do
it "returns no_commit_message when safe_message is blank" do
commit.stub(:safe_message).and_return('')
commit.title.should == "--no commit message"
end
it "truncates a message without a newline at 70 characters" do
message = commit.safe_message * 10
it "truncates a message without a newline at 70 characters" do
message = commit.safe_message * 10
decorator.stub(:safe_message).and_return(message)
decorator.title.should == "#{message[0..69]}&hellip;"
end
commit.stub(:safe_message).and_return(message)
commit.title.should == "#{message[0..69]}&hellip;"
end
it "truncates a message with a newline before 80 characters at the newline" do
message = commit.safe_message.split(" ").first
it "truncates a message with a newline before 80 characters at the newline" do
message = commit.safe_message.split(" ").first
decorator.stub(:safe_message).and_return(message + "\n" + message)
decorator.title.should == message
end
commit.stub(:safe_message).and_return(message + "\n" + message)
commit.title.should == message
end
it "truncates a message with a newline after 80 characters at 70 characters" do
message = (commit.safe_message * 10) + "\n"
it "truncates a message with a newline after 80 characters at 70 characters" do
message = (commit.safe_message * 10) + "\n"
decorator.stub(:safe_message).and_return(message)
decorator.title.should == "#{message[0..69]}&hellip;"
end
commit.stub(:safe_message).and_return(message)
commit.title.should == "#{message[0..69]}&hellip;"
end
end
......
......@@ -119,7 +119,7 @@ describe Project do
end
describe :update_merge_requests do
let(:project) { create(:project) }
let(:project) { create(:project_with_code) }
before do
@merge_request = create(:merge_request, project: project)
......@@ -187,11 +187,7 @@ describe Project do
let(:project) { create(:project) }
it "should return valid repo" do
project.repository.should be_kind_of(Gitlab::Git::Repository)
end
it "should return nil" do
Project.new(path: "empty").repository.should be_nil
project.repository.should be_kind_of(Repository)
end
end
......@@ -249,7 +245,7 @@ describe Project do
end
describe :open_branches do
let(:project) { create(:project) }
let(:project) { create(:project_with_code) }
before do
project.protected_branches.create(name: 'master')
......
......@@ -47,11 +47,7 @@ Spork.prefork do
config.use_transactional_fixtures = false
config.before do
# Use tmp dir for FS manipulations
temp_repos_path = Rails.root.join('tmp', 'test-git-base-path')
Gitlab.config.gitlab_shell.stub(repos_path: temp_repos_path)
FileUtils.rm_rf temp_repos_path
FileUtils.mkdir_p temp_repos_path
TestEnv.init
end
end
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment