summaryrefslogtreecommitdiff
path: root/lib/gitlab/git/compare.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-04-01 16:03:11 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-04-01 16:03:11 +0300
commitbb06e905efb1722502d71059c21add8cfde851aa (patch)
treeac6646f7fc13a4d6539f51a8d24f0cdb78208817 /lib/gitlab/git/compare.rb
parent51c167554cf492be98cecad182a6870cd6febb82 (diff)
downloadgitlab-ce-bb06e905efb1722502d71059c21add8cfde851aa.tar.gz
added Gitlab::Git::Compare for git compare feature
Diffstat (limited to 'lib/gitlab/git/compare.rb')
-rw-r--r--lib/gitlab/git/compare.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/gitlab/git/compare.rb b/lib/gitlab/git/compare.rb
new file mode 100644
index 00000000000..1fa4306200f
--- /dev/null
+++ b/lib/gitlab/git/compare.rb
@@ -0,0 +1,37 @@
+module Gitlab
+ module Git
+ class Compare
+ attr_accessor :commits, :commit, :diffs, :same
+
+ def initialize(repository, from, to)
+ @commits, @diffs = [], []
+ @commit = nil
+ @same = false
+
+ return unless from && to
+
+ first = repository.commit(to.try(:strip))
+ last = repository.commit(from.try(:strip))
+
+ return unless first && last
+
+ if first.id == last.id
+ @same = true
+ return
+ end
+
+ @commit = Commit.new(first)
+
+ @commits = repository.commits_between(last.id, first.id)
+ @commits = @commits.map { |c| Commit.new(c) }
+
+ @diffs = if @commits.size > 100
+ []
+ else
+ repository.repo.diff(last.id, first.id) rescue []
+ end
+ end
+ end
+ end
+end
+