Skip to content

Commit

Permalink
Improve commits compare. Added tags to autocomplete. Dont look for co…
Browse files Browse the repository at this point in the history
…mmits if from & to are empty
  • Loading branch information
Dmitriy Zaporozhets committed Sep 21, 2012
1 parent 49fe8fe commit 4cc169d
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 16 deletions.
1 change: 1 addition & 0 deletions app/controllers/commits_controller.rb
Expand Up @@ -52,6 +52,7 @@ def compare
@commits = result[:commits]
@commit = result[:commit]
@diffs = result[:diffs]
@refs_are_same = result[:same]
@line_notes = []

@commits = CommitDecorator.decorate(@commits)
Expand Down
12 changes: 8 additions & 4 deletions app/models/commit.rb
Expand Up @@ -82,20 +82,24 @@ def commits_between(repo, from, to)
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)
Expand Down
8 changes: 8 additions & 0 deletions app/roles/repository.rb
Expand Up @@ -79,6 +79,14 @@ def heads
@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
Expand Down
28 changes: 16 additions & 12 deletions app/views/commits/compare.html.haml
@@ -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
& press compare button for commits list, code diff.
%code.label_branch master
and press compare button for commits list, code diff.

%br

Expand All @@ -19,22 +19,24 @@
= 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,
Expand All @@ -45,5 +47,7 @@
source: availableTags,
minLength: 1
});

disableButtonIfEmptyField('#to', '.commits-compare-btn');
});

0 comments on commit 4cc169d

Please sign in to comment.