summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVidar Holen <spam@vidarholen.net>2016-01-09 14:24:31 -0800
committerVidar Holen <spam@vidarholen.net>2016-01-09 14:24:31 -0800
commitf9909504ddd63817f8fb37cfd12e979fd71dc5a5 (patch)
tree64a6ae633c2c1e28000f14c287f9a6d797a4fc09
parentfa4cefda9deea2ad6b78f7a1034ac15961d233bf (diff)
Make SC2174 only trigger for nested directories.
-rw-r--r--ShellCheck/Analytics.hs41
1 files changed, 23 insertions, 18 deletions
diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs
index edd1bdb..1b42240 100644
--- a/ShellCheck/Analytics.hs
+++ b/ShellCheck/Analytics.hs
@@ -3676,28 +3676,33 @@ 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
+prop_checkMkdirDashPM0 = verify checkMkdirDashPM "mkdir -p -m 0755 a/b"
+prop_checkMkdirDashPM1 = verify checkMkdirDashPM "mkdir -pm 0755 $dir"
+prop_checkMkdirDashPM2 = verify checkMkdirDashPM "mkdir -vpm 0755 a/b"
+prop_checkMkdirDashPM3 = verify checkMkdirDashPM "mkdir -pm 0755 -v a/b"
+prop_checkMkdirDashPM4 = verify checkMkdirDashPM "mkdir --parents --mode=0755 a/b"
+prop_checkMkdirDashPM5 = verify checkMkdirDashPM "mkdir --parents --mode 0755 a/b"
+prop_checkMkdirDashPM6 = verify checkMkdirDashPM "mkdir -p --mode=0755 a/b"
+prop_checkMkdirDashPM7 = verify checkMkdirDashPM "mkdir --parents -m 0755 a/b"
+prop_checkMkdirDashPM8 = verifyNot checkMkdirDashPM "mkdir -p a/b"
+prop_checkMkdirDashPM9 = verifyNot checkMkdirDashPM "mkdir -m 0755 a/b"
+prop_checkMkdirDashPM10 = verifyNot checkMkdirDashPM "mkdir a/b"
+prop_checkMkdirDashPM11 = verifyNot checkMkdirDashPM "mkdir --parents a/b"
+prop_checkMkdirDashPM12 = verifyNot checkMkdirDashPM "mkdir --mode=0755 a/b"
+prop_checkMkdirDashPM13 = verifyNot checkMkdirDashPM "mkdir_func -pm 0755 a/b"
+prop_checkMkdirDashPM14 = verifyNot checkMkdirDashPM "mkdir -p -m 0755 singlelevel"
+checkMkdirDashPM _ t@(T_SimpleCommand _ _ args) = 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
+ guard $ any couldHaveSubdirs (drop 1 args) -- mkdir -pm 0700 dir is fine, but dir/subdir is not.
+ return $ warn (getId $ fst dashM) 2174 "When used with -p, -m only applies to the deepest directory."
+ where
+ flags = getAllFlags t
+ couldHaveSubdirs t = fromMaybe True $ do
+ name <- getLiteralString t
+ return $ '/' `elem` name
checkMkdirDashPM _ _ = return ()
return []