git-codereview: do not write hooks if -n is given

Fixes golang/go#73314

Change-Id: I881c2ae97f72990a6daac4919687f85cb24ac076
Reviewed-on: https://go-review.googlesource.com/c/review/+/664555
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Bypass: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Carlos Amedee <carlos@golang.org>
diff --git a/git-codereview/hook.go b/git-codereview/hook.go
index a2c54e5..162e4d1 100644
--- a/git-codereview/hook.go
+++ b/git-codereview/hook.go
@@ -38,7 +38,9 @@
 			oldHookContent := fmt.Sprintf(oldHookScript, hookFile)
 			if string(data) == oldHookContent {
 				verbosef("removing old %v hook", hookFile)
-				os.Remove(filename)
+				if makeChange() {
+					os.Remove(filename)
+				}
 			}
 			// Special case: remove old commit-msg shell script
 			// in favor of invoking the git-codereview hook
@@ -46,7 +48,9 @@
 			// the future.
 			if hookFile == "commit-msg" && string(data) == oldCommitMsgHook {
 				verbosef("removing old commit-msg hook")
-				os.Remove(filename)
+				if makeChange() {
+					os.Remove(filename)
+				}
 			}
 		}
 
@@ -72,12 +76,16 @@
 		verbosef("installing %s hook", hookFile)
 		if _, err := os.Stat(hooksDir); os.IsNotExist(err) {
 			verbosef("creating hooks directory %s", hooksDir)
-			if err := os.Mkdir(hooksDir, 0777); err != nil {
-				dief("creating hooks directory: %v", err)
+			if makeChange() {
+				if err := os.Mkdir(hooksDir, 0777); err != nil {
+					dief("creating hooks directory: %v", err)
+				}
 			}
 		}
-		if err := os.WriteFile(filename, []byte(hookContent), 0700); err != nil {
-			dief("writing hook: %v", err)
+		if makeChange() {
+			if err := os.WriteFile(filename, []byte(hookContent), 0700); err != nil {
+				dief("writing hook: %v", err)
+			}
 		}
 	}
 
diff --git a/git-codereview/review.go b/git-codereview/review.go
index 5660b8d..795cc80 100644
--- a/git-codereview/review.go
+++ b/git-codereview/review.go
@@ -29,6 +29,11 @@
 
 const progName = "git-codereview"
 
+// makeChange returns inverse of noRun for readability.
+func makeChange() bool {
+	return !*noRun
+}
+
 func initFlags() {
 	flags = flag.NewFlagSet("", flag.ExitOnError)
 	flags.Usage = func() {