#800452 diffutils: filterdiff loses hunks when changing format

Package:
patchutils
Source:
patchutils
Description:
Utilities to work with patches
Submitter:
Álvaro Herrera
Date:
2015-09-29 15:33:04 UTC
Severity:
normal
#800452#5
Date:
2015-09-29 15:10:24 UTC
From:
To:
Dear Maintainer,

I'm trying to submit a patch file in context diff format, starting from a
unified diff
patch generated by git.  So I do this:

filterdiff --format=context /tmp/mypatch.diff

and in the output I observe that the second hunk is not output, rendering the
patch corrupt.  My expectation is that all hunks that were in the input should
be present in the output also.  This doesn't happen with all patches, only some
of them.

This is my test diff:

diff --git a/src/backend/access/transam/xlog.c
b/src/backend/access/transam/xlog.c
index 22e6a21..0266d61 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -5826,19 +5826,6 @@ do { \
                                                minValue))); \
 } while(0)

-#define RecoveryRequiresBoolParameter(param_name, currValue, masterValue) \
-do { \
-       bool _currValue = (currValue); \
-       bool _masterValue = (masterValue); \
-       if (_currValue != _masterValue) \
-               ereport(ERROR, \
-                               (errcode(ERRCODE_INVALID_PARAMETER_VALUE), \
-                                errmsg("hot standby is not possible because it
requires \"%s\" to be same on master and standby (master has \"%s\", standby
has \"%s\")", \
-                                               param_name, \
-                                               _masterValue ? "true" :
"false", \
-                                               _currValue ? "true" :
"false"))); \
-} while(0)
-
 /*
  * Check to see if required parameters are set high enough on this server
  * for various aspects of recovery operation.
@@ -5885,9 +5872,6 @@ CheckRequiredParameterValues(void)
                RecoveryRequiresIntParameter("max_locks_per_transaction",
max_locks_per_xact,
ControlFile->max_locks_per_xact);
-               RecoveryRequiresBoolParameter("track_commit_timestamp",
-
track_commit_timestamp,
-
ControlFile->track_commit_timestamp);
        }
 }





This is the output -- note the second hunk which removes the
RecoveryRequiresBoolParameter() call is missing.

*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
***************
*** 5826,5844 **** do { \
                                                minValue))); \
  } while(0)

- #define RecoveryRequiresBoolParameter(param_name, currValue, masterValue) \
- do { \
-       bool _currValue = (currValue); \
-       bool _masterValue = (masterValue); \
-       if (_currValue != _masterValue) \
-               ereport(ERROR, \
-                               (errcode(ERRCODE_INVALID_PARAMETER_VALUE), \
-                                errmsg("hot standby is not possible because it
requires \"%s\" to be same on master and standby (master has \"%s\", standby
has \"%s\")", \
-                                               param_name, \
-                                               _masterValue ? "true" :
"false", \
-                                               _currValue ? "true" :
"false"))); \
- } while(0)
-
  /*
   * Check to see if required parameters are set high enough on this server
   * for various aspects of recovery operation.
--- 5826,5831 ----

#800452#10
Date:
2015-09-29 15:27:30 UTC
From:
To:
The filterdiff command is not in the diffutils package.
In doubt, try "dpkg -S filterdiff".

I'll reassign the report.