public void InitializeRepository(string basePath, string initPath, params LogPropertyInfo[] properties) { var baseUri = new Uri(basePath); var tempPath = PathUtility.GetTempPath(true); var tagsPath = DirectoryUtility.Prepare(tempPath, SvnString.Tags); var branchesPath = DirectoryUtility.Prepare(tempPath, SvnString.Branches); var trunkPath = DirectoryUtility.Prepare(tempPath, SvnString.Trunk); if (baseUri.Scheme == Uri.UriSchemeFile) { var createCommand = new SvnAdminCommand("create") { (SvnPath)basePath, "--fs-type", "fsfs" }; createCommand.Run(); } DirectoryUtility.Copy(initPath, trunkPath); var importCommand = new SvnCommand("import") { SvnCommandItem.FromMessage("first"), (SvnPath)tempPath, (SvnPath)baseUri, }; importCommand.Run(); }
private void MoveTagsToBranches(string dataBasesPath) { var dataBaseUrl = new Uri(dataBasesPath); var tagsUrl = UriUtility.Combine(dataBaseUrl, SvnString.Tags); var branchesUri = UriUtility.Combine(dataBaseUrl, SvnString.Branches); var listCommand = new SvnCommand("list") { (SvnPath)tagsUrl }; var list = listCommand.ReadLines(); foreach (var item in list) { if (item.EndsWith(PathUtility.Separator) == true) { var name = item.Remove(item.Length - PathUtility.Separator.Length); var sourceUri = UriUtility.Combine(tagsUrl, name); var destUri = UriUtility.Combine(branchesUri, name); //var log = SvnLogInfo.Run(sourceUri.ToString(), null, 1).First(); var moveCommand = new SvnCommand("mv") { (SvnPath)sourceUri, (SvnPath)destUri, SvnCommandItem.FromMessage($"Migrate: move {name} from tags to branches"), SvnCommandItem.FromUsername(nameof(SvnRepositoryMigrator)), }; moveCommand.Run(); //var propText = string.Join(" ", log.Properties.Select(i => $"--with-revprop \"{i.Prefix}{i.Key}={i.Value}\"")); //SvnClientHost.Run($"mv \"{sourceUri}\" \"{destUri}\" -m \"Migrate: move {name} from tags to branches\"", propText, $"--username {nameof(SvnRepositoryMigrator)}"); } } }
private void DeleteUsers(string dataBasesPath) { var usersUrl = UriUtility.Combine(new Uri(dataBasesPath), "users.xml"); var deleteCommand = new SvnCommand("rm") { (SvnPath)usersUrl, SvnCommandItem.FromMessage("Migrate: delete users"), SvnCommandItem.FromUsername(nameof(SvnRepositoryMigrator)), }; deleteCommand.Run(); }
public void DeleteRepository(string author, string basePath, string repositoryName, string comment, params LogPropertyInfo[] properties) { var uri = this.GetUrl(basePath, repositoryName); var props = GeneratePropertiesArgument(properties); var deleteCommand = new SvnCommand("delete") { SvnCommandItem.FromMessage(comment), (SvnPath)uri, props, SvnCommandItem.FromUsername(author), }; deleteCommand.Run(); }
public void CloneRepository(string author, string basePath, string repositoryName, string newRepositoryName, string comment, string revision, params LogPropertyInfo[] properties) { var uri = this.GetUrl(basePath, repositoryName); var newUri = this.GenerateUrl(basePath, newRepositoryName); var props = GeneratePropertiesArgument(properties); var copyCommand = new SvnCommand("copy") { SvnCommandItem.FromMessage(comment), (SvnPath)uri, (SvnPath)newUri, props, SvnCommandItem.FromUsername(author), }; copyCommand.Run(); }
public void CreateRepository(string author, string basePath, string initPath, string comment, params LogPropertyInfo[] properties) { var repositoryName = Path.GetFileName(initPath); var uri = UriUtility.Combine(new Uri(basePath), SvnString.Branches, repositoryName); var props = GeneratePropertiesArgument(properties); var importCommand = new SvnCommand("import") { (SvnPath)initPath, (SvnPath)uri, SvnCommandItem.FromMessage(comment), SvnCommandItem.Force, props, SvnCommandItem.FromUsername(author), }; importCommand.Run(); }
private void PrepareBranches(string dataBasesPath) { var dataBaseUrl = new Uri(dataBasesPath); var listCommand = new SvnCommand("list") { (SvnPath)dataBaseUrl }; var list = listCommand.ReadLines(); if (list.Contains($"{SvnString.Branches}{PathUtility.Separator}") == false) { var branchesUrl = UriUtility.Combine(dataBaseUrl, SvnString.Branches); var mkdirCommand = new SvnCommand("mkdir") { (SvnPath)branchesUrl, SvnCommandItem.FromMessage("Migrate: create branches"), SvnCommandItem.FromUsername(nameof(SvnRepositoryMigrator)), }; mkdirCommand.Run(); } }
public void RevertRepository(string author, string basePath, string repositoryName, string revision, string comment) { var baseUri = new Uri(basePath); var url = repositoryName == SvnString.Default ? UriUtility.Combine(baseUri, SvnString.Trunk) : UriUtility.Combine(baseUri, SvnString.Branches, repositoryName); var tempPath = PathUtility.GetTempPath(false); try { var checkoutCommand = new SvnCommand("checkout") { (SvnPath)url, (SvnPath)tempPath, }; checkoutCommand.Run(); var mergeCommand = new SvnCommand("merge") { new SvnCommandItem('r', $"head:{revision}"), (SvnPath)tempPath, (SvnPath)tempPath, }; mergeCommand.Run(); var commitCommand = new SvnCommand("commit") { (SvnPath)tempPath, SvnCommandItem.FromMessage(comment), SvnCommandItem.FromEncoding(Encoding.UTF8), SvnCommandItem.FromUsername(author), }; commitCommand.Run(); } catch (Exception e) { throw e; } finally { DirectoryUtility.Delete(tempPath); } }
public void Commit(string author, string comment, params LogPropertyInfo[] properties) { if (this.transactionName != null) { var diffCommand = new SvnCommand("diff") { (SvnPath)this.BasePath, new SvnCommandItem("patch-compatible") }; var output = diffCommand.ReadLine(); File.WriteAllText(this.transactionPatchPath, output); this.transactionMessageList.Add(comment); this.transactionPropertyList.AddRange(properties); return; } this.logService?.Debug($"repository committing {(SvnPath)this.BasePath}"); var result = string.Empty; var commentPath = PathUtility.GetTempFileName(); var propText = SvnRepositoryProvider.GeneratePropertiesArgument(properties); var updateCommand = new SvnCommand("update") { (SvnPath)this.BasePath }; var commitCommand = new SvnCommand("commit") { (SvnPath)this.BasePath, SvnCommandItem.FromMessage(comment), propText, SvnCommandItem.FromEncoding(Encoding.UTF8), SvnCommandItem.FromUsername(author), }; try { if (this.needToUpdate == true) { updateCommand.Run(this.logService); } result = commitCommand.Run(this.logService); } catch (Exception e) { this.logService?.Warn(e); updateCommand.Run(this.logService); result = commitCommand.Run(this.logService); } finally { this.needToUpdate = false; FileUtility.Delete(commentPath); } if (result.Trim() != string.Empty) { this.logService?.Debug(result); this.logService?.Debug($"repository committed {(SvnPath)this.BasePath}"); this.info = SvnInfo.Run(this.BasePath); this.repositoryInfo.Revision = this.info.LastChangedRevision; this.repositoryInfo.ModificationInfo = new SignatureDate(this.info.LastChangedAuthor, this.info.LastChangedDate); } else { this.logService?.Debug("repository no changes. \"{0}\"", this.BasePath); } }