Class: Repository::Darcs

Inherits:
show all
Defined in:
app/models/repository/darcs.rb

Class Method Summary

Instance Method Summary

Methods inherited from

available_scm, #branches, #committer_ids=, #committers, #default_branch, factory, fetch_changesets, #find_changeset_by_name, #find_committer_user, #latest_changeset, #latest_changesets, #properties, #relative_path, #root_url=, scan_changesets_for_issue_ids, #scan_changesets_for_issue_ids, #scm, #scm_name, #supports_annotate?, #supports_cat?, #tags, #url=

Methods inherited from ActiveRecord::Base

quoted_table_name

Class Method Details

+ (Object) scm_name



27
28
29
# File 'app/models/repository/darcs.rb', line 27

def self.scm_name
  'Darcs'
end

Instance Method Details

- (Object) cat(path, identifier = nil)



54
55
56
57
# File 'app/models/repository/darcs.rb', line 54

def cat(path, identifier=nil)
  patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s)
  scm.cat(path, patch.nil? ? nil : patch.scmid)
end

- (Object) diff(path, rev, rev_to)



59
60
61
62
63
64
65
66
67
# File 'app/models/repository/darcs.rb', line 59

def diff(path, rev, rev_to)
  patch_from = changesets.find_by_revision(rev)
  return nil if patch_from.nil?
  patch_to = changesets.find_by_revision(rev_to) if rev_to
  if path.blank?
    path = patch_from.changes.collect{|change| change.path}.join(' ')
  end
  patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil
end

- (Object) entries(path = nil, identifier = nil)



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/repository/darcs.rb', line 36

def entries(path=nil, identifier=nil)
  patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
  entries = scm.entries(path, patch.nil? ? nil : patch.scmid)
  if entries
    entries.each do |entry|
      # Search the DB for the entry's last change
      changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank?
      if changeset
        entry.lastrev.identifier = changeset.revision
        entry.lastrev.name = changeset.revision
        entry.lastrev.time = changeset.committed_on
        entry.lastrev.author = changeset.committer
      end
    end
  end
  entries
end

- (Object) entry(path = nil, identifier = nil)



31
32
33
34
# File 'app/models/repository/darcs.rb', line 31

def entry(path=nil, identifier=nil)
  patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
  scm.entry(path, patch.nil? ? nil : patch.scmid)
end

- (Object) fetch_changesets



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/models/repository/darcs.rb', line 69

def fetch_changesets
  scm_info = scm.info
  if scm_info
    db_last_id = latest_changeset ? latest_changeset.scmid : nil
    next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1      
    # latest revision in the repository
    scm_revision = scm_info.lastrev.scmid      
    unless changesets.find_by_scmid(scm_revision)
      revisions = scm.revisions('', db_last_id, nil, :with_path => true)
      transaction do
        revisions.reverse_each do |revision|
          changeset = Changeset.create(:repository => self,
                                       :revision => next_rev,
                                       :scmid => revision.scmid,
                                       :committer => revision.author, 
                                       :committed_on => revision.time,
                                       :comments => revision.message)
                                       
          revision.paths.each do |change|
            changeset.create_change(change)
          end
          next_rev += 1
        end if revisions
      end
    end
  end
end

- (Object) scm_adapter



23
24
25
# File 'app/models/repository/darcs.rb', line 23

def scm_adapter
  Redmine::Scm::Adapters::DarcsAdapter
end