public override FileSystemResult DehydrateFolder(string relativePath) { FileSystemResult result = new FileSystemResult(FSResult.Ok, 0); GitIndexProjection.PathSparseState sparseState = this.FileSystemCallbacks.GitIndexProjection.GetFolderPathSparseState(relativePath); if (sparseState == GitIndexProjection.PathSparseState.Included) { // When the folder is included we need to create the placeholder to make sure it is on disk for enumeration result = this.WritePlaceholderDirectory(relativePath); if (result.Result == FSResult.Ok) { this.FileSystemCallbacks.OnPlaceholderFolderCreated(relativePath, string.Empty); } else if (result.Result == FSResult.FileOrPathNotFound) { // This will happen when the parent folder is also in the dehydrate list and is no longer on disk. result = new FileSystemResult(FSResult.Ok, 0); } else { EventMetadata metadata = this.CreateEventMetadata(relativePath); metadata.Add(nameof(result.Result), result.Result); metadata.Add(nameof(result.RawResult), result.RawResult); this.Context.Tracer.RelatedError(metadata, $"{nameof(this.DehydrateFolder)}: Write placeholder failed"); } } return(result); }
/// <summary> /// Called to indicate a folder was created /// </summary> /// <param name="relativePath">The relative path to the newly created folder</param> /// <param name="sparseFoldersUpdated"> /// true when the folder is successfully added to the sparse list because it is in the projection but currently excluded. /// false when the folder was not excluded or there was a failure adding to the sparse list. /// </param> public void OnFolderCreated(string relativePath, out bool sparseFoldersUpdated) { sparseFoldersUpdated = false; GitIndexProjection.PathSparseState pathProjectionState = this.GitIndexProjection.GetFolderPathSparseState(relativePath); if (pathProjectionState == GitIndexProjection.PathSparseState.Excluded) { if (this.GitIndexProjection.TryAddSparseFolder(relativePath)) { sparseFoldersUpdated = true; return; } } this.AddToNewlyCreatedList(relativePath, isFolder: true); this.backgroundFileSystemTaskRunner.Enqueue(FileSystemTask.OnFolderCreated(relativePath)); }