Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Nov 2018 21:20:46 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r340083 - head/sys/conf
Message-ID:  <201811022120.wA2LKkdQ066738@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Fri Nov  2 21:20:46 2018
New Revision: 340083
URL: https://svnweb.freebsd.org/changeset/base/340083

Log:
  newvers.sh: fix git false positive -dirty tag
  
  Assuming that any output from `git diff-index --name-only` implies
  changes in the working tree results in false positives: files with
  metadata, but not content, changes are also listed.
  
  Check that content differences exist before adding the -dirty tag to
  the git hash.
  
  PR:		229230
  Reviewed by:	markj
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D15968

Modified:
  head/sys/conf/newvers.sh

Modified: head/sys/conf/newvers.sh
==============================================================================
--- head/sys/conf/newvers.sh	Fri Nov  2 21:07:06 2018	(r340082)
+++ head/sys/conf/newvers.sh	Fri Nov  2 21:20:46 2018	(r340083)
@@ -76,6 +76,35 @@ findvcs()
 	return 1
 }
 
+git_tree_modified()
+{
+	# git diff-index lists both files that are known to have changes as
+	# well as those with metadata that does not match what is recorded in
+	# git's internal state.  The latter case is indicated by an all-zero
+	# destination file hash.
+
+	local fifo vcstop_abs
+
+	fifo=$(mktemp -u)
+	mkfifo -m 600 $fifo
+	vcstop_abs=$(realpath $VCSTOP)
+	$git_cmd --work-tree=${VCSTOP} diff-index HEAD > $fifo &
+	while read smode dmode ssha dsha status file; do
+		if ! expr $dsha : '^00*$' >/dev/null; then
+			rm $fifo
+			return 0
+		fi
+		if ! $git_cmd diff --quiet -- "${vcstop_abs}/${file}"; then
+			rm $fifo
+			return 0
+		fi
+	done < $fifo
+	# No files with content differences.
+	rm $fifo
+	return 1
+}
+
+
 if [ -z "${SYSDIR}" ]; then
     SYSDIR=$(dirname $0)/..
 fi
@@ -240,8 +269,7 @@ if [ -n "$git_cmd" ] ; then
 	if [ -n "$git_b" ] ; then
 		git="${git}(${git_b})"
 	fi
-	if $git_cmd --work-tree=${VCSTOP} diff-index \
-	    --name-only HEAD | read dummy; then
+	if git_tree_modified; then
 		git="${git}-dirty"
 		modified=true
 	fi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811022120.wA2LKkdQ066738>