コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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));
        }