예제 #1
0
        /// <summary>
        /// Moves a virtual directopry to a new location, optioanlly renaming it in the process.
        /// </summary>
        /// <param name="sourceDirectory">The source directory to be moved.</param>
        /// <param name="targetDirectory">The destination directory.</param>
        /// <param name="newName">An optional new name. Supply <c>null</c> to use the original name of the source file.</param>
        public static void MoveDirectory(VirtualDirectory sourceDirectory, UnifiedDirectory targetDirectory, string newName)
        {
            if (String.IsNullOrEmpty(newName))
            {
                newName = sourceDirectory.Name;
            }

            string targetVirtualDirectoryPath = VirtualPathUtility.Combine(targetDirectory.VirtualPath, newName);

            // TODO: Move this logic into UnifiedDirectoey it shouldn't be possible to orphan directories.
            if (!ValidatePathStructureForMove(sourceDirectory.VirtualPath, targetVirtualDirectoryPath))
            {
                throw new ArgumentException("Moving a folder below itself is not allowed.");
            }

            UnifiedDirectory unifiedSourceDirectory = sourceDirectory as UnifiedDirectory;

            if (unifiedSourceDirectory != null)
            {
                if (unifiedSourceDirectory.Parent.VirtualPath != targetDirectory.VirtualPath)
                {
                    VersioningDirectory versioningDirectory = sourceDirectory as VersioningDirectory;
                    if (versioningDirectory != null)
                    {
                        ThrowIfCheckedOut(versioningDirectory);
                    }
                }

                unifiedSourceDirectory.MoveTo(targetVirtualDirectoryPath);
            }
            // If source directory isn't a UnifiedDirectory we can't move it.
        }
예제 #2
0
        /// <summary>
        /// Ensures that versioning directory can be updated.
        /// </summary>
        /// <param name="directory">The directory.</param>
        private static void ThrowIfCheckedOut(VersioningDirectory directory)
        {
            Validate.RequiredParameter("directory", directory);

            foreach (IVersioningFile file in directory.Files)
            {
                ThrowIfCheckedOut(file);
            }
            foreach (VersioningDirectory childDirectory in directory.Directories)
            {
                ThrowIfCheckedOut(childDirectory);
            }
        }