10 Commits

Author SHA1 Message Date
Mathieu Arnold
7551edfa4b Have makepatch ignore "C function prototype".
This will reduce the churn when base system diff subtly changes what is
put in that field.
2019-05-20 13:04:03 +00:00
Mathieu Arnold
b19fe1e937 SC1004: This backslash+linefeed is literal. Break outside single quotes if you just want to break the line.
You have a single quoted string containing a backslash followed by a
linefeed (newline). Unlike double quotes or unquoted strings, this has
no special meaning. The string will contain a literal backslash and a
linefeed.

If you wanted to break the line but not add a linefeed to the string,
stop the single quote, break the line, and reopen it.

PR:             227109
Submitted by:   mat
Sponsored by:   Absolight
2018-06-08 09:26:41 +00:00
Mathieu Arnold
49b7fa03ac SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.
Since files and arguments are strings passed the same way, programs
can't properly determine which is which, and rely on dashes to determine
what's what.

A file named -f (touch -- -f) will not be deleted by the problematic
code. It will instead be interpreted as a command line option, and rm
will even report success.

Using ./* will instead cause the glob to be expanded into ./-f, which no
program will treat as an option.

It is not possible to use `-f *` because -f only forces the next
argument to be a directory, a later directory named -delete would mess
things up.

PR:             227109
Submitted by:   mat
Sponsored by:   Absolight
2018-06-08 09:26:38 +00:00
Mathieu Arnold
258800dd7b SC2046: Quote this to prevent word splitting.
When command expansions are unquoted, word splitting and globbing will
occur. This often manifests itself by breaking when filenames contain
spaces.

Trying to fix it by adding quotes or escapes to the data will not work.
Instead, quote the command substitution itself.

If the command substitution outputs multiple pieces of data, use a loop
instead.

Add an exception when using set -- where splitting is intended.

PR:             227109
Submitted by:   mat
Exp-run by:	antoine
Sponsored by:   Absolight
2018-06-08 09:26:20 +00:00
Mathieu Arnold
473030b0ea SC2155: Declare and assign separately to avoid masking return values.
In the original code, the return value of mycmd is ignored, and export
will instead always return true. This may prevent conditionals, set -e
and traps from working correctly.

PR:		227109
Submitted by:	mat
Sponsored by:	Absolight
2018-06-01 16:20:51 +00:00
Kyle Evans
ad1a66c1f3 make makepatch: Don't replace patches with only metadata changes
Rather than replacing patches that are effectively the same but with
different timestamps, drop the new version and let the old version remain in
place. This yields a `make makepatch` that doesn't try and produce unwanted
churn.

Approved by:	portmgr (mat)
Differential Revision:	https://reviews.freebsd.org/D13960
2018-01-22 16:42:44 +00:00
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