in lib/whimsy/asf/svn.rb [694:766]
def self.update(path, msg, env, _, options={})
if File.directory? path
dir = path
basename = nil
else
dir = File.dirname(path)
basename = File.basename(path)
end
rc = 0
Dir.mktmpdir do |tmpdir|
self.svn_('checkout', [self.getInfoItem(dir, 'url'), tmpdir], _,
{depth: 'empty', env: env})
if basename
tmpfile = File.join(tmpdir, basename)
self.svn_('update', tmpfile, _, {env: env})
else
tmpfile = nil
end
if not tmpfile
previous_contents = contents = nil
yield tmpdir, ''
elsif File.file? tmpfile
previous_contents = File.read(tmpfile)
contents = yield tmpdir, File.read(tmpfile)
else
previous_contents = nil
contents = yield tmpdir, ''
previous_contents = File.read(tmpfile) if File.file? tmpfile
end
if contents and not contents.empty?
File.write tmpfile, contents
unless previous_contents
self.svn_('add', tmpfile, _, {env: env})
end
elsif tmpfile and File.file? tmpfile
File.unlink tmpfile
self.svn_('delete', tmpfile, _, {env: env})
end
if options[:dryrun]
rc = self.svn_('diff', tmpfile || tmpdir, _)
return rc
end
self.svn_('diff', tmpfile || tmpdir, _) if options[:diff]
rc = self.svn_('commit', tmpfile || tmpdir, _,
{msg: msg, env: env})
out, _err = self.svn('status', tmpfile || tmpdir)
unless rc == 0 && out && out.empty?
raise "svn failure #{rc} #{path.inspect} #{out}"
end
end
rc
end