2009-12-07 7 views
2

Nous utilisons SharpSVN 1.5 dll pour nos fonctionnalités de contrôle de source. Notre caisse et CheckIn fonctionne comme follwsProblèmes de remplacement de SharpSVN 1.5 dll par SharpSVN 1.6 dll

Supposons que je veuille checkout un nom de dossier TEST et son contient 3 fichiers file1.txt disent, file2.txt, file3.txt

Étape 1: - Commander file1.txt du référentiel SVN
Étape 2: - Commander file2.txt à partir du dépôt SVN
Étape 3: - Commander file3.txt du dépôt SVN

Pendant le fonctionnement de la caisse de file1.txt un dossier .svn est créé dans notre dossier de travail. Ce dossier .svn contient un fichier nommé en tant qu'entrées. Ce fichier contient svn repository et checkout file info (On ​​peut le voir ouvert via le bloc-notes). Lorsque l'opération de file2.txt checkout s'est produite (Checkout dans le même dossier de travail), il n'y a pas de nouvelle création de dossier .svn. Sharpsvn utilise le dossier .svn existant (dossier .svn d'extraction de fichier précédent) et ajoute l'information file2.txt dans le fichier d'entrées. La même chose s'est produite lors de l'extraction de file3.txt dans le même dossier de travail.

Lors de l'opération d'archivage, vérifiez d'abord fichier1.txt puis fichier2 puis fichier3. Svn utilise le dossier unique .svn (dans le dossier de travail) pour tous ces fichiers à checkin.During file1.txt check in, le fichier entries contient ses informations donc ce fichier est sous le contrôle de version svn et il pourrait checky.Similar way file2. txt et file3.txt

Maintenant, nous essayons d'utiliser SharpSVN 1.6 dll, mais face à certains problèmes dans la caisse et le fonctionnement checkin. Pendant le fichier file1.txt checkout, le dossier .svn est créé et le fichier d'entrées contient file1.txt info.During file2.txt checkout, le fichier .svn foder existant est supprimé et le nouveau dossier .svn est créé.Ainsi, les entrées ne contiennent que file2.txt info not file1.txt info.Quand j'essaie de checkin, le dernier fichier que j'ai extrait de svn est seulement vérifié dans svn.Ceci est parce que le fichier d'entrées dans le dossier .svn contient seulement les dernières informations sur le fichier extrait.

Je dois obtenir toutes les informations de fichier dans les entrées fichier à l'aide sharpsvn 1.6 dll

Mon extrait de code comme suit

public string[] CheckOut(string pSCPath, string pComment, string pLocalPath, int pRevisionNum)// Checks out a file from svn 
{ 
    string[] strCheckoutDetails = new string[2]; 
    Uri uriSCPath = new Uri(pSCPath); 
    SvnCheckOutArgs objChkoutargs = new SvnCheckOutArgs(); 
    objChkoutargs.Revision = pRevisionNum; 
    SvnInfoEventArgs info; 
    try 
    { 
     objChkoutargs.Depth = SvnDepth.Empty; 
     string strSingleFiletoCheckout = uriSCPath.ToString(); 

     string strFolderNameofSingleFileSelected = strSingleFiletoCheckout.Remove(strSingleFiletoCheckout.LastIndexOf('/')); 
     Uri UriSingleFileCheckout = new Uri(strFolderNameofSingleFileSelected); 
     _objSVNClient.CheckOut(uriSingleFileCheckout, pLocalPath,objChkoutargs); //empty working folder 
     SvnTarget target = new Uri(strSingleFiletoCheckout); 
     string strFileNameonlyfromUri = strSingleFiletoCheckout.Substring(strSingleFiletoCheckout.LastIndexOf("/") + 1); 
     if (!copyFiletoWorkingCopy(pLocalPath, strFileNameonlyfromUri, _objSVNClient)) //make versioned file available to the current working copy - Biju 
     { 
      pLocalPath = ""; 
      throw new SharpSvn.SvnException("Checkout Exception"); 
     } 
     _objSVNClient.GetInfo(uriSCPath, out info); 
     strCheckoutDetails[0] = info.LastChangeRevision.ToString(); 
    } 

    catch (Exception ex) 
    { 
     pLocalPath = ""; 
     throw ex; 
    } 
    strCheckoutDetails[1] = pLocalPath; 
    return strCheckoutDetails; 
} 

Merci

Reji

+1

Quelques commentaires à propos de l'exemple de code: * Ne lancez pas SharpSvn.SvnException. * Au lieu de "throw ex;", utilisez "throw", de cette façon la trace de la pile est conservée, sinon elle provient de l'instruction "throw ex". –

Répondre

2

Vérification des fichiers ne sont pas directement pris en charge dans Subversion. Ce que vous pouvez faire, et ce qui fonctionne toujours dans Subversion/SharpSvn 1.6 est:

  • Checkout un répertoire avec profondeur = vide. Cela crée une copie de travail sans fichiers à l'intérieur.
  • svn update --set-depth = fichiers FILE1.TXT

Ce morceau de code exemple vérifie sur une copie de travail vide et récupère file1.txt et file2.txt. Si vous récupérez le fichier file3.txt plus tard, les trois fichiers sont dans les entrées et vous pouvez y exécuter toutes les commandes Subversion.

using(SvnClient client = new SvnClient()) 
{ 
    SvnCheckOutArgs coArgs = new SvnCheckOutArgs(); 
    coArgs.Depth = SvnDepth.Empty; 

    client.CheckOut(new Uri("http://server/repos/directory"), targetDir, coArgs); 


    SvnUpdateArgs updateArgs = new SvnUpdateArgs(); 
    updateArgs.Depth = SvnDepth.Files; 

    client.Update(Path.Combine(targetDir, new string[] {"file1.txt", "file2.txt"}), updateArgs); 
} 
Questions connexes