Versioning-System auf Python- und SQL-Basis

Du hast eine Idee für ein Projekt?
Beyond

Jeder der schon bei umfangreicheren Projekten mitgearbeitet hat weiß,
wie wichtig ein gutes Versioning-System ist. Allerdings sind die meisten
proprietär, teuer und schwer erweiterbar.
Das freie, viel benutzte CVS hat einige Schwächen die einem das Leben schwer machen z.B. geht beim Umbenennen einer Datei die gesammte Datei-History verloren...
Ein Versioning-System, das auf Python und SQL basiert, sollte besser erweiterbar sein und ermöglich durch die Datenbank auch weit mehr Möglichkeiten seinen Quellcode zu durchsuchen und zu warten.
Ich habe bereits ein paar Tests in diese Richtung gemacht und sie waren recht vielversprechend. Teile davon könnte man dann als Grundlage für ein neues Versioning-System verwenden. Eine genaue Strukurierung konnen wir noch ausarbeiten bisher besteht es aus einem Server und Clients. Der Server verwaltet den Code mittels der Datenbank und fordert von den Clients Daten oder beliefert sie damit. Der Client hat ein Modul das sich um die Datenverwaltung auf dem Client-Rechner kümmert d.h. : ein checkin, checkout oder update ... durchführt und mit Hilfe des Servers feststellt welche Dateien aktuell, neuer, älter oder abweichend (Konflikt) sind. Schließlich gibt es noch ein plugable Frontend.

cu Beyond
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Wenn man bspw. eine Datenbanksystem benutzen würde, dass auch Syncronisation unterstützt (Firebird) würde das die sache evtl sogar noch weiter erleichtern.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
tabellar

Hallo Beyond,

die Idee von Dir finde ich sehr gut! Was fuer Tests hast Du denn schon gemacht und wie wuerdest Du gerne weitermachen??? Moechtest Du das System "nur" als Versionssystem einsetzen oder eventuell sogar als Basis fuer eine generative Programmierung verwenden...

Moechtest Du DBMS neutral bleiben oder Dich auf eine bestimmte Datenbank festlegen?

Frage an Christian:
Ich kenne das FireBird DBMS nicht. Was verstehst Du (FireBird) unter Synchronisation???
__________
tabellar
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

:) C. = Carsten, aber ist nicht so schlimm...

Also, Firebird unterstützt das abgleichen von 2 Tabellen, die gleich aufgebaut sind, d. H. es kann schauen welche daten in welcher tabelle ergänzt werden müssen usw.

Ausserdem hat Firebird noch einiges an Features, die MySql erst jetzt so langsam lernt.

http://firebird.sourceforge.net hat natürlich mehr infos.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

Hi Carsten,

das Abgleichen von 2 Tabellen innerhalb eines DBMS macht ja wohl nicht so viel Sinn. Du meinst wahrscheinlich eher den Abgleich von mehreren Tabellen in unterschiedlichen DBMSen....oder???

Aber ob dies hier bei dem Projektvorschlag noetig ist, sehe ich bis jetzt noch nicht.

Ich denke auch, dass wir uns nicht so sehr um das einzusetzende DBMS kuemmern sollten (es gibt auch noch andere DBMSe ausser MySQL und Firebird...), sondern mehr um die Vorgehensweise und die Datenstruktur, wie Programmcode in der Datenbank abgelegt und wieder entsprechend herausgeholt wird!

Die Python DB-SIG hat ja mit ihrer API Specification 2.0 einen schoenen Standard geschaffen, wo wir recht neutral DBMSe ansprechen koennen...
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Stimmt. Ichhabe es wohl falsch ausgedrückt :)

Aber richtig, DBMS ist irrelevant.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Beyond

Hallo,
ich konnte in den letzten Tagen die Newsgroup nicht lesen, da ich Physik-Diplomvorprüfung hatte (nächste Woche geht's munter weiter).

Bisher habe ich eine SQL-Datenstruktur entworfen und sie entsprechend mit Python und dem PySQL-modul bearbeitet -- Dateien angelegt, gelöscht, umbenannt etc. das Userinterface ist spärlich, aber ich möchte das System ohnehin möglichst UI unabhängig halten. Bisher ist das System nur SQL anhängig aber das DBMS sollte egal sein, da ich nur SQL Standards verwendet habe.

Ich habe auch Dinge wie Branching und Branchmerging sowie gleichzeitiges Entwickeln am selben Programm/Modul. Ich denke generative Programmierung sollte sich implementieren lassen und wäre sicher noch ein wichtiger Punkt für ein solches System.

Firebird konnte ich mir bisher nicht anschauen. Sehr interessant fände ich aber den Sysnchronisierungsalgorithmus von Firebird. Kommt er klar mit Änderungen in beiden Tabellen gleicheitig am selben Datensatz.
Speziell beim Sysnchronisieren ist mir noch keine befriedigende Lösung eingefallen. Das Problem ist, dass man nicht alle Daten die ein Programmierer hat überspielen kann (Bandbreite, Checksums sind nicht zuverlässig genug) d.h. man muß mit modification-times o.ä. arbeiten. Bessere Vorschläge? Ein weiteres Problem entsteht, wenn zwei Programmierer die gleiche Datei verändert haben -- hier muß die Datei richtig zusammengesetzt werden (manuell oder automatisch u.U. automatisch Vorschlag erstellen...). Die zweite Datei darf dann aber nicht einfach die erste überschreiben. Ebenso problematisch ist es die zweite Datei nicht auf dem Server zwischenzuspeichern. Sollte dann auf dem Rechner des Programmierers ein Datenverlust auftreten ist die Datei weg. Außerdem sollte darauf geachtet werden, dass die Synchronisation atomar ist d.h. alle Veränderungen von einem Programmierer aufeinmal eingespielt werden. Ansonsten könnte ein unbrauchbares Code-Gemisch entstehen. Zusätzlich könnten dann Checks durchgeführt werden (Compilierbarkeit, Lauffähigkeit, Dukomentation ...) bevor die Veränderungen übernommen/angenommen werden.

Ich habe ein paar Programmteile und einige händische Skizzen zu Tabellen etc. Ich könnte das alles irgendwo ins Internet stellen/per Email verschicken allerdings weiß ich nicht wie nützlich das für jemand anderen ist. Das Programm sollte selbsterklärend sein allerdings weiß ich nicht ob es in der aktuellen Version (ich habe mit oben erläuterten Synchronisationsmethoden experimentiert) vollständig funtioniert. Außerdem sollte man sich Gedanken zur Lizenz machen.


Ich werde dieses Forum dann am Dienstag wieder lesen, wenn Analysis geschreiben ist.

Bis dann und vielen Dank für Euer Interesse,
Beyond
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

Ich hoffe, Du hast Analysis und die anderen Pruefungen gut ueber die Buehne gebracht... Na ja, muss halt auch sein...
Beyond hat geschrieben:Hallo,
...speziell beim Synchronisieren ist mir noch keine befriedigende Lösung eingefallen. Das Problem ist, dass man nicht alle Daten die ein Programmierer hat überspielen kann (Bandbreite, Checksums sind nicht zuverlässig genug) d.h. man muß mit modification-times o.ä. arbeiten. Bessere Vorschläge? Ein weiteres Problem entsteht, wenn zwei Programmierer die gleiche Datei verändert haben -- hier muß die Datei richtig zusammengesetzt werden (manuell oder automatisch u.U. automatisch Vorschlag erstellen...). Die zweite Datei darf dann aber nicht einfach die erste überschreiben...
Ich bin mir nicht sicher, ob der Ansatz mit der Synchronisation (...Abgleich...) von DBMSen der Schluessel zum Erfolg ist. Schiesslich hilft es uns wenig, wenn z.B. zwei Programmierer dieselbe Datei bearbeiten, deren Aequivalent im individuellen DBMS per Client eingespielt und anschliessend mit dem DBMS des anderen Programmierers automatisch synchronisiert wird... Man stelle sich nur mal vor, dass noch viel mehr Programmierer an einem Projekt beteiligt sind. Jeder braeuchte ein eigenes DBMS, alle DBMSe wuerden sich automatisch synchonisieren, hm... das ist sehr aufwendig!

Ich wuerde doch eher am Vorbild CVS bleiben und die Vorteile eines DBMSes einbringen. Man braeuchte EIN zentrales DBMS und eine intelligente Serverschicht darueber, die alle Zugriffe auf den Source-Code kontrolliert! Ich koennte mir vorstellen, dass sich unsere zwei Testprogrammierer per Client auf dem SourceCode-ControllerServer anmelden und somit *DAS SYSTEM* weiss, wer welchen Souce-Code updaten moechte... Man koennte somit Zugriffe sperren (locking) oder ev. auch gemeinsamen Zugriff erlauben (interactive programming??? :) ).

Wenn Du Deine Code-Beispiele, Skizzen (UML?) etc. irgendwo im Web ablegen koenntest, haetten wir die Moeglichkeit einmal drauf zu schauen. Bei einer entsprechenden e-mail Adresse koennten wir Dir dann auch Anregungen schicken! Eine gemeinsame Projekt EMail Adresse im Web (z.B. pycvs2dbms@freenet.de ...) waere auch ne Moeglichkeit...

Gruss
tabellar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

tabellar hat geschrieben:Ich hoffe, Du hast Analysis und die anderen Pruefungen gut ueber die Buehne gebracht... Na ja, muss halt auch sein...

Danke. Ich glaube ich habe sie bestanden und dann kommt's noch auf die Korrektoren an, was sie einem geben wollen ... :)
tabellar hat geschrieben: Ich bin mir nicht sicher, ob der Ansatz mit der Synchronisation (...Abgleich...) von DBMSen der Schluessel zum Erfolg ist. Schiesslich hilft es uns wenig, wenn z.B. zwei Programmierer dieselbe Datei bearbeiten, deren Aequivalent im individuellen DBMS per Client eingespielt und anschliessend mit dem DBMS des anderen Programmierers automatisch synchronisiert wird... Man stelle sich nur mal vor, dass noch viel mehr Programmierer an einem Projekt beteiligt sind. Jeder braeuchte ein eigenes DBMS, alle DBMSe wuerden sich automatisch synchonisieren, hm... das ist sehr aufwendig!
Klar, jeder bräuchte ein eigenes DBMS usw., falls das DBMS eine solche Multipeer-Synchronisation beherrscht wäre es sehr praktisch, aber ich befürchte, daß das nicht geht -- schon allein weil ein DBMS "keine Ahnung" von verschiedensten Programmiersprachen hat.

tabellar hat geschrieben: Man braeuchte EIN zentrales DBMS und eine intelligente Serverschicht darueber, die alle Zugriffe auf den Source-Code kontrolliert!
Ja. Das ist auch einfacher für die Installation und resourcenfreundlicher.
tabellar hat geschrieben: Ich koennte mir vorstellen, dass sich unsere zwei Testprogrammierer per Client auf dem SourceCode-ControllerServer anmelden und somit *DAS SYSTEM* weiss, wer welchen Souce-Code updaten moechte... Man koennte somit Zugriffe sperren (locking) oder ev. auch gemeinsamen Zugriff erlauben (interactive programming??? :) ).
Allerdings würde ich es den Programmierern schon erlauben, die Dateien lokal auf ihrem Computer zu haben. Ich fände es sehr nachteilig, wenn man das System nur mit durchgehender Verbindung zum Server (-> Standleitung ...) benutzen könnte wie z.B. bei IBM Visual Age for Java (was mir aber ansonsten recht gut gefällt).
Wenn die Programmierer nun aber die Dateien lokal haben muß man sich Synchronisationsmethoden überlegen (s.o. soweit ich weiß verwendet CVS dazu die Modification-Time).
Mit dem "Anmelden" würde ich vorschlagen, daß der Server sozusagen protokolliert wer welche Version heruntergeladen hat -- damit sollte auch eine spätere Synchronisation möglich sein. Bei Lockingg usw. könnte es meiner Meinung nach zu viele Probleme mit sich gegenseitig blockierenden Programmierern geben. (z.B. könnte einer "Angemeldet" und mit lockings in den Urlaub fahren :( )
tabellar hat geschrieben: Wenn Du Deine Code-Beispiele, Skizzen (UML?) etc. irgendwo im Web ablegen koenntest ...
Ich werde morgen eine Seite und eine Email-Adresse einrichten. Die genauen Angaben poste ich dann noch.


Bis morgen,
Beyond
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Also hier ist die vorläufige Homepage:
http://www.beyond-thoughts.com/cvs/

Wenn wir uns Name etc. überlegt haben (ich hatte es BraCoCoVerCo genannt) können wir ja eine eigene Homepage dafür einrichten.
Wie sieht es eigentlich mitz der Sprache aus (Deutsch/Englisch/Multilingual)?
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

Hi Beyond,

da bewegt sich ja richtig was... :P
Beyond hat geschrieben:Also hier ist die vorläufige Homepage:
http://www.beyond-thoughts.com/cvs/

Super dass wir jetzt eine Projektseite haben! Besonders Deine Notizen finde ich spannend ... :wink:
Was mir natuerlich besonders gefaellt an Deinen Notizen, ist Deine Datenbankimplementierung auf PostgreSQL (auch mein Lieblings DMBS...)!!!

...ein Projekt nimmt gestalt an...
Beyond hat geschrieben:Wenn wir uns Name etc. überlegt haben (ich hatte es BraCoCoVerCo genannt) können wir ja eine eigene Homepage dafür einrichten.
Wie sieht es eigentlich mitz der Sprache aus (Deutsch/Englisch/Multilingual)?
Ja, eine eigene Homepage ist mit der Zeit sicherlich sinnvoll (sourceforge.net). Bei der Sprache wuerde ich vorerst bei Deutsch bleiben, um erst mal den eigentlichen Inhalt in den Griff zu bekommen. Spaeter und bei der Implementierung wuerde ich dann Englisch bevorzugen.

Ich schau mir jetzt Deine Homepage an und mache mir auch mal ein paar Gedanken dazu. Ich bin jetzt aber am Wochenende beim Bergsteigen...:D

Gruss
____________
tabellar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Dann viel Spaß beim Bergsteigen.

Ich habe mal im Forum zwei weitere Themen gestartet, um alles einwenig übersichtlicher zu machen. Falls euch noch irgendwelche weiteren Bereiche einfallen, könnt ihr sie ja einfach hier starten.

Danke,
Beyond
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Wunderbar, so habe ich mir das Vorgestellt ;)

Das System interessiert mich auch. Nicht unbedingt von Entwicklungsseite (Leider keine Zeit), aber von der "User" Seite. Das sieht sehr vielversprechend aus.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Gast

...bevor ich in die Berge renne moechte ich doch noch etwas loswerden.

Unser Versioning-System muss sich letztendlich doch mit CVS messen :cry:. Ich meine damit, CVS ist bewaehrt und ist bei vielen grossen (Open-Source) Projekten das Source-Root schlechthin! CVS ist Sprachenunabhaengig und kann unterschiedlichste Arten von Dateien (Ascii,Binaer,...) verwalten.

Auch die Unterstuetzung von CVS durch entsprechende Programme ist recht ausgereift. Erst in den letzten Tagen habe ich Erfahrungen mit Eclipse und einem Python Plug-In gemacht und bin wirklich von der Leistungsfaehigkeit des Systems ueberrascht...

Nichts desto trotz reizt mich die Python-SQL Loesung und ich glaube, dass in so einem Versioning-System sehr viel mehr als nur "Versionenkontrolle" moeglich ist (Bsp. generative Programmierung...) :) .

Also, vor der Implementierung steht die Analyse 8) !!! Ich moechte alle Leser bitten, ihre Meinungen, Erfahrungen, Kritiken und Wuensche einzubringen in Bezug auf ein Python-SQL-System gegenueber CVS....Oder kurz: Was kann unser System wenn es fertig ist besser als das CVS... :D

Ich bin mal gespannt, was zusammenkommt...
piddon hat geschrieben:"Perl looks like an explosion in an ASCII-factory!"
...einfach ein gigantisch guter Satz, gruss an die RegEx-Perl2Python-String Fraktion :wink: ...
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

...sorry, der "Gast" vornedran war ich... :oops:
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Der Vergleich zu CVS darf man nicht zu hoch ansetzen. Man wird es nicht schaffen CVS zu verdrängen. Dafür ist es schon zu sehr etabliert.

Aber man darf auch nciht allzuviel Respekt haben. Man muss es Versuchen. Es gibt bestimmt viele, die CVS für zu kompliziert halten. Ich gehöre dazu. Es ist einfach zu "mächtig", und die Scheu ist gross es einzusetzen. Wenn es was in PYthon gibt, das Userfreundlicher und einfacher zu installieren ist, und dazu noch Plattformunabhängig, so sehe ich darin viel Potential.
"Perl looks like an explosion in an ASCII-factory!"

...einfach ein gigantisch guter Satz, gruss an die RegEx-Perl2Python-String Fraktion ...
tja wie man an dem Thread in allgemein sieht, ist er auch einfach nur WAHR! Ich habe viel mit Perl machen "müssen", und ich habe nicht wirklich freundschaft damit geschlossen ;)
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Also fange ich mal an, Ansprüche das neue System zu formulieren...
Ich muß gestehen, daß ich noch nicht viel von CVS kenne, ein paar Projekte habe ich unter Versionskontrolle gestellt, dabei ein bißchen Kommandozeile und die GUIs CerViSia und LinCVS benutzt, aber richtig auskennen tue ich mich nicht.

Was mir an Schwachstellen aufgefallen ist, ist die Netzanbindung. Es ist gut, CVS mit Bordmitteln wie ssh oder rsh bedienen zu können, aber für GUIs ist das grausam. Manchmal bleibt die Shell einfach hängen, und ich weiß dann nicht, ob der CVS-Server ein Problem hat, oder die Shell, oder das GUI...

Mein Vorschlag wäre, eine saubere Schnittstelle über sog. Webservices zur Verfügung zu stellen. XML-RPC ist z.B. ein sehr schlankes und mächtiges Protokoll, und wunderbar in Python integrierbar. Ich habe damit gerade ein kleineres Projekte gemacht, und fände das ziemlich passend für diese Zwecke...
Gast

Eine saubere Schnittstelle ist top-priority. Bei CVS ist das echt ungünstig gelöst. Bei einer solchen Schnittstelle finde ich Verschlüsselung noch sehr wichtig (das funktioniert bei CVS + GUI so gut wie garnicht). Gut wäre es auch verschiedene Verschlüsselungs- und Authentifikationsarten zu ermöglichen.

Das bringt uns zu einer weiteren Sache: einfache Server- und Client-Installation. Keine inetd Einträge, ssh-tunnels etc. !! U.U. sollte man in der Schnittstelle eine Möglichkeit zur Remote-Konfiguration vorsehen (das kann man aber später Implementieren).

Ich glaube auch, daß ein Schlüssel für den Erfolg eines solchen Systems eine einfache Handhabung ist.

In meinem Konzept habe ich alle möglichen Dinge die CVS kann vorgesehen z.B.:
  • Branching
    mehrere Projekte
    Wiederherstellung von alten Versionen
    Synchronisation von Entwicklungscomputern
    Offline-Fähigkeit (man muß während des Programmierens nicht mit dem Server verbunden sein)
    Automatisches Ausfüllen von speziellen Feldern ($Author$ ... )
Features könnten sein:
  • Erweiterte Benutzerverwaltung
    Flexibles Durchsuchen verschiedener Version eines oder mehrer Projekte
    Scripting Fähigkeit
    Versionsverwaltung von nicht Quellcode-Dateien (Bilder ...)
    Unterstützung bei der Erstellung einer Dokumentation
    Programmiersprachen-PlugIns
    Daten-PlugIns (Bilder, HTML, ... -- z.B. zum Verwalten/Durchsuchen der Metadaten)
    robuster als CVS
    Nicht nur Versioning von Dateien sondern auch von Verzeichnissen und weiteren Metadaten wie Zugriffsrechte
    Verschiedene Checkout-Modi, sodaß z.B. bei einer Version für Endbenutzer Dateizugriffssrechte automatisch richtig gesetzt sind.

    und vieles mehr ...
Auf so ein System freue ich mich jetzt schon :D

cu Beyond
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Wurde oben irgendwie ausgelogged. Ist aber mein Beitrag.

Beyond
Gast

Hallo,

nur als Hinweis, codeville ist ein Versionsverwaltungsystem in Python:

http://codeville.org/

Es ist übrigens von Ross und Bram Cohen.
Bram ist der Autor von BitTorrent:

http://bittorrent.com/

Es ist wohl eins der meist installierten Anwendungsprogramme in Python.
Codeville scheint mir auf jeden Fall einen Blick wert.

Grüße

Mike
Antworten