Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: add missing OS platform attributes #679

Merged
merged 1 commit into from Nov 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions Directory.Build.props
Expand Up @@ -13,6 +13,7 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0' OR '$(TargetFramework)' == 'netcoreapp3.1' OR '$(TargetFramework)' == 'netstandard2.1'">$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONSFEATURE_PATH_JOIN_WITH_SPAN</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0'">$(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE</DefineConstants>
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0'">$(DefineConstants);FEATURE_SUPPORTED_OS_ATTRIBUTE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37">
Expand Down
Expand Up @@ -36,15 +36,8 @@ private string GetRandomTempDirectory()
public string CreateRandomDirectory()
{
var randomPath = this.GetRandomTempDirectory();
try
{
_fileSystem.Directory.CreateDirectory(randomPath);
return randomPath;
}
catch (Exception ex)
{
throw (ex);
}
_fileSystem.Directory.CreateDirectory(randomPath);
return randomPath;
}

private void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)
Expand Down
Expand Up @@ -16,15 +16,8 @@ private static string GetRandomTempDirectory()
public static string CreateDirectory()
{
var randomPath = GetRandomTempDirectory();
try
{
Directory.CreateDirectory(randomPath);
return randomPath;
}
catch (Exception ex)
{
throw (ex);
}
Directory.CreateDirectory(randomPath);
return randomPath;
}

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)
Expand Down
4 changes: 4 additions & 0 deletions src/System.IO.Abstractions.TestingHelpers/MockDirectory.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;
using System.Text.RegularExpressions;

Expand Down Expand Up @@ -125,6 +126,7 @@ public override bool Exists(string path)
}
}

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl(string path)
{
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
Expand All @@ -139,6 +141,7 @@ public override DirectorySecurity GetAccessControl(string path)
return directoryData.AccessControl;
}

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections)
{
return GetAccessControl(path);
Expand Down Expand Up @@ -442,6 +445,7 @@ public override void Move(string sourceDirName, string destDirName)
mockFileDataAccessor.MoveDirectory(fullSourcePath, fullDestPath);
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(string path, DirectorySecurity directorySecurity)
{
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
Expand Down
@@ -1,4 +1,5 @@
using System.Security.AccessControl;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions.TestingHelpers
{
Expand All @@ -16,6 +17,7 @@ public MockDirectoryData() : base(string.Empty)
Attributes = FileAttributes.Directory;
}

[SupportedOSPlatform("windows")]
public new DirectorySecurity AccessControl
{
get
Expand Down
13 changes: 7 additions & 6 deletions src/System.IO.Abstractions.TestingHelpers/MockFile.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;
using System.Text;
using System.Threading;
Expand Down Expand Up @@ -125,9 +126,9 @@ public override void Copy(string sourceFileName, string destFileName, bool overw
Create(path, bufferSize, FileOptions.None);

public override Stream Create(string path, int bufferSize, FileOptions options) =>
CreateInternal(path, options, null);
CreateInternal(path, options);

private Stream CreateInternal(string path, FileOptions options, FileSecurity fileSecurity)
private Stream CreateInternal(string path, FileOptions options)
{
if (path == null)
{
Expand All @@ -137,10 +138,7 @@ private Stream CreateInternal(string path, FileOptions options, FileSecurity fil
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));
VerifyDirectoryExists(path);

var mockFileData = new MockFileData(new byte[0])
{
AccessControl = fileSecurity
};
var mockFileData = new MockFileData(new byte[0]);
mockFileDataAccessor.AddFile(path, mockFileData);
return OpenWriteInternal(path, options);
}
Expand Down Expand Up @@ -192,6 +190,7 @@ public override bool Exists(string path)
return file != null && !file.IsDirectory;
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl(string path)
{
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
Expand All @@ -205,6 +204,7 @@ public override FileSecurity GetAccessControl(string path)
return fileData.AccessControl;
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl(string path, AccessControlSections includeSections)
{
return GetAccessControl(path);
Expand Down Expand Up @@ -603,6 +603,7 @@ public override void Replace(string sourceFileName, string destinationFileName,
Move(sourceFileName, destinationFileName);
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(string path, FileSecurity fileSecurity)
{
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
Expand Down
2 changes: 2 additions & 0 deletions src/System.IO.Abstractions.TestingHelpers/MockFileData.cs
@@ -1,4 +1,5 @@
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;
using System.Text;

Expand Down Expand Up @@ -151,6 +152,7 @@ public string TextContents
/// <summary>
/// Gets or sets <see cref="FileSecurity"/> of the <see cref="MockFileData"/>. This is the object that is returned for this <see cref="MockFileData"/> when calling <see cref="FileBase.GetAccessControl(string)"/>.
/// </summary>
[SupportedOSPlatform("windows")]
public FileSecurity AccessControl
{
get
Expand Down
6 changes: 5 additions & 1 deletion src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs
@@ -1,4 +1,5 @@
using System.Security.AccessControl;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions.TestingHelpers
{
Expand Down Expand Up @@ -215,11 +216,13 @@ public override void Encrypt()
MockFileData.Attributes |= FileAttributes.Encrypted;
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl()
{
return mockFileSystem.File.GetAccessControl(this.path);
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl(AccessControlSections includeSections)
{
return mockFileSystem.File.GetAccessControl(this.path, includeSections);
Expand Down Expand Up @@ -281,6 +284,7 @@ public override IFileInfo Replace(string destinationFileName, string destination
return mockFileSystem.FileInfo.FromFileName(destinationFileName);
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(FileSecurity fileSecurity)
{
mockFileSystem.File.SetAccessControl(this.path, fileSecurity);
Expand Down
@@ -0,0 +1,12 @@
#if !FEATURE_SUPPORTED_OS_ATTRIBUTE
namespace System.Runtime.Versioning
{
[AttributeUsage(AttributeTargets.All)]
internal class SupportedOSPlatformAttribute : Attribute
{
public SupportedOSPlatformAttribute(string _)
{
}
}
}
#endif
4 changes: 4 additions & 0 deletions src/System.IO.Abstractions/DirectoryBase.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions
Expand All @@ -24,6 +25,7 @@ protected DirectoryBase(IFileSystem fileSystem)
public abstract IDirectoryInfo CreateDirectory(string path);

/// <inheritdoc cref="Directory.CreateDirectory(string,DirectorySecurity)"/>
[SupportedOSPlatform("windows")]
public abstract IDirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity);

/// <inheritdoc cref="Directory.Delete(string)"/>
Expand All @@ -36,9 +38,11 @@ protected DirectoryBase(IFileSystem fileSystem)
public abstract bool Exists(string path);

/// <inheritdoc cref="Directory.GetAccessControl(string)"/>
[SupportedOSPlatform("windows")]
public abstract DirectorySecurity GetAccessControl(string path);

/// <inheritdoc cref="Directory.GetAccessControl(string,AccessControlSections)"/>
[SupportedOSPlatform("windows")]
public abstract DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections);

/// <inheritdoc cref="Directory.GetCreationTime"/>
Expand Down
5 changes: 5 additions & 0 deletions src/System.IO.Abstractions/DirectoryInfoWrapper.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions
Expand Down Expand Up @@ -91,6 +92,7 @@ public override void Create()
instance.Create();
}

[SupportedOSPlatform("windows")]
public override void Create(DirectorySecurity directorySecurity)
{
instance.Create(directorySecurity);
Expand Down Expand Up @@ -172,11 +174,13 @@ public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string sea
}
#endif

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl()
{
return instance.GetAccessControl();
}

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl(AccessControlSections includeSections)
{
return instance.GetAccessControl(includeSections);
Expand Down Expand Up @@ -253,6 +257,7 @@ public override void MoveTo(string destDirName)
instance.MoveTo(destDirName);
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(DirectorySecurity directorySecurity)
{
instance.SetAccessControl(directorySecurity);
Expand Down
5 changes: 5 additions & 0 deletions src/System.IO.Abstractions/DirectoryWrapper.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions
Expand All @@ -17,6 +18,7 @@ public override IDirectoryInfo CreateDirectory(string path)
return new DirectoryInfoWrapper(FileSystem, directoryInfo);
}

[SupportedOSPlatform("windows")]
public override IDirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity)
{
var directoryInfo = new DirectoryInfo(path);
Expand All @@ -39,11 +41,13 @@ public override bool Exists(string path)
return Directory.Exists(path);
}

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl(string path)
{
return new DirectoryInfo(path).GetAccessControl();
}

[SupportedOSPlatform("windows")]
public override DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections)
{
return new DirectoryInfo(path).GetAccessControl(includeSections);
Expand Down Expand Up @@ -165,6 +169,7 @@ public override void Move(string sourceDirName, string destDirName)
Directory.Move(sourceDirName, destDirName);
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(string path, DirectorySecurity directorySecurity)
{
new DirectoryInfo(path).SetAccessControl(directorySecurity);
Expand Down
5 changes: 4 additions & 1 deletion src/System.IO.Abstractions/DriveInfoWrapper.cs
@@ -1,4 +1,6 @@
namespace System.IO.Abstractions
using System.Runtime.Versioning;

namespace System.IO.Abstractions
{
/// <summary>
/// The wrapper for a <see cref="DriveInfo"/>.
Expand Down Expand Up @@ -151,6 +153,7 @@ public override string VolumeLabel
{
get { return instance.VolumeLabel; }

[SupportedOSPlatform("windows")]
set { instance.VolumeLabel = value; }
}

Expand Down
4 changes: 4 additions & 0 deletions src/System.IO.Abstractions/FileBase.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Runtime.Versioning;
using System.Security.AccessControl;
using System.Text;

Expand Down Expand Up @@ -92,9 +93,11 @@ protected FileBase(IFileSystem fileSystem)


/// <inheritdoc cref="File.GetAccessControl(string)"/>
[SupportedOSPlatform("windows")]
public abstract FileSecurity GetAccessControl(string path);

/// <inheritdoc cref="File.GetAccessControl(string,AccessControlSections)"/>
[SupportedOSPlatform("windows")]
public abstract FileSecurity GetAccessControl(string path, AccessControlSections includeSections);


Expand Down Expand Up @@ -314,6 +317,7 @@ protected FileBase(IFileSystem fileSystem)
public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);

/// <inheritdoc cref="File.SetAccessControl(string,FileSecurity)"/>
[SupportedOSPlatform("windows")]
public abstract void SetAccessControl(string path, FileSecurity fileSecurity);

/// <inheritdoc cref="File.SetAttributes"/>
Expand Down
8 changes: 7 additions & 1 deletion src/System.IO.Abstractions/FileInfoWrapper.cs
@@ -1,4 +1,5 @@
using System.Security.AccessControl;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions
{
Expand Down Expand Up @@ -109,21 +110,25 @@ public override StreamWriter CreateText()
return instance.CreateText();
}

[SupportedOSPlatform("windows")]
public override void Decrypt()
{
instance.Decrypt();
}

[SupportedOSPlatform("windows")]
public override void Encrypt()
{
instance.Encrypt();
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl()
{
return instance.GetAccessControl();
}

[SupportedOSPlatform("windows")]
public override FileSecurity GetAccessControl(AccessControlSections includeSections)
{
return instance.GetAccessControl(includeSections);
Expand Down Expand Up @@ -181,6 +186,7 @@ public override IFileInfo Replace(string destinationFileName, string destination
return new FileInfoWrapper(FileSystem, instance.Replace(destinationFileName, destinationBackupFileName, ignoreMetadataErrors));
}

[SupportedOSPlatform("windows")]
public override void SetAccessControl(FileSecurity fileSecurity)
{
instance.SetAccessControl(fileSecurity);
Expand Down