summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Harmon <eatnumber1@google.com>2016-01-07 23:17:10 -0800
committerRussell Harmon <eatnumber1@google.com>2016-01-08 14:15:11 -0800
commitf2f6c669020ef6504f92231b02e1fe0fa9aff80c (patch)
treec5d963ee8487af79a987057c3351f2985e48f2f9
parentb4390414ef79e64a4b7bb6841ba76892312d8935 (diff)
Add a warning when you mkdir with both -p and -m.
When using -p, parent directories will not be created with the mode specified with -m and will instead be created using the default behavior controlled by umask.
-rw-r--r--ShellCheck/Analytics.hs25
1 files changed, 24 insertions, 1 deletions
diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs
index 1234b50..21f09e8 100644
--- a/ShellCheck/Analytics.hs
+++ b/ShellCheck/Analytics.hs
@@ -218,9 +218,9 @@ nodeChecks = [
,checkLoopVariableReassignment
,checkTrailingBracket
,checkNonportableSignals
+ ,checkMkdirDashPM
]
-
filterByAnnotation token =
filter (not . shouldIgnore)
where
@@ -3670,6 +3670,29 @@ checkNonportableSignals _ = checkUnqualifiedCommand "trap" (const f)
return $ err id 2173
"SIGKILL/SIGSTOP can not be trapped."
+prop_checkMkdirDashPM0 = verify checkMkdirDashPM "mkdir -p -m 0755 dir"
+prop_checkMkdirDashPM1 = verify checkMkdirDashPM "mkdir -pm 0755 dir"
+prop_checkMkdirDashPM2 = verify checkMkdirDashPM "mkdir -vpm 0755 dir"
+prop_checkMkdirDashPM3 = verify checkMkdirDashPM "mkdir -pm 0755 -v dir"
+prop_checkMkdirDashPM4 = verify checkMkdirDashPM "mkdir --parents --mode=0755 dir"
+prop_checkMkdirDashPM5 = verify checkMkdirDashPM "mkdir --parents --mode 0755 dir"
+prop_checkMkdirDashPM6 = verify checkMkdirDashPM "mkdir -p --mode=0755 dir"
+prop_checkMkdirDashPM7 = verify checkMkdirDashPM "mkdir --parents -m 0755 dir"
+prop_checkMkdirDashPM8 = verifyNot checkMkdirDashPM "mkdir -p dir"
+prop_checkMkdirDashPM9 = verifyNot checkMkdirDashPM "mkdir -m 0755 dir"
+prop_checkMkdirDashPM10 = verifyNot checkMkdirDashPM "mkdir dir"
+prop_checkMkdirDashPM11 = verifyNot checkMkdirDashPM "mkdir --parents dir"
+prop_checkMkdirDashPM12 = verifyNot checkMkdirDashPM "mkdir --mode=0755 dir"
+prop_checkMkdirDashPM13 = verifyNot checkMkdirDashPM "mkdir_func -pm 0755 dir"
+checkMkdirDashPM _ t@(T_SimpleCommand _ _ _) = potentially $ do
+ name <- getCommandName t
+ guard $ name == "mkdir"
+ dashP <- find ((\f -> f == "p" || f == "parents") . snd) flags
+ dashM <- find ((\f -> f == "m" || f == "mode") . snd) flags
+ return $ warn (getId $ fst dashM) 2174 "-m will be ignored"
+ where
+ flags = getAllFlags t
+checkMkdirDashPM _ _ = return ()
return []
runTests = $( [| $(forAllProperties) (quickCheckWithResult (stdArgs { maxSuccess = 1 }) ) |])