Commit graph

4 commits

Author SHA1 Message Date
Mathieu Arnold
f69e8567aa Ease debugging of Mk/Scripts scripts.
Sponsored by:	Absolight
Differential Revision:	https://reviews.freebsd.org/D6474
2016-05-20 19:01:59 +00:00
Raphael Kubo da Costa
b73fa50dbc smart_makepatch: Quote PATCH_WRKSRC when regenerating patches.
Put ${PATCH_WRSKRC} within quotes so that expanding it works properly when it
contains spaces. This is required for `make makepatch' to work with
audio/quimup or any other port that has WRKSRC with spaces. Before the patch:

  % make -dl makepatch
  cd: too many arguments
  cd: too many arguments

and the port would be left with an empty files/ directory.

Reviewed by:	marino
Approved by:	portmgr (mat)
Differential Revision:	https://reviews.freebsd.org/D5011
2016-01-21 10:25:56 +00:00
John Marino
6819d5d636 Mk/Scripts/smart_makepatch.sh: Fix multi-patch file and locals bug
There were two issues with the new smart_makepatch script.

1) use of "local" declaration

All function variables were declared "local" during the review.  This
caused the script to break, at least on FreeBSD 9.2.  Given that it's
not being seen on 9.3R or later, it might be a bug in Bourne shell that
has since been fixed.

e.g. This resulted in stderr error on second iteration:
  local contains=$(grep "^+++ " ${existing_patch} | awk '{x++; print x}')

however, this works fine:
  local contains
  contains=$(grep "^+++ " ${existing_patch} | awk '{x++; print x}')

To be safe, all local variables are assigned with $(<shell cmd>) on
separate lines now.

2) The comment extraction was flawed for files that contain multiple
patches.  It was not counting the hunk lines properly which caused some
portion of a patch to be considered as a comment for the next patch.  The
hunk traversal algorithm has been fixed.

Since 1) involved the introduction of local declarations that broke the
script and since only Scripts/smart_makepatch.sh is touched, I will
piggy-back on the original approval.  The fix was tested with devel/nspr,
the port listed in the PR, which uses multi-patch files.

Approved by:		portmgr
Differential Revision:	D4136
PR:			204725
2015-11-22 09:18:07 +00:00
John Marino
6eff596ebc Enhance "make makepatch" to address two major deficiencies
This update to the "makepatch" target adds the following enhancements:

1) Conserves comments
   If the existing patch has comments, they will be transferred to the
   regenerated patch.

2) Supports multiple patches per file
   If the patch file contains concatenated patches, the makepatch
   target will keep these patches together.  It may change the order
   of the patches the first time, but every time after the multi-patch
   will be assembled in the same order.

Behavioral changes:

A) The "old" patches are not overwritten, but rather archived at:
   ${WRKDIR}/makepatch-tmp/archived-patches

B) Any patch that was not replaced or renamed is deleted by makepatch
   (but it is archived first, see paragraph above)

C) There regeneration messages for the user will show them which patches
   are using "legacy" names formats.

D) Makepatch will do a great job at "cleaning" git patches; it removes
   lines starting with "diff" and "index" in the comments section.

Notes:

E) Should a source file be modified by multiple patches (e.g. two separate
   multi-patches), a composite patch will be generated.  In the above
   example of two multi-patches, one would get the full patch and the
   other no longer patch the source file.

Approved by:		portmgr (mat)
Differential Revision:	D4136
2015-11-15 15:25:12 +00:00