Showing posts with label skrypt. Show all posts
Showing posts with label skrypt. Show all posts

Sunday, September 14, 2008

Nadać plikowi takie same prawa dla grupy jakie ma dla właściciela - skrypcik w Rubym

Poniżej prosty (w miarę) skrypcik w rubym, nadający plikom takie same uprawnienia dla grupy, jak dla właściciela. Przydatne jeśli chcemy korzystać z Subversion za pomocą protokołu svn+ssh - wtedy użytkownik musi mieć odpowiednie uprawnienia do plików w repozytorium.
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