public static async Task <InitResult> Initialize(WorcsDocument document) { if (!document.HasFlag(WorcsDocumentFlags.WorkingDirExists)) { return(InitResult.TempDirNotFound); } if (document.HasFlag(WorcsDocumentFlags.RepositoryExists)) { return(InitResult.RepoAlreadyExists); } Repository.Init(document.RepoDir); document.SetFlag(WorcsDocumentFlags.RepositoryExists); document.SetFlag(WorcsDocumentFlags.HasUncommitedChanges); return(InitResult.Success); }
public static async Task <PackResult> Pack(WorcsDocument document) { if (!document.HasFlag(WorcsDocumentFlags.WorkingDirExists)) { return(PackResult.WorkingDirNotFound); } var workingDir = document.WorkingDir; var archivePath = Path.Combine(workingDir, "temp.docx"); ZipFile.CreateFromDirectory(document.RepoDir, archivePath, CompressionLevel.Optimal, false); var wordFileDir = Path.GetDirectoryName(document.WordFilepath) ?? ""; var backupName = document.WordFilename + ".old"; var backupPath = Path.Combine(wordFileDir, backupName); File.Move(document.WordFilepath, backupPath, true); File.Copy(archivePath, document.WordFilepath); File.Delete(archivePath); return(PackResult.Success); }
public static async Task <UnpackResult> Unpack(WorcsDocument document) { if (!document.HasFlag(WorcsDocumentFlags.WorkingDirExists)) { var userTempDir = Path.GetTempPath(); var tempDirName = await document.GetHashedFilename(); document.WorkingDir = Path.Combine(userTempDir, TempDirParentName, tempDirName); document.RepoDir = Path.Combine(document.WorkingDir, RepoDirName); document.SetFlag(WorcsDocumentFlags.WorkingDirExists); } if (!File.Exists(document.WordFilepath)) { return(UnpackResult.FileNotFound); } await Console.Out.WriteLineAsync($"Unpacking word file {document.WordFilepath} to temp repo dir {document.RepoDir}."); ZipFile.ExtractToDirectory(document.WordFilepath, document.RepoDir, true); return(UnpackResult.Success); }
public static async Task <CommitResult> CommitAllChanged(WorcsDocument document, Signature author, string summary) { if (!document.HasFlag(WorcsDocumentFlags.RepositoryExists)) { return(CommitResult.RepositoryNotFound); } if (!document.HasFlag(WorcsDocumentFlags.HasUncommitedChanges)) { return(CommitResult.NoChanges); } var timestampFile = Path.Combine(document.RepoDir, "changed.tmp"); await File.WriteAllTextAsync(timestampFile, DateTimeOffset.UtcNow.ToString()); using var repo = new Repository(document.RepoDir); Commands.Stage(repo, "*"); _ = repo.Commit(summary, author, author); document.RemoveFlag(WorcsDocumentFlags.HasUncommitedChanges); return(CommitResult.Success); }