Example #1
0
 private void MoveToTrash(string filePath, CancellationToken token)
 {
     ShouldExecute((t) =>
     {
         Ensure(_trashFolder, t);
         //new ZlpFileInfo(filePath).Attributes = FileAttributes.Normal;
         if (_fs.FileExist(filePath, t))
         {
             var newPath = GetTmpFile(_trashFolder, t);
             _fs.SetAttributes(filePath, FileAttributes.Normal, t);
             _fs.Move(filePath, newPath, t);
         }
     }, token);
 }
        public AssemblyInfoUpdate(IFileSystem fileSystem, GitHubFlowVersionContext context)
        {
            if (!context.Arguments.UpdateAssemblyInfo)
            {
                return;
            }

            var assemblyInfoFiles = fileSystem.GetFiles(context.RepositoryRoot, "AssemblyInfo.cs",
                                                        SearchOption.AllDirectories);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var destFileName   = assemblyInfoFile + ".bak";
                var sourceFileName = assemblyInfoFile;
                fileSystem.Copy(assemblyInfoFile, destFileName, true);
                _restoreBackupTasks.Add(() => fileSystem.Move(destFileName, sourceFileName, true));
                _cleanupBackupTasks.Add(() => fileSystem.DeleteFile(destFileName));

                var assemblyVersion     = context.Variables[VariableProvider.AssemblyVersion];
                var assemblyInfoVersion = context.Variables[VariableProvider.AssemblyInformationalVersion];
                var assemblyFileVersion = context.Variables[VariableProvider.AssemblyFileVersion];
                var fileContents        = fileSystem.ReadAllText(sourceFileName)
                                          .RegexReplace(@"AssemblyVersion\(""\d+.\d+.\d+(.\d+|\*)?""\)", string.Format("AssemblyVersion(\"{0}\")", assemblyVersion))
                                          .RegexReplace(@"AssemblyInformationalVersion\(""\d+.\d+.\d+(.\d+|\*)?""\)", string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion))
                                          .RegexReplace(@"AssemblyFileVersion\(""\d+.\d+.\d+(.\d+|\*)?""\)", string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion));

                fileSystem.WriteAllText(sourceFileName, fileContents);
            }
        }
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo) return;

            if (args.Output != OutputType.Json)
                Console.WriteLine("Updating assembly info files");

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile + ".bak";
                var localAssemblyInfo = assemblyInfoFile;
                fileSystem.Copy(assemblyInfoFile, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                        fileSystem.Delete(localAssemblyInfo);
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var assemblyVersion = variables.AssemblySemVer;
                var assemblyInfoVersion = variables.InformationalVersion;
                var assemblyFileVersion = variables.MajorMinorPatch + ".0";
                var fileContents = fileSystem.ReadAllText(assemblyInfoFile)
                    .RegexReplace(@"AssemblyVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyVersion(\"{0}\")", assemblyVersion))
                    .RegexReplace(@"AssemblyInformationalVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion))
                    .RegexReplace(@"AssemblyFileVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion));

                fileSystem.WriteAllText(assemblyInfoFile, fileContents);
            }
        }
Example #4
0
        public async Task FileRenamed()
        {
            _fs.Create(_dir);
            _fs.Create(_file).Dispose();
            var tmpFile = _file.Rename(Guid.NewGuid() + ".txt");

            var renamed = _fs.Watch(_file).Take(1).ToTask();

            _fs.Move(_file, tmpFile);
            Assert.AreEqual(Unit.Default, await renamed.TimeoutAfter(TimeSpan.FromSeconds(2)), "Did not get file moved event!");

            var renamedBack = _fs.Watch(_file).Take(1).ToTask();

            _fs.Move(tmpFile, _file);
            Assert.AreEqual(Unit.Default, await renamedBack.TimeoutAfter(TimeSpan.FromSeconds(2)), "Did not get file moved event!");
        }
Example #5
0
 public void Restore()
 {
     if (_fileSystem.Exists(_backup))
     {
         _fileSystem.Delete(_original);
         _fileSystem.Move(_backup, _original);
     }
 }
Example #6
0
        static void CreateNew(this IFileSystem fileSystem, AbsoluteDirectoryPath path)
        {
            var tempDirectory = path.ContainingDirectory / DirectoryName.GetRandomDirectoryName();

            Directory.CreateDirectory(tempDirectory.NativePath);
            fileSystem.Create(path.ContainingDirectory);
            fileSystem.Move(tempDirectory, path);
        }
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo)
            {
                return;
            }

            if (args.Output != OutputType.Json)
            {
                Logger.WriteInfo("Updating assembly info files");
            }

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem).ToList();

            Logger.WriteInfo(string.Format("Found {0} files", assemblyInfoFiles.Count));

            var assemblyVersion           = variables.AssemblySemVer;
            var assemblyVersionRegex      = new Regex(@"AssemblyVersion(Attribute)?\s*\(\s*""[^""]*""\s*\)");
            var assemblyVersionString     = !string.IsNullOrWhiteSpace(assemblyVersion) ? string.Format("AssemblyVersion(\"{0}\")", assemblyVersion) : null;
            var assemblyInfoVersion       = variables.InformationalVersion;
            var assemblyInfoVersionRegex  = new Regex(@"AssemblyInformationalVersion(Attribute)?\s*\(\s*""[^""]*""\s*\)");
            var assemblyInfoVersionString = string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion);
            var assemblyFileVersion       = variables.MajorMinorPatch + ".0";
            var assemblyFileVersionRegex  = new Regex(@"AssemblyFileVersion(Attribute)?\s*\(\s*""[^""]*""\s*\)");
            var assemblyFileVersionString = string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile.FullName + ".bak";
                var localAssemblyInfo  = assemblyInfoFile.FullName;
                fileSystem.Copy(assemblyInfoFile.FullName, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var fileContents       = fileSystem.ReadAllText(assemblyInfoFile.FullName);
                var appendedAttributes = false;
                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    fileContents = ReplaceOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }
                fileContents = ReplaceOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                fileContents = ReplaceOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString, assemblyInfoFile.Extension, ref appendedAttributes);

                if (appendedAttributes)
                {
                    // If we appended any attributes, put a new line after them
                    fileContents += Environment.NewLine;
                }
                fileSystem.WriteAllText(assemblyInfoFile.FullName, fileContents);
            }
        }
 private void CopyFiles(IEnumerable <string> filesForRule, string targetDirectory)
 {
     foreach (var sourceFile in filesForRule)
     {
         string fileName = Path.GetFileName(sourceFile);
         string target   = Path.Combine(targetDirectory, fileName);
         _fileSystem.Move(sourceFile, target);
     }
 }
Example #9
0
        /// <summary>
        /// 移动文件
        /// </summary>
        /// <param name="_sourceFilePath"></param>
        /// <param name="_targetFilePath"></param>
        public void MoveFile(string _sourceFilePath, string _targetFilePath)
        {
            if (false == CheckNullPath(_sourceFilePath) || false == CheckNullPath(_targetFilePath))
            {
                return;
            }

            fileSystem.Move(_sourceFilePath, _targetFilePath);
        }
Example #10
0
        public void MakeFilename(Mp3File file)
        {
            var newPath = Path.GetDirectoryName(file.path) + "\\" + file.Artist + " - " + file.Title + Path.GetExtension(file.path);

            if (!_fileSystem.Exists(newPath))
            {
                _fileSystem.Move(file.path, newPath);
                file.path = newPath;
            }
        }
Example #11
0
        public static BackedUpFile BackupAndDeleteFile(this IFileSystem fileSystem, AbsoluteFilePath path)
        {
            var backup = fileSystem.MakeUnique(path.AddExtension("bak"));

            if (fileSystem.Exists(path))
            {
                fileSystem.Move(path, backup);
            }

            return(new BackedUpFile(fileSystem, path, backup));
        }
Example #12
0
 private void MovePackageFile(string externalPackageUri, string tempPath, Package package, string fileExtension)
 {
     if (string.IsNullOrWhiteSpace(externalPackageUri))
     {
         string fullPackagePath = Path.Combine(_configSettings.PhysicalSitePath, _configSettings.RelativePackageDirectory);
         string packagePath     = string.Format(@"{0}\{1}\{1}-{2}.{3}", fullPackagePath, package.Id, package.Version, fileExtension);
         _fileSystem.Move(tempPath, packagePath, true);
     }
     else
     {
         package.ExternalPackageUrl = externalPackageUri;
     }
 }
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo) return;

            if (args.Output != OutputType.Json)
                Logger.WriteInfo("Updating assembly info files");

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem).ToList();
            Logger.WriteInfo(string.Format("Found {0} files", assemblyInfoFiles.Count));

            var assemblyVersion = variables.AssemblySemVer;
            var assemblyVersionRegex = new Regex(@"AssemblyVersion\s*\(\s*""[^""]*""\s*\)");
            var assemblyVersionString = !string.IsNullOrWhiteSpace(assemblyVersion) ? string.Format("AssemblyVersion(\"{0}\")", assemblyVersion) : null;
            var assemblyInfoVersion = variables.InformationalVersion;
            var assemblyInfoVersionRegex = new Regex(@"AssemblyInformationalVersion\s*\(\s*""[^""]*""\s*\)");
            var assemblyInfoVersionString = string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion);
            var assemblyFileVersion = variables.MajorMinorPatch + ".0";
            var assemblyFileVersionRegex = new Regex(@"AssemblyFileVersion\s*\(\s*""[^""]*""\s*\)");
            var assemblyFileVersionString = string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile.FullName + ".bak";
                var localAssemblyInfo = assemblyInfoFile.FullName;
                fileSystem.Copy(assemblyInfoFile.FullName, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                        fileSystem.Delete(localAssemblyInfo);
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var fileContents = fileSystem.ReadAllText(assemblyInfoFile.FullName);
                var appendedAttributes = false;
                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    fileContents = ReplaceOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }
                fileContents = ReplaceOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                fileContents = ReplaceOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString, assemblyInfoFile.Extension, ref appendedAttributes);

                if (appendedAttributes)
                {
                    // If we appended any attributes, put a new line after them
                    fileContents += Environment.NewLine;
                }
                fileSystem.WriteAllText(assemblyInfoFile.FullName, fileContents);
            }
        }
Example #14
0
        /// <inheritdoc cref="IDownloader.Install(IPackage, string)" />
        /// <param name="output">Whether is display the output message.</param>
        public virtual void Install(IPackage package, string cwd, bool output)
        {
            if (output)
            {
                io.WriteError($"  - Installing <info>{package.GetName()}</info> (<comment>{package.GetVersionPrettyFull()}</comment>)");
            }

            var uri = new Uri(package.GetDistUri());
            var downloadedFilePath = GetDownloadedFilePath(package, cwd);
            var installPath        = Path.Combine(cwd, Path.GetFileName(uri.AbsolutePath));

            fileSystem.Delete(cwd);
            fileSystem.Move(downloadedFilePath, installPath);
        }
Example #15
0
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo)
            {
                return;
            }

            if (args.Output != OutputType.Json)
            {
                Console.WriteLine("Updating assembly info files");
            }

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem);

            Console.WriteLine("Found {0} files", assemblyInfoFiles.Count());

            var assemblyVersion           = variables.AssemblySemVer;
            var assemblyVersionRegex      = new Regex(@"AssemblyVersion\(""[^""]*""\)");
            var assemblyVersionString     = string.Format("AssemblyVersion(\"{0}\")", assemblyVersion);
            var assemblyInfoVersion       = variables.InformationalVersion;
            var assemblyInfoVersionRegex  = new Regex(@"AssemblyInformationalVersion\(""[^""]*""\)");
            var assemblyInfoVersionString = string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion);
            var assemblyFileVersion       = variables.MajorMinorPatch + ".0";
            var assemblyFileVersionRegex  = new Regex(@"AssemblyFileVersion\(""[^""]*""\)");
            var assemblyFileVersionString = string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion);

            foreach (var assemblyInfoFile in assemblyInfoFiles.Select(f => new FileInfo(f)))
            {
                var backupAssemblyInfo = assemblyInfoFile.FullName + ".bak";
                var localAssemblyInfo  = assemblyInfoFile.FullName;
                fileSystem.Copy(assemblyInfoFile.FullName, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var fileContents = fileSystem.ReadAllText(assemblyInfoFile.FullName);
                fileContents = ReplaceOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString);
                fileContents = ReplaceOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString);
                fileContents = ReplaceOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString);

                fileSystem.WriteAllText(assemblyInfoFile.FullName, fileContents);
            }
        }
Example #16
0
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, Dictionary <string, string> variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo)
            {
                return;
            }

            if (args.Output != OutputType.Json)
            {
                Console.WriteLine("Updating assembly info files");
            }

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile + ".bak";
                var localAssemblyInfo  = assemblyInfoFile;
                fileSystem.Copy(assemblyInfoFile, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                string assemblyVersion;
                if (!string.IsNullOrWhiteSpace(args.AssemblyVersionFormat))
                {
                    assemblyVersion = variables[args.AssemblyVersionFormat];
                }
                else
                {
                    assemblyVersion = string.Format("{0}.{1}.0.0", variables[VariableProvider.Major], variables[VariableProvider.Minor]);
                }

                var assemblyInfoVersion = variables[VariableProvider.InformationalVersion];
                var assemblyFileVersion = variables[VariableProvider.AssemblySemVer];
                var fileContents        = fileSystem.ReadAllText(assemblyInfoFile)
                                          .RegexReplace(@"AssemblyVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyVersion(\"{0}\")", assemblyVersion))
                                          .RegexReplace(@"AssemblyInformationalVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion))
                                          .RegexReplace(@"AssemblyFileVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion));

                fileSystem.WriteAllText(assemblyInfoFile, fileContents);
            }
        }
Example #17
0
        internal static SMBCommand GetRenameResponse(SMBHeader header, RenameRequest request, FileSystemShare share, StateObject state)
        {
            string userName = state.GetConnectedUserName(header.UID);

            if (!share.HasWriteAccess(userName))
            {
                header.Status = NTStatus.STATUS_ACCESS_DENIED;
                return(new ErrorResponse(CommandName.SMB_COM_RENAME));
            }
            IFileSystem fileSystem = share.FileSystem;

            FileSystemEntry sourceEntry = fileSystem.GetEntry(request.OldFileName);

            if (sourceEntry == null)
            {
                header.Status = NTStatus.STATUS_NO_SUCH_FILE;
                return(new ErrorResponse(CommandName.SMB_COM_RENAME));
            }

            // The file must not already exist unless we just want to upcase / downcase a filename letter
            FileSystemEntry destinationEntry = fileSystem.GetEntry(request.NewFileName);

            if (destinationEntry != null &&
                !String.Equals(request.OldFileName, request.NewFileName, StringComparison.InvariantCultureIgnoreCase))
            {
                // The new file already exists.
                header.Status = NTStatus.STATUS_OBJECT_NAME_COLLISION;
                return(new ErrorResponse(CommandName.SMB_COM_RENAME));
            }

            try
            {
                fileSystem.Move(request.OldFileName, request.NewFileName);
                return(new RenameResponse());
            }
            catch (IOException)
            {
                header.Status = NTStatus.STATUS_SHARING_VIOLATION;
                return(new ErrorResponse(CommandName.SMB_COM_RENAME));
            }
            catch (UnauthorizedAccessException)
            {
                header.Status = NTStatus.STATUS_ACCESS_DENIED;
                return(new ErrorResponse(CommandName.SMB_COM_RENAME));
            }
        }
Example #18
0
        public async Task TransferFile(string source, string destinationFile, Action <ProgressUpdatedEvent> progressCallback)
        {
            using (var resp = await _httpClient.GetAsync(new Uri(source), Timeout.InfiniteTimeSpan, HttpCompletionOption.ResponseHeadersRead))
            {
                var contentType = resp.Content.Headers.ContentType;

                if (contentType != null && contentType.MediaType.Contains("text"))
                {
                    throw new InvalidDownloadUrlException(source, $"[ContentType={contentType.MediaType}]");
                }

                if (_fileSystem.FileExists(destinationFile))
                {
                    _fileSystem.DeleteFile(destinationFile);
                }

                var maxValue = resp.Content.Headers.ContentLength ?? 0;

                var progress = new ProgressUpdatedEvent
                {
                    MaxValue = maxValue
                };

                using (var httpStream = await resp.Content.ReadAsStreamAsync())
                {
                    var tempFile = $"{destinationFile}.APPGET_DOWNLOAD";

                    using (var tempFileStream = _fileSystem.Open(tempFile, FileMode.Create, FileAccess.ReadWrite))
                    {
                        var buffer = new byte[BUFFER_LENGTH];
                        int len;
                        while ((len = httpStream.Read(buffer, 0, BUFFER_LENGTH)) > 0)
                        {
                            tempFileStream.Write(buffer, 0, len);
                            progress.Value += len;
                            progressCallback(progress);
                        }
                    }

                    progress.IsCompleted = true;
                    progressCallback(progress);
                    _fileSystem.Move(tempFile, destinationFile);
                }
            }
        }
        public void Rename(string path, Dictionary <string, string> state)
        {
            var newPath = path;

            foreach (var item in state)
            {
                newPath = newPath.Replace(TokenDelimiter + item.Key + TokenDelimiter, item.Value);
            }

            if (path != newPath)
            {
                if ((!fileSystem.DirectoryExists(newPath)) && (fileSystem.IsDirectory(path)))
                {
                    fileSystem.CreateFolder(newPath);
                }

                fileSystem.Move(path, newPath);
            }
        }
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo) return;

            if (args.Output != OutputType.Json)
                Logger.WriteInfo("Updating assembly info files");

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem);
            Logger.WriteInfo(string.Format("Found {0} files", assemblyInfoFiles.Count()));

            var assemblyVersion = variables.AssemblySemVer;
            var assemblyVersionRegex = new Regex(@"AssemblyVersion\(""[^""]*""\)");
            var assemblyVersionString = string.Format("AssemblyVersion(\"{0}\")", assemblyVersion);
            var assemblyInfoVersion = variables.InformationalVersion;
            var assemblyInfoVersionRegex = new Regex(@"AssemblyInformationalVersion\(""[^""]*""\)");
            var assemblyInfoVersionString = string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion);
            var assemblyFileVersion = variables.MajorMinorPatch + ".0";
            var assemblyFileVersionRegex = new Regex(@"AssemblyFileVersion\(""[^""]*""\)");
            var assemblyFileVersionString = string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion);

            foreach (var assemblyInfoFile in assemblyInfoFiles.Select(f => new FileInfo(f)))
            {
                var backupAssemblyInfo = assemblyInfoFile.FullName + ".bak";
                var localAssemblyInfo = assemblyInfoFile.FullName;
                fileSystem.Copy(assemblyInfoFile.FullName, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                        fileSystem.Delete(localAssemblyInfo);
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var fileContents = fileSystem.ReadAllText(assemblyInfoFile.FullName);
                fileContents = ReplaceOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString);
                fileContents = ReplaceOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString);
                fileContents = ReplaceOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString);

                fileSystem.WriteAllText(assemblyInfoFile.FullName, fileContents);
            }
        }
        public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
        {
            if (!args.UpdateAssemblyInfo)
            {
                return;
            }

            if (args.Output != OutputType.Json)
            {
                Console.WriteLine("Updating assembly info files");
            }

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args, fileSystem);

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile + ".bak";
                var localAssemblyInfo  = assemblyInfoFile;
                fileSystem.Copy(assemblyInfoFile, backupAssemblyInfo, true);
                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }
                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });
                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var assemblyVersion     = variables.AssemblySemVer;
                var assemblyInfoVersion = variables.InformationalVersion;
                var assemblyFileVersion = variables.MajorMinorPatch + ".0";
                var fileContents        = fileSystem.ReadAllText(assemblyInfoFile)
                                          .RegexReplace(@"AssemblyVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyVersion(\"{0}\")", assemblyVersion))
                                          .RegexReplace(@"AssemblyInformationalVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyInformationalVersion(\"{0}\")", assemblyInfoVersion))
                                          .RegexReplace(@"AssemblyFileVersion\(""\d+.\d+.\d+(.(\d+|\*))?""\)", string.Format("AssemblyFileVersion(\"{0}\")", assemblyFileVersion));

                fileSystem.WriteAllText(assemblyInfoFile, fileContents);
            }
        }
Example #22
0
        /// <summary>
        /// Update the library file.
        /// </summary>
        protected virtual void UpdateLibrary(IPackage initial, IPackage target)
        {
            var initialPath = GetInstallPath(initial);
            var targetPath  = GetInstallPath(target);

            if (initialPath != targetPath)
            {
                // if the target and initial dirs intersect, we force a
                // remove + install to avoid the rename wiping the target
                // dir as part of the initial dir cleanup.
                if (initialPath.StartsWith(targetPath, StringComparison.Ordinal) ||
                    targetPath.StartsWith(initialPath, StringComparison.Ordinal))
                {
                    RemoveLibrary(initial);
                    InstallLibaray(target);
                    return;
                }

                fileSystem.Move(initialPath, targetPath);
            }

            downloadManager.Update(initial, target, targetPath);
        }
Example #23
0
        public void Update()
        {
            Logger.WriteInfo("Updating assembly info files");

            var headerFiles = GetHeaderFiles(workingDirectory, headerFileNames, fileSystem).ToList();

            Logger.WriteInfo($"Found {headerFiles.Count} files");

            var assemblyVersion       = variables.AssemblySemVer;
            var assemblyVersionRegex  = new Regex(@"\s*#define VERSION_FULL\s*(.*)");
            var assemblyVersionString = !string.IsNullOrWhiteSpace(assemblyVersion) ? $"\r\n#define VERSION_FULL {assemblyVersion.Replace('.', ',')}\r\n" : "0,0,0,0";

            var assemblyInfoVersion       = variables.InformationalVersion;
            var assemblyInfoVersionRegex  = new Regex(@"\s*#define VERSION_STRING\s*(.*)");
            var assemblyInfoVersionString = $"\r\n#define VERSION_STRING VERSION_XSTR({assemblyInfoVersion}) VERSION_BLANK \"\\0\"\r\n";

            foreach (var headerFile in headerFiles)
            {
                var backupAssemblyInfo = headerFile.FullName + ".bak";
                var localAssemblyInfo  = headerFile.FullName;
                fileSystem.Copy(headerFile.FullName, backupAssemblyInfo, true);

                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }

                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });

                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var originalFileContents = fileSystem.ReadAllText(headerFile.FullName);
                var fileContents         = originalFileContents;
                var appendedAttributes   = false;

                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    fileContents = ReplaceOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString, headerFile.Extension, ref appendedAttributes);
                }

                //if (!string.IsNullOrWhiteSpace(headerFile))
                //{
                //    fileContents = ReplaceOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                //}

                fileContents = ReplaceOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString, headerFile.Extension, ref appendedAttributes);

                if (appendedAttributes)
                {
                    // If we appended any attributes, put a new line after them
                    fileContents += Environment.NewLine;
                }

                if (originalFileContents != fileContents)
                {
                    fileSystem.WriteAllText(headerFile.FullName, fileContents);
                }
            }
        }
Example #24
0
        public async Task Move(string orgSlug, string dsSlug, string source, string dest)
        {
            var ds = await _utils.GetDataset(orgSlug, dsSlug);

            _logger.LogInformation("In Move('{OrgSlug}/{DsSlug}')", orgSlug, dsSlug);

            if (!await _authManager.IsOwnerOrAdmin(ds))
            {
                throw new UnauthorizedException("The current user is not allowed to edit dataset");
            }

            var ddb = _ddbManager.Get(orgSlug, ds.InternalRef);

            var sourceEntry = await ddb.GetEntryAsync(source);

            // Checking if source exists
            if (sourceEntry == null)
            {
                throw new InvalidOperationException("Cannot find source entry: '" + source + "'");
            }

            if (IsReservedPath(dest))
            {
                throw new InvalidOperationException($"'{dest}' is a reserved path");
            }

            // Short circuit!
            if ((dest + "/").StartsWith(source + "/"))
            {
                throw new InvalidOperationException("Cannot move a path onto itself or one of its descendants");
            }

            var destEntry = await ddb.GetEntryAsync(dest);

            if (destEntry != null)
            {
                if (sourceEntry.Type == EntryType.Directory && destEntry.Type != EntryType.Directory)
                {
                    throw new ArgumentException("Cannot move a folder on a file");
                }

                if (sourceEntry.Type != EntryType.Directory && destEntry.Type == EntryType.Directory)
                {
                    throw new ArgumentException("Cannot move a file on a folder");
                }
            }

            switch (sourceEntry.Type)
            {
            case EntryType.Directory:
            {
                var sourceLocalFilePath = ddb.GetLocalPath(source);
                var destLocalFilePath   = ddb.GetLocalPath(dest);

                _logger.LogInformation("Moving directory '{Source}' to '{Dest}'", source, dest);

                CommonUtils.EnsureSafePath(destLocalFilePath);
                _fs.FolderMove(sourceLocalFilePath, destLocalFilePath);

                _logger.LogInformation("FS move OK");

                break;
            }

            case EntryType.DroneDB:
                throw new InvalidOperationException("Cannot move a DroneDB file");

            default:
            {
                var sourceLocalFilePath = ddb.GetLocalPath(source);
                var destLocalFilePath   = ddb.GetLocalPath(dest);

                _logger.LogInformation("Moving file '{Source}' to '{Dest}'", source, dest);

                CommonUtils.EnsureSafePath(destLocalFilePath);
                _fs.Move(sourceLocalFilePath, destLocalFilePath);

                _logger.LogInformation("FS move OK");

                break;
            }
            }

            _logger.LogInformation("Performing ddb move");
            await ddb.MoveAsync(source, dest);

            if (!await ddb.EntryExistsAsync(dest))
            {
                throw new InvalidOperationException(
                          $"Cannot find destination '{dest}' after move, something wrong with ddb");
            }

            _logger.LogInformation("Move OK");
        }
Example #25
0
        /// <inheritdoc />
        public override void Install(IPackage package, string cwd, bool output)
        {
            if (output)
            {
                io.WriteError($"  - Installing <info>{package.GetName()}</info> (<comment>{package.GetVersionPrettyFull()}</comment>): Extracting archive");
            }
            else
            {
                io.WriteError("Extracting archive", false);
            }

            fileSystem.Delete(cwd);

            var temporaryDir = Path.Combine(
                GetTempDirectory(),
                "extract",
                Security.Md5(Guid.NewGuid().ToString()).Substring(0, 7));

            var downloadedFilePath = GetDownloadedFilePath(package, cwd);

            try
            {
                FileSystemLocal.EnsureDirectory(temporaryDir);

                try
                {
                    Extract(package, downloadedFilePath, temporaryDir);
                }
                catch
                {
                    // remove cache if the file was corrupted.
                    ClearLastCacheWrite(package);
                    throw;
                }

                // Expand a single top-level directory for a
                // better experience.
                string ExtractSingleDirAtTopLevel(string path)
                {
                    var contents = fileSystem.GetContents(path);
                    var files    = contents.GetFiles();
                    var dirs     = contents.GetDirectories();

                    files = Arr.Filter(files, (file) => !file.EndsWith(".DS_Store", StringComparison.Ordinal));

                    if ((dirs.Length + files.Length) != 1 || files.Length == 1)
                    {
                        return(path);
                    }

                    return(ExtractSingleDirAtTopLevel(dirs[0]));
                }

                fileSystem.Move(ExtractSingleDirAtTopLevel(temporaryDir), cwd);
            }
            catch
            {
                fileSystem.Delete(cwd);
                throw;
            }
            finally
            {
                fileSystem.Delete(temporaryDir);
                fileSystem.Delete(downloadedFilePath);
            }
        }
Example #26
0
        public void Move()
        {
            // Arrange
            PermutationSetup permutation = new PermutationSetup();

            permutation.Add(blockpool_1TB);
            permutation.Add(blockpool_Pseudo);

            permutation.Add(case_ms);
            //permutation.Add(decor_fs);
            permutation.Add(case_decor_ms);
            permutation.Add(case_vfs_ms);
            permutation.Add(case_vfs_2ms);
            //permutation.Add(vfs_fsms);
            permutation.Add(init);

            // Act & Assert
            foreach (Scenario scenario in permutation.Scenarios)
            {
                using (Run run = scenario.Run().Initialize())
                {
                    IFileSystem fs = run.Parameters["Class"] as IFileSystem;
                    fs.Observe("**", observer = new Observer());
                    observer.events.Clear();

                    // Rename to same file
                    fs.Move("/tmp/helloworld.txt", "/tmp/../tmp/helloworld.txt");

                    Assert.IsTrue(observer.events.Count == 0);
                    // Move to non-existing dir
                    try { fs.Move("/tmp/helloworld.txt", "/nonexisting/helloworld.txt"); Assert.Fail(); } catch (IOException) { }
                    // Move non-existing file
                    try { fs.Move("/tmp/nonexisting.txt", "/tmp/somefile.txt"); Assert.Fail(); } catch (IOException) { }
                    // Move over to directory
                    try { fs.Move("/tmp/helloworld.txt", "c:"); Assert.Fail(); } catch (IOException) { }

                    // Move a file
                    Assert.IsFalse(fs.Browse("c:").Any(e => e.Path == "c:/helloworld.txt"));
                    Assert.IsTrue(fs.Browse("/tmp").Any(e => e.Path == "/tmp/helloworld.txt"));
                    fs.Move("/tmp/helloworld.txt", "c:/helloworld.txt");
                    Assert.IsTrue(fs.Browse("c:").Any(e => e.Path == "c:/helloworld.txt"));
                    Assert.IsFalse(fs.Browse("/tmp").Any(e => e.Path == "/tmp/helloworld.txt"));
                    Assert.IsTrue(observer.Last is IRenameEvent);
                    Assert.IsTrue(DateTimeOffset.UtcNow - observer.Last.EventTime < TimeSpan.FromSeconds(2));
                    Assert.AreEqual(fs, observer.Last.Observer.FileSystem);

                    // Move whole tree
                    Assert.IsFalse(fs.Browse("c:").Any(e => e.Path == "c:/tmp/"));
                    Assert.IsTrue(fs.Browse("/").Any(e => e.Path == "/tmp/"));
                    fs.Move("/tmp/", "c:/tmp/");
                    Assert.IsTrue(fs.Browse("c:").Any(e => e.Path == "c:/tmp/"));
                    Assert.IsFalse(fs.Browse("/").Any(e => e.Path == "/tmp/"));
                    Assert.IsNull(fs.GetEntry("/tmp/"));
                    Assert.IsTrue(fs.Browse("c:/tmp/").Count >= 3);
                    Assert.IsTrue(observer.Last is IRenameEvent);
                    Assert.IsTrue(DateTimeOffset.UtcNow - observer.Last.EventTime < TimeSpan.FromSeconds(2));
                    Assert.AreEqual(fs, observer.Last.Observer.FileSystem);
                    Assert.IsTrue(observer.Last.Path.StartsWith("/tmp/"));
                    Assert.IsTrue(observer.Last.NewPath().StartsWith("c:/tmp/"));
                    fs.Observe("**", observer = new Observer());
                    observer.events.Clear();
                }
            }
        }
Example #27
0
 public static void Move(this IFileSystem fileSystem, IAbsolutePath source, IAbsolutePath destination)
 {
     source.Do(
         (AbsoluteFilePath file) => fileSystem.Move(file, (AbsoluteFilePath)destination),
         (AbsoluteDirectoryPath dir) => fileSystem.Move(dir, (AbsoluteDirectoryPath)destination));
 }
        /// <summary>
        /// Executes the changes recorded for the associated file in chronological order.
        /// </summary>
        public override void ExecuteChanges(IFileSystem fileSystem)
        {
            string newPath;

            if (fileSystem.IsDirectory(AssociatedPath) && _newName != null)
            {
                string tmp = AssociatedPath.Substring(0, AssociatedPath.Length - FileSystem.PathSeparator.Length);
                newPath = "\\" + tmp.Substring(0, tmp.LastIndexOf("\\")) + "\\" + _newName;
                newPath = newPath.Replace("\\\\", "\\");
                fileSystem.Move(AssociatedPath, newPath);
                return;
            }

            String[] fileContent = fileSystem.ReadAllLines(AssociatedPath);
            IList<String> updatedFileContent = new List<String>();

            if (_newName != null)
            {
                newPath = AssociatedPath.Substring(0, AssociatedPath.LastIndexOf("\\")) + "\\" + _newName;
                newPath = newPath.Replace("\\\\", "\\");
                fileSystem.Move(AssociatedPath, newPath);
            }
            else
            {
                newPath = AssociatedPath;
            }

            if (_modificationList.Count > 0)
            {
                int contentPointer = 0;
                foreach (AbstractModification modification in _modificationList)
                {
                    for (; contentPointer < modification.LineNumber && contentPointer < fileContent.Length; contentPointer++)
                    {
                        updatedFileContent.Add(fileContent[contentPointer]);
                    }
                    if (modification is DeletionModification)
                    {
                        if (modification.LineNumber != contentPointer)
                            Debug.WriteLine("modification.LineNumber != contentPointer => " + modification.LineNumber + ", " +
                                            contentPointer);

                        contentPointer++;
                    }
                    else if (modification is InsertionModification)
                    {
                        InsertionModification insertion = modification as InsertionModification;
                        updatedFileContent.Add(insertion.Line);
                    }
                }
                fileContent = updatedFileContent.ToArray();
            }
            fileSystem.WriteAllLines(newPath, fileContent);
        }
Example #29
0
        public void Execute(VersionVariables variables, AssemblyInfoContext context)
        {
            var assemblyInfoFiles = GetAssemblyInfoFiles(context).ToList();

            log.Info("Updating assembly info files");
            log.Info($"Found {assemblyInfoFiles.Count} files");

            var assemblyVersion       = variables.AssemblySemVer;
            var assemblyVersionString = !string.IsNullOrWhiteSpace(assemblyVersion) ? $"AssemblyVersion(\"{assemblyVersion}\")" : null;

            var assemblyInfoVersion       = variables.InformationalVersion;
            var assemblyInfoVersionString = !string.IsNullOrWhiteSpace(assemblyInfoVersion) ? $"AssemblyInformationalVersion(\"{assemblyInfoVersion}\")" : null;

            var assemblyFileVersion       = variables.AssemblySemFileVer;
            var assemblyFileVersionString = !string.IsNullOrWhiteSpace(assemblyFileVersion) ? $"AssemblyFileVersion(\"{assemblyFileVersion}\")" : null;

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var localAssemblyInfo  = assemblyInfoFile.FullName;
                var backupAssemblyInfo = localAssemblyInfo + ".bak";
                fileSystem.Copy(localAssemblyInfo, backupAssemblyInfo, true);

                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }

                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });

                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var originalFileContents = fileSystem.ReadAllText(localAssemblyInfo);
                var fileContents         = originalFileContents;
                var appendedAttributes   = false;

                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }

                if (!string.IsNullOrWhiteSpace(assemblyFileVersion))
                {
                    fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }

                if (!string.IsNullOrWhiteSpace(assemblyInfoVersion))
                {
                    fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }

                if (appendedAttributes)
                {
                    // If we appended any attributes, put a new line after them
                    fileContents += NewLine;
                }

                if (originalFileContents != fileContents)
                {
                    fileSystem.WriteAllText(localAssemblyInfo, fileContents);
                }
            }
            CommitChanges();
        }
Example #30
0
        public void Act()
        {
            fileSystem.Move(oldPath, newPath);

            notifyAct?.Invoke(oldPath, newPath);
        }
Example #31
0
        public void Update()
        {
            Logger.WriteInfo("Updating assembly info files");

            var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, assemblyInfoFileNames, fileSystem, ensureAssemblyInfo).ToList();

            Logger.WriteInfo($"Found {assemblyInfoFiles.Count} files");

            var assemblyVersion       = variables.AssemblySemVer;
            var assemblyVersionRegex  = new Regex(@"AssemblyVersion(Attribute)?\s*\(.*\)\s*");
            var assemblyVersionString = !string.IsNullOrWhiteSpace(assemblyVersion) ? $"AssemblyVersion(\"{assemblyVersion}\")" : null;

            var assemblyInfoVersion       = variables.InformationalVersion;
            var assemblyInfoVersionRegex  = new Regex(@"AssemblyInformationalVersion(Attribute)?\s*\(.*\)\s*");
            var assemblyInfoVersionString = $"AssemblyInformationalVersion(\"{assemblyInfoVersion}\")";

            var assemblyFileVersion       = variables.AssemblySemFileVer;
            var assemblyFileVersionRegex  = new Regex(@"AssemblyFileVersion(Attribute)?\s*\(.*\)\s*");
            var assemblyFileVersionString = !string.IsNullOrWhiteSpace(assemblyFileVersion) ? $"AssemblyFileVersion(\"{assemblyFileVersion}\")" : null;

            foreach (var assemblyInfoFile in assemblyInfoFiles)
            {
                var backupAssemblyInfo = assemblyInfoFile.FullName + ".bak";
                var localAssemblyInfo  = assemblyInfoFile.FullName;
                fileSystem.Copy(assemblyInfoFile.FullName, backupAssemblyInfo, true);

                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localAssemblyInfo))
                    {
                        fileSystem.Delete(localAssemblyInfo);
                    }

                    fileSystem.Move(backupAssemblyInfo, localAssemblyInfo);
                });

                cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo));

                var originalFileContents = fileSystem.ReadAllText(assemblyInfoFile.FullName);
                var fileContents         = originalFileContents;
                var appendedAttributes   = false;

                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyVersionRegex, fileContents, assemblyVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }

                if (!string.IsNullOrWhiteSpace(assemblyFileVersion))
                {
                    fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyFileVersionRegex, fileContents, assemblyFileVersionString, assemblyInfoFile.Extension, ref appendedAttributes);
                }

                fileContents = ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(assemblyInfoVersionRegex, fileContents, assemblyInfoVersionString, assemblyInfoFile.Extension, ref appendedAttributes);

                if (appendedAttributes)
                {
                    // If we appended any attributes, put a new line after them
                    fileContents += Environment.NewLine;
                }

                if (originalFileContents != fileContents)
                {
                    fileSystem.WriteAllText(assemblyInfoFile.FullName, fileContents);
                }
            }
        }
Example #32
0
        public void MoveTo(string path)
        {
            FileSystem.Move(FullName, path);

            FullName = path;
        }
Example #33
0
        public static Task Rename(this IFileSystem fileSystem, FileExplorerEntry entry, string newName)
        {
            var directory = Path.GetDirectoryName(entry.Path);

            return(fileSystem.Move(entry, Path.Combine(directory, newName)));
        }
Example #34
0
        public void Execute(VersionVariables variables, AssemblyInfoContext context)
        {
            if (context.EnsureAssemblyInfo)
            {
                throw new WarningException($"Configuration setting {nameof(context.EnsureAssemblyInfo)} is not valid when updating project files!");
            }

            var projectFilesToUpdate = GetProjectFiles(context).ToList();

            var assemblyVersion     = variables.AssemblySemVer;
            var assemblyInfoVersion = variables.InformationalVersion;
            var assemblyFileVersion = variables.AssemblySemFileVer;

            foreach (var projectFile in projectFilesToUpdate)
            {
                var localProjectFile = projectFile.FullName;

                var originalFileContents = fileSystem.ReadAllText(localProjectFile);
                var fileXml = XElement.Parse(originalFileContents);

                if (!CanUpdateProjectFile(fileXml))
                {
                    log.Warning($"Unable to update file: {localProjectFile}");
                    continue;
                }

                var backupProjectFile = localProjectFile + ".bak";
                fileSystem.Copy(localProjectFile, backupProjectFile, true);

                restoreBackupTasks.Add(() =>
                {
                    if (fileSystem.Exists(localProjectFile))
                    {
                        fileSystem.Delete(localProjectFile);
                    }

                    fileSystem.Move(backupProjectFile, localProjectFile);
                });

                cleanupBackupTasks.Add(() => fileSystem.Delete(backupProjectFile));

                if (!string.IsNullOrWhiteSpace(assemblyVersion))
                {
                    UpdateProjectVersionElement(fileXml, AssemblyVersionElement, assemblyVersion);
                }

                if (!string.IsNullOrWhiteSpace(assemblyFileVersion))
                {
                    UpdateProjectVersionElement(fileXml, FileVersionElement, assemblyFileVersion);
                }

                if (!string.IsNullOrWhiteSpace(assemblyInfoVersion))
                {
                    UpdateProjectVersionElement(fileXml, InformationalVersionElement, assemblyInfoVersion);
                }

                var outputXmlString = fileXml.ToString();
                if (originalFileContents != outputXmlString)
                {
                    fileSystem.WriteAllText(localProjectFile, outputXmlString);
                }
            }

            CommitChanges();
        }