From: Eric Blake Date: Tue, 5 Apr 2011 19:53:20 +0000 (-0600) Subject: bootstrap: preserve git whitelist item sorting X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=ffc66485c39214e3aaf41defe27516c7d063d167;p=pspp bootstrap: preserve git whitelist item sorting In .gitignore, it is handy to do: /m4/* !/m4/file.m4 to whitelist just file.m4 while ignoring all other files. But ! sorts too early. * build-aux/bootstrap (sort_patterns): New function. (insert_sorted_if_absent): Use it to sink ! lines to the bottom. --- diff --git a/ChangeLog b/ChangeLog index 6fc0ef34d7..f932690401 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-04-05 Eric Blake + + bootstrap: preserve git whitelist item sorting + * build-aux/bootstrap (sort_patterns): New function. + (insert_sorted_if_absent): Use it to sink ! lines to the bottom. + 2011-04-05 Simon Josefsson * top/maint.mk (sc_prohibit_empty_lines_at_EOF): Don't trigger diff --git a/build-aux/bootstrap b/build-aux/bootstrap index f004ad3260..707b491412 100755 --- a/build-aux/bootstrap +++ b/build-aux/bootstrap @@ -1,6 +1,6 @@ #! /bin/sh # Print a version string. -scriptversion=2011-03-03.12; # UTC +scriptversion=2011-04-05.18; # UTC # Bootstrap this package from checked-out sources. @@ -278,14 +278,29 @@ if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then exit 1 fi +# Ensure that lines starting with ! sort last, per gitignore conventions +# for whitelisting exceptions after a more generic blacklist pattern. +sort_patterns() { + sort -u "$@" | sed '/^!/ { + H + d + } + $ { + P + x + s/^\n// + }' +} + # If $STR is not already on a line by itself in $FILE, insert it, # sorting the new contents of the file and replacing $FILE with the result. insert_sorted_if_absent() { file=$1 str=$2 test -f $file || touch $file - echo "$str" | sort -u - $file | cmp - $file > /dev/null \ - || echo "$str" | sort -u - $file -o $file \ + echo "$str" | sort_patterns - $file | cmp - $file > /dev/null \ + || { echo "$str" | sort_patterns - $file > $file.bak \ + && mv $file.bak $file; } \ || exit 1 }