Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   TortoiseHG: Wie chunks aufsplitten? (https://www.delphipraxis.net/182230-tortoisehg-wie-chunks-aufsplitten.html)

Der schöne Günther 10. Okt 2014 16:03

TortoiseHG: Wie chunks aufsplitten?
 
Ich habe ein banales Anfängerproblem:

Angenommen ich ändere
Delphi-Quellcode:
procedure someProc();
begin
    // Diese Zeile wird gleich fehlen
end;
in

Delphi-Quellcode:
procedure someProc();
begin
   // Dies ist ein Kommentar
   someStuff1();

   someStuff2();
end;
.

Möchte ich nun comitten, bin ich der Art und Weise wie der Computer daraus einzelne "Chunks" bastelt vollkommen ausgeliefert:

Ich bekomme einen Chunk den ich entweder comitten kann oder auch nicht:
Code:
@@ -9,7 +9,10 @@
 
 procedure someProc();
 begin
-    // Diese Zeile wird gleich fehlen
+   // Dies ist ein Kommentar
+   someStuff1();
+
+   someStuff2();
 end;
 
 begin
Verständlich. Aber ich möchte daraus zwei Commits machen. In Subversion wäre das jetzt einfach. Aber hier (Mercurial) stehe ich auf dem Schlauch.

Meine Vermutung ist, dass mir jetzt das "Shelve Tool" weiterhelfen kann, aber irgendwie sehe ich hier auch keine Option, an den mir vorgegebenen Chunks etwas zu ändern.

Mavarik 10. Okt 2014 16:12

AW: TortoiseHG: Wie chunks aufsplitten?
 
Du möchtest erst das "weggelassene" und das das neue committen?

Mavarik

Der schöne Günther 10. Okt 2014 16:17

AW: TortoiseHG: Wie chunks aufsplitten?
 
Ja, so ungefähr: Ich würde, in diesem Beispiel, gerne erst das
Code:
 -    // Diese Zeile wird gleich fehlen
 +   // Dies ist ein Kommentar
 +   someStuff1();
und dann das
Code:
 +
 +   someStuff2();
committen.


Ein etwas praxisnäheres Beispiel ist, dass er mir gerne einen Quelltextblock mit zwei Methoden folgendermaßen in zwei Chunks aufsplittet:
Delphi-Quellcode:
// CHUNK 1 START
   procedure someProc1();
   begin
      ShowMessage('Hallo Welt');
// CHUNK 1 ENDE



// CHUNK 2 START
   end;

   procedure someProc2();
   begin
      ShowMessage('Tschüss Welt');
   end;
// CHUNK 2 ENDE

Uwe Raabe 10. Okt 2014 16:30

AW: TortoiseHG: Wie chunks aufsplitten?
 
Solange Mercurial die beiden Änderungen als zu dem gleichen Codebereich gehörend ansieht und in einen Chunk packt, weiß ich auch keine Möglichkeit, das aufzusplitten. Auch das Shelve-Tool arbeitet immer noch chunk-orientiert. Im Moment sehe ich da nur die Möglichkeit, die Datei zu sichern, die unerwünschten Zeilen rauszulöschen, committen, rücksichern und nochmal committen.

Nur mal aus Interesse, weil ich schon lange nicht mehr damit gearbeitet habe: wie würdest du das denn in SVN machen?

Der schöne Günther 10. Okt 2014 16:48

AW: TortoiseHG: Wie chunks aufsplitten?
 
Dann wäre ich jetzt aber wirklich hilflos :pale:

In Subversion würde man einfach
  1. für die entsprechende(n) Datei(en) "Nach Commit wiederherstellen" aktivieren (Rechtsklick im Commit-Fenster)
  2. mit Tortoisemerge die Dinge, die noch nicht committet werden sollen rausnehmen
  3. committen

Ich hatte mir so viel vom Mercurial Shelf erhofft, aber wenn der im Endeffekt überhaupt nichts kann ist das ja auch irgendwo weitgehend sinnfrei :-(


"Sichern und Wiederherstellen". Eigentlich möchte ich ja auch genau das. Kennst du da zufällig ein Add-On? Das jedes mal von Hand zu machen raubt einem ja auch die Zeit...

Namenloser 10. Okt 2014 16:49

AW: TortoiseHG: Wie chunks aufsplitten?
 
Wäre crecord vielleicht etwas? Ich kenne es selber nicht, aber es scheint das zu tun, was du willst. Von sich aus kann TortoiseHg das glaube ich nicht.

Der schöne Günther 10. Okt 2014 17:02

AW: TortoiseHG: Wie chunks aufsplitten?
 
Das sieht gut aus, läuft aber nicht einmal unter Windows.

Sherlock 13. Okt 2014 07:36

AW: TortoiseHG: Wie chunks aufsplitten?
 
Die Frage ist jetzt aber wirklich mal rein akademischer Natur, oder? Wenn Dich Zwischenschritte interessieren, die Du nicht comitted hast, dann solltest Du sie halt künftig comitten. Woher soll denn Hg wissen, wie Deine Zwischenschritte zu einem Commit aussehen? Oder anders gefragt: wieso sollte sich Hg mit der Abspeicherung von (erratenen) Zwischenschritten belasten? Ist der Code nach einem Pull oder Merge falsch? Wenn nein, ist alles gut. Wenn ja, dann könnten wir dort prüfen, wieso er falsch ist, und einen Bugreport aufmachen.

Ausserdem: Befrei Dich von Deiner Erinnerung an SVN, das ist eigentlich kontraproduktiv.

Sherlock

Uwe Raabe 13. Okt 2014 08:19

AW: TortoiseHG: Wie chunks aufsplitten?
 
Zitat:

Zitat von Sherlock (Beitrag 1275704)
Wenn Dich Zwischenschritte interessieren, die Du nicht comitted hast, dann solltest Du sie halt künftig comitten. Woher soll denn Hg wissen, wie Deine Zwischenschritte zu einem Commit aussehen? Oder anders gefragt: wieso sollte sich Hg mit der Abspeicherung von (erratenen) Zwischenschritten belasten?

Im Prinzip hast du zwar Recht, aber das setzt schon eine gehörige Disziplin voraus. Auch nach langjähriger Arbeit mit Mercurial passiert es mir immer wieder, daß ich zwei, drei Sachen gleichzeitig mache und das Commit dazwischen vergesse. Das sind in der Regel nicht unterschiedliche Fehler oder Features, sondern eher so kleine Ungereimtheiten auflösen und Unschönheiten beseitigen, die aber mit der eigentlichen Aufgabe nichts zu tun haben. Bisher konnte ich das durch Abwählen der Dateien oder Chunks noch lösen. Einen solchen Fall, wie Günther ihn darstellt, hatte ich bisher noch nicht. Es wäre allerdings schon ein deutlicher Komfortgewinn, wenn man beim Commit auch zeilenweise auswählen kann welche Änderung rein kommt oder nicht. Die Existenz der crecord-Extension zeigt zumindest, daß auch andere dieses Problem haben. Bedauerlicherweise ist die Extension zu Linux-lastig und wird es deswegen wohl nicht in das Standard-Deployment schaffen. Grundsätzlich sollte jedes halbwegs brauchbare Merge-Tool der Aufgabe gewachsen sein - was wiederum Raum für Hoffnung lässt. Meine eigenen Python-Kenntnisse sind leider zu rudimentär um die Aufgabe selbst zu übernehmen.

Jetzt kommt mir gerade eine Idee, wie man das durch einen geschickten Workflow eventuell auch mit Bordmitteln lösen könnte. Ich muss mir das mal eine Weile durch den Kopf gehen lassen...

Der schöne Günther 13. Okt 2014 08:52

AW: TortoiseHG: Wie chunks aufsplitten?
 
Ich gebe ein ganz anderes Beispiel: Du änderst an einem DFM-Formular etwas. Setzt eine Komponente von
Delphi-Quellcode:
Enabled = True
auf
Delphi-Quellcode:
Enabled = False
oder so etwas.

Zeitgleich ändern sich am Formular auch ganz automatisch Werte wie Height, Width, ClientHeight, ClientWidth, ExplicitWidth, ExplicitHeight, TabOrder. Oder ich verschiebe aus Versehen einen Button um einen Pixel.

Die Änderungen liegen jetzt nah genug bei einander- Ich "bekomme" nur einen Chunk.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 1 von 2  1 2      

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