Frage

G'day,

Edit: Dachte gerade, würde ich erwähnen, dass diese etwas lange Frage ist nun dank Adams Goode Antwort unten festgelegt ist, wenn Sie nur Skimming der Durchreise durch

.

Ich habe einen Patch gegeben worden zu Apache 2.2.14 und ein unified diff hinzufügen wird die Datei überhaupt nicht patchen. Ich verwende GNU Patch 2.5.4.

ich Leerzeichen zu ignorieren, weil die Original-Patch nicht gut gemacht wurde, das heißt viele der diffs sind scheinbar für Reiter -> Räume Konvertierungen. Diese Art von diffs sind noch weniger nützlich, da die Patch-Datei entlang der Lieferkette irgendwo modifiziert worden ist, beispielsweise SVN-Repository, Jira-System, Web-Schnittstelle, etc., so dass alle Tabs ohnehin in Leerzeichen umgewandelt worden!

Der Befehl, den ich auf Solaris bin mit 10:

/usr/bin/gpatch --verbose --ignore-whitespace -p1 -d . \
    <mod_cache.diff

und der Ausgang ist:

...

Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: httpd/modules/cache/mod_cache.h
|===================================================================
|--- httpd/modules/cache/mod_cache.h
|+++ httpd/modules/cache/mod_cache.h
--------------------------
Patching file modules/cache/mod_cache.h using Plan A...
Hunk #1 succeeded at 24.
Hunk #2 succeeded at 86.
Hunk #3 succeeded at 138.
Hunk #4 succeeded at 163.
Hunk #5 succeeded at 184.
Hunk #6 succeeded at 217.
Hunk #7 succeeded at 271.
Hunk #8 succeeded at 380.

...

Beachten Sie die

Hunk #2 succeeded at 86.

Zeile.

Die Patch-Datei enthält mehrere Unified Diffs aber die relevante diff ist:

...

Index: httpd/modules/cache/mod_cache.h
===================================================================
--- httpd/modules/cache/mod_cache.h
+++ httpd/modules/cache/mod_cache.h
@@ -86,9 +86,13 @@
 #define DEFAULT_CACHE_MAXEXPIRE MSEC_ONE_DAY
 #define DEFAULT_CACHE_EXPIRE    MSEC_ONE_HR
 #define DEFAULT_CACHE_LMFACTOR  (0.1)
+#define DEFAULT_CACHE_MAXAGE    5
+#define DEFAULT_CACHE_LOCKPATH "/mod_cache-lock"
+#define CACHE_LOCKNAME_KEY "mod_cache-lockname"
+#define CACHE_LOCKFILE_KEY "mod_cache-lockfile"

-/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and
- * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
+/* Create a set of CACHE_DECLARE(type), CACHE_DECLARE_NONSTD(type) and
+ * CACHE_DECLARE_DATA with appropriate export and import tags for the platform
  */
 #if !defined(WIN32)
 #define CACHE_DECLARE(type)            type

...

und der relevante Teil der Quelle, nach Anwendung des Patches (angeblich), mit einigem zusätzlichen Kontext ist:

...

#define MSEC_ONE_DAY    ((apr_time_t)(86400*APR_USEC_PER_SEC)) /* one day, in microseconds */
#define MSEC_ONE_HR     ((apr_time_t)(3600*APR_USEC_PER_SEC))  /* one hour, in microseconds */
#define MSEC_ONE_MIN    ((apr_time_t)(60*APR_USEC_PER_SEC))    /* one minute, in microseconds */
#define MSEC_ONE_SEC    ((apr_time_t)(APR_USEC_PER_SEC))       /* one second, in microseconds */
#define DEFAULT_CACHE_MAXEXPIRE MSEC_ONE_DAY
#define DEFAULT_CACHE_EXPIRE    MSEC_ONE_HR
#define DEFAULT_CACHE_LMFACTOR  (0.1)

/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and 
 * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
 */
#if !defined(WIN32)
#define CACHE_DECLARE(type)            type
#define CACHE_DECLARE_NONSTD(type)     type
#define CACHE_DECLARE_DATA
#elif defined(CACHE_DECLARE_STATIC)

...

Alle anderen Patches scheinen entweder erfolgreich angewendet oder ignoriert wurden.

Irgendwelche Ideen, warum gerade dieser diff nimmt nicht wahr?

Edit:. Nach dem Patch Flaum Faktor auf Null zu reduzieren, wie unten durch Adam empfohlen, hat der Patch erfolgreich gearbeitet

Dank Adam Goode, wenn ich Ihnen geben könnte eine weitere Abstimmung auf die Antwort, die ich würde! Hier ist die entsprechender Absatz für Flaum in dem GNU diffutils Handbuch, wenn Sie interessiert sind.

Edit 2: BTW Es ist das höchst relevant Vorbehalt an der Unterseite des Flaum Absatz:

  

Patch erzeugt in der Regel die richtigen Ergebnisse, auch wenn es viele Vermutungen anstellen müssen. Allerdings sind die Ergebnisse nur gewährleistet, wenn der Patch auf eine exakte Kopie der Datei angelegt wird, dass der Patch von erzeugt wurde.

Leider ist in diesem Fall kann ich nicht sicher sein, dass ihre mod_cache.h das gleiches wie die offiziellen 2.2.14 mod_cache, h! ) -:

War es hilfreich?

Lösung

Wenn Sie --ignore-whitespace verwenden und nicht --fuzz=0, sind Sie im Grunde Patch zu sagen, dass es ein Best-Effort-Patch tun soll, anstatt vollständig zu versagen. Weil es am besten Aufwand ist, gibt es wirklich keine Möglichkeit, um sicherzustellen, dass es perfekt funktioniert. Aus diesem Grunde git und Satz Fedora RPM standardmäßig --fuzz=0 so dass diese Arten von Problemen bei Patch-Zeit ausfallen (statt compile- oder Laufzeit).

Wenn Sie Ihre Dateien als Upstream-Tarball erhalten wollen + Patches, sollten Sie den Patch wiederholen und sicherstellen, dass es mit --fuzz=0 anwenden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top