OSDN Git Service

Move files search to gitlab_git
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 9 May 2013 08:27:14 +0000 (11:27 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 9 May 2013 08:47:09 +0000 (11:47 +0300)
app/contexts/search_context.rb
app/controllers/search_controller.rb
app/models/project.rb
app/views/layouts/_search.html.haml
app/views/search/_result.html.haml
app/views/search/show.html.haml

index 854c369..938429d 100644 (file)
@@ -12,12 +12,17 @@ class SearchContext
 
     projects = Project.where(id: project_ids)
     result[:projects] = projects.search(query).limit(10)
-    if projects.length == 1
-      result[:snippets] = projects.first.files(query, params[:branch_ref])
+
+    # Search inside singe project
+    result[:project] = project = projects.first if projects.length == 1
+
+    if params[:search_code].present?
+      result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo?
+    else
+      result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
+      result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
+      result[:wiki_pages] = []
     end
-    result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
-    result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
-    result[:wiki_pages] = []
     result
   end
 
@@ -27,8 +32,7 @@ class SearchContext
       merge_requests: [],
       issues: [],
       wiki_pages: [],
-      snippets: []
+      blobs: []
     }
   end
 end
-
index f369ff6..73e46c5 100644 (file)
@@ -15,9 +15,10 @@ class SearchController < ApplicationController
     result = SearchContext.new(project_ids, params).execute
 
     @projects       = result[:projects]
+    @project        = result[:project]
     @merge_requests = result[:merge_requests]
     @issues         = result[:issues]
     @wiki_pages     = result[:wiki_pages]
-    @snippets       = result[:snippets]
+    @blobs          = result[:blobs]
   end
 end
index 6ad3763..bd33e3a 100644 (file)
@@ -410,16 +410,4 @@ class Project < ActiveRecord::Base
   def forked?
     !(forked_project_link.nil? || forked_project_link.forked_from_project.nil?)
   end
-
-  def files(query, treeish)
-   snippets = []
-   tree = treeish.present? ? treeish : default_branch 
-   if repository && !tree.nil?
-     greps = repository.repo.grep(query, 3, tree)
-     greps.each do |g|
-       snippets << Gitlab::BlobSnippet.new(self, tree, g.content, g.startline, g.filename)
-     end
-   end
-   snippets
-  end
 end
index 2470314..b7f89e3 100644 (file)
@@ -3,13 +3,6 @@
     = text_field_tag "search", nil, placeholder: "Search", class: "search-input"
     = hidden_field_tag :group_id, @group.try(:id)
     = hidden_field_tag :project_id, @project.try(:id)
-    - if @ref
-      - @branch_ref = @ref
-    - else
-      - @branch_ref = @project.try(:default_branch)
-      - if @branch_ref.blank?
-        - @branch_ref = 'master'
-    = hidden_field_tag :branch_ref, @branch_ref
-    - if ENV['RAILS_ENV'] == 'test'
-      = submit_tag 'Go'
-    .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source }
\ No newline at end of file
+    = hidden_field_tag :repository_ref, @ref
+    = submit_tag 'Go' if ENV['RAILS_ENV'] == 'test'
+    .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source }
index 12ead3b..9824ea1 100644 (file)
@@ -1,9 +1,20 @@
 %fieldset
   %legend
     Search results
-    %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count})
+    %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.count})
+
+- if @project
+  %ul.nav.nav-pills
+    %li{class: ("active" if params[:search_code].present?)}
+      = link_to search_path(params.merge(search_code: true)) do
+        Repository Code
+    %li{class: ("active" if params[:search_code].blank?)}
+      = link_to search_path(params.merge(search_code: nil)) do
+        Everything else
+
+
 .search_results
-  %ul.well-list
+  %ul.bordered-list
     - @projects.each do |project|
       %li
         project:
           %strong.term
             = truncate wiki_page.title, length: 50
         %span.light (#{wiki_page.project.name_with_namespace})
-    - @snippets.each do |snippet|
+    - @blobs.each do |file|
       %li
-        code:
-        = link_to project_blob_path(snippet.project, tree_join(snippet.tree, snippet.filename), :anchor => "L" + snippet.startline.to_s) do
-          %strong.term
-            = snippet.filename
         .file_holder
-          .file_content.code
+          .file_title
+            = link_to project_blob_path(@project, tree_join(file.ref, file.filename), :anchor => "L" + file.startline.to_s) do
+              %i.icon-file
+              %strong
+                = file.filename
+          .file_content.code.term
             %div{class: user_color_scheme_class}
-              = raw snippet.colorize( formatter: :gitlab, options: { first_line_number: snippet.startline } )
+              = raw file.colorize( formatter: :gitlab, options: { first_line_number: file.startline } )
 
 :javascript
   $(function() {
index 5914c22..c057459 100644 (file)
@@ -4,6 +4,7 @@
       %span Looking for
     .input
       = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search"
+      = hidden_field_tag :search_code, params[:search_code]
       = submit_tag 'Search', class: "btn btn-primary wide"
   .clearfix
   .row