Prechádzať zdrojové kódy

Ignore directory if empty .ignore file is present (#14536)

Piyush Rungta 3 dní pred
rodič
commit
e86315128d

+ 23 - 6
Emby.Server.Implementations/Library/DotIgnoreIgnoreRule.cs

@@ -42,6 +42,19 @@ public class DotIgnoreIgnoreRule : IResolverIgnoreRule
     /// <returns>True if the file should be ignored.</returns>
     public static bool IsIgnored(FileSystemMetadata fileInfo, BaseItem? parent)
     {
+        if (fileInfo.IsDirectory)
+        {
+            var dirIgnoreFile = FindIgnoreFile(new DirectoryInfo(fileInfo.FullName));
+            if (dirIgnoreFile is null)
+            {
+                return false;
+            }
+
+            // ignore the directory only if the .ignore file is empty
+            // evaluate individual files otherwise
+            return string.IsNullOrWhiteSpace(GetFileContent(dirIgnoreFile));
+        }
+
         var parentDirPath = Path.GetDirectoryName(fileInfo.FullName);
         if (string.IsNullOrEmpty(parentDirPath))
         {
@@ -55,13 +68,9 @@ public class DotIgnoreIgnoreRule : IResolverIgnoreRule
             return false;
         }
 
-        string ignoreFileString;
-        using (var reader = ignoreFile.OpenText())
-        {
-            ignoreFileString = reader.ReadToEnd();
-        }
+        string ignoreFileString = GetFileContent(ignoreFile);
 
-        if (string.IsNullOrEmpty(ignoreFileString))
+        if (string.IsNullOrWhiteSpace(ignoreFileString))
         {
             // Ignore directory if we just have the file
             return true;
@@ -74,4 +83,12 @@ public class DotIgnoreIgnoreRule : IResolverIgnoreRule
 
         return ignore.IsIgnored(fileInfo.FullName);
     }
+
+    private static string GetFileContent(FileInfo dirIgnoreFile)
+    {
+        using (var reader = dirIgnoreFile.OpenText())
+        {
+            return reader.ReadToEnd();
+        }
+    }
 }