public SvnPath(SvnPath other, string relativePath) { if (other == null) { throw new ArgumentNullException(nameof(other)); } this.RepositoryUrl = other.RepositoryUrl; this.RepositoryRelativePath = other.RepositoryRelativePath.TrimEnd('/') + '/' + relativePath?.TrimStart('/'); }
public async Task <SvnClientExecutionResult> ExportAsync(SvnPath sourcePath, string destinationDirectory, string additionalArguments) { var args = new SvnArgumentBuilder(); args.Append("export"); args.AppendQuoted(sourcePath.AbsolutePath); args.AppendQuoted(destinationDirectory); args.Append(additionalArguments); return(await this.ExecuteCommandLineAsync(args).ConfigureAwait(false)); }
public SvnBranch(SvnPath parent, XElement entry) { var name = entry.Element("name").Value; this.Path = new SvnPath(parent, name + "/"); var commit = entry.Element("commit"); this.Revision = commit.Attribute("revision").Value; this.Author = commit.Element("author").Value; this.Date = DateTimeOffset.Parse(commit.Element("date").Value); }
public async Task <SvnClientExecutionResult> DeleteAsync(SvnPath path, string message, string additionalArguments) { var args = new SvnArgumentBuilder(); args.Append("delete"); args.AppendQuoted(path.AbsolutePath); args.Append("-m"); args.AppendQuoted(message); args.Append(additionalArguments); return(await this.ExecuteCommandLineAsync(args).ConfigureAwait(false)); }
public async Task <string> GetRevisionNumberAsync(SvnPath path) { var args = new SvnArgumentBuilder(); args.Append("info"); args.Append("--xml"); args.AppendQuoted(path.AbsolutePath); var result = await this.ExecuteCommandLineAsync(args).ConfigureAwait(false); if (result.ErrorLines.Count > 0) { throw new InvalidOperationException(string.Join(Environment.NewLine, result.ErrorLines)); } var info = XElement.Parse(string.Join(Environment.NewLine, result.OutputLines)); return(info.Element("entry").Attribute("revision").Value); }
public async Task <IEnumerable <SvnPath> > EnumerateChildSourcePathsAsync(SvnPath path) { var args = new SvnArgumentBuilder(); args.Append("ls"); args.AppendQuoted(path.AbsolutePath); var result = await this.ExecuteCommandLineAsync(args).ConfigureAwait(false); if (result.ErrorLines.Count > 0) { throw new InvalidOperationException(string.Join(Environment.NewLine, result.ErrorLines)); } var lines = from o in result.OutputLines where o?.Length > 0 select o; return(lines.Select(o => new SvnPath(path, o))); }
public async Task <IEnumerable <SvnBranch> > EnumerateBranchesAsync(SvnPath path) { var branchesPath = new SvnPath(path, "branches/"); var args = new SvnArgumentBuilder(); args.Append("ls"); args.Append("--xml"); args.AppendQuoted(path.AbsolutePath); args.AppendQuoted(branchesPath.AbsolutePath); var result = await this.ExecuteCommandLineAsync(args).ConfigureAwait(false); if (result.ErrorLines.Count > 0) { throw new InvalidOperationException(string.Join(Environment.NewLine, result.ErrorLines)); } var lists = XElement.Parse(string.Join(Environment.NewLine, result.OutputLines)); if (lists.Elements("list").Count() != 2) { throw new InvalidOperationException($"expected 2 list elements but there are {lists.Elements("list").Count()}"); } var trunkEntry = lists.Elements("list").First().Elements("entry").FirstOrDefault(e => e.Attribute("kind").Value == "dir" && e.Element("name").Value == "trunk"); var branchEntries = lists.Elements("list").Last().Elements("entry").Where(e => e.Attribute("kind").Value == "dir"); var branches = new List <SvnBranch>(); if (trunkEntry != null) { branches.Add(new SvnBranch(path, trunkEntry)); } branches.AddRange(branchEntries.Select(e => new SvnBranch(branchesPath, e))); return(branches); }