QProcess svn client

Alles rund um die Programmierung mit Qt
Antworten
TheBert
Beiträge: 21
Registriert: 1. September 2009 14:27

QProcess svn client

Beitrag von TheBert »

Hallo!

Ich möchte über das commandline programm svn auf ein repository zugreifen.

Da ich nicht per netzwerkfreigabe darauf zugreifen darf, muss ich das über den apache per http machen.

Die hierachie im repository ist folgende

Code: Alles auswählen

Projekt1/
   release1
      R1
         src
         img
            bild1.jpg
      R2
      R3
Projekt2/
   ...
Projekt3/
   ...
Das problem das auftritt ist, das die rekursion bis Projekt1 --> release1 --> R1 geht, und danach immer wieder R1 liest.

Ich möchte das ganze in ein QTreeWidget einlesen, bitte um hilfe mit der rekursion.

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    readDir("http://localhost/svn/qt/");
}

Code: Alles auswählen

void MainWindow::readDir(const QString &path, QTreeWidgetItem *parent)
{
    if(path.isEmpty())
        return;

    QString svn_call = QString("svn list ").append(path);
    qDebug(qPrintable(svn_call));

    QProcess p;
    p.start(svn_call, QIODevice::ReadOnly);

    if(!p.waitForStarted())
        qDebug("ERROR_START");

    if(!p.waitForFinished())
        qDebug("ERROR_STOP");

    QStringList lst = QString(p.readAll()).split("\n");

    QString entry;
    foreach(entry, lst)
    {
        if(!entry.isEmpty())
        {
            QTreeWidgetItem *itm = new QTreeWidgetItem(QStringList()<<entry);

/*
            if(entry.trimmed().endsWith("/"))
                itm->setIcon(0, QIcon(":/tree/img/folder.png"));
            else
                itm->setIcon(0, QIcon(":/tree/img/empty.png"));
*/

            if(parent == 0)
                ui->treeWidget->addTopLevelItem(itm);
            else
                parent->addChild(itm);

            QString nPath = path;
            nPath.append(entry);

            readDir(nPath, itm);
        }
    }
}
Antworten