Class: Piston::Svn::WorkingCopy
Instance Attribute Summary
Attributes inherited from WorkingCopy
#path
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from WorkingCopy
add_handler, #copy_from, guess, handlers, #import, #info, #initialize, #logger, logger, #pistonized?, #recall, #remember, #temp_dir_name, #to_s, #update, #validate!
Class Method Details
.client ⇒ Object
15
16
17
|
# File 'lib/piston/svn/working_copy.rb', line 15
def client
@@client ||= Piston::Svn::Client.instance
end
|
.svn(*args) ⇒ Object
19
20
21
|
# File 'lib/piston/svn/working_copy.rb', line 19
def svn(*args)
client.svn(*args)
end
|
.understands_dir?(dir) ⇒ Boolean
10
11
12
13
|
# File 'lib/piston/svn/working_copy.rb', line 10
def understands_dir?(dir)
result = svn(:info, dir) rescue :failed
result == :failed ? false : true
end
|
Instance Method Details
#after_remember(path) ⇒ Object
40
41
42
43
44
45
46
47
48
|
# File 'lib/piston/svn/working_copy.rb', line 40
def after_remember(path)
begin
info = svn(:info, path)
rescue Piston::Svn::Client::CommandError
ensure
return unless info =~ /\(not a versioned resource\)/i || info =~ /\(is not under version control\)/i || info.blank?
svn(:add, path)
end
end
|
#create ⇒ Object
36
37
38
|
# File 'lib/piston/svn/working_copy.rb', line 36
def create
svn(:mkdir, path)
end
|
#exist? ⇒ Boolean
28
29
30
31
32
33
34
|
# File 'lib/piston/svn/working_copy.rb', line 28
def exist?
result = svn(:info, path) rescue :failed
logger.debug {"result: #{result.inspect}"}
return false if result == :failed
return false if result.nil? || result.chomp.strip.empty?
return true if YAML.load(result).has_key?("Path")
end
|
#externals ⇒ Object
Returns all defined externals (recursively) of this WC. Returns a Hash:
{"vendor/rails" => {:revision => :head, :url => "http://dev.rubyonrails.org/svn/rails/trunk"},
"vendor/plugins/will_paginate" => {:revision => 1234, :url => "http://will_paginate.org/svn/trunk"}}
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/piston/svn/working_copy.rb', line 61
def externals
externals = svn(:proplist, "--recursive", "--verbose")
return Hash.new if externals.blank?
returning(Hash.new) do |result|
YAML.load(externals).each_pair do |dir, props|
next if props["svn:externals"].blank?
next unless dir =~ /Properties on '([^']+)'/
basedir = self.path + $1
exts = props["svn:externals"]
exts.split("\n").each do |external|
data = external.match(/^([^\s]+)\s+(?:(?:-r|--revision)\s*(\d+)\s+)?(.+)$/)
case data.length
when 4
subdir, rev, url = data[1], data[2].nil? ? :head : data[2].to_i, data[3]
else
raise SyntaxError, "Could not parse svn:externals on #{basedir}: #{external}"
end
result[basedir + subdir] = {:revision => rev, :url => url}
end
end
end
end
|
#finalize ⇒ Object
50
51
52
53
54
55
|
# File 'lib/piston/svn/working_copy.rb', line 50
def finalize
targets = []
Dir[path + "*"].each do |item|
svn(:add, item)
end
end
|
#merge_changes(to) ⇒ Object
85
86
87
88
89
90
91
92
|
# File 'lib/piston/svn/working_copy.rb', line 85
def merge_changes(to)
data = svn(:info, yaml_path)
info = YAML.load(data)
initial_revision = info["Last Changed Rev"].to_i
logger.debug {"Going to merge #{initial_revision} to #{to.revision}"}
svn(:merge, "--revision", "#{initial_revision}:#{to.revision}", path, path)
logger.debug {"after merge"}
end
|
#remove_external_references(*targets) ⇒ Object
94
95
96
|
# File 'lib/piston/svn/working_copy.rb', line 94
def remove_external_references(*targets)
svn(:propdel, "svn:externals", *targets)
end
|
#svn(*args) ⇒ Object
24
25
26
|
# File 'lib/piston/svn/working_copy.rb', line 24
def svn(*args)
self.class.svn(*args)
end
|