private void ProcessFolder(string folder, DiffFolder parentFolder, bool topFolder, DiffFolder.TypeOfOwner ownerType) { string singleFolderName = Slyce.Common.Utility.GetSingleDirectoryName(folder).ToLower(); // TODO: We need to add the ability for the user to specify folders that should be ignored if (singleFolderName == ".svn" || singleFolderName == "_svn") { return; } if (!Directory.Exists(folder)) { return; } // Make sure the folder exists in the user folder structure on disk string stagingFolder = ""; switch (ownerType) { case DiffFolder.TypeOfOwner.Parent: stagingFolder = folder.Replace(PreviousGenerationFolder, StagingFolder); break; case DiffFolder.TypeOfOwner.Generated: stagingFolder = folder.Replace(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), StagingFolder); break; case DiffFolder.TypeOfOwner.User: stagingFolder = folder.Replace(Controller.Instance.ProjectSettings.ProjectPath, StagingFolder); break; } if (!Directory.Exists(stagingFolder)) { Directory.CreateDirectory(stagingFolder); } DiffFolder folderNode = null; if (parentFolder != null) { string folderName = folder.Substring(folder.LastIndexOf(Path.DirectorySeparatorChar) + 1); foreach (DiffFolder dFolder in parentFolder.SubFolders) { if (dFolder.Name == folderName) { folderNode = dFolder; break; } } if (folderNode == null) { folderNode = new DiffFolder(folderName); parentFolder.AddSubFolder(folderNode); } } else { if (RootFolder == null) { RootFolder = new DiffFolder("Root"); } folderNode = RootFolder; } string[] folders = Directory.GetDirectories(folder); string[] fileNames = Directory.GetFiles(folder); foreach (string folderName in folders) { ProcessFolder(folderName, folderNode, ownerType); } AddFileNodesToFolderNode(ref folderNode, fileNames, ownerType); // Perform a diff on all files in the folder PerformDiffOfFolder(folderNode); }
/// <summary> /// Creates inert DiffFiles and adds them to the folderNode, so that further operations /// can be performed on them later. /// </summary> /// <param name="folderNode"></param> /// <param name="fileNames"></param> /// <param name="ownerType"></param> private void AddFileNodesToFolderNode(ref DiffFolder folderNode, string[] fileNames, DiffFolder.TypeOfOwner ownerType) { foreach (string fileName in fileNames) { if (Path.GetExtension(fileName).ToLower() != ".aaz") { DiffFile fileNode = new DiffFile(Path.GetFileName(fileName)); switch (ownerType) { case DiffFolder.TypeOfOwner.Parent: fileNode.FilePathPrevGen = fileName; break; case DiffFolder.TypeOfOwner.Generated: fileNode.FilePathTemplate = fileName; break; case DiffFolder.TypeOfOwner.User: fileNode.FilePathUser = fileName; break; } folderNode.AddFile(fileNode, ownerType); } } }
private void ProcessFolder(string folder, DiffFolder parentFolder, DiffFolder.TypeOfOwner ownerType) { ProcessFolder(folder, parentFolder, false, ownerType); }