def give_rights_of_owner_to_group(file_path)
s = File::Stat.new((file_path))
rights = sprintf('%o', s.mode)
all = rights[-1,1]
group = rights[-2,1]
owner = rights[-3,1]
beginning = rights[0..-4]
new_rights = "#{beginning}#{owner}#{owner}#{all}".to_i 8
puts "#{(file_path)}: #{rights} #{sprintf('%o', new_rights)}"
File.chmod(new_rights, file_path)
end
def chmod_all_files_in_dir(dir_path)
Dir.open(dir_path) do |d|
d.each do |fn|
if not fn =~ /^(\.\.?)$/
file_path = File.expand_path(d.path + File::Separator + fn)
give_rights_of_owner_to_group file_path
if File.directory? file_path
chmod_all_files_in_dir file_path
end
end
end
end
end
if $*.empty?
chmod_all_files_in_dir(".")
else
chmod_all_files_in_dir($*[0])
end
Używa się podając jako parametr katalog w którym chcemy zmienić uprawnienia (czyli katalog repozytorium Subversion). Uruchomione bez parametru zmienia uprawnienia w bierzącym katalogu. Oczywiście żeby zmienić uprawnienia do pliku którego nie jesteśmy właścicielem musimy skrypt uruchamiać z prawami roota. Czyli uruchamiamy tak:
sudo script.rb /home/svn/repository