浏览代码

KWSys: Add symlinks to directories as files (#12284)

This behaviour was previously broken; regardless of the
RecurseThroughSymLinks value, symlinks to directories were
NEVER added as files in the results.

When RecurseThroughSymLinks is ON, symlinks to directories
should be recursed as if they were the actual directories
to gather the files within.

However, when RecurseThroughSymLinks is OFF, symlinks to
directories should be returned as files in the result.

Inspired-by: Johan Björk <[email protected]>
David Cole 14 年之前
父节点
当前提交
527a40f06f
共有 1 个文件被更改,包括 9 次插入12 次删除
  1. 9 12
      Source/kwsys/Glob.cxx

+ 9 - 12
Source/kwsys/Glob.cxx

@@ -259,26 +259,23 @@ void Glob::RecurseDirectory(kwsys_stl::string::size_type start,
       }
       }
 
 
     bool isDir = kwsys::SystemTools::FileIsDirectory(realname.c_str());
     bool isDir = kwsys::SystemTools::FileIsDirectory(realname.c_str());
+    bool isSymLink = kwsys::SystemTools::FileIsSymlink(realname.c_str());
 
 
-    if ( !isDir )
+    if ( isDir && (!isSymLink || this->RecurseThroughSymlinks) )
       {
       {
-      if ( (this->Internals->Expressions.size() > 0) && 
-           this->Internals->Expressions[
-             this->Internals->Expressions.size()-1].find(fname.c_str()) )
+      if (isSymLink)
         {
         {
-        this->AddFile(this->Internals->Files, realname.c_str());
+        ++this->FollowedSymlinkCount;
         }
         }
+      this->RecurseDirectory(start+1, realname);
       }
       }
     else
     else
       {
       {
-      bool isSymLink = kwsys::SystemTools::FileIsSymlink(realname.c_str());
-      if (!isSymLink || this->RecurseThroughSymlinks)
+      if ( (this->Internals->Expressions.size() > 0) &&
+           this->Internals->Expressions[
+             this->Internals->Expressions.size()-1].find(fname.c_str()) )
         {
         {
-        if (isSymLink)
-          {
-          ++this->FollowedSymlinkCount;
-          }
-        this->RecurseDirectory(start+1, realname);
+        this->AddFile(this->Internals->Files, realname.c_str());
         }
         }
       }
       }
     }
     }