承诺sharpSVN

时间:2010-03-05 11:04:15

标签: c# sharpsvn

我在使用sharpsvn进行提交时遇到问题。现在我正在添加我的工作副本的所有文件(如果添加了文件抛出异常),之后我会提交。它可以工作,但它有例外。有没有办法在add()之前获取存储库的状态,只添加新文件或更改的文件?如果我删除工作副本上的一个文件或文件夹,我如何删除存储库中的这些文件或文件夹? 代码:

 String[] folders;
 folders = Directory.GetDirectories(direccionLocal,"*.*", SearchOption.AllDirectories);
 foreach (String folder in folders)
            {
                String[] files;
                files = Directory.GetFiles(folder);
                foreach (String file in files)
                {
                    if (file.IndexOf("\\.svn") == -1)
                    {
                        Add(file, workingcopy);
                    }
                }

            }


            Commit(workingcopy, "change"); 

添加:

    public bool Add(string path, string direccionlocal)
    {
        using (SvnClient client = new SvnClient())
        {
            SvnAddArgs args = new SvnAddArgs();
            args.Depth = SvnDepth.Empty;
            Console.Out.WriteLine(path);
            args.AddParents = true;


            try
            {
                return client.Add(path, args);
            }
            catch (Exception ex)
            {
                return false;
            }

        }
    }

提交:

    public bool Commit(string path, string message)
    {
        using (SvnClient client = new SvnClient())
        {
            SvnCommitArgs args = new SvnCommitArgs();


            args.LogMessage = message;
            args.ThrowOnError = true;
            args.ThrowOnCancel = true;

            try
            {
                return client.Commit(path, args);
            }
            catch (Exception e)
            {
                if (e.InnerException != null)
                {
                    throw new Exception(e.InnerException.Message, e);
                }

                throw e;
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

你有没有试过像

这样的东西
using(SvnClient client = new SvnClient())
{
   SvnAddArgs aa = new SvnAddArgs();
   aa.Depth = SvnDepth.Infinity;
   aa.Force = true;

   client.Add(rootDir, aa);
}

用于添加文件?

这应该都没有已经添加到您的工作副本的文件。 (相当于svn add --force <dirname>

如果你告诉你得到什么样的例外情况会有所帮助。 Subversion库可以返回数千种不同的错误代码。其中大多数都有有趣的消息文本。

SharpSvn将所有特定的Subversion错误作为内部异常嵌套。最后的代码删除了外部异常并丢失了其余异常的堆栈跟踪。在外部异常上使用.ToString()可以为您提供最佳的错误文本。 (并且对于与svn.exe类似的错误输出,您需要连接所有.Messages)

有关更多建议,另请参阅this other answer