Subversion Client / Windows

dRf

Grünschnabel
Hallo zusammen,

ich würde gerne einen Mini-Clienten für Subversion schreiben nur leider hapert es noch ein wenig am Verständnis. Habe mir schon viele Webseiten zu svn angeschaut jedoch ist die Fülle an Informationen einfach too much.

Nachdem ich erstmal längere Zeit nach einen funktionieren DL für svn gesucht habe (1.4.6. gefunden) habe ich es installiert. Zusätzlich habe ich Netbeans, welches auch einen Tomcat stellt um mittels JSP eine Verbindung zu svn aufzubauen.

Primär wäre es mir alles auf Windowsebene wichtiger, linuxbasierend jedoch nicht ausgeschlossen.

Wie kann ich nun eine Verbindung zu svn aufbauen (Stichwort API?)?
Habe ich etwas vergessen?
Sollte ich etwas anderes versuchen? ...
Gibt es neben JSP auch noch andere Alternativen? (PHP)

Und ja ich weiß das es schon svn Clienten zu genüge gibt, jedoch möchte ich mich mit der Thematik kompl. beschäftigen und nicht einen Clienten installieren, um dann via Explorer alle "Commands" auszuführen.


mfg dRf
 
Jo selbst verständlich kenne und habe ich mir die offiz. svn Website angeschaut.
Erstmal thx, vlt komme ich ja schonmal ein Stück weiter.
 
Hallo, die API ist inkludiert und die Beispiele klappen soweit. Jedoch "nur" als KonsolenApplikation. Wenn ich die Ausgaben nun in HTML via JSP darstellen möchte, hänge ich im Moment noch ein wenig fest bei der Ausgabe des RepositoryTrees:

Wie kann ich die kompl Ausgabe von public static void listEntries() returnen?
Und beim Aufruf von out.println(svn.listEntries(repository, "")); macht er auch nicht ;(

svn_dv1.java
Code:
package org.tmatesoft.svn.examples.repository;
 
import java.util.Collection;
import java.util.Iterator;
 
import org.tmatesoft.svn.core.SVNDirEntry;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNNodeKind;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

public class svn_dv1 {
   
    SVNURL ausgabe;
    String ausgabe1;
    SVNRepository repository;

   
    public svn_dv1() throws SVNException {
        this.url = "file:///C:/repos/root/path";
        
        FSRepositoryFactory.setup();

        this.repository = null;
        
        try {
            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
        } 
        catch (SVNException svne) {      
           svne.printStackTrace();
        }
    }
    
  
    public  String getRepositoryRoot() throws SVNException {
        ausgabe = repository.getRepositoryRoot(true);
        return ausgabe.toString();
    }

    public String getRepositoryUUID() throws SVNException {
        ausgabe1 = repository.getRepositoryUUID(true);
        return ausgabe1;
    }


    
    public static void listEntries(SVNRepository repository, String path)
            throws SVNException {
        Collection entries = repository.getDir(path, -1, null,
                (Collection) null);
        Iterator iterator = entries.iterator();
        while (iterator.hasNext()) {
            SVNDirEntry entry = (SVNDirEntry) iterator.next();
            System.out.println("/" + (path.equals("") ? "" : path + "/")
                    + entry.getName() + " (author: '" + entry.getAuthor()
                    + "'; revision: " + entry.getRevision() + "; date: " + entry.getDate() + ")");
            if (entry.getKind() == SVNNodeKind.DIR) {
                listEntries(repository, (path.equals("")) ? entry.getName()
                        : path + "/" + entry.getName());
            }
        }
    }
}

ausgabe.jsp
Code:
<%@ page language="java" %>
<jsp:useBean id="svn" class="org.tmatesoft.svn.examples.repository.svn_dv1" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%  
            out.println("RepositoryRoot: "+svn.getRepositoryRoot()+"<br>");
            out.println("RepositoryUUID: "+svn.getRepositoryUUID()+"<br>");
            
            out.println(svn.listEntries(repository, ""));
        %>
    </body>
</html>
 
Hallo zusammen, ich habe mal wieder ein kleines Problemchen.
Die Asugabe klappt mittlerweile ansatzweise, d.h. ich übergebe die ganzen Daten in ein Array und das Array returne ich dann.
Leider gibt es keine Möglichkeit Iteratoren zu zählen und eine extra Schleife, in der ich einmal mit iterator.next(); die Collection durchlaufen und zählen lasse, würde ich ungern machen.

Mit welcher Datenstruktur würdet ihr folgendes Problem lösen? Bzw welche Datenstruktur würdet ihr an die JSP übergeben? Habe mal alles heruntergebrochen und das blieb übrig:

bla.java:
Code:
package org.svn;

import java.util.Collection;
import java.util.Iterator;
import org.tmatesoft.svn.core.SVNDirEntry;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;

public class bla {

    String url;
    SVNRepository repository = null;
    Collection entries;
    SVNDirEntry entry;
    SVNDirEntry ausgabe5;

    public SVNDirEntry getArrayContent(String path1) throws SVNException {
 
        url = "file:///C:/repos/root/path";
        FSRepositoryFactory.setup();

        try {
            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
            ausgabe5 = listEntries(repository, path1);
        } 
        catch (SVNException svne) {      
           svne.printStackTrace();
        }
        return ausgabe5;

    }
    
    public SVNDirEntry listEntries(SVNRepository repository, String path) throws SVNException {  
        entries = repository.getDir(path, -1, null, (Collection) null);
        Iterator iterator = entries.iterator();
        
        while (iterator.hasNext()) {
          entry = (SVNDirEntry) iterator.next();   
        }
        return entry;
    }
}

bla.jsp:
Code:
<%@ page language="java" import="java.util.*" import="org.tmatesoft.svn.core.SVNDirEntry"%>

<jsp:useBean id="svn" class="org.svn.bla" />

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ShowRepositoryTree</title>
</head>
<body>
        <%  
		String path = "";
        SVNDirEntry blub = svn.getArrayContent(path);
        out.println(blub);
        %>
    </body>
</html>

Hier übergebe ich also ein Objekt vom Typ SVNDirEntry mit der ich jedoch nur eine Zeile aus dem Repository ausgeben kann. Um alle Zeielen auszugeben müsste ich hier wieder mit Iteratoren arbeiten (while iterator.hasNext()) ...

Würdet ihr es in einem Array übergeben? Liste, Collection .... ?
 

Neue Beiträge

Zurück