Save flags in with_full_permissions.
				
					
				
			This commit is contained in:
		
							parent
							
								
									9393b16930
								
							
						
					
					
						commit
						642e355b4f
					
				@ -92,12 +92,14 @@ module Hbc
 | 
			
		||||
 | 
			
		||||
    def with_full_permissions(path)
 | 
			
		||||
      original_mode = (path.stat.mode % 01000).to_s(8)
 | 
			
		||||
      # TODO: similarly read and restore macOS flags (cf man chflags)
 | 
			
		||||
      original_flags = @command.run!("/usr/bin/stat", args: ["-f", "%Of", "--", path]).stdout.chomp
 | 
			
		||||
 | 
			
		||||
      @command.run!("/bin/chmod", args: ["--", "777", path], sudo: true)
 | 
			
		||||
      yield
 | 
			
		||||
    ensure
 | 
			
		||||
      if path.exist? # block may have removed dir
 | 
			
		||||
        @command.run!("/bin/chmod", args: ["--", original_mode, path], sudo: true)
 | 
			
		||||
        @command.run!("/usr/bin/chflags", args: ["--", original_flags, path], sudo: true)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
describe Hbc::Pkg, :cask do
 | 
			
		||||
  describe "#uninstall" do
 | 
			
		||||
    let(:fake_system_command) { Hbc::NeverSudoSystemCommand }
 | 
			
		||||
    let(:empty_response) { double(stdout: "", plist: {"volume" => "/", "install-location" => "", "paths" => {}}) }
 | 
			
		||||
    let(:empty_response) { double(stdout: "", plist: { "volume" => "/", "install-location" => "", "paths" => {} }) }
 | 
			
		||||
    let(:pkg) { described_class.new("my.fake.pkg", fake_system_command) }
 | 
			
		||||
 | 
			
		||||
    it "removes files and dirs referenced by the pkg" do
 | 
			
		||||
@ -51,7 +51,7 @@ describe Hbc::Pkg, :cask do
 | 
			
		||||
 | 
			
		||||
    it "removes broken symlinks" do
 | 
			
		||||
      fake_dir  = Pathname.new(Dir.mktmpdir)
 | 
			
		||||
      fake_root  = Pathname.new(Dir.mktmpdir)
 | 
			
		||||
      fake_root = Pathname.new(Dir.mktmpdir)
 | 
			
		||||
      fake_file = fake_dir.join("ima_file").tap { |path| FileUtils.touch(path) }
 | 
			
		||||
 | 
			
		||||
      intact_symlink = fake_dir.join("intact_symlink").tap { |path| path.make_symlink(fake_file) }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user