SVN Repository Prüfung ob leer ist

JavaExpInc

Mitglied
Hallo liebe Javafans 😉

momentan komme ich an einer Stelle nicht weiter, sodass ich hier nun einmal mein Glück versuche.

Ich habe einen SVN Pfad, der den Ordner Tags, Branches und Trunk beinhaltet. Soweit so gut. Nun wird jedoch beim löschen direkt der Oberordner gelöscht und nicht geprüft ob in einem der Unterordner (trunk, tags, branches) etwas enthalten ist dann soll er nämlich diesen nicht löschen.

Nehmen wir an mein svn pfad heißt "project/projectname" so hätte dieser folgende Struktur:

project/projectname/trunk
project/projectname/tags
project/projectname/branches

Wenn trunk Dateien enthält und tags und branches leer sind sollen diese gelöscht werden. Ich weiß das es mit getDir() funktionieren soll, jedoch komme ich nicht dahinter. Ich muss irgendwie prüfen ob der Pfad den ich mir hole etwas beinhaltet oder nicht.

Momentan sieht es so aus:
Java:
final String TrunkPath = getSVNTrunkPath(localProjectFolder);

SVNURL svnURL = SVNURL.parseURIEncoded(TrunkPath);
SVNRepository repos = SVNRepositoryFactory.create(svnURL);

if(???){
pathsWhichWillBeDeleted.add(path);
}
-> Und in meiner If-Abfrage muss ich nun irgendwie prüfen ob der Pfad den ich mir hole also jetzt mein TrunkPath weitere Unterordner bzw. Dateien enthält dann soll er nämlich nicht hinzugefügt werden.

Ich hoffe ihr könnt mir weiterhelfen!
 
Zuletzt bearbeitet von einem Moderator:
Ja habe ich, deswegen hab ich meinen Beitrag auch schon abgeändert als ich das gesehen habe 🙂 Da ich mich jedoch nicht im lokalen Verzeichnis befinde sondern im SVN trifft dies ja nicht zu, bzw kann ich dort auch kein neues File anlegen da keine Berechtigung.
 
Okay es funktioniert leider immernoch nicht. Wenn ich das richtig verstanden habe brauche ich ja nur
Java:
            Collection entries = repos.getDir( TagsPath, -1, null, (Collection) null );
            Iterator iterator = entries.iterator();
            while ( iterator.hasNext() ) {
                SVNDirEntry entry = (SVNDirEntry) iterator.next();

                if ( entry.getKind() == SVNNodeKind.DIR ) {
                      pathsWhichWillBeDeleted.add(path);
                }
oder sehe ich das falsch? Leider bekomme ich immer eine IllegalArgumentException bei repos.getDir und ich weiß nicht wieso und was das -1, null, (Collection) null) damit auf sich hat. Wäre schön wenn du mir da nochmal helfen könntest, ich verzweifle echt an so einer doofen If-Abfrage...
 
Zuletzt bearbeitet von einem Moderator:
Java:
final SVNProperties parentPathProperties = new SVNProperties();
            final List<SVNDirEntry> directoriesBelowPath = new ArrayList<>();

 Collection<?> entries = repos.getDir( ".", -1, parentPathProperties, directoriesBelowPath );
            Iterator<?> iterator = entries.iterator();
            while ( iterator.hasNext() ) {
                SVNDirEntry entry = (SVNDirEntry) iterator.next();

                if ( entry.getKind() == SVNNodeKind.DIR ) {
                pathsWhichWillBeDeleted.add(path);
                }

so habe ich es nun und er iteriert auch schon durch den Ordner, jedoch bin ich mir gerade nicht ganz sicher was überhaupt bei der if Abfrage gerade geprüft wird, dort muss aufjedenfall das abgeändert werden das er prüft ob in dem Ordner etwas drin ist weil momentan iteriert er auch durch leere Ordner und kommt in die If-Abfrage rein.

Weißt du wie die If-Abfrage hier aussehen müsste?
 
Zuletzt bearbeitet von einem Moderator:
Für Code bitte Code-Tags nutzen: [code=java]//...[/code] 😉
Wird das nächste mal gemacht 🙂.

Warum in aller Welt willst du manuell irgendwas in einem SVN Repository ändern? Das kann ja nur schief gehen..
Ich möchte ja nichts manuell ändern, ich möchte nur prüfen ob das Verzeichnis leer ist oder Dateien enthält. Ich bin nun soweit, dass er mit dem Code den ich hier reingestellt habe, die Ordner tags/branches/trunk durchgeht jedoch fehlt mir noch die Prüfung ob der Ordner Dateien enthält oder nicht. Könntest du mir da weiterhelfen?
 
Ich möchte ja nichts manuell ändern, ich möchte nur prüfen ob das Verzeichnis leer ist oder Dateien enthält. Ich bin nun soweit, dass er mit dem Code den ich hier reingestellt habe, die Ordner tags/branches/trunk durchgeht jedoch fehlt mir noch die Prüfung ob der Ordner Dateien enthält oder nicht. Könntest du mir da weiterhelfen?
Geht es dir einfach nur um Dateien im Ordner oder nur um ins Remote-Repo eingecheckte Dateien?
 
Ich habe ein SVN Pfad von TortoiseSVN. Nun habe ich svn/projects/projectname als SVN Pfad. Hier liegen die Ordner Tags, Branches und Trunk und bevor ich das ganze Projekt aus dem SVN lösche möchte ich prüfen ob im SVN in dem Pfad svn/projects/projectname/tags + svn/projects/projectname/branches + svn/projects/projectname/trunk Dateien liegen. Wenn z.B. /branches & /trunk leer sind aber im /tags ordner Dateien enthalten sind sollen nur /branches & /trunk gelöscht werden jedoch nicht /tags.
 
Ich versteh ehrlich gesagt immer noch nicht, was du meinst.

Möchtest du *lokale* leere Ordner löschen oder leere Ordner auch Remote aus dem *Repo* löschen (und wenn ja, warum)?
 
Ich versteh ehrlich gesagt immer noch nicht, was du meinst.

Möchtest du *lokale* leere Ordner löschen oder leere Ordner auch Remote aus dem *Repo* löschen (und wenn ja, warum)?
Es dreht sich hier nur um das Repo also Remote. Wenn ich ein Projekt lösche soll halt die Abfrage im SVN dieses Projekt auch löschen (was es bisher auch macht) nur es löscht es ohne zu prüfen ob im SVN tags, trunk, branches leer sind oder wenn diese nicht leer sind soll es nicht gelöscht werden. Und genau diese Abfrage fehlt. Da momentan der Ordner im Remote Repo einfach gelöscht wird (was logischerweise nicht passieren soll wenn etwas darin enthalten ist). Ist das so verständlicher? 🙂
 
Warum nimmst du nicht einfach ein SVN Tool wenn du nicht mit SVN auf Kommando Ebene umgehen kannst in löst dir dort anzeigen was in welchem Repo ist?
 
Warum nimmst du nicht einfach ein SVN Tool wenn du nicht mit SVN auf Kommando Ebene umgehen kannst in löst dir dort anzeigen was in welchem Repo ist?

Ich benutzte nicht die Kommandozeile weil das alles eingebettet in einem GUI Programm steckt zur Hilfe vom Erstellen, löschen usw. von Maven Projekten. Verstehe nicht ganz wieso mir keiner helfen kann und nur fragen gestellt werden wieso ich das so machen möchte... Mir geht es ja nur noch um die If-Abfrage und dafür ein SVN Tool in meine Java Anwendung einbetten ist glaube ich mehr Arbeit.
 
Du Must doch nur deine Methode rekursiv machen und wenn es ein dir ist dann ruft sich die Methode wieder selber auf. Taucht irgendwo ein Eintrag auf der kein dir ist gibst du halt ein false zurück ansonsten true.
 
Du Must doch nur deine Methode rekursiv machen und wenn es ein dir ist dann ruft sich die Methode wieder selber auf. Taucht irgendwo ein Eintrag auf der kein dir ist gibst du halt ein false zurück ansonsten true.
So einfach ist es dann nicht zumindest nicht für mich sitze da ja schon mehrere Tage bzw. Wochen dran...
Bei der Prüfung auf Dir prüfe ich ja nur ob es ein Directory ist oder nicht. Wenn es ein Directory ist und sie sich rekursiv aufruft dann schaue ich ja immer nur nach Directory und sobald es einmal keins ist gebe ich false zurück? Macht das denn Sinn? Ich suche ja nach Files und wenn es leer ist müsste ich ja in die If-Bedingung rein und mein pathsWhichWillBeDeleted.add(path); aufrufen.

Könntest du mir das eventuell mal zeigen wie du das meinst? Meinen bisherigen Code habe ich ja hier reingeschickt und immernoch keine Lösung trotz wieder 4 Stunden heute dransitzen. Ich wäre echt froh!
 
Also den fertigen Code werde ich hier nicht liefern aber so ungefähr soilte es aussehen

Code:
private boolean isDirEmpty(String path)
{
    Collection entries = repos.getDir( path, -1, null, (Collection) null );
    Iterator iterator = entries.iterator();
    while ( iterator.hasNext() ) 
    {
        SVNDirEntry entry = (SVNDirEntry) iterator.next();
        if ( entry.getKind() == SVNNodeKind.DIR ) 
             if(isDirEmpty(entry.getKind()) == false)
                 return false;
        else
            return false;
}
 
Okay vielen dank Thallius! Jetzt kann ich mir die Methode schon deutlich besser vorstellen 🙂. Ich werde das morgen direkt einmal ausprobieren jetzt weiß ich aufjedenfall in welche Richtung das geht!
 
Also den fertigen Code werde ich hier nicht liefern aber so ungefähr soilte es aussehen

Code:
private boolean isDirEmpty(String path)
{
    Collection entries = repos.getDir( path, -1, null, (Collection) null );
    Iterator iterator = entries.iterator();
    while ( iterator.hasNext() )
    {
        SVNDirEntry entry = (SVNDirEntry) iterator.next();
        if ( entry.getKind() == SVNNodeKind.DIR )
             if(isDirEmpty(entry.getKind()) == false)
                 return false;
        else
            return false;
}


Leider habe ich hierzu doch noch einmal eine frage. Zu aller erst müsste man doch hier
Code:
        else
            return false;
true returnen oder?
Und bei
Code:
 if(isDirEmpty(entry.getKind()) == false)
dies funktioniert ja nicht, da mein isDirEmpty einen String path erwartet und nicht ein SVNNodeKind, nun ist die Frage wie bekomme ich den Pfad von dem entry.getKind().
 

Zurück
Oben