jan
jan

Reputation: 1601

Add file using SharpSVN

I would like to add all unversioned files under a directory to SVN using SharpSVN.

I tried regular svn commands on the command line first:

C:\temp\CheckoutDir> svn status -v

I see all subdirs, all the files that are already checked in, a few new files labeled "?", nothing with the "L" lock indication

C:\temp\CheckoutDir> svn add . --force

This results in all new files in the subdirs ,that are already under version control themselves, to be added.

I'd like to do the same using SharpSVN. I copy a few extra files into the same directory and run this code:

...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
    SvnAddArgs saa = new SvnAddArgs();
    saa.Force = true;
    saa.Depth = SvnDepth.Infinity;
    try
    {
        svn.Add(@"C:\temp\CheckoutDir\." , saa);
    }
    catch (SvnException exc)
    {
        Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
    }
}

But an SvnException is raised:

No other svnclient instance is running in my code, I also tried calling

svn.cleanup()

right before the Add, but to no avail.

Since the documentation is rather vague ;), I was wondering if anyone here knew the answer.

Thanks in advance!

Jan

Upvotes: 5

Views: 7691

Answers (3)

sbonkosky
sbonkosky

Reputation: 2557

I tried Malcolm's tool but couldn't get it to run now that it looks to be a few years old, but after looking at the source code it looks like this is really all you need to use to sync the local checked out folder with the one in SVN:

string _localCheckoutPath = @"C:\temp\CheckoutDir\";
SvnClient client = new SvnClient();

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);

//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem

foreach (SvnStatusEventArgs changedFile in changedFiles)
{
    if (changedFile.LocalContentStatus == SvnStatus.Missing)
    {
        client.Delete(changedFile.Path);
    }
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
    {
        client.Add(changedFile.Path);
    }
}

SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";

client.Commit(_localCheckoutPath, ca);

Upvotes: 2

Mathias F
Mathias F

Reputation: 15931

Use this my tool http://svncompletesync.codeplex.com/ or take it as a sample. It does exactly what you need.

Upvotes: 5

Sander Rijken
Sander Rijken

Reputation: 21615

I think you shouldn't suffix the path with a ','. Try:

svn.Add(@"C:\temp\CheckoutDir" , saa);

Please do discuss this further on the SharpSvn discussion board/mailing list, because the behavior you are seeing might be a bug.

Upvotes: 1

Related Questions