diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index b34f703353..8894a01eae 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -64,7 +64,9 @@ module GitlabMarkdownHelper # ref - name of the branch or reference, eg. stable # requested_path - path of request, eg. doc/api/README.md, used in special case when path is pointing to the .md file were the original request is coming from # wiki - whether the markdown is from wiki or not - def create_relative_links(text, project_path_with_namespace, ref, requested_path, wiki = false) + def create_relative_links(text, project, ref, requested_path, wiki = false) + @path_to_satellite = project.satellite.path + project_path_with_namespace = project.path_with_namespace paths = extract_paths(text) paths.each do |file_path| new_path = rebuild_path(project_path_with_namespace, file_path, requested_path, ref) @@ -145,13 +147,18 @@ module GitlabMarkdownHelper def file_exists?(path) return false if path.nil? || path.empty? - File.exists?(Rails.root.join(path)) + File.exists?(path_on_fs(path)) end # Check if the path is pointing to a directory(tree) or a file(blob) # eg. doc/api is directory and doc/README.md is file def local_path(path) - File.directory?(Rails.root.join(path)) ? "tree" : "blob" + File.directory?(path_on_fs(path)) ? "tree" : "blob" + end + + # Path to the file in the satellites repository on the filesystem + def path_on_fs(path) + [@path_to_satellite, path].join("/") end # We will assume that if no ref exists we can point to master diff --git a/lib/redcarpet/render/gitlab_html.rb b/lib/redcarpet/render/gitlab_html.rb index b84c005524..2d1e0aec5e 100644 --- a/lib/redcarpet/render/gitlab_html.rb +++ b/lib/redcarpet/render/gitlab_html.rb @@ -36,7 +36,7 @@ class Redcarpet::Render::GitlabHTML < Redcarpet::Render::HTML def preprocess(full_document) if @project - h.create_relative_links(full_document, @project.path_with_namespace, @ref, @request_path, is_wiki?) + h.create_relative_links(full_document, @project, @ref, @request_path, is_wiki?) else full_document end diff --git a/spec/factories.rb b/spec/factories.rb index 624cb0f765..3b0e305460 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -66,6 +66,7 @@ FactoryGirl.define do after :create do |project| TestEnv.clear_repo_dir(project.namespace, project.path) + TestEnv.reset_satellite_dir TestEnv.create_repo(project.namespace, project.path) end end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 5dbdffe410..87dffe197d 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -97,6 +97,15 @@ module TestEnv FileUtils.rm_rf File.join(testing_path(), "#{name}.wiki.git") end + def reset_satellite_dir + setup_stubs + FileUtils.cd(seed_satellite_path) do + `git reset --hard --quiet` + `git clean -fx` + `git checkout --quiet origin/master` + end + end + # Create a repo and it's satellite def create_repo(namespace, name) setup_stubs