##// END OF EJS Templates
scm: set supporting directory revisions or not at scm level....
scm: set supporting directory revisions or not at scm level. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5144 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r5024:bae1763a09ae
r5024:bae1763a09ae
Show More
git.rb
134 lines | 4.2 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 # redMine - project management software
# Copyright (C) 2006-2007 Jean-Philippe Lang
# Copyright (C) 2007 Patrick Aljord patcito@ŋmail.com
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'redmine/scm/adapters/git_adapter'
class Repository::Git < Repository
attr_protected :root_url
validates_presence_of :url
Toshi MARUYAMA
scm: add scm specific human_attribute_name for input validation....
r4855 ATTRIBUTE_KEY_NAMES = {
"url" => "Path to repository",
}
def self.human_attribute_name(attribute_key_name)
ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
end
Toshi MARUYAMA
scm: add scm command and version methods at repository models (#4273)....
r4702 def self.scm_adapter_class
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 Redmine::Scm::Adapters::GitAdapter
end
Toshi MARUYAMA
scm: add scm command and version methods at repository models (#4273)....
r4702
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 def self.scm_name
'Git'
end
Toshi MARUYAMA
scm: set supporting directory revisions or not at scm level....
r5024 def supports_directory_revisions?
true
end
Toshi MARUYAMA
scm: git: use --encoding=UTF-8 in "git log" (#3396)....
r4844 def repo_log_encoding
'UTF-8'
end
Toshi MARUYAMA
Changing revision label and identifier at SCM adapter level (#3724, #6092)...
r4493 # Returns the identifier for the given git changeset
def self.changeset_identifier(changeset)
changeset.scmid
end
# Returns the readable identifier for the given git changeset
def self.format_changeset_identifier(changeset)
changeset.revision[0, 8]
end
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735 def branches
scm.branches
end
def tags
scm.tags
end
Toshi MARUYAMA
scm: git: implement find_changeset_by_name (#7047)....
r4731 def find_changeset_by_name(name)
return nil if name.nil? || name.empty?
e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
return e if e
changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
end
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735 # With SCM's that have a sequential commit numbering, redmine is able to be
# clever and only fetch changesets going forward from the most recent one
# it knows about. However, with git, you never know if people have merged
Jean-Philippe Lang
Do not parse the entire git log to fetch new commits (takes several minutes for a few thousands commits), but only 1 week before the last known commit (#4547, #4716)....
r3280 # commits into the middle of the repository history, so we should parse
# the entire log. Since it's way too slow for large repositories, we only
# parse 1 week before the last known commit.
# The repository can still be fully reloaded by calling #clear_changesets
# before fetching changesets (eg. for offline resync)
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 def fetch_changesets
Jean-Philippe Lang
Do not parse the entire git log to fetch new commits (takes several minutes for a few thousands commits), but only 1 week before the last known commit (#4547, #4716)....
r3280 c = changesets.find(:first, :order => 'committed_on DESC')
since = (c ? c.committed_on - 7.days : nil)
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735
Toshi MARUYAMA
scm: git: insert revisions to database with reverse commit order (#7821, #5357)....
r4953 revisions = scm.revisions('', nil, nil, {:all => true, :since => since, :reverse => true})
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735 return if revisions.nil? || revisions.empty?
Jean-Philippe Lang
Do not parse the entire git log to fetch new commits (takes several minutes for a few thousands commits), but only 1 week before the last known commit (#4547, #4716)....
r3280 recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since])
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735
# Clean out revisions that are no longer in git
Jean-Philippe Lang
Do not parse the entire git log to fetch new commits (takes several minutes for a few thousands commits), but only 1 week before the last known commit (#4547, #4716)....
r3280 recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }}
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735
# Subtract revisions that redmine already knows about
Jean-Philippe Lang
Do not parse the entire git log to fetch new commits (takes several minutes for a few thousands commits), but only 1 week before the last known commit (#4547, #4716)....
r3280 recent_revisions = recent_changesets.map{|c| c.scmid}
revisions.reject!{|r| recent_revisions.include?(r.scmid)}
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735
# Save the remaining ones to the database
Toshi MARUYAMA
scm: git: move saving changesets from adapter to model (#3396)....
r4839 unless revisions.nil?
revisions.each do |rev|
transaction do
changeset = Changeset.new(
:repository => self,
:revision => rev.identifier,
:scmid => rev.scmid,
:committer => rev.author,
:committed_on => rev.time,
:comments => rev.message)
if changeset.save
rev.paths.each do |file|
Change.create(
:changeset => changeset,
:action => file[:action],
:path => file[:path])
end
end
end
end
end
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735 end
def latest_changesets(path,rev,limit=10)
revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false)
return [] if revisions.nil? || revisions.empty?
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222
Eric Davis
Added branch and tag support to the git repository viewer. (#1406)...
r2735 changesets.find(
:all,
:conditions => [
"scmid IN (?)",
revisions.map!{|c| c.scmid}
],
:order => 'committed_on DESC'
)
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 end
end