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

3 comments:

winnetou said...

Calkiem fajne, jak Ci sie podoba programowanie w rubym? Ja dlubie juz male skrypty od jakiegos czasu i mi sie Ruby podoba.

pawelstawicki said...

Podoba mi się, tylko brak mi doświadczenia i takiego obycia. Ten skrypt pisałem dwa wieczory, praktycznie każdej funkcji musiałem szukać gdzieś w dokumentacji, internecie itp. Chciałbym porobić coś w rubym z ludźmi którzy już mają takie obycie, żeby się od nich uczyć.

Wyoming Washing Machine Repair said...

Very nice postt