Wie mit diff File patchen? ... erklärt für Nicht-Informatiker

H

holgerw

Guest
Hallo,

bezogen auf diesen Thread hier https://www.bsdforen.de/threads/xfburn-broken.34645/ hat mich der Committer von sysutils/xfburn gebeten, einen Patch zu probieren, xfburn damit neu zu bauen und zu testen. Er selber hat es getestet, dier bei ihm nun noch auftretenden Schwierigkeiten vermutet er bei seinem schon alten Brenner und nicht mehr bei xfburn.

Ich habe also /usr/ports/sysutils/xfburn und ich habe von ihm ein xfburn.diff File.

Kann mir jemand bitte kurz anschaulich erklären, welche Schritte ich nun unternehmen muss? Zu diff finde ich im Netz Berge an Info, die mich nicht weiter bringen.

Viele Grüße
Holger
 
und da vorrangig das argument "-p N"; das rauszufummeln haengt vom CWD ab und was im xfburn.diff an Pfadinformationen steht.
 
Okay, also ist das xfburn.diff schon das Resultat aus
Code:
diff originalfile updatedfile

Soll ich xfburn.diff dann in xfburn.patch umbenennen?

Dann das Patchen:
Code:
patch originalfile -i patchfile.patch -o updatedfile

Ist in meinem Fall <originalfile> das Makefile von xfburn? Und <patchfile> ist das xfburn.patch?

Dann müsste es ja so sein:
Code:
patch Makefile -i xfburn.patch -o Makefile.new
cp Makefile.new /usr/ports/sysutils/xfburn
cd /usr/ports/sysutils/xfburn && mv Makefile Makefile.old
mv Makefile.new Makefile
Habe ich das so richtig verstanden?
 
Hallo,

da es ja kein Geheimnis ist, hier noch xfburn.diff:
Code:
Index: Makefile
===================================================================
--- Makefile    (revision 484299)
+++ Makefile    (working copy)
@@ -3,6 +3,7 @@
 
 PORTNAME=    xfburn
 PORTVERSION=    0.5.5
+PORTREVISION=    1
 CATEGORIES=    sysutils
 MASTER_SITES=    XFCE/src/apps/${PORTNAME}/${PORTVERSION:R}
 DIST_SUBDIR=    xfce4
Index: files/patch-xfburn_xfburn-transcoder-gst.c
===================================================================
--- files/patch-xfburn_xfburn-transcoder-gst.c    (nonexistent)
+++ files/patch-xfburn_xfburn-transcoder-gst.c    (working copy)
@@ -0,0 +1,50 @@
+--- xfburn/xfburn-transcoder-gst.c.orig    2017-12-14 12:34:57 UTC
++++ xfburn/xfburn-transcoder-gst.c
+@@ -221,8 +221,8 @@ xfburn_transcoder_gst_init (XfburnTranscoderGst * obj)
+
+   /* if the mutex is locked, then we're not currently seeking
+    * information from gst */
++  /* Actual locking in prepare and finish */
+   g_mutex_init (&priv->gst_mutex);
+-  g_mutex_lock (&priv->gst_mutex);
+
+   priv->discoverer = gst_discoverer_new(GST_SECOND, NULL);
+ }
+@@ -492,19 +492,9 @@ bus_call (GstBus *bus, GstMessage *msg, gpointer data)
+
+           if (strcmp (GST_OBJECT_NAME (GST_MESSAGE_SRC (msg)), "decoder") != 0)
+             break;
+-         
+-          if (!g_mutex_trylock (&priv->gst_mutex)) {
+-            g_critical ("Lock held by another thread, can't signal transcoding start!");
+-            break;
+-          } else {
+-#if DEBUG_GST > 0
+-            DBG ("Locked mutex to signal transcoding start");
+-#endif
+-          }
+
+           priv->gst_done = TRUE;
+           g_cond_signal (&priv->gst_cond);
+-          g_mutex_unlock (&priv->gst_mutex);
+           break;
+       } /* switch of priv->state */
+
+@@ -835,6 +825,8 @@ prepare (XfburnTranscoder *trans, GError **error)
+   gboolean ret;
+   gint64 end_time;
+
++  g_mutex_lock(&priv->gst_mutex);
++
+   priv->tracks = g_slist_reverse (priv->tracks);
+
+   priv->state = XFBURN_TRANSCODER_GST_STATE_TRANSCODE_START;
+@@ -933,6 +925,8 @@ finish (XfburnTranscoder *trans)
+   }
+   */
+   recreate_pipeline (gst);
++
++  g_mutex_unlock (&priv->gst_mutex);
+ }
+
+

Property changes on: files/patch-xfburn_xfburn-transcoder-gst.c
___________________________________________________________________
Added: fbsd:nokeywords
## -0,0 +1 ##
+yes
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property

Viele Grüße
Holger
 
Also... Der Patch - oder je nach Geschmack auch das Diff - ist relativ zu sysutils/xfburn. Das sieht man an den Pfadangaben:
Code:
--- files/patch-xfburn_xfburn-transcoder-gst.c

Also ab in das Portverzeichnis:
Code:
cd /usr/ports/sysutils/xfburn

Nun sollte sich der Patch einfach anwenden lassen, sofern du die gleiche Version des Ports hast, gegen die der Patch erstellt wurde. Groß was angeben muss man nicht, patch fummelt sich in den meisten Fällen von alleine heraus, was es wissen muss. Daher einfach:

Code:
patch < /pfad/zur/patch/datei

Danach noch einmal in der Ausgabe schauen, ob alle Schritte ("Hunks") wirklich "succeded" sind und keiner "failed".
 
Soll ich xfburn.diff dann in xfburn.patch umbenennen?
Das hat zwar nicht so viel mit dem Thema zu tun, aber ein gutgemeinter Hinweis: Dateinamen, die man Programmen auf der Kommandozeile mitgibt, haben in der Regel keine Bedeutung. Ob die Datei .diff/.patch oder .exe heißt, ist dem Programm egal - es interessiert sich nur für den Inhalt.

Da man patch, wie Yamagi sehr gut zusammengefasst hat, in der Regel eh über die Standardeingabe füttert, verliert die Datei letztendlich sowieso ihre Identität.

Rob
 
Hallo,

danke, dann werde ich es Morgen ausprobieren, berichten und dem Committer Rückmeldung geben.
Hatte heute sehr viel um die Ohren ...
Viele Grüße
Holger
 
Hallo,

wollte nur mitteilen, dass ich xfburn erfolgreich patchen konnte, und gerade dem Committer Rückmeldung gegeben habe.

Danke für Euer Interesse und die hilfreichen Hinweise.

Viele Grüße
Holger
 
Zurück
Oben