Exemple #1
0
        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('/');
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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)));
        }
Exemple #7
0
        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);
        }