Commit 4cc169d3cacea7e4325bb5632cc8878a7c3f41fe

Authored by Dmitriy Zaporozhets
1 parent 49fe8fed

Improve commits compare. Added tags to autocomplete. Dont look for commits if from & to are empty

app/controllers/commits_controller.rb
... ... @@ -52,6 +52,7 @@ class CommitsController < ApplicationController
52 52 @commits = result[:commits]
53 53 @commit = result[:commit]
54 54 @diffs = result[:diffs]
  55 + @refs_are_same = result[:same]
55 56 @line_notes = []
56 57  
57 58 @commits = CommitDecorator.decorate(@commits)
... ...
app/models/commit.rb
... ... @@ -82,20 +82,24 @@ class Commit
82 82 end
83 83  
84 84 def compare(project, from, to)
85   - first = project.commit(to.try(:strip))
86   - last = project.commit(from.try(:strip))
87   -
88 85 result = {
89 86 commits: [],
90 87 diffs: [],
91   - commit: nil
  88 + commit: nil,
  89 + same: false
92 90 }
93 91  
  92 + return result unless from && to
  93 +
  94 + first = project.commit(to.try(:strip))
  95 + last = project.commit(from.try(:strip))
  96 +
94 97 if first && last
95 98 commits = [first, last].sort_by(&:created_at)
96 99 younger = commits.first
97 100 older = commits.last
98 101  
  102 + result[:same] = (younger.id == older.id)
99 103 result[:commits] = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)}
100 104 result[:diffs] = project.repo.diff(younger.id, older.id) rescue []
101 105 result[:commit] = Commit.new(older)
... ...
app/roles/repository.rb
... ... @@ -79,6 +79,14 @@ module Repository
79 79 @heads ||= repo.heads
80 80 end
81 81  
  82 + def branches_names
  83 + heads.map(&:name)
  84 + end
  85 +
  86 + def ref_names
  87 + [branches_names + tags].flatten
  88 + end
  89 +
82 90 def tree(fcommit, path = nil)
83 91 fcommit = commit if fcommit == :head
84 92 tree = fcommit.tree
... ...
app/views/commits/compare.html.haml
1 1 = render "head"
2 2  
3   -%h3
  3 +%h3.page_title
4 4 Compare View
5 5 %hr
6 6  
7 7 %div
8   - %p
  8 + %p.slead
9 9 Fill input field with commit id like
10   - %code '4eedf23'
  10 + %code.label_branch 4eedf23
11 11 or branch/tag name like
12   - %code master
13   - & press compare button for commits list, code diff.
  12 + %code.label_branch master
  13 + and press compare button for commits list, code diff.
14 14  
15 15 %br
16 16  
... ... @@ -19,22 +19,24 @@
19 19 = text_field_tag :from, params[:from], placeholder: "master", class: "xlarge"
20 20 = "..."
21 21 = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge"
  22 + - if @refs_are_same
  23 + .alert
  24 + %span Refs are the same
22 25 .actions
23   - = submit_tag "Compare", class: "btn primary"
  26 + = submit_tag "Compare", class: "btn primary wide commits-compare-btn"
24 27  
25   -
26   -- unless @commits.empty?
  28 +- if @commits.present?
27 29 %div.ui-box
28 30 %h5.small Commits (#{@commits.count})
29 31 %ul.unstyled= render @commits
30 32  
31   -- unless @diffs.empty?
32   - %h4 Diff
33   - = render "commits/diffs", diffs: @diffs
  33 + - unless @diffs.empty?
  34 + %h4 Diff
  35 + = render "commits/diffs", diffs: @diffs
34 36  
35 37 :javascript
36 38 $(function() {
37   - var availableTags = #{@project.heads.map(&:name).to_json};
  39 + var availableTags = #{@project.ref_names.to_json};
38 40  
39 41 $("#from").autocomplete({
40 42 source: availableTags,
... ... @@ -45,5 +47,7 @@
45 47 source: availableTags,
46 48 minLength: 1
47 49 });
  50 +
  51 + disableButtonIfEmptyField('#to', '.commits-compare-btn');
48 52 });
49 53  
... ...