Fix incorrect warning for 'foo > bar 2> bar'
This commit is contained in:
parent
1d8401d583
commit
6905373b6c
|
@ -85,7 +85,6 @@ basicChecks = [
|
||||||
,checkPipePitfalls
|
,checkPipePitfalls
|
||||||
,checkForInQuoted
|
,checkForInQuoted
|
||||||
,checkForInLs
|
,checkForInLs
|
||||||
,checkRedirectToSame
|
|
||||||
,checkShorthandIf
|
,checkShorthandIf
|
||||||
,checkDollarStar
|
,checkDollarStar
|
||||||
,checkUnquotedDollarAt
|
,checkUnquotedDollarAt
|
||||||
|
@ -138,6 +137,7 @@ basicChecks = [
|
||||||
treeChecks = [
|
treeChecks = [
|
||||||
checkUnquotedExpansions
|
checkUnquotedExpansions
|
||||||
,checkSingleQuotedVariables
|
,checkSingleQuotedVariables
|
||||||
|
,checkRedirectToSame
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -573,17 +573,21 @@ checkUnquotedExpansions t tree =
|
||||||
warn (getId t) 2046 "Quote this to prevent word splitting."
|
warn (getId t) 2046 "Quote this to prevent word splitting."
|
||||||
|
|
||||||
|
|
||||||
prop_checkRedirectToSame = verify checkRedirectToSame "cat foo > foo"
|
prop_checkRedirectToSame = verifyTree checkRedirectToSame "cat foo > foo"
|
||||||
prop_checkRedirectToSame2 = verify checkRedirectToSame "cat lol | sed -e 's/a/b/g' > lol"
|
prop_checkRedirectToSame2 = verifyTree checkRedirectToSame "cat lol | sed -e 's/a/b/g' > lol"
|
||||||
prop_checkRedirectToSame3 = verifyNot checkRedirectToSame "cat lol | sed -e 's/a/b/g' > foo.bar && mv foo.bar lol"
|
prop_checkRedirectToSame3 = verifyNotTree checkRedirectToSame "cat lol | sed -e 's/a/b/g' > foo.bar && mv foo.bar lol"
|
||||||
prop_checkRedirectToSame4 = verifyNot checkRedirectToSame "foo > /dev/null 2> /dev/null"
|
prop_checkRedirectToSame4 = verifyNotTree checkRedirectToSame "foo /dev/null > /dev/null"
|
||||||
checkRedirectToSame s@(T_Pipeline _ list) =
|
prop_checkRedirectToSame5 = verifyNotTree checkRedirectToSame "foo > bar 2> bar"
|
||||||
|
checkRedirectToSame s@(T_Pipeline _ list) parents =
|
||||||
mapM_ (\l -> (mapM_ (\x -> doAnalysis (checkOccurences x) l) (getAllRedirs list))) list
|
mapM_ (\l -> (mapM_ (\x -> doAnalysis (checkOccurences x) l) (getAllRedirs list))) list
|
||||||
where checkOccurences t@(T_NormalWord exceptId x) (T_NormalWord newId y) =
|
where checkOccurences t@(T_NormalWord exceptId x) u@(T_NormalWord newId y) =
|
||||||
when (x == y && exceptId /= newId && not (special t)) (do
|
when (exceptId /= newId
|
||||||
|
&& x == y
|
||||||
|
&& not (isOutput t && isOutput u)
|
||||||
|
&& not (special t)) $ do
|
||||||
let note = Note InfoC 2094 $ "Make sure not to read and write the same file in the same pipeline."
|
let note = Note InfoC 2094 $ "Make sure not to read and write the same file in the same pipeline."
|
||||||
addNoteFor newId $ note
|
addNoteFor newId $ note
|
||||||
addNoteFor exceptId $ note)
|
addNoteFor exceptId $ note
|
||||||
checkOccurences _ _ = return ()
|
checkOccurences _ _ = return ()
|
||||||
getAllRedirs l = concatMap (\(T_Redirecting _ ls _) -> concatMap getRedirs ls) l
|
getAllRedirs l = concatMap (\(T_Redirecting _ ls _) -> concatMap getRedirs ls) l
|
||||||
getRedirs (T_FdRedirect _ _ (T_IoFile _ op file)) =
|
getRedirs (T_FdRedirect _ _ (T_IoFile _ op file)) =
|
||||||
|
@ -592,8 +596,16 @@ checkRedirectToSame s@(T_Pipeline _ list) =
|
||||||
T_DGREAT _ -> [file]
|
T_DGREAT _ -> [file]
|
||||||
_ -> []
|
_ -> []
|
||||||
getRedirs _ = []
|
getRedirs _ = []
|
||||||
special x = (deadSimple x == ["/dev/null"])
|
special x = "/dev/" `isPrefixOf` (concat $ deadSimple x)
|
||||||
checkRedirectToSame _ = return ()
|
isOutput t =
|
||||||
|
case drop 1 $ getPath parents t of
|
||||||
|
(T_IoFile _ op _):_ ->
|
||||||
|
case op of
|
||||||
|
T_Greater _ -> True
|
||||||
|
T_DGREAT _ -> True
|
||||||
|
_ -> False
|
||||||
|
_ -> False
|
||||||
|
checkRedirectToSame _ _ = return ()
|
||||||
|
|
||||||
|
|
||||||
prop_checkShorthandIf = verify checkShorthandIf "[[ ! -z file ]] && scp file host || rm file"
|
prop_checkShorthandIf = verify checkShorthandIf "[[ ! -z file ]] && scp file host || rm file"
|
||||||
|
|
Loading…
Reference in New Issue