OSDN Git Service

Improve commits compare. Added tags to autocomplete. Dont look for commits if from...
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Fri, 21 Sep 2012 08:22:53 +0000 (11:22 +0300)
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Fri, 21 Sep 2012 08:22:53 +0000 (11:22 +0300)
app/controllers/commits_controller.rb
app/models/commit.rb
app/roles/repository.rb
app/views/commits/compare.html.haml

index 6d3f1ae..1e7aec0 100644 (file)
@@ -52,6 +52,7 @@ class CommitsController < ApplicationController
     @commits = result[:commits]
     @commit  = result[:commit]
     @diffs   = result[:diffs]
+    @refs_are_same = result[:same]
     @line_notes = []
 
     @commits = CommitDecorator.decorate(@commits)
index 15afedc..73583e9 100644 (file)
@@ -82,20 +82,24 @@ class Commit
     end
 
     def compare(project, from, to)
-      first = project.commit(to.try(:strip))
-      last = project.commit(from.try(:strip))
-
       result = {
         commits: [],
         diffs: [],
-        commit: nil
+        commit: nil,
+        same: false
       }
 
+      return result unless from && to
+
+      first = project.commit(to.try(:strip))
+      last = project.commit(from.try(:strip))
+
       if first && last
         commits = [first, last].sort_by(&:created_at)
         younger = commits.first
         older = commits.last
 
+        result[:same] = (younger.id == older.id)
         result[:commits] = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)}
         result[:diffs] = project.repo.diff(younger.id, older.id) rescue []
         result[:commit] = Commit.new(older)
index a77de4a..01156ac 100644 (file)
@@ -79,6 +79,14 @@ module Repository
     @heads ||= repo.heads
   end
 
+  def branches_names
+    heads.map(&:name)
+  end
+
+  def ref_names
+    [branches_names + tags].flatten
+  end
+
   def tree(fcommit, path = nil)
     fcommit = commit if fcommit == :head
     tree = fcommit.tree
index 7dab1f5..db15ba5 100644 (file)
@@ -1,16 +1,16 @@
 = render "head"
 
-%h3
+%h3.page_title
   Compare View
 %hr
 
 %div
-  %p
+  %p.slead
     Fill input field with commit id like
-    %code '4eedf23'
+    %code.label_branch 4eedf23
     or branch/tag name like
-    %code master
-    &amp; press compare button for commits list, code diff.
+    %code.label_branch master
+    and press compare button for commits list, code diff.
 
   %br
 
       = text_field_tag :from, params[:from], placeholder: "master", class: "xlarge"
       = "..."
       = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge"
+    - if @refs_are_same
+      .alert
+        %span Refs are the same
     .actions
-      = submit_tag "Compare", class: "btn primary"
+      = submit_tag "Compare", class: "btn primary wide commits-compare-btn"
 
-
-- unless @commits.empty?
+- if @commits.present?
   %div.ui-box
     %h5.small Commits (#{@commits.count})
     %ul.unstyled= render @commits
 
-- unless @diffs.empty?
-  %h4 Diff
-  = render "commits/diffs", diffs: @diffs
+  - unless @diffs.empty?
+    %h4 Diff
+    = render "commits/diffs", diffs: @diffs
 
 :javascript
   $(function() {
-    var availableTags = #{@project.heads.map(&:name).to_json};
+    var availableTags = #{@project.ref_names.to_json};
 
     $("#from").autocomplete({
       source: availableTags,
@@ -45,5 +47,7 @@
       source: availableTags,
       minLength: 1
     });
+
+    disableButtonIfEmptyField('#to', '.commits-compare-btn');
   });