File: FilePermissionSetter.cs
Web Access
Project: ..\..\..\src\Cli\dotnet\dotnet.csproj (dotnet)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using Microsoft.DotNet.Cli.Utils;
 
namespace Microsoft.DotNet.Cli;
 
internal class FilePermissionSetter : IFilePermissionSetter
{
    public void SetUserExecutionPermission(string path)
    {
        RunCommand(path, "u+x");
    }
 
    /// <summary>
    /// Chmod 755 (chmod a+rwx,g-w,o-w) sets permissions so that, (U)ser / owner can read, can write and can execute.
    /// (G)roup can read, can't write and can execute.
    /// (O)thers can read, can't write and can execute.
    /// </summary>
    public void SetPermission(string path, string chmodArgument)
    {
        RunCommand(path, chmodArgument.ToString());
    }
 
    private static void RunCommand(string path, string chmodArgument)
    {
        if (OperatingSystem.IsWindows())
        {
            return;
        }
 
        CommandResult result = new CommandFactory.CommandFactory()
            .Create("chmod", [chmodArgument, path])
            .CaptureStdOut()
            .CaptureStdErr()
            .Execute();
 
        if (result.ExitCode != 0)
        {
            throw new FilePermissionSettingException(result.StdErr);
        }
    }
}