AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Unterschiede von quellcode-versionen erkenne?
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiede von quellcode-versionen erkenne?

Ein Thema von Sharky · begonnen am 28. Jul 2005 · letzter Beitrag vom 9. Aug 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#11

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 28. Jul 2005, 17:12
was ja nicht unbedingt verkehrt ist.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#12

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 28. Jul 2005, 17:16
Hallo barf00s,

Zitat von barf00s:
sharky wills ja anscheinend hier im forum _ausführlich_ breitgetreten haben, so das auch _andere_ sich des codes bedienen können ...
man koennte jetzt diese ganze Diskussion ueber Fertigloesungen breittreten, aber wenn Sharky keine fertige Loesung einfach so verwenden will, dann ist es seine Sache, und soll dich nicht weiter stoeren.
Also, halte dich bitte einfach zurueck.

@all: es geht in diesem Thread nicht darum, fertige Loesungen zu praesentieren, sondern das Prinzip dahinter zu verstehn. Glaubt mir, das aus einem fertigen Code rauszulesen ist nicht immer moeglich, geschweige denn sogar "leicht". Ich habs oft genug versucht

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#13

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 28. Jul 2005, 17:17
hai hai auch warme flossen?

ich kann dir dafür nur einen tipp geben angus johnsons textdiff (tdiff) die kannst du visuell und non visuell nutzen, incl. qc und algo-erklärung!

grüße aus der nachbarschaft!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 28. Jul 2005, 17:22
Zitat von Sharky:
Zitat von Bernhard Geyer:
... Und wieso nicht? ...
Hai Bernhard,

wenn Du schon einen Text zitierst dann mane es doch auch so das der Zusammenhang erhalten bleibt.
Ok, etwas zu viel abgeschnitten.[/quote]

Zitat von Sharky:
Ich habe in meiner Antwort auf das Posting von barf00s doch genau gesagt warum mir der Link nicht richtig hilft.
Oder ist das zu schwer zu verstehen? (anstscheinend ist es so)
Ja.

Wieso kannst du nicht eine bestehende Diff-Anwendung in deine Quellcode-Verwaltung einbauen? Du checkst die beiden Versionen aus und ruftst die Diff-Exe auf. Was stört dich daran bzw. was willst Du genau machen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 08:11
Hi,

ich denke das es nicht wirklich schwer ist wenn man folgende Probleme in den Griff bekommt:

1) Die Geschwindigkeit.

2) was macht man um sowas zu finden:
Delphi-Quellcode:
//Code 1:
Function Blub:boolean;
begin
  result := (GetTickCount > 100000);
end;

//Code 2:
Function Blub:boolean;
begin
  if (GetTickCount < 1000) then //Diese Zeile wird böse!
    result := (GetTickCount > 100000)
  else
    result := true;
end;
Deswegen solltest du dir überlegen ob du wenn du da durchgehst das Zeilenweise zu machen.
und wenn sich eine Zeile unterscheidet dann erst den Unterschied in der entsprechenden Zeile finden
und danach die Zeile finden die man mehr oder minder als die nächste Zeile verstehen kann!

Tipp von mir noch am Rande: Nimm vorher die Whitespaces raus. sonst wirst du zu viele Unterschiede finden, nur weil jemand meint etwas anders einrücken zu müssen usw!
Das macht das anzeigen ziehmlich unübersichtlich!

Greetz
Boombuler

PS: ich hoffe die grundüberlegungen helfen dir weiter!
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 08:53
Das erste Problem ist das Diff, der theoretische Ansatz ist:
Code:
(die Endzeilen seinen jeweils exklusive)
Gegeben sind
1. z1von ... z1bis: der zu betrachtende Bereich aus Datei 1
2. z2von ... z2bis: der zu betrachtende Bereich aus Datei 2
Vorgehen:
3. Finde den längsten übereinstimmenden Block innerhalb des Bereichs:
     z1fund ... z1fund+zlaenge
     z2fund ... z2fund+zlaenge
4. Wenn zlaenge < Mindestlänge (z.B. 3)
   -> markiere den Bereich als nicht übereinstimmend
5. sonst
   -> Rufe die Funktion rekursiv auf mit den Blöcken davor und danach
    z1von ... z1fund und z2von ... z2fund
    z1fund+zlaenge ... z1bis und z2fund+zlaenge ... z2bis
Zur Beschleunigung der Geschwindigkeit arbeitet man dann mit Hashcodes, so dass man relativ schnell passende Zeilen findet und nicht alle immer wieder miteinander vergleichen muss.

Ich habe mir Anno '93 mal ein Diff-Programm selbst geschrieben (damals noch für DOS ), das auch große Dateien relativ schnell vergleichen konnte.
Volker
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#17

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 11:17
Vielleicht könnte man vorhandenes von Bei Google suchenWinMerge wiederverwenden. ZB als DLL?!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 12:20
Konnte nicht umhin mal was zu schreiben (ist fast Wochenende und ich hatte etwas Zeit...)

Hier der relevante Code, funktioniert durch Auffinden des längsten übereinstimmenden Blocks und rekursives Fortfahren in den Teilen davor und danach (hat also eine gewisse Ähnlichkeit mit QuickSort):
Delphi-Quellcode:
procedure DiffRange(l1a, l1e, l2a, l2e: integer);
var
  l1s, l2s, maxm, bp1, bp2, bsz, scan, idx, pos, cnt: integer;
begin
  while true do
  begin
   l1s := l1e - l1a;
   l2s := l2e - l2a;
   if l1s > l2s then
     maxm := l2s
   else
     maxm := l1s;

   if maxm = 0 then
     break;

   bp1 := -1;
   bp2 := -1;
   bsz := 0;

   scan := l1a;
   while scan < l1e - bsz do
   begin
     idx := HashToRange(Info1.LineHash[scan], Info2.Count);
     repeat
      pos := Info2.HashLine[idx];
      if pos < l2a then
        break;

      if pos + bsz <= l2e then
      begin
        cnt := SameLines(scan, l1e, pos, l2e);

        if cnt = bsz then
         if DistanceLess(l1a, l1e, l2a, l2e, bp1, bp2, scan, pos) then
           dec(bsz);

        if cnt > bsz then
        begin
         bsz := cnt;
         bp1 := scan;
         bp2 := pos;
        end;
      end;

      idx := Info2.HashColl[idx];
     until idx < 0;

     if bsz > FHeuristic then break;
     if bsz + bsz >= maxm then break;

     inc(scan);
   end;

   if bsz = 0 then
     break;

   DiffRange(l1a, bp1, l2a, bp2);
   l1a := bp1 + bsz;
   l2a := bp2 + bsz;
  end;

  AddDiff(l1a, l1e, l2a, l2e);
end;
Das ist jetzt mal so in 2 Stunden heruntergehauen, hat bestimmt noch einiges an Optimierungspotential (und auch Kommentierungsbedarf )

[Edit]

Neue Version hochgespielt: 0.2 (und ich hatte noch absolute Pfade von meinem Rechner als Vorgabe in den Edit-Felder )
Angehängte Dateien
Dateityp: zip pascal_diff_0.2_357.zip (6,3 KB, 7x aufgerufen)
Volker
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 15:18
Hai Flocke,

ersteinmal herzlichen Dank für die Mühe
Ich werde mir das am WE einmal in ruhe ansehen.

@Bernhard: Ich benutze in meinen Programmen einfach ungerne "externe Exen"
Ausserdem möchte ich halt gerne verstehen wie solch ein System funktioniert um es gegenbenenfalls an meine Bedürfnisse anpassen zu können.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 1. Aug 2005, 09:26
So, noch mal etwas verbessert. Ist jetzt selbst ohne Heuristik mehr als doppelt so schnell wie die alte Version mit
Angehängte Dateien
Dateityp: zip pascal_diff_0.3_997.zip (6,7 KB, 6x aufgerufen)
Volker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz