Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add file using SharpSVN

Tags:

c#

svn

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:

  • SvnException.Message: Working copy 'C:\temp\CheckoutDir' locked
  • SvnException.File: ..\..\..\subversion\libsvn_wc\lock.c"

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

like image 731
jan Avatar asked Jun 08 '09 13:06

jan


3 Answers

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

like image 163
Mathias F Avatar answered Nov 18 '22 09:11

Mathias F


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);
like image 39
sbonkosky Avatar answered Nov 18 '22 10:11

sbonkosky


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.

like image 1
Sander Rijken Avatar answered Nov 18 '22 11:11

Sander Rijken