Class: Redmine::Scm::Adapters::FilesystemAdapter

Inherits:
AbstractAdapter show all
Defined in:
lib/redmine/scm/adapters/filesystem_adapter.rb

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods inherited from AbstractAdapter

#adapter_name, #branches, client_command, client_version, client_version_above?, client_version_string, #default_branch, #diff, #entry, #properties, #revisions, #root_url, shell_quote, #shell_quote, #supports_annotate?, #supports_cat?, #tags, #url, #with_leading_slash, #with_trailling_slash, #without_leading_slash, #without_trailling_slash

Constructor Details

- (FilesystemAdapter) initialize(url, root_url = nil, login = nil, password = nil, path_encoding = nil)



29
30
31
32
33
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 29

def initialize(url, root_url=nil, =nil, password=nil,
               path_encoding=nil)
  @url = with_trailling_slash(url)
  @path_encoding = path_encoding || 'UTF-8'
end

Class Method Details

+ (Object) client_available



24
25
26
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 24

def client_available
  true
end

Instance Method Details

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



86
87
88
89
90
91
92
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 86

def cat(path, identifier=nil)
  p = scm_iconv(@path_encoding, 'UTF-8', target(path))
  File.new(p, "rb").read
rescue  => err
  logger.error "scm: filesystem: error: #{err.message}"
  raise CommandFailed.new(err.message)
end

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



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 51

def entries(path="", identifier=nil)
  entries = Entries.new
  trgt_utf8 = target(path)
  trgt = scm_iconv(@path_encoding, 'UTF-8', trgt_utf8)
  Dir.new(trgt).each do |e1|
    e_utf8 = scm_iconv('UTF-8', @path_encoding, e1)
    next if e_utf8.blank?
    relative_path_utf8 = format_path_ends(
        (format_path_ends(path,false,true) + e_utf8),false,false)
    t1_utf8 = target(relative_path_utf8)
    t1 = scm_iconv(@path_encoding, 'UTF-8', t1_utf8)
    relative_path = scm_iconv(@path_encoding, 'UTF-8', relative_path_utf8)
    e1 = scm_iconv(@path_encoding, 'UTF-8', e_utf8)
    if File.exist?(t1) and # paranoid test
          %w{file directory}.include?(File.ftype(t1)) and # avoid special types
          not File.basename(e1).match(/^\.+$/) # avoid . and ..
      p1         = File.readable?(t1) ? relative_path : ""
      utf_8_path = scm_iconv('UTF-8', @path_encoding, p1)
      entries <<
        Entry.new({ :name => scm_iconv('UTF-8', @path_encoding, File.basename(e1)),
                  # below : list unreadable files, but dont link them.
                  :path => utf_8_path,
                  :kind => (File.directory?(t1) ? 'dir' : 'file'),
                  :size => (File.directory?(t1) ? nil : [File.size(t1)].pack('l').unpack('L').first),
                  :lastrev =>
                      Revision.new({:time => (File.mtime(t1)) })
                })
    end
  end
  entries.sort_by_name
rescue  => err
  logger.error "scm: filesystem: error: #{err.message}"
  raise CommandFailed.new(err.message)
end

- (Object) format_path_ends(path, leading = true, trailling = true)



35
36
37
38
39
40
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 35

def format_path_ends(path, leading=true, trailling=true)
  path = leading ? with_leading_slash(path) :
    without_leading_slash(path)
  trailling ? with_trailling_slash(path) :
    without_trailling_slash(path)
end

- (Object) info



42
43
44
45
46
47
48
49
# File 'lib/redmine/scm/adapters/filesystem_adapter.rb', line 42

def info
  info = Info.new({:root_url => target(),
                    :lastrev => nil
                  })
  info
rescue CommandFailed
  return nil
end