こんばんは
編集:通過中にスキミングしているだけの場合、以下のAdam Goodeの回答のおかげで、このやや長い質問が修正されたことに言及したいと思いました。
Apache 2.2.14 に追加するパッチが与えられましたが、1 つの統合 diff がファイルにまったくパッチを適用していません。GNU パッチ 2.5.4 を使用しています。
元のパッチが適切に作成されていないため、空白を無視する必要があります。つまり、差分の多くは、タブからスペースへの変換のようです。これらの種類の差分は、パッチ ファイルがデリバリー チェーンのどこか (svn リポジトリ、Jira システム、Web インターフェイスなど) で変更されているため、あまり役に立ちません。とにかく、すべてのタブがスペースに変換されています。
Solaris 10 で使用しているコマンドは次のとおりです。
/usr/bin/gpatch --verbose --ignore-whitespace -p1 -d . \
<mod_cache.diff
出力は次のとおりです。
...
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.
...
注意してください
Hunk #2 succeeded at 86.
ライン。
パッチ ファイルには複数の統合 diff が含まれていますが、関連する diff は次のとおりです。
...
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
...
ソースの関連部分は、パッチを適用した後(おそらく)、いくつかのコンテキストが追加されたものです。
...
#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)
...
他のすべてのパッチは、正常に適用されたか無視されたようです。
この特定の差分が取得されない理由はありますか?
編集:以下の Adam の推奨に従って、パッチのファズ係数をゼロまで減らした後、パッチは正常に機能しました。
Adam Goode に感謝します。回答にもう一度賛成票を投じることができれば、そうします! 興味がある場合は、GNU diffutils マニュアルのfuzz に関連する段落を次に示します。
編集2:ところで、そのあいまいな段落の下部に、この非常に関連性の高い警告があります:
patch は、多くの推測を行う必要がある場合でも、通常は正しい結果を生成します。ただし、結果は、パッチが生成されたファイルの正確なコピーにパッチが適用された場合にのみ保証されます。
残念ながら、この場合、彼らの mod_cache.h が公式の 2.2.14 mod_cache,h と同じかどうかはわかりません! )-: