CI рдореЗрдВ PVS рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯрд┐рдкреНрдкрдгреА (рдФрд░ рдХреНрдпрд╛ рдЧрд╛рдпрдм рд╣реИ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг - рдкреАрд╡реАрдПрд╕ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдмрд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рдкрд╣рд▓реВ рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдПрдХ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧред


рддреЛ, рдХреБрдЫ рд╕рдВрдЧрдарди рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рд╕реАрдЖрдИ рд╣реИ рдЬреЛ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЛ рдЧрд┐рдЯ рдореЗрдВ рдПрдХ рдзрдХреНрдХрд╛ рдХреЗ рдмрд╛рдж рдПрдХ рд╣реБрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдХреБрдЫ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдФрдЬрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг, рд╕реА # (msbuild) рдФрд░ C ++ (msbuild, CMake) рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЬрд╛рддреА рд╣реИред рдкрд░рд┐рд╖реНрдХрд░рдг рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдкреАрд╡реАрдПрд╕ рд╕реНрдЯреВрдбрд┐рдпреЛ (рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рдХреИрдкрдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рд╣рд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рдЬреЗрдирд░реЗрд╢рди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдХреЗ рдХрдерди рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред


PVS рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдХрдВрд╕реЛрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: PVS-Studio_Cmd.exe --target "${projectFile}" --output report.plog --progress


рдЗрдирдкреБрдЯ рдкрд░ - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо (.sln), рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ - рд░рд┐рдкреЛрд░реНрдЯред


рд░рд┐рдкреЛрд░реНрдЯ - рдПрдХреНрд╕рдЯреЗрдВрд╢рди .plog рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓, рдПрдХ рдирд┐рдпрдорд┐рдд XML рдлрд╝рд╛рдЗрд▓ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпреЛрдЬрдирд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред


рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЙрд╕рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐, рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ, рддреНрд░реБрдЯрд┐ рд╕реНрддрд░, рд╡рд┐рд╡рд░рдг рдФрд░ рдЕрдиреНрдп рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдПрдордПрд▓ рдХреЛ рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рд╕реЗ рдкрдврд╝рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЦреБрд╢реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреАрд╡реАрдПрд╕ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рддрдХрдиреАрдХреА рдкреНрд░рдмрдВрдзрдХ рдпрд╛ рдЕрдиреНрдп рдЗрдЪреНрдЫреБрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рд╡реАрдПрд╕ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


рддреЛ рдЪрд▓реЛ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рдХрд╛рдлреА рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ XML рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: XSLT ред рдЕрдм, рд╢рд╛рдпрдж, рдкрд╛рдардХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рд╡рд┐рдХреГрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдореИрдВрдиреЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рдпрд╛ рд╣реИред


XSLT XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдпрдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП HTML рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рд╣реИред


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдореБрдЭреЗ рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЬ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╕рд╛рд░рдгреАрдмрджреНрдз рд╣реИред рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛:


  1. рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ред
  2. рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдоред
  3. рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ред
  4. рддреНрд░реБрдЯрд┐ рдХреЛрдбред
  5. рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред

рдЪрд░реНрдЪрд╛ рдореЗрдВ рдореМрдЦрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдирдВрдмрд░ рд╕рд┐рд░реНрдл рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


рд▓рд╛рдЗрди рдирд╛рдо рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред


рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдПрдХ рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: http://viva64.com/en/unningErrorCode } (рдпрд╛ / ru /, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред


рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИред


рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд┐рдВрджреБ рд╣реИрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдорд╣рддреНрд╡ рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╕рд╛рде рд╣реА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рднреА рд╣реЛред рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп xsl:sort рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ count([]) ред


рджреВрд╕рд░рд╛: рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрд┐рдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ adapts рд╣реИ)ред рд▓реЗрдХрд┐рди рдЗрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХреНрд╕рдПрд╕рдПрд▓ xsl:param рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕рдПрд╕рдПрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╛рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ: рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдирд╛рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рд╣реИ рдЬрд╣рд╛рдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ XSLT рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛рдлреА рдкрд░рд┐рд╖реНрдХреГрдд рд░реВрдк рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред


рддреАрд╕рд░рд╛: рд╕рддреНрдпрд╛рдкрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╢реЛрдзрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рддрд┐рдмрджреНрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред
рдЪреМрдерд╛: рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдЪреЗрддрд╛рд╡рдиреА рди рдорд┐рд▓рд╛рдПрдВред рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рд▓ рдХреА рдЧрдИ рд╣реИ: рд╣рдо рд╕рднреА рдмрд╛рд╣рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдм, рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдпрд╣ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдХрд▓реНрдк) рд╣реИ, рддреЛ рдкреЛрдЧрд▓ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рд╣реЗрдбрд░ рдореЗрдВ "рдЫрд┐рдкрд╛ рд╣реБрдЖ" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: <xsl:param name="external" select="'External'" />


рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдХрд╛рд░реНрдп: рдПрдХ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд░рдирд╛ред рд╣рдо Redmine + gitolite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ, рдЕрдиреБрдХреВрд▓рдиреАрдпред


рдЪреВрдВрдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдЖрдк рдПрдХ рдирд┐рд░рдВрддрд░ URL рдЙрдкрд╕рд░реНрдЧ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 <xsl:variable name="repo"> <xsl:text>http://redmine.your-site.com/projects/</xsl:text> <xsl:value-of select="$project" /> <xsl:text>/revisions/</xsl:text> <xsl:value-of select="$revision" /> <xsl:text>/entry/</xsl:text> </xsl:variable> 

рд╢реИрд▓реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реБрдВрджрд░рд┐рдпрд╛рдВ, рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдкреГрд╖реНрда рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред рд╣рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб


XSLT
 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="msxsl" > <xsl:output method="html" indent="yes"/> <xsl:param name="project" /> <xsl:param name="base-path" /> <xsl:param name="branch" select="'master'" /> <xsl:param name="revision" select="'[required]'" /> <xsl:param name="external" select="'External'" /> <xsl:variable name="repo"> <xsl:text>http://redmine.your-company.com/projects/</xsl:text> <!-- # !!!attention!!! # --> <xsl:value-of select="$project" /> <xsl:text>/revisions/</xsl:text> <xsl:value-of select="$revision" /> <xsl:text>/entry/</xsl:text> </xsl:variable> <xsl:template name="min-len"> <xsl:param name="a" /> <xsl:param name="b" /> <xsl:variable name="la" select="string-length($a)" /> <xsl:variable name="lb" select="string-length($b)" /> <xsl:choose> <xsl:when test="$la &lt; $lb"> <xsl:value-of select="$la"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$lb" /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="strdiff-impl"> <xsl:param name="mask" /> <xsl:param name="value" /> <xsl:param name="n" /> <xsl:param name="lim" /> <xsl:choose> <xsl:when test="$n = $lim"> <xsl:value-of select="substring($value, $lim + 1)" /> </xsl:when> <xsl:when test="substring($mask, 0, $n) = substring($value,0, $n)"> <xsl:call-template name="strdiff-impl"> <xsl:with-param name="lim" select="$lim" /> <xsl:with-param name="mask" select="$mask" /> <xsl:with-param name="value" select="$value" /> <xsl:with-param name="n" select="$n + 1" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="substring($value, $n - 1)"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="strdiff"> <xsl:param name="mask" /> <xsl:param name="value" /> <xsl:choose> <xsl:when test="not($value)" /> <xsl:when test="not($mask)"> <xsl:value-of select="$value" /> </xsl:when> <xsl:otherwise> <xsl:call-template name="strdiff-impl"> <xsl:with-param name="mask" select="$mask" /> <xsl:with-param name="value" select="$value" /> <xsl:with-param name="lim"> <xsl:call-template name="min-len"> <xsl:with-param name="a" select="$mask" /> <xsl:with-param name="b" select="$value" /> </xsl:call-template> </xsl:with-param> <xsl:with-param name="n" select="1" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="/*"> <xsl:variable select="Solution_Path/SolutionPath" name="solution" /> <xsl:variable select="PVS-Studio_Analysis_Log [not(contains(File, $external))] [ErrorCode!='Renew'] " name="input" /> <html lang="en"> <head> <style type="text/css"> <![CDATA[ #report * {font-family: consolas, monospace, sans-serif; } #report {border-collapse: collapse; border: solid silver 1px;} #report th, #report td {padding: 6px 8px; border: solid silver 1px;} .sev-1 {background-color: #9A2617;} .sev-2 {background-color: #C2571A;} .sev-3 {background-color: #BCA136;} .sev-hidden {background-color: #999; } #report tbody * {color: white;} .fa * { color: #AAA; } a {color: #006;} .stat {padding: 20px;} .stat * {color: white; } .stat span {padding: 8px 16px; } html {background-color: #EEE;} .success {color: #3A3; } ]]> </style> </head> <body> <h1>PVS-Studio report</h1> <h2> <xsl:call-template name="strdiff"> <xsl:with-param name="value"> <xsl:value-of select="$solution" /> </xsl:with-param> <xsl:with-param name="mask"> <xsl:value-of select="$base-path" /> </xsl:with-param> </xsl:call-template> </h2> <div class="stat"> <span class="sev-1"> High: <b> <xsl:value-of select="count($input[Level=1])" /> </b> </span> <span class="sev-2"> Meduim: <b> <xsl:value-of select="count($input[Level=2])" /> </b> </span> <span class="sev-3"> Low: <b> <xsl:value-of select="count($input[Level=3])" /> </b> </span> <span class="sev-hidden" title="Externals etc"> Hidden: <b> <xsl:value-of select="count(PVS-Studio_Analysis_Log) - count($input)"/> </b> </span> </div> <xsl:choose> <xsl:when test="count($input) = 0"> <h2 class="success">No error messages.</h2> </xsl:when> <xsl:otherwise> <table id="report"> <thead> <tr> <th> # </th> <th> File </th> <th> Line </th> <th> Code </th> <th> Message </th> </tr> </thead> <tbody> <xsl:for-each select="$input"> <xsl:sort select="Level" data-type="number"/> <xsl:sort select="DefaultOrder" /> <tr> <xsl:attribute name="class"> <xsl:text>sev-</xsl:text> <xsl:value-of select="Level" /> <xsl:if test="FalseAlarm = 'true'"> <xsl:text xml:space="preserve"> fa</xsl:text> </xsl:if> </xsl:attribute> <th> <xsl:value-of select="position()" /> </th> <td> <xsl:variable name="file"> <xsl:call-template name="strdiff"> <xsl:with-param name="value" select="File" /> <xsl:with-param name="mask" select="$base-path" /> </xsl:call-template> </xsl:variable> <a href="{$repo}{translate($file, '\', '/')}#L{Line}"> <xsl:value-of select="$file" /> </a> </td> <td> <xsl:value-of select="Line"/> </td> <td> <a href="http://viva64.com/en/{ErrorCode}" target="_blank"> <xsl:value-of select="ErrorCode" /> </a> </td> <td> <xsl:value-of select="Message" /> </td> </tr> </xsl:for-each> </tbody> </table> </xsl:otherwise> </xsl:choose> </body> </html> </xsl:template> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 

рд╣рдо C # рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЫреЛрдЯреЗ рдХрдВрд╕реЛрд▓ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреА рдорджрдж рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рднреА рдХрд░реВрдВрдЧрд╛, рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдФрд░ рдЧреБрдкреНрдд рдирд╣реАрдВ рд╣реИ)ред
рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕рд╕реЗ рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред


рдФрд░ рдЕрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдУрд░ рдереЛрдбрд╝рд╛ рд░реЛрдирд╛ред рдПрдХ рдмрдЧ рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ C ++ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, C # рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реИред рдЬрдм рдПрдХ plog рдлрд╝рд╛рдЗрд▓ рдмрдирддреА рд╣реИ, рддреЛ <File> рдирд╛рдо рд╣рдореЗрд╢рд╛ рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЬрдм рд░реЗрдбрд┐рдорд╛рдЗрди (рдФрд░ рдЕрдиреНрдп рд╡реЗрдм) рдХреЛ рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде UNIX рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╕рдордп рдХреЗрд╕ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд▓рд┐рдВрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕реА рдЙрджрд╛рд╕реАред


рдореБрдЭреЗ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдкрддреНрд░ рдХрд╛ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╛рд╣рд░реА API рдХреЗ рдХрд╛рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЪрдпрдирд╛рддреНрдордХ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ C ++ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ C # рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдкреБрд▓ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдФрд░ рдлрд▓рджрд╛рдпреА рд╕рд╣рдпреЛрдЧ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВред


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред


рдЕрджреНрдпрддрди : Paull рдФрд░ рдЦрдВрдбреЗрд▓реЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдмреАрдЯрд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЫреЛрдЯреЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдЬрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрде HKLM \ SYSTEM \ CurrentControlSet \ Control \ FileSystem рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ, рдЖрдкрдХреЛ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕рд╣реЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЗ рд▓рд┐рдП NtfsDisable8dot3NameCreation (DWORD) рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред MSDN рдкрд░ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВред
NTFS рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдирд╛рдореЛрдВ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рддрд┐рдмрдВрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рдпрд╛ рддреЛ рдорд╛рди 0 рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ 3 рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рднрд╛рдЬрди рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ CI рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рднрд╛рдЬрди рдкрд░ рдХрд╣реАрдВ рдФрд░ 2 рдореЗрдВ, рдпрд╛ рдХрдорд╛рдВрдб fsutil 8dot3name set Z: 0 рдЪрд▓рд╛рдПрдВ (Z рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХрд╛ рдбрд┐рд╕реНрдХ) :), рдЬрд╣рд╛рдВ CI рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╡реИрд╕реЗ рднреА рд░реИрдо рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ)ред


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА viva64 рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХрд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред


рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯрд╛рд▓реНрдЯ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi423829/


All Articles