changeset 2426:99ef653c9c42 draft

Don't spam timezone updates unless its actually changed.
author Roy Marples <roy@marples.name>
date Wed, 23 Apr 2014 13:03:01 +0000
parents 3593e5c160a7
children 41812c7656d0
files dhcpcd-hooks/15-timezone dhcpcd-run-hooks.in
diffstat 2 files changed, 38 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/dhcpcd-hooks/15-timezone	Wed Apr 23 11:41:01 2014 +0000
+++ b/dhcpcd-hooks/15-timezone	Wed Apr 23 13:03:01 2014 +0000
@@ -31,11 +31,8 @@
 		return 1
 	fi
 
-	syslog info "timezone changed to $new_tzdb_timezone"
-	if [ -h "$localtime" ]; then
-		ln -sf "$zone_file" "$localtime"
-	else
-		cp "$zone_file" "$localtime"
+	if copy_file "$zone_file" "$localtime"; then
+		syslog info "timezone changed to $new_tzdb_timezone"
 	fi
 }
 
--- a/dhcpcd-run-hooks.in	Wed Apr 23 11:41:01 2014 +0000
+++ b/dhcpcd-run-hooks.in	Wed Apr 23 13:03:01 2014 +0000
@@ -117,19 +117,29 @@
 }
 
 # Compare two files.
+comp_file()
+{
+
+	[ -e "$1" ] || return 1
+	[ -e "$2" ] || return 1
+
+	if type cmp >/dev/null 2>&1; then
+		cmp -s "$1" "$2"
+	elif type diff >/dev/null 2>&1; then
+		diff -q "$1" "$2" >/dev/null
+	else
+		# Hopefully we're only working on small text files ...
+		[ "$(cat "$1")" = "$(cat "$2")" ]
+	fi
+}
+
+# Compare two files.
 # If different, replace first with second otherwise remove second.
 change_file()
 {
+
 	if [ -e "$1" ]; then
-		if type cmp >/dev/null 2>&1; then
-			cmp -s "$1" "$2"
-		elif type diff >/dev/null 2>&1; then
-			diff -q "$1" "$2" >/dev/null
-		else
-			# Hopefully we're only working on small text files ...
-			[ "$(cat "$1")" = "$(cat "$2")" ]
-		fi
-		if [ $? -eq 0 ]; then
+		if comp_file "$1" "$2"; then
 			rm -f "$2"
 			return 1
 		fi
@@ -139,9 +149,24 @@
 	return 0
 }
 
+# Compare two files.
+# If different, copy or link depending on target type
+copy_file()
+{
+
+	if [ -h "$2" ]; then
+		[ "$(readlink "$2")" = "$1" ] && return 1
+		ln -sf "$1" "$2"
+	else
+		comp_file "$1" "$2" && return 1
+		cat "$2" >"$1"
+	fi
+}
+
 # Save a config file
 save_conf()
 {
+
 	if [ -f "$1" ]; then
 		rm -f "$1-pre.$interface"
 		cat "$1" > "$1-pre.$interface"
@@ -151,6 +176,7 @@
 # Restore a config file
 restore_conf()
 {
+
 	[ -f "$1-pre.$interface" ] || return 1
 	cat "$1-pre.$interface" > "$1"
 	rm -f "$1-pre.$interface"
@@ -205,6 +231,7 @@
 # Check for a valid path
 valid_path()
 {
+
 	case "$@" in
 	*[![:alnum:]#%+-_:\.,@~\\/\[\]=\ ]*) return 1;;
 	esac