質問

G'day、

編集:少し長い質問は、通過中にスキミングしている場合は、以下の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.

line。

パッチファイルにはいくつかの統合された差分が含まれていますが、関連する差分は次のとおりです。

...

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が推奨するようにパッチのファズ係数をゼロに減らした後、パッチは正常に機能しました。

アダム・グッドに感謝します。もし私が答えに賛成票を投じることができたら! GNU diffutilsの関連するファズの段落興味のある方は手動で。

編集2:ところで、このファズ段落の下部には、非常に関連性の高い警告があります。

  

patchは通常、多くの推測が必要な場合でも正しい結果を生成します。ただし、パッチが生成されたファイルの正確なコピーにパッチが適用された場合にのみ、結果が保証されます。

残念ながら、この場合、それらのmod_cache.hが公式の2.2.14 mod_cache、hと同じであることを確信できません! )-:

役に立ちましたか?

解決

-ignore-whitespace を使用し、-fuzz = 0 を使用しない場合、基本的にはベストエフォートパッチを実行する必要があることをパッチに伝えています。 、完全に失敗する代わりに。これは最善の努力であるため、完全に機能することを保証する方法はありません。このため、gitおよびFedora RPMはデフォルトで-fuzz = 0 を設定するため、これらのタイプの問題は(コンパイル時または実行時ではなく)パッチ時に失敗します。

アップストリームtarball +パッチとしてファイルを保存する場合は、パッチをやり直して、-fuzz = 0 で適用できることを確認する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top