Skip to content
Snippets Groups Projects
Commit 541d8994 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

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
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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) },
Loading
Loading
Loading
Loading
@@ -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?
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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)
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
 
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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.
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -25,7 +25,7 @@ FactoryGirl.define do
 
factory :project do
sequence(:name) { |n| "project#{n}" }
path { 'gitlabhq' }
path { name.downcase.gsub(/\s/, '_') }
creator
end
 
Loading
Loading
@@ -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/, '_') }
Loading
Loading
Loading
Loading
@@ -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) }
Loading
Loading
Loading
Loading
@@ -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
 
Loading
Loading
Loading
Loading
@@ -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)
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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')
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment